2011/02/10
2011/02/09
ファイル暗号化/復号化 wrapper スクリプト
openssl (1) を実行してファイルを暗号化/復号化する処理を
簡易実行するための簡単な
シェルスクリプトによる wrapper
を作成した。
暗号化/復号化は openssl (1) の enc コマンドに
暗号化アルゴリズムに aes-128-cbc を指定して実施している。
指定されたファイルの先頭 8 バイトを参照して
Salted__ の場合は暗号化されていると仮定し復号化、
それ以外は暗号化する処理をデフォルトで実行するが、
実行時オプション -d、-e を指定する事で
強制的に暗号化/復号化を指定する事も可能だ。
-p オプションでパスワードを指定してバッチ処理も実行できるが、
コマンド実行履歴等にパスワードが残るのでお勧めできない。
暗号化/復号化が成功した場合は元のファイルを置き換える。
例によって必要に迫られれて適当に作成したスクリプトなので このスクリプトを利用した事で生じるあらゆる損害に対して責は負えない。
2011/02/07
HyperMac
アメリカの eBay オークションで落札した HyperMac キットが届いた。
HyperMac は MacBook などに電源を供給し充電も可能な外部バッテリーだが、
MagSafe という Apple が特許を持っているコネクタの利用に関する問題で
昨年 11月2日 をもって発売を中止してしまっていた。
現在は Apple 純正の Airline アダプタを経由する事で利用するタイプを
発売している様だが、
Airline アダプタとのコネクタが巨大で不格好、
しかも充電ができない等 HyperMac の特徴を全く活かせていないので却下。
当然新品は入手できないので国内外のオークションなどに
出品されるのを待っていたのだが、
今回 eBay オークションに 150Wh の HyperMac が出品されたので、
本当は一番小型の 60Wh のモノが欲しかったのだが
この機会を逃すと又当面入手できない可能性もあると思い落札した。
eBay の出品者はアメリカ国内への発送しか受け付けていなかったので、 今回はアメリカ国内の転送業者を経由して日本に転送してもらった。 アメリカ国内への送料は出品者負担だったので、 転送業者による日本への転送送料+関税+手数料が余計にかかった費用だが、 転送業者の手数料は $7 だったのでそれほど悪くないだろう。
単語の羅列に近いほんのちょっとの英語力とPayPal アカウント、 それから多少の度胸があれば 日本では滅多に入手できないものを手に入れる事が出来てしまう とっても便利な世の中だ。
2011/02/01
Magic Mouse のスクロール
職場の iMac では Apple 純正の Magic Mouse を利用している。
BetterTouchTool と合わせて非常に便利に使っているのだが、
google map を利用している時などに不用意にスクロールしてしまい
敏感すぎるセンサーが却って邪魔になってしまう事がある。
Safari 用には google map を表示している時に
Magic Mouse のスクロールをオフにするという機能拡張を見つけたが、
普段愛用している firefox には同じ機能を持つアドオンを探せなかった。
かといって firefox のアドオンは自作した事がないので勝手もわからない。
丁度、某有名匿名掲示板で環境設定パネルのユニバーサルアクセスを
automater を利用して操作するという話題が出ていたので、
投稿されていたソースコードを参考にしながら簡単なスクリプトを作って見た。
automater を起動してアプリケーションのテンプレートを選択、 AppleScript を実行で表示されるエディタに以下のコードを貼り付けて、 アプリケーションとして保存すれば実行できる様になる。 実行するたびに Magic Mouse のスクロールオン・オフがトグルされるので、 ショートカットを Dock に登録したり Butler などのランチャから起動すると便利だと思う。
1tell application "System Preferences" 2 activate 3 set current pane to pane "com.apple.preference.mouse" 4end tell 5 6tell application "System Events" 7 tell process "System Preferences" 8 tell window 1 9 tell group 1 10 click checkbox "スクロール" 11 end tell 12 end tell 13 end tell 14end tell 15 16tell application "System Preferences" to quit
automater や AppleScript を書いたのは初めてで仕様も良く把握していないので、 無駄な処理やおかしな記述があるかも知れない。 おかしな部分があれば是非指摘して頂けるとありがたい。 なお、 個人的に適当に作ったスクリプトなので他の環境での動作は保証できないし、 勿論このスクリプトを利用した事で生じるあらゆる損害に対して責は負えない。
2011/01/31
2011/01/22
温泉ツーリング to 南伊豆
週末を利用して友人と南伊豆の温泉に一泊で
ツーリング
してきた。
勿論、バイクは反社会的な 2 ストローク 2 台(しつこい)。
まずは定番の東名高速海老名でお茶休憩。
日頃の行いの良さを象徴するかの様に気持ちよく晴れ渡った青空の向こうには
雪化粧した富士山もくっきり綺麗によく見える。
そのまま小田原厚木〜西湘バイパスを経由して海沿いの国道 135 号線へ。
1 月という事もあり、とりあえず往路は比較的温暖な海沿いを
南下するという軟弱コースを選択したので、
渋滞にもめげずにひたすら南下南下南下…。
東伊豆の海沿い、特に日頃の行いの良さを象徴するかの様な
(大事な事なので2回…ry)天気の良い午前中は海面にキラキラと反射する
太陽の光がとても綺麗で抜群の眺望ではあるのだが、
単調すぎて若干物足りなさを感じてしまう部分は否めない。
まぁ、軟弱コースを主張した張本人なので文句は言うまい(言えない)。
昼食は稲取の「徳造丸」という網元料理のお店で海鮮丼を堪能。
普段は行列したり待ったりしてまで食事をする方ではないのだが、
ここは多少待ってでも食べる価値はあった。
生しらす、生桜エビ、生ぼたんえびなどがふんだんに載っている
ここのお店の海鮮丼は量もおいしさも大満足。
食事の後は再度単調な道を延々と南下…
イチ押しでお勧めされた外浦海岸にある「万宝」という干物屋さんでは干物を物色。
たしかにとても美味しそうな干物が沢山並んでいる。
バイクだと大きな荷物が運べないのだが、
宅配便で送ることにしたので美味しそうな干物を際限なく買ってしまう。
そうこうしているうちに無事に宿に到着。
古民家の宿というだけあって見た目も古びてて良い感じ
予定よりは相当早く到着したので、 のんびりと露天風呂につかりながら疲れをほぐしていると食事の時間。
格安プランだったのであまり期待をしていなかったのだが、 とても美味しい夕食+オプションで金目鯛の煮付けに大満足 (というか食べ過ぎ)。 食事を撮影しようとカメラを持っていたのだが すっかり忘れて食事をむさぼり食ってしまったので写真なし。 まぁ、写真撮影を忘れる位に美味しかったという事で。
食事の後は温泉に行こうとか考えていたのだが、 満腹+良い感じの疲れ具合に動く気にもなれずに 9 時過ぎには就寝。
呆れる程早寝をしたので、 さすがに翌朝は6時頃には自然と目が覚め朝食前に温泉にのんびりつかる (のんびりし過ぎて若干湯あたり気味だったのは内緒)。
ビュッフェ形式の食事を堪能したらいざ出発。
昨日天気が良くて暖かかったのでついつい色気(?)を出して
復路は城ヶ崎から遠笠山経由で伊豆スカイラインを通る事にしたのだが、
路肩には雪が残っているわ、路面は濡れているわ、
日陰ではところどころ路面も凍結しているわで
ワインディングを楽しむどころではなく山伏峠で下界に退散。
単調だろうと何だろうと暖かいのがエライと再認識。
勿論往路で軟弱な海沿いルートを主張した自分はやはりエライと(以下略)
熱海で昼食後は往路同様高速道路をひたすら走り無事に帰宅。
走行距離 350 km 程度なので 1 泊ツーリングとしては短い距離だが、
やはりこの時期はバイクで走るものじゃないと改めて実感した次第(軟弱もの)。
次の遠出は 4 月過ぎて暖かくなってからで良いな。
2011/01/21
MacBook Air に vtun 導入
某所で vtun を利用した vpn サーバを構築しているので、 MacBook Air に vtun クライアントを導入して vpn 接続出来る様にする。 vtun ver.3 は MacPort からも導入できるのだが、 諸処の事情により接続先のサーバが vtun ver.2 で運用されているので 今回は MacPort ではなく手作業にてインストールする事にする。
vtun に必要な圧縮関係の lzo ライブラリは MacPort でも導入できるのだが、 依存関係が多く古い perl までインストール要求するので 今回はこちらも手作業にて導入する。 vtun が依存しているのは lzo の 1.0 系なので、 LZO のオフィシャルサイト から lzo 1.0 系の最新版である lzo-1.8.tar.gz をダウンロードして展開し、 MacPort の流儀に合わせて --prefix=/opt/local を指定、 共有ライブラリを有効にするために --enable-shared を指定して configure を実行し make する。
$ ./configure --prefix=/opt/local --enable-shared $ make $ sudo make install clean
次に vtun ver.2 のソースを
Sourceforge
からダウンローし展開する。
vtun ver.2 のソースはそのままでは Mac 上ではコンパイルできないので
以下のパッチを適用する。
diff -cr vtun.orig/auth.c vtun/auth.c *** vtun.orig/auth.c 2002-12-17 06:40:44.000000000 +0900 --- vtun/auth.c 2011-01-20 18:22:49.000000000 +0900 *************** *** 66,73 **** #include <openssl/blowfish.h> #include <openssl/rand.h> #else /* YAY - We're MAC OS */ ! #include <sys/md5.h> ! #include <crypto/blowfish.h> #endif /* __APPLE_CC__ */ void gen_chal(char *buf) --- 66,73 ---- #include <openssl/blowfish.h> #include <openssl/rand.h> #else /* YAY - We're MAC OS */ ! #include <openssl/md5.h> ! #include <openssl/blowfish.h> #endif /* __APPLE_CC__ */ void gen_chal(char *buf) diff -cr vtun.orig/lfd_encrypt.c vtun/lfd_encrypt.c *** vtun.orig/lfd_encrypt.c 2002-12-17 06:40:46.000000000 +0900 --- vtun/lfd_encrypt.c 2011-01-20 18:23:21.000000000 +0900 *************** *** 53,60 **** #include <openssl/md5.h> #include <openssl/blowfish.h> #else /* YAY - We're MAC OS */ ! #include <sys/md5.h> ! #include <crypto/blowfish.h> #endif /* __APPLE_CC__ */ #define ENC_BUF_SIZE VTUN_FRAME_SIZE + 16 --- 53,60 ---- #include <openssl/md5.h> #include <openssl/blowfish.h> #else /* YAY - We're MAC OS */ ! #include <openssl/md5.h> ! #include <openssl/blowfish.h> #endif /* __APPLE_CC__ */ #define ENC_BUF_SIZE VTUN_FRAME_SIZE + 16パッチ適用後、これも --prefix=/opt/local を指定、 導入した lzo 関係のパスを指定するために --with-lzo-headers、 --with-lzo-lib をそれぞれ指定して configure を実行し make する。
$ ./configure --prefix=/opt/local --with-lzo-include=/opt/local/include --with-lzo-lib=/opt/local/lib $ make $ sudo make install clean
これで vtun はインストールできたが、
Mac OS X は標準では vtun が利用するトンネルデバイス /dev/tunX
が存在しないので Sourceforge から
Mac OS X 用の TUN/TAP ドライバをダウンロードしてインストールする。
インストール後にシステムを再起動するか /Library/Extensions/tun.kext
をロードする事で /dev/tunX が生成されるので、
/opt/local/sbin/vtund を実行して vpn 接続できるか確認する。
$ sudo kextload /Library/Extensions/tun.kext $ sudo /opt/local/sbin/vtund -f /opt/local/etc/vtund.conf ホスト サーバアドレス $ ifconfig tunX tunX: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet XXX.XXX.XXX.XXX --> YYY.YYY.YYY.YYY netmask 0xff000000 open (pid PPP)
vpn 接続ができればこの様なスクリプトを作成して root 権限で実行すると vpn 接続の開始・終了が出来る様になる。
1#!/bin/sh 2base="/opt/local" 3 4vtund="${base}/sbin/vtund" 5conf="${base}/etc/vtund.conf" 6opt="ホスト サーバアドレス 7 8start() 9{ 10 11 test -x ${vtund} -a -f ${conf} && ${vtund} -f ${conf} ${opt} 12 13} 14 15stop() 16{ 17 18 ps ax | sed -n '/[v]tund/s/ *\([0-9]*\) .*/\1/p' | xargs kill 19 20} 21 22case $1 in 23 start ) 24 start;; 25 stop ) 26 stop;; 27 restart ) 28 stop && start;; 29 * ) 30 echo "Usage: ${0##*/} [start][stop][restart]" 1>&2 31 exit 255;; 32esac
2011/01/20
Esperance DV のメモリディスクで firefox の起動を高速化
Esperance DV を利用して
Mac 上にメモリディスクを作成している。
最初は firefox のキャッシュをメモリディスク上に格納していたのだが、
プロファイル情報を全てメモリディスクに格納したら起動が非常に速くなった。
firefox のキャッシュデータとプロファイルデータを
メモリディスク上に格納するために、
元のディレクトリをメモリディスク上に移動してから、
本来のディレクトリにシンボリックリンクしている。
$ mkdir /Volumes/RamDisk/Application\ Support $ mv $HOME/Library/Application\ Support/Firefox /Volumes/RamDisk/Application\ Support/. $ ln -s /Volumes/RamDisk/Application\ Support/Firefox $HOME/Application\ Support $ mkdir /Volumes/RamDisk/Cache $ mv $HOME/Library/Cache/Firefox /Volumes/RamDisk/Cache/. $ ln -s /Volumes/RamDisc/Cache/Firefox $HOME/Library/Cache
ただし firefox は多くのプラグインや GreaseMonkey スクリプト等で
カスタマイズしてあるので、
何か問題があった場合にメモリディスク上のプロファイルデータが
全て消えてしまうと環境の再構築が非常に面倒になる。
そこで rsync (1) を実行するスクリプトを cron に登録して、
自動的にメモリディスク上のプロファイルデータを
通常のディスクに同期コピーする事で
メモリディスク上のプロファイルデータが消えてしまっても
最悪でも1日前までの状態には戻れる様にして運用している。
TimeMachine でバックアップは取得しているのだが、
TimeMachine のシンボリックリンクの扱いが不明なので
安全策として独自に同期コピーを実施している。
1#!/bin/sh 2 3src="${HOME}/Library/Application Support/Firefox/" 4dst="同期データのバックアップディレクトリ" 5 6/usr/bin/rsync -a --delete "${src}" ${dst}"
ちなみに Esperance DV を勝手に日本語化してみたのだが、
作者に連絡が撮れないのでひっそりと
公開。
インストールされた EsperanceDV.prefPane の中の
Resources ディレクトリ
(標準だと $HOME/Library/PreferencePanes/EsperanceDV.prefPane/Contents/Resources)に
展開した Japanese.lproj をコピーすると、
「システム環境設定」の
「Esperance DV」の設定画面が日本語化される。
この日本語化は私が勝手に日本語化しただけであり、
オリジナルの作者に許諾を取っていませんので、
日本語化部分に関してはオリジナルの作者に絶対に問い合わせないで下さい。
2011/01/17
シェルスクリプトで疑似乱数を取得する
gnu bash には ${RANDOM} というシェル変数が用意されていて、 アクセスするたびに疑似乱数(風)の値が取得できる様だ。 しかし posix 準拠の機能ではなく bash 独自の機能なので拡張性がない。 そこで汎用的な疑似乱数取得の方法として awk (1) を利用した方法を使ってみる。
awk (1) には rand() という関数が組込まれているので
乱数生成ができる。
その際に利用される種(seed)は
srand() という関数で初期化できるので、
これらを利用する事でそこそこの精度の疑似乱数は取得できる。
たとえば 0 〜 m までの疑似乱数は
取得した値から m の剰余を取ることで取得できる。
ただし awk (1) の rand() は仕様として
0 〜 1 までの桁数不定の少数を返すので、
乱数として利用する場合には整数に変換する必要がでてくる。
整数にするために 10n を乗すればよいのだが、
小数点以下の桁数が不定のために小さすぎる n を乗すると
全ての桁が整数化されずに乱数の精度が低くなってしまい、
逆に大きすぎる n を乗すると値が xxx000 の様になってしまい
剰余を取得しても無意味になってしまう。
そこで awk (1) により疑似乱数を取得する場合は rand() で取得した値の前 2 文字 ("0.") を文字列として除外した値から m の剰余とする事で 0 〜 m までの乱数が取得できる。
1#!/bin/sh 2 3awk 'BEGIN{ 4 srand(); 5 print substr(rand(), 3) % '${1:-1}' 6}'
データの型が存在しない(文字列であり数字である) awk (1) ならではの裏技とも言えるだろう。
2011/01/14
Mobee The Magic Charger
職場の iMac 27″ モデルでは Apple 社の Magic Mouse を利用している。
Magic Mouse は標準状態ではそれほど素晴らしい機能を持ってないが、
サードパーティ製の機能拡張ソフトウェアと併用すると
非常に素晴らしい性能を発揮してくれるマウスであり、
慣れると他のマウスを利用するのが苦痛になる程便利だ。
そんな Magic Mouse なのだが唯一の欠点は電池の持ちが悪い事で、
普通に利用していると一ヶ月保つかどうかという程度である。
しょうがないので eneloop を使っていたのだが、
Mobee The Magic Charger を見つけたので早速導入してみた。
この Mobee The Magic Charger は Magic Mouse 用の専用設計で、
裏蓋と一体になった専用の充電池を Magic Mouse にセットして
専用の充電台の上に載せておくだけで充電ができるという優れもの。
充電台は本体の USB から給電されるので電源も必要なく、
ただ載せておくだけで無接点で充電できるので非常に便利だ。
専用の充電池は電池よりも 10g 程軽量化されているそうなので、
Magic Mouse を持った感じも軽くなり気持ち使いやすくなった気がする。
職場の iMac は 24 時間稼働しているので、
帰宅時に充電台の上に載せておけば普段から充電できて良い感じ。
今の充電台方式だと使っていない時に「意識して充電台に置く」必要があるので、
次はマウスパッドとインテグレートされた充電台が出来ると嬉しい。
そうすれば普段使っている間も充電されているので、
本当に「充電」に意識を向ける必要がなくなって便利な事この上ないと思うのだが。