CGIでWake on LANさせてみた


 SplashtopやらESファイルエクスプローラーやらで俺PCを弄るにあたって、やっぱスリープやシャットダウンから遠隔で復帰させたい訳ですよ。
 となれば必然的にWOLなのだが、PC側はUEFIとドライバをちょちょいと設定してやればいいとして、パケットをどう届かせるか。
 まあ、今はLANの中だから普通にWOLなアプリでも入れときゃ動くんだけど、いずれWANからやりたくなるだろうしなあ。

 で、うちのLANには24時間稼働してるWeb鯖があって外からも繋がるから、そこにWOLパケットを送信するCGIでも置いときゃいいじゃん、と。
 PHPが書けたら、PHP対応のWeb鯖を立てる機能の付いたNASとかにも使えて便利なんだろうけど、この程度の目的だとPHP覚える気力も出ないんで、ちゃちゃっとPythonでCGIにしてしまおう。

#!/usr/bin/python
import os
import socket
import binascii

def send_wol_packet(mac_addr_str, port=9):
    s = mac_addr_str.replace(':', '').replace('-', '')
    if len(s) != 2 * 6:
        raise TypeError('Invalid MAC address length')
    mac_addr_bin = binascii.a2b_hex(s)
    wol_packet = '\xff' * 6 + mac_addr_bin * 16
    sck = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sck.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sck.sendto(wol_packet, ('<broadcast>', port))
    sck.close()

def app(env):
    mac_addr_str = env.get('QUERY_STRING')
    send_wol_packet(mac_addr_str)
    print 'Content-Type: text/plain\n\nDone.'

if __name__ == '__main__':
    app(os.environ)

 あとは、これをhttp://host/cgi-bin/wakeup.cgi?12-34-56-78-90-ABみたいに叩けば、と。行けた行けた。

 いやーもう何か、凄いわ。Nexus 7が遊べすぎてヤバい。アプリが作りたくなったらSL4A辺りでも良さそうだし。
 まあ、HTML5な方向性でも結構遊べそうですが。先にそっちかなあ。XPかつIEな人が気になるけど、XPな人はIE捨ててください、それも無理ならご縁が無かったらしいです、でもいいんじゃね。趣味で作る時なら。

 今んとこタブレットの最大の不満はキーボードだろうか。
 持ち歩ける画面サイズと重量で全面タッチパネルなことは物凄く重要だから、そこらを全く犠牲にせずに、画面も全く邪魔せずに、キーボードのタッチタイピングと自由なカーソル操作が持ち込めたら本当に素晴らしいのに。既存の製品だとレーザー投影くらいしか思い付かないけど、あれ凄く微妙らしいしなあ。
 何か画期的な発明無いだろか。それともレーザー投影をどうにか実用的にするとか。誰かマジで作ってくれ。


Amazon S3からGlacierを使うアレで請求額が激減してたとか


 Amazon S3にバックアップする仕組みをずっと動かしてたんだけど、Amazon GlacierのAPIに切り替えるのめんどくせーから、S3からGlacierを使える奴で0日でGlacier化する設定にして一ヶ月使ってみて請求額を見てみよう、という話の続き。

 まあ、普通に激減であった。以前は9.233GB使って$1.16だったのが、10.449GB使って$0.14に下がるのはなあ。
 ちなみにS3自体のお値段もこないだ地味に値下げがあったんだけど、それは10GB程度じゃ影響ほとんど無し。もしも10.449GBをGlacier化せずにS3の値下げ後で計算すると、$1.01になっていたと思う。Glacier化だけで1/7以下である。
 つーか10GB程度だと何かほんとどうでもいい請求額だな。まあ試しておきたくはあったし、鯖関係の支払いは俺持ちなので100円でも嬉しいけど(笑)。あとあれだな、ゲームで0.01秒を削りたくなる気分とかに近いものが。またはボトルネックでもないのにクロック削っちゃう気分とか。
 なお、0日でGlacier化させる設定だと、大抵一日弱くらいはStandardなオブジェクトのままなんだけど、その間は完全にStandard扱いで金取られるのかなーと思ってたら全然そうでもない感じで、確かにStandardの料金が取られてはいるんだけど、0日設定のTransition待ち一回につき約30分相当くらいしか取られてないような。これなら従来通りにS3にバックアップする仕組みのまま続けててもいいな。10GB程度じゃStandard利用分は余裕で$0.01のままだったので。

 で、14セントって今何円だろうと思ったら、カードの請求額は12円でした。ハハハ。うまい棒より若干高いな。


