Programming a wildcard string search without regular expression.

URLがユーザー定義とマッチするかどうかのプログラムをJavaScript組んでいます。これにワイルドカードを実装してみたのですが、一番手っ取り早い、正規表現による手法だと、文字列エスケープや正規表現のコンパイルやテストの実行などいろいろな計算が介入するので、個人的には処理速度が気になってしまいました。

function matchRegKey(keydef, key){ var s = keydef.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g, "\\$&"); // ワイルドカード以外のエスケープ s = s.split("*").join(".*?"); // ワイルドカード「*」を正規表現における表記に変換 var rex = new RegExp(s); return rex.test(key); }
いろいろ探しても良い情報が見つからなかったので、indexOfとsubstringを駆使した文字列照合によるプログラムを作ってみました。
function matchKey(key, keyword){ var d1 = keydef.indexOf("*"); if(d1 == -1 && keydef == key) { return true; }else if(d1 > 0){ if(keydef.substring(0, d1) != key.substring(0, d1)) return false; } var k1 = 0, klen = keydef.length, match = false, ss; while(d1 != -1 && d1 < klen){ d1++; var d2 = keydef.indexOf("*", d1); if(d2 == -1){ d2 = klen; } ss = keydef.substring(d1, d2); k1 = key.indexOf(ss, k1); var kk = key.substring(k1, k1 + (d2 - d1)); if(kk != ss) return false; match = true; d1 = d2; } return match; }
一通りのテストは通ったので、ベンチマークを実施。
function TestLoop(){ var keydef = "*yahoo.*.*"; var key = "www.yahoo.co.jp"; console.time("regex"); for(var i =0; i < 100000; i++) matchRegKey(keydef, key); console.timeEnd("regex"); console.time("index"); for(var i =0; i < 100000; i++) matchKey(keydef, key); console.timeEnd("index"); }
私のパソコンでの結果はこのようになりました。正規表現はやはり時間がかかりますね。

 | 2016年7月19日

マウスカーソルのすぐそばでIMEが有効になっているかの状態を一目で確認できるユーティリティ「IMEステータス」のVer 2.11を正式版として公開しました。このバージョンでは、Windows 10で導入された仮想デスクトップに対応し、デスクトップ間を移動してもアイコンが追従するようになっています。本日をもってベータ版のご利用はできなくなります。

広告非表示版のユーザーはこちらのリンクよりアップグレードされたアプリをダウンロードできます。ユーザー登録時に使用したメールアドレスをご用意ください。

(2016/07/09追記)
非表示板が旧バージョンのままであるとのご指摘がありましたので、アーカイブファイルの更新と、ダウンロード履歴をリセットさせていただきました。ご迷惑をおかけして、申し訳ございません。
 | 2016年7月9日

Windows 10のアップグレードキャンペーンが残り一ヶ月を切りました。キャンペーン終了後はパーツの大幅な変更を行うとライセンスが無効になるという話がありました。近々予定のアップデートではこの制限が緩和されるというものの、一抹の不安が残っていたため、管理者はこれを機会にマザーボードとCPUを買い換えることにしました。ただ、今年の9月にインテルがモデルチェンジしたCPUを出すという話もあるため、Core i3で当面様子を見ることにしています。

一方でマザーボードはCPUをオーバークロックまではしないものの長く使い続けるつもりでいたので、DisplayPortやUSB 3.1 Type-Cなどのインターフェイスが充実していることを理由に、ASUSの「H170 PRO GAMING」を購入しました。


パソコンを組み立てBIOS(UEFI)を起動して管理人が一番注目したのは、UEFIのツールとしてSSDのSecure Eraseが内蔵されていたことです。実はマザーボードを換装する前にこれまで使っていたSSDを初期化するため、わざわざLinuxを起動し、凍結(ロック)状態を防ぐためSSDをUSBコンバーターで接続した上で、コマンドプロンプト経由でリセットするという大変面倒くさいことをしていたからです。


マザーボードのツールだと、専用の画面に移行して対象のSSDを選択するだけ。SATAにつないでいて凍結状態で消去不能な状態であったとしても、再起動して凍結状態を自動で解除してくれます。UEFIからの起動のため、Windowsの専用ユーティリティーを使うとか、機能をサポートしたLinuxをUSBブートするとか面倒くさいことが一切なく非常に簡単でした。

ネットで一通り調べる限り、この機能は比較的新しいASUS製のマザーボードが主にサポートしているようです。H170という下位モデルでできるのですから、「Z170 PRO GAMING」であれば確実にサポート済みです。マザーボードの買い換えを機にSSDをSecure Eraseして処理速度を取り戻したいがその実現が大変という人は、ASUSのマザーボードを使ってみるのも悪くないかもしれません。
 | 2016年7月2日

マウスカーソルのすぐそばでIMEが有効になっているかの状態を一目で確認できるユーティリティ「IMEステータス」のVer 2.11のテスト版を公開しました。このバージョンでは、Windows 10で導入された仮想デスクトップに対応し、デスクトップ間を移動してもアイコンが追従するようになりました。ベータ版は正式版公開まではどなたでも無料でご利用いただけます。もし、何かしらの問題がございましたら、ご一報いただければ助かります。

 | 2016年6月6日

