atom editorのファイル検索(cmd+t)がクソな件

atom editor使ってますか?
僕はSublimeTextから数ヶ月前に乗り換えました。
とくに理由があったわけじゃないけど、
試しにatom使ったら別段不満もなく、もうこれでいいや。って具合。


でも、使っていくうちに不満が出てきてしまったんです。
それが、cmd+tのファイル検索。(cmd+pで使うけど。)
これが、Sublimeと比べて欲しいファイルが出てきてくれない。


ということで、作りました。
fuzzy-finder-plusです。


フィルタリングはほとんど感覚で調整したんで、実装も結構適当です。
実装はこれ
一応、マッチルール。
パスの下層からマッチさせる。(ファイル名一致しやすいように。)
大文字一致の評価値は高め。
大文字のみ一致はだいぶ高評価。(HogeFuga => hf)
頭文字一致はかなりボーナス高い。
連続一致をだいぶ評価する。
といった具合。


あと、何かの拍子にsublime-tabsってプラグインを発見。
プレビューができそうだったので、それも実装しました。
cmd+t or cmd+p に関してはsublimeライクに操作できます。


動作させるとこんな感じ。
ちゃんとプレビューでてます!便利!



余談だけど、
fuzzy-finderのコード読んでも、どっこにもフィルタリングしてるようなコードがなくて
あれ?って思ったら、SelectListViewってのを継承してて、
そっちでフィルタリングしてた。あ、共通なのね。。
で、フィルタリング自体は、fuzzaldrinってやつ(これもatom謹製)を使ってた。
これが頭悪いんだわ。というかパスのファジー検索には向いてない。

結局自分で適当にファジー検索作ったけど、絶対だれか実装してるよね。もっと頭良いやつ。
ということで、良いお年をー

SmartLockのソースコードを公開しました。

作った話はこちら。
http://d.hatena.ne.jp/toshiyuki_saito/20141125


家の玄関に付けてたら嫁にめっちゃくちゃ怒られました。
こんなもんつけるなと。


このままだとタンスの肥やしにしかならなそうだったので、
ソースコードを公開することにしました。


ドアに取り付けるヤツ。回路図も書きました。
https://github.com/toshi-saito/smartlock-blendmicro


iOSクライアント
https://github.com/toshi-saito/smartlock-ios-client


今はひらけゴマ方式で、"unlock"とか固定フレーズで開くようになっています。
これは、ペアリング時にiOS側でランダム文字列なりを作成して、
Blend MicroのEEPROMに書いておけばそれなりにセキュアに実装できるんで、暇見つけてやる予定。
あと、名前募集中です。

Arduino互換ボード Blend MicroでスマートロックをDIYしてみた。

BLE(Bluetooth Low Enegy)の勉強がてら、スマートロックを自作しました。

スマートロックってのは、家の鍵をスマホで開けられるやつのことで、
海外だと5種類くらいあるみたい。日本でもAkerunってとこが作ってるやつです。(まだ一般販売はしてないのかな?)
海外のものは、シリンダーごとごっそり交換するタイプが多くて、自分で付けるには敷居が高そうでした。
Akerunはその点わかってて、ドアのつまみ(サムターン)にかぶせるだけみたい。


今回は、Akerunに倣って、サムターンにかぶせるタイプを作りました。


ちなみに、海外のだと、Augustが一番デザイン的にはかっちょいいですね。
シリンダーごと交換みたいだけど。


個人的な縛りで、

  • 乾電池で動作させる。
  • ドアへの付け外しが簡単にできる。
  • 高価な部品・器具は使わない。
  • 高度な工作(旋盤使うとか、3Dプリンタ使うとか。)はしない。

を守って作りました。


完成の図。

黒いのは電池ボックスで、銀色のちっこいのはネオジム磁石です。透明ケースは綿棒のケースwすごくサイズぴったりでした。
ネオジム磁石ダイソーに売ってる。ダイソーすごい


前面。

使ったのはBlend MicroってArduino互換ボードでBLEチップが最初から載ってるやつ。
郵送代もそんなに高くなくて、一個$34.90。
橋本商会のこの記事で知ってとりあえず2個買ってみました。


配線がごちゃっとしてますが、僕の配線技術がなかっただけで、回路図にすればすごくシンプルです。


横から。

サーボモータAmazonで買いました。=> SG90
サムターンをつまむやつは、ユニバーサル基板をパキっと折って、セロハンテープでとめて作りました。
ちょうどサムターンが収まるようにするのにだいぶ苦労しました。


綿棒ケースをサムターンに被せちゃうので、サムターンを直接回せなくなります。
そのため、ボード上にスイッチをつけて、そこから操作できるようにしました。
あと、鍵で物理的に開けられた時のために、サムターンに接する箇所にスイッチを仕込んで、
開けられた/閉められたを判定してサーボを自動的に動かすようにしています。


さて、使った材料はこちら。

くらい。


仕組みとしては超単純で、
スイッチ2つ(Lock/Unlock)とサーボモータつけただけです。


iOSアプリ。

swiftには手を出してません。objcで書きました。AutoLayoutめんどい。



アプリから、ロック / アンロックができるのはもちろん。
外出から戻った時に、自動でアンロックする機能も作りました。
自動アンロックはBLE再接続時にやっちゃえばいいんだけど、
家の中でも接続が切れちゃうこともあるので、
自分の家の場所を登録しておいて、そこから出たら自動アンロックを有効にして、
自動アンロックされたらその範囲内から出るまでは自動アンロックを無効にするようにしてます。
CoreBluetoothがだいぶ便利なので、実装はそんなに面倒じゃなかったです。


