programmingの最近のブログ記事
本日、徹子の部屋 twitter bot "tetsuko_room"をリリースしました。朝 9 時にその日の徹子の部屋のゲストを紹介してくれるというただそれだけのボットです。
徹子の部屋に旬の人が出るのを見逃したくない方、若手芸人が潰される様子を見逃したくない方、小沢昭一とのコスプレの会を見逃したくない方、年末のタモリの会を見逃したくない方、どうぞ follow してご利用くださいませ。
拙作の姉妹ボットとして伊集院光 bot "titon"もあります。こちらは伊集院がラジオで喋ったキャラクターが毎時 0 分を知らせしてくれるのと、毎朝6時にその日に伊集院が出演する番組について教えてくれるボットです。併せてご愛顧のほどお願いいたします。
不具合を見つけた場合は @mtsuyugu まで d をお願いします。ソース一式は github で公開しています。

Context Free Art というものに挑戦してみました。
再帰的に図形を描くプログラミング言語のようなもので、図形を描画する規則を描画位置・サイズ・描画する色を相対的に定義していき、作成した規則を再帰的に呼び出すことで図形を描くことができるツールです。再帰の終了判定は描画するサイズが小さくなったところで終了してくれるため、終了条件を描く必要がないのがプログラム言語とは違って特徴的なところです。
ということで、さっそく作ったのが上の迷路のような図形です。まっすぐ、曲がり角、交差点、丁字路、行き止まりを確率的に発生させて再帰的に規則を呼び出して描いています。描画する際は乱数の種を選べるのですが、発散しないように交差点などの発生確率を選ぶ必要があるところがコツでした。簡単なルールで複雑な図形が作成されていくのを見るのは思ったよりも楽しかったです。
再帰呼び出しによって図形が成長する様子の動画はこちら。
最後に今回のスクリプトを書いておきます。本家のギャラリーではいろんな作品を見ることができます。
2 月 14 日に UNIX time(1970年1月1日からの秒数)が 1234567890 秒になるということを耳にしましたので、C で time_t を使って現在時刻と 1234567890秒 が正確にはいつになるのかプログラムを書いてみました。
結果は
Wed, 11 Feb 2009 00:09:35 +0900 Sat, 14 Feb 2009 08:31:30 +0900 Tue, 19 Jan 2038 12:14:07 +0900
ということで 2 月 14 日の午前 8 時 31 分 30 秒がその時刻のようです。3 つめのは time_t がオーバーフローする直前の時刻です。time_t のサイズは処理系依存のため実行環境によって結果は変わる可能性がありますが、私が実行した環境では time_t の型定義は以下のように int 型でした。int は 4 バイトの環境ですのでばっちり 2038 年問題に出くわす処理系だということがわかります。
/usr/include/time.h:typedef __time_t time_t; /usr/include/machine/_types.h:typedef __int32_t __time_t; /usr/include/machine/_types.h:typedef int __int32_t;
一方で 64 bit の long 型で time_t が定義されているような環境では 2038 年問題は起こらずに 292277026596 年問題になるそうです。なんだそりゃって感じです。気をつけなくてはいけないのは、time_t が 64 bit であっても、それを利用しているライブラリとかシステムが 32bit の変数で time_t の値を受けていたら結局 2038 年問題は起こるんですよね。
ずいぶん昔に amazon のページから画像付きリンクを生成するブックマークレットを紹介しましたが、URL が文字列 "ASIN" を含む型式のみしか対応していなかったり、現在は画像の URL も 商品ID を含まないを新しい型式のものになっていて、今では旨く動かない場面の方が多いので、ブックマークレットを新しく造り直してみました。
こちらのリンクから右クリックでブックマークに保存してもらえると使えるようになります。 横サイズが 160 ピクセルの画像が抽出されますので、画像のサイズを変更したい場合は x = "160" の数字の部分をお好みの数に変更して使ってみてください。
サイズの変更にとどまらず商品画像を元にしてさらにもっといろんな効果を加えてみたいと言う場合はこちらのサイトがとても参考になります。蒲焼きのタレの「なか見検索!」なんてこともできちゃったりします。
./lib においた自作 .pm ファイルを読むような perl スクリプトを書くとなると
とかって書くわけですが、cron から起動したりするとカレントが $HOME になるために、上記では旨く ./lib/*.pm を読んでくれません。かといって直に、絶対パスを直にプログラム中に書くと、今度はテスト用のディレクトリからから本番用のディレクトリに切り替えるときにそのパスを変更しなくてはいけなくてちょっとややこしいことになってきます。余計な心労は負いたくありません。
で、そこで解決策をググっていたところ FindBin というモジュールがあることを知りました。FindBin を使ってこの問題をクリアするには、上記のコードを
のように変更すれば、万事 OK。 $FindBin::RealBin がスクリプトのあるディレクトリへの絶対パスを示します。
便利ですね。
はてダで「project euler を scheme で解く」にチャレンジしています。
ご興味のある方は遊びに来てください。
Processing.js、簡単に動くモノが作れて面白いです。ということで今日も processing.js でワチャゴナしてみました。
ここ最近で話題になった John Resig さんの processing.js を使ってみました。processing の存在は知っていましたが、Java ということで敬遠していました。しかし javascript であれば敬遠する理由はありません。ということで簡単に作れておもしろい 2 次元(といっていいのかなぁ)フラクタル図形であるところのシェルビンスキーのカーペットを描いてみました(他のフラクタル図形が簡単かどうかは知りません)。コードはこんな感じ。
processing 自体はサンプルとレファレンスを観ていたらすぐに分かりました。簡単なモノを作っておいて簡単というのもおかしな話ですが、processing.js の導入、processing 自体ともに簡単に馴染むことができました。おもしろそうです、コレ。
コードを貼り付けてボタンを押すとサーバサイドでコードを実行し、実行結果を表示してくれる codepad でちょっと遊んでみました。
何をして遊んだかというと、サーバの実行環境やコンパイル環境の事を知ることはできないだろうかと、実行ファイルの ELF(Executable and Linking Format) を読んでみました。 まず初めに こんな感じ で ELF header から OS/ABI 情報と CPU の情報を取得してみました。
結果は OS/ABI が 0 で ehdr.e_machine が 3。 ABI が 0 というのがよく分かりませんが、 ehdr.e_machine が 3 ということから i386 系 CPU ということが分かります。これは、手元の FreeBSD では elf.h から include を辿って sys/elf_common.h に define マクロが定義されていたので、そこから判断しました。分かったからどうということもないですが。
おまけでこちら。おそらく 4.1.2 というのはおそらく GCC のバージョンだと思われます。 こちらもだからなんだってことなんですけど。
次に .comment セクションに何か入ってないかなーと思い、ELF のセクションヘッダにも手を出してみました。セクションヘッダの構造は ここを参考にしました。書いたコードも晒しておきますが、実行したら seek が禁止されていて実行できませんでした。残念。
以下が .comment セクションを表示するプログラムです。時間があればコメントもつけたいところです。
最近のコメント