2007-10-01から1ヶ月間の記事一覧
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に関するメモ。主にJavascript関連。 shortcuts.jsを使う場合、デフォルトのkeydownよりもkeypressのほうがいい。keydownだとブラウザデフォルトの動作を殺せない"こと"がある Windows版のOperaでテキストエリアを編集すると、改行コードが"\r\n"になる
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'これはちょっと…
ここ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はソフィー・ジェル…
しばらく使ってないノートPC(PC-CB1-M5)にUbuntuを入れてみた。 重くて実用に耐えない。 ウインドウマネージャって変更すればいいのかな?
30分プログラム、その165。Python風getopt。 昔何かでPythonのgetoptは実に使いやすい、という記述を読んだ気がするので、Rubyに適当に移植してみる。どう使いやすいかというと、RubyのOptionParserは次のように書く。 require 'optparse' option = [] opt =…
30分プログラム、その164。grepの速度を測っていみる。 Rubyである文字列を含むファイルを検索する場合、自前で実装するのと、grepコマンド使うののどちらが速いか測定してみた。 検索するファイルの拡張子も指定したかったので、findとも組合せている。 使…
30分プログラム、その163。ファイルに特化したcat。 最近、複数のJavascriptを結合するのにcatを使ってる。(id:mzp:20071013:js) cat *.js > foo.jsただ、これだと結合したやつから元のファイルを得ることができなくて、たまに困る。そこで、結合時にファイ…
30分プログラム、その162。曰く7は孤独な数字。 理由は、 「1から10の数字を二組に分けて、両方ともグループの数字の積が一緒になる組み合わせはあるか?」という、某作家さんの本に書いてあったエピソードがなぜか忘れられないんです。 ちなみに、答えは「…
Ajaxでこんな感じのコードを書いた。 api.edit({ onSuccess: function(){ api.get({ onSuccess: function(){ // .... }, onFailure: fail_handle('取得失敗!') }) }, onFailure: fail_handle('送信失敗!')}); 後続の処理を渡すあたりがなんかCPSっぽい。じゃ…
30分プログラム、その161。0.1.0のようなバージョン番号のインクリメント。バージョン番号を直接ソースコードに埋めこまず、外部のファイルで管理するようにしている。 2.0.1で、この外部ファイルに書かれたバージョン番号をインクリメントするスクリプトを…
30分プログラム、その160。よく聞くm4を実際に使ってみる。 題材は、HTMLの生成。 Webアプリを使っているとデバッグ用のページとリリース用のページを分けたいことがある。例えば、デバッグ用のページはJavascriptファイルを個別に指定しているけど、リリー…
30分プログラム、その159。ひろ氏がお昼ご飯のときに、「マルチスレッドで素数の計算がしたい」というようなことを言っていたので、Erlangでやってみる。方法はフェルマーテスト(id:mzp:20071001:fermat)。あるスレッドが、ほかのスレッドの計算結果に影響を…
30分プログラム、その158。Nullオブジェクトを作る。RubyのNilClassは無関係で、デザインパターンのほうのNullオブジェクト。適当に要約すると、処理Aをするクラスと、処理Bをするクラスと、何もしないクラスを用意して、それぞれ状況に応じて別のクラスに渡…
30分プログラム、その157。インサーションソートのアルゴリズムを確認したくなったので、さくっと作ってみる。ただ、インサーションソートだけだと寂しかったので、マージソートをクイックソートをば。 使い方 *Main> isort [42,1,5,9] [1,5,9,42] *Main> ms…
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…
30分プログラム、その156。Pythonでキューを作ろう。本当は、うまく動いてないEmacsのpython-modeをちゃんと動くようにしよう、というのが目的だった。でも、pythonがpython2.3へのシンボリックリンクだったのを、python2.5に貼るようにしたら、あっさり動い…
各サービスの登録件数を確認するためのURL。スクラッピングの練習もかねてたので、APIを公開してても無視してる。 はてなブックマーク http://b.hatena.ne.jp/entry/http://example.com はてなRSS /http://r.hatena.ne.jp/feed/http://example.com はてなア…
30分プログラム、その155。Rubyのスクレイピングツールキット scrAPIを参考に、scrAPIを試す。最初は、URLを入力すると何人がLivedoor Readerとかで購読しているかを表示するWebサービスを作るつもりだったんだけど途中で面倒になった。なので、コマンドライ…
前々から、Javascriptコードにconsole.logを埋め込みっぱなしなことを気にはしていたのだけれど、とうとうid:mirakuiさんから指摘されてしまったので、ちゃんと対策する。実はjsjuicerを使うと、「;;;」で始まる行を削除できる。だから、こんな感じに書くこ…
30分プログラム、その154。Ruby用のWhich。requireしているファイルが、実際はどこに置いてあるかを調べてくれる。標準ライブラリの中を除いたり、Rubygemsで入れたライブラリを取り出したりするときに便利。久しぶりに、必要に迫られて作ったプログラム。 …
30分プログラム、その153。findコマンドを、ちゃんと調べてみよう。検索結果に対してコマンドを実行できる-execが素敵。 find . -name '*~' -exec rm {} \; とやると、カレントディレクトリ以下のバックアップファイルを削除できる。zshならrm **/*~でできる…
id:mirakuiさんの言っていたWindowsPowerShellを入れてみた。そして、次世代Windowsシェル「Windows PowerShell」を試す (1/3):特集:Windows PowerShellレビュー(前編) - @ITを読んでみた。これはおもしろい。 Windowsで alias | select name, definiti…
xcopyを使って、ファイルをまとめてコピーするバッチファイルが書きたい。 でも、xcopyでフォルダをコピーしようとすると、コピー先がファイルかフォルダかを聞かれちゃう!
30分プログラム、その152。ディレクトリ比較プログラム。 今日の仕事中に、バックアップしたコードと最新のコードを比較して、変更されたファイルを知りたいときに $ for i in */*.java do; cmp $i ../backup/$i doneと書いたときに思いついた。昔書いたこと…
30分プログラム、その151。倍数になる13進数。 ここにある正の整数xがあります。xは2桁以上です。この数字の並びが13進法表記であるとみなすと、10進法表記であると見なした場合の倍数になります。この条件を満たす最も小さいxを求めるプログラムを書いてく…
30分プログラム、その150。n日後を返す関数を返す関数。 整数nを渡すと「日時のデータを受け取って、n日後の日時を返す関数」を返す関数を作ってください。 関数を返す関数が作れない場合は、関数の代わりになるようなオブジェクトでも構いません。 Pythonの…