もしかしてFTPサーバ入れとくの最高なんじゃね


 Nexus 7を買って、それはもう何だか素晴らしく楽しい日々である。AndWobbleで俺キャラのOMC画像のおっぱいが揺れるライブ壁紙になったりな!
 おっぱい揺れるせいで電池が切れちゃうならモバイルバッテリー買えばいいんだぜ?
 いやまあ、自宅の中で使う分には全然余裕なんだけど、実際ライブ壁紙にしたらAndroid OS名義のバッテリー使用率が急伸してるからなあ(笑)。だがその程度で俺を止められるとは思わないことだ。おっぱいだからな。
 あっさり飽きて止まるかもしれませんが。

 で。

 俺PCの有り余るHDD(つってもたかが1TB)を全てのベースにしたいんだけど、事務所PCと俺PCの間はDropboxで受け渡ししてたんで、狭いわ重いわで。
 Androidとの受け渡しはFTP経由にしたから楽勝なのになー、と思ったんで、そうだWindowsもFTPをマウントするフリーソフトとかあるんじゃね、と思って探してみた。

 結論としては、Windowsのデフォ機能だけで行けました。あれー。こんなんあったっけ?
 窓の杜で紹介されてたFtpUseとか使ってみて、UTF-8対応してねーじゃん畜生め、とかやってたのがアホのようです。つーか、UTF-8対応してたら今頃Windowsの標準機能に気付かなかったんだな。危ない危ない。
 FTPが駄目ならWebDAVも考えたけど、FTPで行けるならこのまま行くべ。既にUTF-8なFTP鯖を立ててあるんだし。NAT関連で面倒になるかもしれんけど、そうなったらその時に頑張ろう。

 で、やり方も一応書いてみる。Windows 7しか今使ってないんで、7の方法しか書けないけど。まあ他所で詳しく紹介してるとこもあるでしょうハハハ。
 「コンピューター」を開いて、ドライブ一覧とかあるとこの空白を右クリで「ネットワークの場所を追加する」で、場所をftp://マシン名みたいにすれば、あとは流れで。余裕余裕。

 いやー、何かもう、今まで一体何をやってたんだろうというくらい便利で。
 つっても、まだ自宅内での運用ですが。モバイルルータを買ったら、何が何でもWANから使えるように頑張るだろうなあ俺。ということで早く出ろL-03E。かなりマジで。

追記:
 マウントされるのとは違って、例えば画像を開こうとするとブラウザで開いたりするんで、ファイル移動用以外の使い方を期待すると微妙げ。
 有料でいいならWebDriveがいいらしいけど、くっそ高いです。
 あと、波ダッシュだか全角チルダだかを入れたファイル名とか突っ込んだら普通に物凄い文字化けしたりしてるんで、さてどうしたものか。

さらに追記:
 結局、SMBに移行したのであった。


Amazon S3からGlacierを使うアレをやってみる


 何かAWSでS3とGlacierの連携っぽいサービスが始まったらしいんで、軽ーく調べてみる。

 フームフム。なるほど。
 つまり、Amazon GlacierのAPIとは全く切り離されてて、S3にStorage Classが増えたような感覚か。Storage Classってのはあれだ、前にも「信頼性が低いけど安いよー」みたいな奴があったじゃん。あれに加えて「超安いけど取り出しは大変だよー」が増えたような感じ。
 アップロードの時は、Storage ClassをGlacierとして直接アップロードすることは出来ないようで、Storage ClassをGlacierにしたいオブジェクトを予めルールで指定しておいて、適当なStorage ClassでアップロードしてTransition待ちな感じ。
 で、Storage ClassがGlacierなオブジェクトは、ダウンロード以外は普通のオブジェクトと同じっぽい。ような気がする。知らんけど。少なくとも、Glacierな奴にStandardで上書きしたら、普通にStandardな奴になってGlacierにゴミとかも残らない、とAWSの人が言ってるのは見た。ような気がする。知らんけど。

 という訳で、うちのS3はバックアップ専用だし、基本的に出動しない最後の砦だから、アップロードしたら即座にGlacierにしろや、とルール設定しとけば良さそう。S3にバックアップするツールとスクリプトも、多分そのまま手を付けなくて良さそうな気がする。
 具体的には、AWS Management ConsoleでS3のバケットのPropertiesからLifecycleタブに行き、Add ruleからAdd TransitionでDays from the creation dateで0日にして、ルートのbackupフォルダ以下を全部Glacier化しときたいんでPrefixをbackup/に設定して、一応適当なNameを付けて、終わり。翌々日くらいに中身を見ると、Storage Classが見事にGlacierになっていた。めでたい。ルールを変えれば色々な応用が可能な予感だけど、うちでは他の使い方は当分無さそうかな。
 あとは、従来のバックアップツールが動くか、だなあ。試してからblogに書けよ、って気もしますが。その辺は、コストがどんだけ変わったかとかも含めて、いずれまた書いた方が良さそうだ。

追記:
 で、コストはこうなった


Google Chart APIがdeprecatedになってたことに気付く


 うえーマジかよ。便利だったんだけど。
 つーかGAEでもそうだけど、こんなことばっかやってると別のこの手のサービスの導入も避ける人がどんどん増えるんじゃねーの?
 とりあえず、廃止されても平気なサービスだけ使え、ってのは教訓だなあ。特にGoogleは。まあ、使う前に気付けよ、って言われそうですが。
 既に使ってるとこ、どうするかなあ…。IE7以下を切り捨てても許されるようなとこにしか使ってないし、dataスキームで埋め込んじゃうか。めんどくせー。