Blend MicroはPeripheral専用機なので、iOSアプリがCentralです。
ちなみに、チップの制約でBlend MicroはiBeaconにもなれません。


ざっと駆け足て説明してみました。
やろうと思えば以外とできるもんですね。Arduinoの登場でこういう電子工作系もだいぶとっつきやすくなったし、
BLEとかでライトに通信ができるんで、夢が広がります。


ちなみにAkerunとか、市販品は、サーバにアクティビティログ残したり、一定期間有効な一時キーを発行して友達に貸すなんてこともできます。


外からの様子も撮りました。
鍵で開けられた時もちゃんと連動してます。

Arduinoで工作。コクヨのkokuyosekiに対抗してみた。

コクヨのkokuyoseki。

指輪? 指輪つったらこれでしょー

仮面ライダーウィザード 変身ベルト DXウィザードライバー

仮面ライダーウィザード 変身ベルト DXウィザードライバー

ということで、Arduinoを使ってウィザードライバーをキーボード化してました。

LCDはリングのIDを表示確認するためのものなので、実際の動作には無関係。
ほとんどLCDのための線なので、分かりにくい。。


ブレッドボード介して3本ウィザードドライバーとつなげてます。↓

毎度ウィザードライバーを解体してドライバーと接続するのが面倒だったので、細めの導線をハンダ付けして解体せずとも接続できるようにすこしだけ改造もしました。


ドライバーでリングをスキャンすると、そのリングに応じたキー操作ができるという。
ようは↓こういう事。

ウォーターは何にするか考え中。
ウィザードリングをそんなに持ってないので、もうちょっと欲しいなー
ドライバーオンとか、コネクトとかコピーとかエンゲージとかー


もうちょっとリングがそろったら
ドライバーオン!でキーボードとして動作開始。
フレイムでKeynote起動。
コネクトで指定のファイルを開く
とかやりたいなー


ArduinoはKeyboardライブラリが使えるLeonardoを使いました。
(最初Unoでなんとかしようと思ったけど、USBシリアル変換とか買わないとダメぽ買ったのでおとなしくLeonardo買いました。)
あと使ったのは

  • Windowsマシンとイヤホン(ハンディオシロスコープ使うため)
  • 秋月で500円で買ったLCD。(動作確認用)
  • ジャンパーコード
  • ブレッドボード
  • ミノムシクリップ

くらい。


Arduinoのライブラリが便利過ぎで、結構あっさり作れました。
これでプレゼンもはかどるね!

魔法の呪文 SendKeys

あけましておめでとうございます。
ことしもなんとか生きていこうと決意を新たにしたところです。

と、年初めは、Excelマクロのお話。


いろいろあって、経理系のソフトを使ってるんですが、
これがまた、入力しにくい。
Excelで管理して、一気にインポートできんかと探っていたんですがどうもそんな気の利いた機能はないご様子。
そんなに量は多くないので、まぁいいか。。。


あ、キーボードイベント送れば自動入力できんじゃん!


で、ちょっと調べてみたらExcelにまんまその機能が。しかも超便利。


(Win32APIの)SetForgroundWindowで対象のウインドウをアクティブにしたのち、
SendKeysをやれば、、、あら不思議。
自動入力されるわけですよ。


ということで、マクロ便利だねってお話でした。

DBIx::ActiveRecordの話。

さて、先ほどversion0.03をアップしました。
そのうちcpanでインストールできるようになるはずです。

0.03は大きな外見上の変更は無いです。
一応サブクエリが使えるようになりました。


大きくは内部の変更になります。
DBIx::ActiveRecordはrails3のそれに倣って
arel的なものを内部に含んでいます。(DBIx::ActiveRecord::Arel.pm)


arelほど賢くはないですが、とりあえず汎用クエリビルダとして抜き出して使うこともできるので、別実装するときとかに便利かも。


ここだけぶっこ抜いて使ってもらっても全然かまいませんので、じゃんじゃん使ってもらえるとうれしい限りです。
その際は、なにかで一報もらえるとさらにありがたいです。


と、とりあえずversionは0.03だけど、もうそろそろ飽きてきたので、開発は下火になるかと思います。
フィードバックなりバグ報告なりあれば対応していきますが、機能追加とかは積極的にはやらないと思います。
それでは。

cpanモジュール DBIx::ActiveRecordを更新しました。

DBIx::ActiveRecordについては↓を見てください。
cpanモジュール DBIx::ActiveRecordを作りました。 - 個人事業主のつぶやき

たいした機能は追加してませんが、とりあえずバージョンを0.02にしました。
PAUSEにはアップロードしたので、たぶんそのうち0.02がcpanコマンドでインストールできるようになるんじゃないかと。(よーわからん)


一応機能の追加もあるので、紹介。

count
User->count;
User->eq(type => 2)->count;

以上。


あと、DancerでDBIx::ActiveRecordを使ってみるサンプルを作りました。
githubをcloneしてもらうとexample/Dancerに入ってます。
githubは↓
https://github.com/toshi-saito/perl-dbix-activerecord


にしてもDancer便利ですね。
デフォのテンプレートがショボすぎて使い物にならないくらいで、(結局template toolkit使うはめに。)あとはサクサク開発できました。
サンプルは超簡単なブログ的なもの作りました。
アソシエーションをバリバリつかってるので、参考になれば。
(あ、scope使い忘れた。。)


でもあれね。Dancerは依存関係そんなに無いと思ってたけど、cpan Dancerしたらけっこうもりもりモジュール入ってちょっと萎えた。
やる気が出たらなんかつくろっかなー