64bit unsigned int を pack したい
ただし 32bit 環境で。
続きを読むGitHub の Markdown Rendering API を Perl で手軽に利用したい
と思ったので、昔つくった Text::Markdown::GFM::Lite というのをちょっと手直ししてみると同時に Minilla を使ってみました。
- Text-Markdown-GFM-Lite
- https://github.com/hatyuki/p5-Text-Markdown-GFM-Lite
Perl でプロセスの待ち合わせをする
たとえば以下のようなプログラムを Perl で書いて
#!/usr/bin/env perl use strict; use warnings; use feature qw/ say /; use Parallel::ForkManager; use Time::HiRes ( ); my $process = 10; my $pm = Parallel::ForkManager->new($process); for (1..$process) { if ($pm->start) { Time::HiRes::sleep(0.2); # fork に時間がかかることを想定 next; } # 子プロセスの処理開始時刻を表示 say "[$$] ", Time::HiRes::time( ); $pm->finish; } $pm->wait_all_children;
これを実行してみると
[3107] 1381815422.89502 [3108] 1381815423.09763 [3109] 1381815423.30142 [3110] 1381815423.50445 [3111] 1381815423.70717 [3112] 1381815423.91102 [3113] 1381815424.1142 [3114] 1381815424.31746 [3115] 1381815424.52011 [3116] 1381815424.72334
当然、親プロセスが 0.2 秒休んでいるため、子プロセスの処理開始時刻は約0.2秒間隔のバラバラに。
今回は sleep しているので当然ですが、fork って結構時間がかかる処理なので特別 sleep を入れなくても、子プロセスの処理開始時刻はバラバラになりがち。
普通はこれでも全然かまわないんですが、fork が完了するのを待って子プロセスを一斉に開始させたい!とか、fork 完了後に親プロセスが何らかの処理を行ない、その後一斉に子プロセスを開始させたい!とか、特定の条件が揃うまで子プロセスの実行を停止させておきたい!なんてときには、プロセスの "待ち合わせ" が必要になります。
滅多にそんなことは発生しないんだろうけれど、なんか今回はそういう要件があってだな。。。
というわけで、今回は手っ取り早くセマフォを使ってプロセスの待ち合わせをしてみることに。
placehold.it みたいなやつを作った
Web サイトのレイアウトを考えるときに、placehold.it や placehold.jp とかを使うと
<img src="http://placehold.it/150x150">
こうやって HTML を書くだけで、手軽に指定したサイズの画像が手に入ってすごく便利。
だけど、頻繁にアクセスが必要な場合や、社内のネットワークから出れない、出たくない場合を考えると、社内に似たようなサービスがあったら便利だよね。
そんなやりとりがあったので、Amon2 を使って*1ちゃちゃっと作ってみた。
なんか、四角い画像がヘー●ルハウスを連想させるということで、こんな名前になりました。TOP ページとか用意していなかったんだけど、とりあえず placehold.it をパクってでっちあげてみました。
これで、他のサービスのように以下のようにアクセスすれば指定したサイズの画像を取得できるようになりました。
<img src="http://hebel.magicalhat.jp/100x100">
placehold.it や placehold.jp のように、色を変えたりテキストを変更したりといったことはできないけれど、今のところの用途だと充分かなぁといった感じ。
オマケ程度だけれど Redis で生成した画像をキャッシュしているので、社内からのアクセス程度なら心配するほどでもないかなーといった感じです。
*1:Amon2 使うほどでもなかったけれど
Perl と JavaScript 間で RSA 暗号を使いたい
サンプルが見つからないってことは、普通はやらないことをやろうとしているんだと思う。
ということで、以下のようなことをしてみたかったので、試してみました。
- Client (JavaScript) 側で RSA 鍵 (秘密鍵・公開鍵) を生成
- 公開鍵を Server (Perl) に POST
- Server (Perl) 側は受け取った公開鍵を用いて暗号化し送信
- Client (JavaScript) は受け取った暗号文を 1 で生成した秘密鍵で復号
とりあえずサンプルで作ったものは
- RSA 鍵を生成 (Client)
- 公開鍵を POST (Client)
- UUID を生成 (Server)
- POST された公開鍵を使い暗号化 (Server)
- 受信した暗号文を秘密鍵で復号 (Client)
という動作をします。
できたもの、ソースコードはこちら。
- JP RSA
- http://jprsa.magicalhat.jp/
- hatyuki/p5-jprsa
- https://github.com/hatyuki/p5-jprsa
以下雑文
続きを読むChef-Solo できる Debian AMI をつくる
作業ログだけぺたり。たいしたことはやらず。
元の Debian の AMI は MarketPlace からもってきました。
AMI は Stable のものしかないんだけれど、事前に apt の設定を変えて Testing に dist-upgrade 済の AMI を作成して利用しました。
TimeZone や Locales の設定は気分的な問題。
$ sudo aptitude update $ sudo aptitude safe-upgrade $ sudo dpkg-reconfigure tzdata $ sudo dpkg-reconfigure locales # => None を選択 $ sudo aptitude install ruby ruby-dev make $ sudo gem install chef --no-ri --no-rdoc $ sudo aptitude clean