パソコンの周辺機器やIotに挑戦しようと集めた電子工作の工具や部品が増えすぎ、保管する場所に困ってきたので、収納家具のDIYに挑戦しています。

安い合板をジグソーで切断して木工ビスと接着剤で組み合わせるだけというシンプルなものであるが故に、あまりコストはかけたくないのですが、一番お金がかかるのは板でも金具でもなく、引き出し用の取っ手ではないでしょうか。

100円均一のお店に売ってある取っ手はつまみ程度の大きさか、引き出しにふさわしいタイプでもなぜかアンティーク風のものしかないし、ホームセンターでは取っ手一つだけで300円はします。ネット通販なら1個100円までにはなるでしょうが、送料を加味するとやっぱりそれほど安くはありません。そこで、安い素材を組み合わせて丸棒ハンドルを作れないものかを試してみました。

用意した材料は以下の通り(価格は近所のホームセンターでの税抜き価格)。 【作り方】 長ネジを切断します。私の場合は折り曲げて板を突き通すことを考えて、幅8cmの取っ手を作る際は16cm単位でジグソーのステンレス用刃を使って切断しました。電動工具を使って切断すると、金属部分がかなり熱くなるので、切断したての棒や刃には決して触れないでください。

ビニルチューブをはさみで切って小分けします。幅8cmの取っ手なら4cm増やした12cmごとに切ります。

チューブに長ネジを通します。途中でつっかかるようであれば、ナットを回して押し込んでやるとうまくいきます。電動ドライバーを使えばなお早し。


塗装が良く乗るように、細かい紙やすりでチューブを白く濁るくらいにかけます。


ではこの長ネジを曲げます。ネットで調べると金属プレートでワイヤ曲げを作っている例を見かけたのですが、ネジ棒を曲げるには力不足だったので、次の方法で曲げました。

  1. 角材の端材に木工ドリルで穴を開けます。試行錯誤の末、角材の端に8mmの穴を開けました。
  2. 曲げたい箇所に印をつけ、穴に棒を突っ込み、当て板の上にのせたら力強く曲げます。てこの原理により、角材は長いほど小さい力で曲がります。
     
  3. ある程度曲がったら、角材の向きを逆にして、曲げ具合を微調整します。もし、中で棒が折れてしまったら、接着剤を流し込んでくっつけるとよいでしょう。


基礎が完成しました。手作業なので長さに多少の誤差がありますが気にしない。


これを不要な段ボールの切れ端に突き刺し


換気のいい場所でラッカースプレー(有機溶剤を含むものを使うと、チューブが溶けてべたついたり、ゴミがつきやすくなるので注意)を吹き付けて、好みの色に塗装します。ちなみに、私は引き出しを引くときに手が汚れるかもしれないと思い、取っ手の裏側はあえて塗装していませんでした。


あとは引き出しに6.5mmのドリルで穴を開け、乾ききった取っ手を通して、裏からM6ナットを使って締めて固定すれば完成です。
 


技術不足で色に少しムラができてしまいましたが、個人の趣味であれば十分な出来でしょう。もしこの記事を気に入っていただけたのであれば、今回の工作に使用したボッシュのジグソーリョービのドリルドライバーをアマゾンで買ってくださるとうれしいです。
 | 2016年5月25日

ボタンやスクリーン、キーボードと言った、操作に必要なレイアウトのデザインが自由にできる、GPU支援による快適な転送を実現したリモートデスクトップアプリのセットアップファイルをアップデートしました。Visual C++ 2015ランタイムと呼ばれる拡張プログラムが導入されていないと、クライアントソフトが起動しない問題がございまいしたので、セットアップ版ではランタイムを同梱することで、この問題に対応しています。

TNKソフトウェアでは、アプリの初回公開記念価格中に利用できなかったユーザーへのお詫びとして、2016年6月3日までの期間限定で、ウィンドウズストアアプリ、Google Playアプリともに、初回キャンペーンと同じ価格に再度割引いたします。これを機会に試用の再検討をよろしくお願いいたします。


 | 2016年5月20日

先端に立て溝がついていることで、ドライバーが役に立たなくなったネジの側をつかんで回して外すという作業がとても楽になる人気プライヤー・ネジザウルス。日本では緑色のグリップが印象的ですが、海外では事情が異なるようです。アメリカでも同商品を展開しているのですが、そのグリップは真っ赤。


というのも、英語では恐竜と言えば「ダイナソー」であり、「ザウルス」という名称が一般的ではなく、ネジザウルスの直訳では伝わりにくいため、「吸血鬼(ヴァンパイア)のように吸い付いて離れないプライヤー」という意味を込めて「ヴァンプライヤー(VamPLIERS)」という商品名に変更したためだそうです。

ちなみに、ネジザウルスの実売価格1600円は素人目から見れば割高な気がしますが、挟むための工具であるプライヤーは3000円以上するものがざらにあり、利便性を考えればむしろ安価な部類に入ります。

参考文献:働く!工具図鑑(高野倉匡人/著)
 | 2016年5月13日

PS4/PS3/PS Vitaで発売中のアクションゲーム「HELLDIVERS」。トロコンを目指したいけど、日本語のwikiでは情報が少なかったので、海外の情報と自身の経験を基に取得方法をまとめてみました。ミッション中にほかのプレイヤーに乱入されると困るのであれば、ネットワークをつながずにソロプレイで攻略するとよいです。