Rhythm & Biology

Engineering, Science, et al.

Perlで手軽に非同期TCPサーバ

yokohama.pmに行ってきて、またperl熱が上がってきたので、久しぶりにコード書いてみた。 AnyEvent::TCPServer AnyEvent::Socketを使って非同期サーバ書こうとすると色々面倒くさかったりするので、もっと手軽に書けるモジュールを作ってみました。こんな感…

AES128暗号化 - Java編 -

先日iPhone(というかObjective-C)でのAES128暗号化について触れましたが、今回はJava編です。未確認ですが、おそらくAndroidでも動きます。 /* * $ javac CryptAES.java * $ java CryptAES <secret_key> <iv> <message> */ import java.security.spec.AlgorithmParameterSpec; import </message></iv></secret_key>…

iPhoneでAES128暗号化

ios

iPhoneアプリ開発で暗号化を行う必要が出てきたので、試しに書いてみました。 暗号方式にはAES128を、Padding方式にはPKCS7を使っています。ここで使っているCommonCryptoはiOS SDKについてくるものですが、mac上でも普通に使うことができます(iPhone Simula…

libeventでHTTPサーバを試す

libeventに含まれるevhttpを使って、簡単なhttpサーバを作ってみました。 404を返す まずは404 not foundを返すコードを書いてみます。ただし、GET以外のメソッドの場合はBad Requestを返すようにします。 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <event.h> #include <evhttp.h></evhttp.h></event.h></errno.h></stdlib.h></stdio.h>…

libeventでタイマー処理をする

libeventでタイマー処理をする方法について書きます。 まずは3秒後に指定の関数を呼ぶコードです。 #include <stdio.h> #include <sys/time.h> #include <event.h> void say_hello(int fd, short event, void *arg) { printf("Hello\n"); } int main(int argc, const char* argv[]) { struc</event.h></sys/time.h></stdio.h>…

libeventでechoサーバをつくってみた

memcachedで使われていることで有名なlibeventを試してみました。 以前libevを試したことがあるのですが、libeventの方が少し書きやすいという印象です。パフォーマンスに関してはlibevのほうが上という噂ですが。libeventやlibevに関して少し説明しておくと…

CALayerのアニメーションを一時的に無効にする方法

ios

CALayerはプロパティを変更した際に、いい感じにアニメーションをつけてくれます。特に手を入れることなくちょっとだけリッチな感じにすることができるのですが、逆にアニメーションさせたくないときもあるはずです。これはCATransactionを使えば簡単に解決…

クリップボードを使ったいたずら

他人のクリップボードをめちゃくちゃにしてやろうといういたずらです。 perl編 # clip_or_treat.pl use Clipboard; while (1) { Clipboard->copy("Trick or Treat!"); sleep 2; } 後輩などのマシンでぶん回していたずら完了です。 applescript編 perl編だとC…

AnyEvent::Redisでpubsubを使ってみた

Redisはオンメモリで高速に動作しつつ、定期的にディスクに書き込んでくれるKVSです。 また、pubsubの機能もサポートされており、今回はこれに焦点をあててみようと思います。もう少し詳しい内容は公式サイトのIntroductionを見てください。 http://redis.io…

CからGraphvizを使う

perlだとGraphvizモジュールがあったり、C++ならBoost::Graphがあって、情報も調べればすぐに出てくるのですが、Cから使う場合に関しては公式ドキュメント以外にあまり見かけない気がします。そこで今回、Cからgraphvizのライブラリを使う方法に関して簡単に…

SenTestingKitでNSLogを監視する

Cocoa開発でテストを行う時にはSenTestingKit.frameworkを使います。使い方も簡単でそれほど不満はないのですが、一つだけ大きな不満があります。NSLogがXcodeのデバッグコンソールに表示されないということです。NSLogだけでなく、CFShow, printf全て表示さ…

CAAnimationでCALayerを動かす

ios

CALayerは単純な位置の移動だけなら、 layer.position = CGPointMake(x, y); というようにすれば、アニメーションとともに移動してくれます。position以外にも、opacityの変更などでもアニメーションが発生します。 しかし、アニメーションの時間を細かく決…

nltk.probability.FreqDistのplotが動くようになるまで

まずnltkの導入。手元の環境はsnow leopard + pythonbrew + python2.7.1です。nltkはpython2.7をサポートしていないようですが、特に問題なくインストールできました。 % easy_install http://nltk.googlecode.com/files/nltk-2.0.1rc1-py2.6.egg 続いてnltk…

rack事始め

rackのインストール % gem install rack まずはHello World # filename: hello.ru require 'rubygems' require 'rack' class Hello def call(env) [200, {"Content-Type" => "text/plain"}, ["Hello World"]] end end run Hello.new 実行 % rackup hello.ru …

gititで数式をpngで出力

まずpluginsフォルダにImgTex.hsをコピーします。 % cp ~/.cabal/share/gitit-0.8/plugins/ImgTex.hs plugins/ そして、設定ファイル(gitit.conf)にImgTex.hsをロードするように設定します。 plugins: plugins/ImgTex.hsこれでgititを起動すると、ImgTexプラ…

Cabalインストール時のiconv問題

gititを導入してみて良さそうだったので、別マシンにもgititを導入しました。その際に、ハマってしまった点を記録しておきます。まず、ghcが入っていないので、Haskell Platform(64bit版)の最新版をダウンロードしてきてインストールします。 そして、ターミ…

gititが便利

gititを下の記事で知ったので、早速導入してみました。 http://blog.madoro.org/mn/91 環境はSnow Leopardで、Haskell Platformを導入済みです。 まずは、cabal-installをアップデートしておきます。というのも、cabal-installが古いとnetworkというモジュー…

Cocoa(Objective-C)で自分のIPアドレスを調べる

NSHostを使うことで簡単にできます。 NSHost* host = [NSHost currentHost]; NSArray* addresses = [host addresses]; for (NSString* addr in addresses) { NSLog("%@", addr); } IPv6などもまとめて表示されます。IPv4は2番目にあるようです。

MessagePack-RPC

仕事先のシステムでmessagepackを使っているということなので、少し勉強してみました。 The MessagePack Project: http://msgpack.org/高速かつ効率的にシリアライズ・デシリアライズするものらしいです。それに加えて、RPCも用意されています。 ググってみ…

dotcloud

dotcloudのinvitationをもらったので早速動かしてみました。まずは準備 % sudo easy_install dotcloud % dotcloud create mythosil % dotcloud deploy -t perl mythosil.www Hello Worldを出すだけの簡単なpsgi # app.psgi use strict; use warnings; use Pl…

macでXAMPP

1週間ほどwindows+xamppで開発してました。 しばらくはまたmacに戻ることになったので、今度はmacにxamppを導入してみました。そこでちょっとハマったものをメモ。 XAMPP for Mac OS X http://www.apachefriends.org/jp/xampp-macosx.html 今回は1.7.3を使い…

Fast Enumeratorの最後の"nil"

CocoaでFast Enumeratorを使っていて、ちょっとハマったところがあったので記録。 Fast Enumeratorとは、たとえばこんな感じです。 NSArray* arr = [NSArray arrayWithObjects:@"1", @"2", @"3", nil]; id i; for (i in arr) { NSLog(@"%@", i); } この後、…

qmail転送設定

たまたまqmailの転送設定をする機会があったので、忘れないうちにメモしておきます。普段はqmail触っていませんし、次にいつ使うかも分かりませんが。ユーザmisosoupへのメールをmisosoup@example.comにも転送したいというときには、 % cd ~misosoup % vi .q…

ビルドフェーズでフレームワークをコピー

久しぶりにcocoaアプリケーションを作ろうとして、フレームワークまわりでつまづいてしまいました。 自作(もしくは他人作)のフレームワークを利用しようとした時、xcodeのFrameworksに入れるだけだと、 dyld: Library not loaded: @executable_path/../Frame…

AppleScriptでアプリケーションが起動中か調べる

applescriptを使えば、例えばitunesラジオで再生中の曲情報を調べたりできます。 tell application "iTunes" current stream title end tell ただ、itunesが起動してなかった場合にも、一度起動してから"missing value"を返してきます。そこで、まずitunesが…

Benchmark

perl使ってて、あまりパフォーマンスを気にしたことがありませんでした。とにかく覚えるのに必死でしたから。 ようやく自分のなかで余裕も出てきて、パフォーマンスあたりも気にしていこうかな、と。そこでまずはベンチマークの取り方の勉強。Benchmarkモジ…

rlwrap

前回のエントリでmaximaが出てきましたが、ターミナル版のmaximaはreadlineが組み込まれていません。なのでemacsキーバインドが使えません。結構イライラします。 そこで便利なのがrlwrap。readlineのwrapperです。実はmaximaをインストールするとrmaximaと…

Maximaでテイラー展開

紙で解こうとすると面倒くさいテイラー展開。Maximaを使えば一瞬で解くことが出来ます。 (%i1) taylor(sin(x), x, 0, 5); 3 5 x x (%o1)/T/ x - -- + --- + . . . 6 120表示は見やすいとは言えませんが、特に問題ありません。 引数は テイラー展開する式: si…

ntpdateで時刻を正しく

先日サーバのNet::Twitterが動かなくなりました。 あまりの突然のことだったうえ、本番環境へ移行はじめようというタイミングだったため、非常に焦ったわけです。 Perlモジュールを片っ端からアップグレードしてみたり、Perl自体のバージョンをあげてみたり…

haskellでhttp client

haskellでHTTPクライアントを書いてみました。最も簡単なGETメソッドの例です。 -- http.hs import Network.HTTP main = do resp <- simpleHTTP (getRequest "http://www.google.co.jp/") body <- getResponseBody resp print $ show body エラーのトラップ…