2007-01-01から1年間の記事一覧

Camlp4メモ

http://www.jmuk.org/~mukai/camlp4tut.htmlを読んだメモ。 プリプロセッサ camlp4は、構文木を変形することでOCamlの構文を拡張する。Lispのマクロと目的は同じ camlp4は字句解析器、構文解析器、抽象構文木が独立している。だから、構文拡張以外にも利用で…

Camlp4を勉強しよう

http://www.jmuk.org/~mukai/camlp4tut.htmlを読んでみる。 噂によるとcamlp4を覚えるとOCamlでローカルopenや内包表記、モナドが使えるようになるらしい。Lispのマクロのようなものだと想像してるんだけど、どうなんだろう。

グロブの展開

30分プログラム、その176。[n-m]という形のグロブを展開する。例えば、zshだと $ rm tmp[0-2]とやるとtmp0、tmp1、tmp2がまとめて削除できる。このような文字列の展開をSchemeでやってみる。 使い方 gosh> (expand-glob "a[0-3].txt") ("a0.txt" "a1.txt" "a…

URLエスケープ Bookmarklet版

30分プログラム、その175。URLエスケープをするBookmarklet。 昨日のURLエスケープコマンド(id:mzp:20071105:escape)のBookmarklet版。Opera/Safari/Firefoxで確認。IEはしらない。 使い方 ブックマークレットとは - はてなキーワード参照。 ソースコード ja…

URLエスケープ

30分プログラム、その174。URLエスケープをするコマンド。MacのOperaやSafariでWikipediaなどを見るとURLが「http://ja.wikipedia.org/wiki/素数」のようになる。わかりやすいけれども、日記からリンクを貼るときはURLエスケープする必要がある。今までは、…

幸運数

30分プログラム、その173。幸運数なるものを求めてみる。求め方は、 自然数の数列Lを用意する Lから偶数を削除する 2*L[1]番目の数字を削除する 2*L[2]番目の数字を削除する ... 2*L[n]番目の数字を削除する エラトステネスのふるいに似ているけれど、先頭か…

メールの署名

30分プログラム、その172。メールの署名リストを作る。昨日に続いてメールねた。今度は、みんなの署名をリストアップしてみる。 署名の抽出 署名は、「-- 」のあとにあると信じておく。一応RFCにもある載っている内容らしい。で、Apple Mailでは次のような形…

X-Mailerのカウント

GMailがIMAPに対応したので、ローカルにメールを全部ダウンロードした。で、せっかくダウンロードしたのでX-Mailerを調べてみた。ThunderBirdなどはX-Mailerではなく、UserAgentに名前を書いてくるので、そっちもカウントするようにしている。 名寄せ無し gr…

ディレクトリのグループ化

30分プログラム、その170。ディレクトリのグループ化。例えば、"foo1"、"foo2"、"foo3"という3つのファイルがあったら、これをfooというディレクトリを作ってそこに入れるやつ。 使い方 $ ls bar-2.0 foo-1.0.0 foo-1.0.1 foo-1.2 $ dir_group * # foo-/以下…

クラスの動的拡張

30分プログラム、その169。Pythonで動的にクラスにメソッドを追加してみる。 Pythonでfoo.xとしたとき、 インスタンスfooからxを探す 見付からなかったらfooのクラスからxを探す 見付からなかったらfooのクラスの親クラスからxを探す という風に継承ツリーを…

Operaメモ

Operaに関するメモ。主にJavascript関連。 shortcuts.jsを使う場合、デフォルトのkeydownよりもkeypressのほうがいい。keydownだとブラウザデフォルトの動作を殺せない"こと"がある Windows版のOperaでテキストエリアを編集すると、改行コードが"\r\n"になる

etagsを試す

30分プログラム、その168。etagsを試す。前々から気になっていたので。これを使うと特定の関数に簡単にジャンプできるようになる。これはかなり便利な気がする。詳しくは、Meadow/Emacs memo:プログラム関連 - 一般用を参考に。ちなみに、etagsはEmacs用、ct…

ダミーファイル生成

30分(?)プログラム、その167。ダミーファイルの生成。pasteコマンド(id:mzp:20070831:paste)とかを作るときに、次のようなダミーファイルが欲しくなる。 a a a a a今まではこれを、Perlのワンライナーで生成してた。 perl -e 'print "a\n"x10'これはちょっと…

TeX用Makefile

ここ2日ほどTeXを書いてるので、Makefileを書いてみた。 openを使っているのでMac専用だったりする。openをexplorerとかxdviで置き換えるとWindowsやLinuxでも使えるかもしれない。 使い方 Makefileにはこう書く。 TeX:=meeting.tex include ../Makefile # T…

ソフィー・ジェルマン素数

30分プログラム、その166。CATVで見たプルーフ・オブ・マイ・ライフ [DVD]に登場したソフィー・ジェルマン素数を計算するプログラム。ソフィー・ジェルマン素数は、2p+1が素数であるようなpのこと。例えば、2*2+1=5で2と5も素数なので、2はソフィー・ジェル…

Ubuntu入れた

しばらく使ってないノートPC(PC-CB1-M5)にUbuntuを入れてみた。 重くて実用に耐えない。 ウインドウマネージャって変更すればいいのかな?

Python風getopt

30分プログラム、その165。Python風getopt。 昔何かでPythonのgetoptは実に使いやすい、という記述を読んだ気がするので、Rubyに適当に移植してみる。どう使いやすいかというと、RubyのOptionParserは次のように書く。 require 'optparse' option = [] opt =…

grepの速度測定

30分プログラム、その164。grepの速度を測っていみる。 Rubyである文字列を含むファイルを検索する場合、自前で実装するのと、grepコマンド使うののどちらが速いか測定してみた。 検索するファイルの拡張子も指定したかったので、findとも組合せている。 使…

ファイルに特化したcat

30分プログラム、その163。ファイルに特化したcat。 最近、複数のJavascriptを結合するのにcatを使ってる。(id:mzp:20071013:js) cat *.js > foo.jsただ、これだと結合したやつから元のファイルを得ることができなくて、たまに困る。そこで、結合時にファイ…

7は孤独な数字

30分プログラム、その162。曰く7は孤独な数字。 理由は、 「1から10の数字を二組に分けて、両方ともグループの数字の積が一緒になる組み合わせはあるか?」という、某作家さんの本に書いてあったエピソードがなぜか忘れられないんです。 ちなみに、答えは「…

CPSっぽいAjax

Ajaxでこんな感じのコードを書いた。 api.edit({ onSuccess: function(){ api.get({ onSuccess: function(){ // .... }, onFailure: fail_handle('取得失敗!') }) }, onFailure: fail_handle('送信失敗!')}); 後続の処理を渡すあたりがなんかCPSっぽい。じゃ…

バージョンのインクリメント

30分プログラム、その161。0.1.0のようなバージョン番号のインクリメント。バージョン番号を直接ソースコードに埋めこまず、外部のファイルで管理するようにしている。 2.0.1で、この外部ファイルに書かれたバージョン番号をインクリメントするスクリプトを…

m4を使ってみる

30分プログラム、その160。よく聞くm4を実際に使ってみる。 題材は、HTMLの生成。 Webアプリを使っているとデバッグ用のページとリリース用のページを分けたいことがある。例えば、デバッグ用のページはJavascriptファイルを個別に指定しているけど、リリー…

マルチスレッドで素数の計算

30分プログラム、その159。ひろ氏がお昼ご飯のときに、「マルチスレッドで素数の計算がしたい」というようなことを言っていたので、Erlangでやってみる。方法はフェルマーテスト(id:mzp:20071001:fermat)。あるスレッドが、ほかのスレッドの計算結果に影響を…

Nullオブジェクト

30分プログラム、その158。Nullオブジェクトを作る。RubyのNilClassは無関係で、デザインパターンのほうのNullオブジェクト。適当に要約すると、処理Aをするクラスと、処理Bをするクラスと、何もしないクラスを用意して、それぞれ状況に応じて別のクラスに渡…

ソートをいろいろ

30分プログラム、その157。インサーションソートのアルゴリズムを確認したくなったので、さくっと作ってみる。ただ、インサーションソートだけだと寂しかったので、マージソートをクイックソートをば。 使い方 *Main> isort [42,1,5,9] [1,5,9,42] *Main> ms…

python-modeメモ

python2.5.1で動作確認。python2.3.5だと動作しなかった。キーバンドはこんな感じ。 キーバインド 関数 C-M-x python-send-defun C-c C-c python-send-buffer C-c C-f python-describe-symbol C-c C-k python-mark-block C-c C-l .. C-c RET python-load-fil…

Pythonでキュー

30分プログラム、その156。Pythonでキューを作ろう。本当は、うまく動いてないEmacsのpython-modeをちゃんと動くようにしよう、というのが目的だった。でも、pythonがpython2.3へのシンボリックリンクだったのを、python2.5に貼るようにしたら、あっさり動い…

登録件数の確認用URL

各サービスの登録件数を確認するためのURL。スクラッピングの練習もかねてたので、APIを公開してても無視してる。 はてなブックマーク http://b.hatena.ne.jp/entry/http://example.com はてなRSS /http://r.hatena.ne.jp/feed/http://example.com はてなア…

scrAPIを試す。

30分プログラム、その155。Rubyのスクレイピングツールキット scrAPIを参考に、scrAPIを試す。最初は、URLを入力すると何人がLivedoor Readerとかで購読しているかを表示するWebサービスを作るつもりだったんだけど途中で面倒になった。なので、コマンドライ…