サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
ysano2005.hatenadiary.org
動機 SimpleTestの次期バージョン1.1でファイルアップロードのテストができるようになることを知りました。しかし、待ちきれませんでした。調査してみる価値はあると思い、ちょっと頑張ってみることにしました。 メーリングリストの調査 SimpleTestの開発元のメーリングリストに対して「file upload」というキーワードで検索すると、ファイルアップロードのテストに関する議論のやり取りをしているメールが見つかりました。その中でも、特に注目すべきメールはこれです。実装例が示されています。このメールを参考にして、サンプルコードを書いてみようと思ったのでした。 CVSからのチェックアウト そこで、SimpleTestの最新のCVSリポジトリからソースをチェックアウトしてみました。何の問題もなくチェックアウトできました。「VERSION」ファイルを見ると1.0.1betaであることがわかり
はじめに 今から約 1 ヶ月前、GNU Emacs のコードリーディングをはじめました。祝日などの時間を使って少しずつ GNU Emacs の解析を進めました。今日、ようやくコードリーディングを開始した時に立てた目標が達成できたので、このエントリーを書くことにしました。 GNU Emacs のコードリーディングをはじめた当初の目標は、GNU Emacs に内蔵された 「Lisp インタプリタ」をどうにかショートカットして「C インタフェース」から直接操作することでした。 では、なぜそのような目標を設定したのか少し説明します。 GNU Emacs は、Lisp システムと密に連携してエディタの機能を統合しています。GNU Emacs の世界は Lisp システムによって支配されていると言えます。したがって、GNU Emacs の仕組みを理解するには GNU Emacs に内蔵された Lisp
Mac OS X で Carbon Emacs を自力でビルドできるかどうか試してみたところ、あっさりできました。 なぜ、Carbon Emacs を自力でビルドしたくなったのかと言うと、梅田望夫さんの例の本を読んで、Richard Stallman によって書かれた Emacs のコードを趣味で読んでみたくなったからです。 それで、コードを読むからには、まずは自力でビルドできないといけないかなと思いました。 ビルドログ 備忘録のためにビルドの際の作業ログを残しておきます。 % uname -rs Darwin 8.10.1 % cd ~/src % wget http://ftp.gnu.org/gnu/emacs/emacs-22.1.tar.gz % tar zxvf emacs-22.1.tar.gz % cd emacs-22.1 % ./configure --enable-c
SimpleTestのSimpleBrowserのサンプルを読んでいると、SimpleBrowserも結局はWWW::Mechanizeとやろうとしていることはほとんど同じ?と思いました。そこでSimpleBrowserを使ってGoogleから「php」で検索して、その結果のページのタイトルを取ってくるという簡単なサンプルを作ってみました。同様にPerlでもWWW::Mechanizeを使って実装してみました。両方ともほとんど同じような感じで作れることがわかりました。 SimpleBrowser 以下がSimpleBrowserで実装したバージョンです。 <?php require_once('simpletest/browser.php'); $browser = &new SimpleBrowser(); $browser->addHeader('User-Agent: Mozilla
知性なき「はてな」−本の読めない技術者・伊藤直也 (セックスなんてくそくらえ) 久しぶり「カチン」ときた。これはスルーすべきじゃないと思った。僕は、日本語が得意じゃないから、誤解やうまく表現できないこともあると思うけど、ちょっと思ったことを書いてみようと思う。発散していて読みにくいかもしれないけど、ごめんなさい。 まず、伊藤直也さんの本棚を単にブログのエントリーで見ただけで、伊藤直也さんが本が読めない(読まない)技術者って決めつけるなんて単細胞すぎない?頭が硬すぎる。というか、ネットとかの媒体を通してしか、はてなや伊藤直也さんを見ていないのに、はてなや彼の何がわかるのか。 確かに、ブログで紹介されていた伊藤直也さんの本棚をパッと見ただけでは、noon75さんがそういう印象を持つ気持ちはわからないでもない。noon75さんは、はてなや伊藤直也さんを、ブラウザを通して見えるテキストとか画像から
検索する際に,"hlsearch" オプションを有効にして,検索語をハイライトし,視認性を高める."*" コマンドでカーソル位置の単語をサクッと検索する. Peace Pipe: 効率的なテキスト編集の7つの習慣 確かに「*」キーでハイライト検索するとサクッと検索できて便利です。しかし、Vimのデフォルトの設定では、ヒットした文字列が複数ある場合、カーソルが次の候補に移動してしまい、ちょっとビックリします。カーソルは次の候補に移動しないで単に、現在のカーソルにあるキーワードをハイライトしてくれるだけで十分です。 .vimrcに以下の設定を書いておけば、勝手に次の候補にカーソルが移動しなくなります。 % vim ~/.vimrc [...] nmap * *N 仕掛けは簡単で、「*」キーで次の候補に移動してしまったカーソルを「N」コマンドで強制的に戻しているだけです。
ctagsとvimを連携させて使うと、C言語などのプログラムをコーディング中に、関数など定義位置に簡単にジャンプできて便利です。デフォルトのvimの設定では、"Ctrl + ]"で関数などの定義位置に移動し、"Ctrl + t"で元の位置に戻れます。 GNU Screenで新しいウインドウを開いたりする時に使うprefixキーは、デフォルトではCtrl + aです。しかし、それをカスタマイズしてCtrl + tに変更している方も多いはずです。僕もCtrl + tに変更しています。(zshではCtrl + aを押した時に、カーソルが先頭に行くのですが、そのキーバインドとGNU Screenのprefixキーがかぶらないないようにするために、変更しています。) ここで少し困ったことが起きます。prefixキーをCtrl + tに変更したGNU Screenとvimを一緒に使うと、vimでタグジ
はじめに 仮想マシンが導入されたRubyの動作を理解するには、仮想マシン内のスタックの状態変化を頭の中でイメージできるようになることが重要です。そこで今回は、仮想マシン内のスタックの状態変化を追いやすくする小さなツールを作り、そのツールをGDBと組み合わせて使うことで、仮想マシン内のスタックの状態変化を観察できるようにする方法を紹介します。なお、使用するソースコードはr11701です。 ツールの作成 仮想マシン内のスタックの状態変化を追いやすくするために、以下の機能をrubyに追加します。 breakpoint: RubyプログラムからSIGTRAPを発生させる dump_stack: スレッドに関連づけられているスタックの中身をinspectした状態でダンプする 前者を実装すると、GDB上でRubyプログラムを実行し、「breakpoint」と書かれた所が実行された時に、制御がGDBに移
はじめに YARVコアの入ったrubyでは、YARVの命令列のシリアライズ機構を用いることでRubyプログラムを簡単に難読化できます。今回は、hello worldなRubyプログラムを難読化してみます。なお、今回の説明ではリビジョン11607を使い、YARVコアの入ったrubyがビルドした状態を前提にしています。また、YARV Maniacs 【第 8 回】 命令列のシリアライズを予め読んでおくと、良いと思います。 難読化ツールの利用 tool/compile.rbを使うと簡単にRubyプログラムの難読化ができます。ここでは、hello worldなRubyプログラムを難読化してみます。-oオプションで難読化処理されたRubyプログラムのファイル名を指定します。このオプションが無いと、デフォルトでは「a.rb」というファイルが生成されます。 % cat hello.rb puts "he
Rubyの中をHackして、アスペクト指向プログラミング(AOP)をネーティブに対応させてみました。実は去年の9月くらいから今までの4ヶ月間、これをずっとをやってました。(開発の途中でも、ブログでアウトプットすれば良かったのですが、中々見せられるような状態に持っていくのが大変だったので。) 別にAOPに凄いこだわりがあるわけでは無いです。Rubyの中がどのように動作しているのかを理解したくて、色々さわっていたらその延長線上にたまたまAOPがあったというだけです。 ここで、今回、言語処理系のように低いレイヤーの技術になぜ時間を投資してきたか、ちょっと書いておきます。ここ2年くらい、割と上位レイヤーの技術に関心があって(といか下位レイヤーは難しすぎた)、上位レイヤーの方ばかりさわってきました。例えば、Webアプリケーションの開発なんかです。しかし、1年くらい前から、上位レイヤーだけさわれても、
この前のDeveloper Enviroments Conferenceでid:secondlifeさんが発表された資料を見て、 キーリピート加速ツール「kbdacc」 GNU Screenのステータスラインのタイトルを、VimのBufEnterフックで現在編集しているバッファ名に のtipsを普段使うようになりました。 ちなみに、WindowsでLinuxの開発マシンにリモートログインして作業する時は PuTTY kbdacc GNU Screen zsh Vim を主に使っています。 特に2つ目のkbdaccは本当に便利です。PuTTYのターミナル画面の描画処理の軽さに加えて、kbdaccでキーリピートを加速させることで、Vim利用時のhjklキーでのカーソル移動が非常に軽快になります。 あとGNU Screenには画面分割を縦に分割するパッチを当てています。これもなかなか便利です。た
コードを書いていると、以前のコードと現在のコードとのdiffを取りたいことがよくあります。 でも、diffの結果はちょっと読みにくい。もしdiffの結果が色付けされていたら、もっと読みやすいじゃないかと、今日ふと思いました。 そこで、zshのグローバルエイリアスを使って、diffの結果をvimで色付けして表示するようにしてみました。(.vimrcには「syntax on」と書いておきます。) % vim ~/.zshrc [...] # View command results(stdout) by vim export VIM_TMP=/tmp/vim.tmp alias -g V="> $VIM_TMP$$; vim $VIM_TMP$$"仕組みは簡単で、一時ファイルにコマンドの実行結果を保存して、vimでその一時ファイルを開いているだけです。一時ファイルを作っている所が、ちょっとダサ
今日, GNU Screenのセッションのレジュームをしようとした時にzshの有難さを再認識しました. zshとGNU Screenを一緒に使われている方は, 今回紹介するtipはすでにご存知かもしれません. 今まで, GNU Screenのセッションをレジュームしたい時には, 以下のようなコマンドを打って, セッションの一覧を表示させ, -rオプションにセッションのPIDを手入力していました. ずっと前に, はてなのid:aqlさんがMac Bookを操られている所を拝見させて頂いた時も, 同じようにPIDを手入力されていたので, これが一般的なやり方なんだとずっと思い込んでいました. でも, いちいちセッションのPIDを手入力しなければならないことに, 今まで不満を持ち続けていました. % screen -r There are several suitable screens on:
提供が開始された はてなブックマークカウンターをネタにして、久しぶりにGreasemonkeyスクリプトを作ってみました。これから、はてなブックマークカウンターを設置するブログサイトが増えると思いますが、それまで待てないので、今見ているサイトのページの最後に はてなブックマークカウンターを自動的に設置するようにしてみました。(変な動機...) 使い方 サイトのページの最後に表示される「Get ?B Count」のリンク上でマウスをフローティングさせます はてなブックマークカウンターが表示されます(この時はじめて はてなとの通信が発生します) 表示された はてなブックマークカウンターをクリックするとエントリー一覧のページに移動します ダウンロード http://vaio.redirectme.net/lib/greasemonkey/get.hatena.bookmark.counter.0
ビデオ出演: Microsoft の MSDN channel 9 普段、Webアプリケーションのような高レイヤーでPerlとかRubyとかJavaScriptとかばっかりさわっている技術者は、是非このインタビューを観ることをお勧めします。というのも、今、低レイヤーの技術の重要性を再認識する絶好の機会だと思うからです。 以下、ちょっとした感想です。 このインタビューで、もっと低レイヤーの技術に注目するべきという、登さんの主張には非常に共感しました。低レイヤーの技術がさわれる技術者が日本からもっと出てきてほしいですね。僕も低レイヤーの技術をさわれるようになれるよう頑張りたいと思います。 あと、インタビューの最後の方で、Win32 APIのリファレンス本を通学中に1ページ目から順に見て、覚えていったという話も印象に残っています。このエピソードから、「プログラミングに必要となる知識を、徹底的に頭
DECONで高林さんが紹介された「Binary Hacks in Action」のスライドを見ていて、「WEBRickをGDBでいじる」という所がとても興味深く感じました。本当にそんなことができるのか?と一瞬思いました。そこで、ちょっと試してみました。最初はうまくいかなかったのですが、最終的にWEBRickをGDBから本当に操作できることを確認しました。うまくいかなかった原因は、パッケージからRubyをインストールいたためのようです。(GDBが理解できるデバッグ情報が、パッケージからインストールしRubyには入っていなかったのが原因だと考えられます。) ソースからビルドしてインストールしたRubyでは、期待通りの結果が得られました。 準備 パッケージからインストールしたRubyでは、WEBRickをGDBからうまくいじれなかったので、ソースからRubyをインストールしておきます。confi
AJAJAのsvnリポジトリに面白いコードが追加されました。pmconnectという新しいモジュールです。 http://ajaja.alphageek.jp/trac/changeset/32 これは、PerlモジュールをAJAJAから利用できるようにする試みのようです。面白いですね。Linuxの環境が手元にないので、まだ試していませんが、CPANモジュールなんかも普通に動作するんじゃないかと期待しています。 ちなみに、pmconnectのC言語に関するソースコードの量は以下の通りです。 % cd src/ajaja/pmconnect % find . -type f | grep -v svn | egrep "\.(c|h)$" | xargs wc -l | sort 18 ./utfutil.h 27 ./utfconv.h 30 ./pmconnect_impl.h 39 .
大よそ、C言語でのAJAJAのモジュールの書き方がわかってきたので、例題としてmemcachedをAJAJAで使えるようにしてみました。(何でこのタイミングでmemcachedのバインディングを書いたのか?と聞かれると困ります(汗。単に興味があったからやってみただけですw。) memcachedとは、簡単に言うとメモリーキャッシュサーバのことで、LiveJournalやmixiや はてななどの大規模システムで利用されているツールです。 memcachedのC言語のバイディングAPIを提供しているlibmemcacheを使って、memcachedの機能の一部を利用できるようにしました。昨日はじめてmemcachedをインストールして触りだしたので、機能的にはまだまだしょぼいですが、一応動きます。 クライアントでの利用例 現段階で、以下のようなコードが動作します。keyとvalueのペアをme
AJAJA: Asynchronous JavaScript and JavaScript/ASP AJAJA は「ブラウザだけでなくサーバサイドでも JavaScript を使おう!」というプロジェクトです。 できること - JavaScript を埋め込んだ ASP ファイルを処理する - JavaScript から SQLite などのシステムライブラリを呼び出す - JSAN のライブラリをサーバサイドで利用する - Server Side JavaScript の実行処理系 asp_js を提供しています asp_js の特徴 - IIS の ASP/JavaScirpt の記法をそのまま処理することができます - Mozilla の C の JavaScript 処理系 SpiderMonkey を組み込んでいます - SQLite を標準サポート、拡張も容易です AJAJA
ついに、Intel MacでHaskellプログラミングができる環境が手に入りました。 今まで、GHCが正式にIntel Macに対応していないこともあって、MacBook ProでHaskellプログラミングを楽しむのを諦めていました。一応、Dan Kogaiさんのblogで説明されていた、GHCをIntel Macで動作させるトリックを以前試してみたのですが、なぜか僕の環境ではうまくいきませんでした。 404 Blog Not Found:haskell - GHC on Intel Mac それで、あれから進展がないかどうか調べていると、良いものが見つかりました。 X86OSXGhc - GHC - Trac このページにあるAudreyTangさんによる改良版GHCをインストールすると、Intel Macで無事にGHCが使えるようになりました! 以下のコマンドで一瞬でインストールで
RailsをベースにしたアプリケーションをWindowsで開発していて、いつも不便に感じていたことがあります。それは、Railsのテストサーバを起動したりジェネレータを実行したりする度に、コマンドプロンプトを立ち上げてはcdコマンドでアプリがあるディレクトリに移動しなければならない手間です。 Railsを使った開発と言えば、大抵 Railsのテストサーバの立ち上げ ジェネレータなどを使うためのコマンドプロンプトの立ち上げ をはじめにすると思います。 LinuxやMac OS Xだと、これらの立ち上げ作業はスムーズにできるのですが、Windowsではコマンドプロンプトが使いにくいせいか、なかなか時間がかかってイライラします。 それで、これらの立ち上げ作業が、ダブルクリック1つでできれば、便利だろうなぁと思って、スクリプトを組んでみました。スクリプトは、Windows Script Hostで
ついに公開されました。 早速試してみました。FirefoxでGoogle Notebookのページを見に行ってログインすると、Firefoxのエクステンションをダウンロードするページが表示されました。Mac OS Xでは動かないかもしれないという注意書きがありましたが、インストールできました。一応、動作しています。 使用感はGoodです。任意のページで自分のメモを簡単に残せるので、サイトに載っていた興味深い情報をクリップするのに便利そうです。 メモに残すテキストは、自分で入力しなくても済むようにもできています。以下のように操作すれば、簡単にメモをスクラップできます。(ドラッグした中に画像があれば、その画像もクリップされます。凄い!) サイト中にある気になるテキストをドラッグして選択 右クリック(Mac OS Xはマウスのボタンを長押し) 表示されたメニューの「Note this (Goog
naoyaさんとmiyagawaさんが面白い議論をされていたので、僕もちょっと考えてみました。 バックエンドアプリケーションの API インタフェースを規定するフロントエンド特化型アプリケーション API, UI as Commons お二人の議論を参考に図にしてみると、こんな感じになるのかなと思いました。 こうして図にしてみると、以下のようなアイデアが出てきました。 データソースは、RSSやAtomフィードよりも知的な感じがする(ロジックが組み込まれるため) ユーザーが定義したデータソースもfeed的に扱って、データソースのランキングができると面白いかも (データソースはURIで一意に選択できるため、データソースをfeed的に扱うことは可能だと思います) 異なるドメインに配置されたデータソースにアクセスするためのGatewayをLivedoorで用意しなければならない (XMLHttpR
MacBook Proを買った初日にsvkがインストールできるかどうか試してみたら、DarwinPortsからあっさりインストールできました。 今までsvnを使っていましたが、svkに乗り換えた方が良さそうです。 svkを使っていて便利だなと思ったことは、以下の通りです。 インターネットに接続していない環境でもバージョン管理できる。かなり便利。 grepが使いやすくなった。 % grep -rn "foo" . | grep -v svn とかやらなくて済む。 svnよりコマンドが高機能。 % svk desc r123 でリビジョン123の差分をコミット時のコメント付きで見られる。 svk addが賢い。 svk descのトリックはSix Apartの宮川さんにこの前コメントで教えて頂きました。ありがとうございました。もっと早くsvkを試しておけば良かったのですが、Linuxでうまくイ
シェルで打った直前のコマンドをクリップボードにショートカットでコピーとかできたら作業メモとかとるのにえらいベンリだと思った。.zsh-hitory をうまく使ってとかでも。誰か作ってそう。 naoyaの日記より このネタで、初めてのzshカスタマイズプログラミングをしてみました。案外簡単にできてしまいました。 クリップボードへのコピーにpbcopyを使っているのですが、これは多分Mac OS Xにしかないと思います。ですので、このカスタマイズはMac OS X限定です。Linuxでも同等の機能を持ったコマンドがあれば、少しの改造で動くようになるはずです。 .zshrcに以下のコードを貼付けておけば、naoyaさんのご要望通り動くはずです。コードはちょっとダサイですが、動きます、、。Ctrl + kでクリップボードに直前にうったコマンドが入ります。キーバインドは好みに応じて変更して下さい。
QuickCheckは想像以上にパワフルなツールだ。単にテストをしてくれるだけのツールじゃない。 以下の文書を読むと、QuickCheckの意外な使い方が書いてあった。Haskell以外のプログラマーも目を通すことをおすすめする。 QuickCheck as a test set generator この文書で説明されている例は凄い。あるパーサに入力するためのテキスト(ある言語のステートメントの列)を自動生成させるために、QuickCheckを使っている。この例の場合は、まずプログラマがターゲットの言語の文法の仕様を定義しておいて、後はQuickCheckが膨大な組み合わせのステートメントを自動生成してくれている。パーサの動作チェックをするために、膨大なステートメントの組み合わせを考えながら、パーサに入力するテキストを人間が作っていたのではしんどすぎる。だから、網羅的なテストを楽に行うには
Haskellの勉強をしている方へ。 Haskellの基本文法をマスターしてから、Pugsのような難しいコードを読めば良いということはないと思う。 何となくHaskellの雰囲気がわかった時点で、難しいコードを読み始めるのをお勧めする。 その方が絶対勉強になるし、上達のスピードを加速させられる。 入門レベルのコードをいくら読み続けても、当然それ以上のレベルには行けない。 難しいコードでも局所的に見れば、基本の塊。 だから、もし今読んでいるコードで文法的にわからなければ、Haskellの文法が説明されているドキュメントを読めば良い。それで良いと思う。 でも難しいコードを単に読めば良いというわけじゃない。 常に具体的な目標を持ってコードを読むように心がけるべき。 目標が大きすぎれば、その目標をブレークダウンして小目標にすれば良い。 お手本になるコードが見つからないという方は、とりあえずPugs
Readerモナドで定義されているlocal関数とasks関数の実験をしてみた。 local関数とasks関数を使うと、環境(データを記憶する領域のようなもの)を局所的に操作できることがわかった。 これらの関数をうまく利用すれば、プログラミング言語でおなじみの「スコープ」の概念を綺麗に表現できるようになると思われる。 Haskellでインタプリタを実装したい開発者にとっては嬉しい話に違いない。 コードは以下の通り。ReaderTでReaderモナドとIOモナドをレイヤー化している(多分)。こうしておけば、liftIO関数とputStr関数を組み合わせて、IOも同時にできてしまうようだ。(実はまだあんまりよくわかっていない) つまり、昔ながらのprintデバッグが可能になる。 % vim reader.hs import Control.Monad.Reader data Env = Env
最近、Pugsの初期のコードをよく読んでいる。コードを読んでいると、現在読んでいるコードとそれ以前のコードを比較したくなる時がある。そんな時は、Subversionのリポジトリからチェックアウトしてできたワーキングディレクトリで以下のようなコマンドを実行してやれば良い。これでリビジョン4とリビジョン5の差分が見られる。 % svn diff -r 4:5 Index: Lexer.hs =================================================================== --- Lexer.hs (revision 4) +++ Lexer.hs (revision 5) @@ -140,9 +140,9 @@ } <?> "literal string") -singleStrChar = quotedQuote <|> noneOf "
次のページ
このページを最初にブックマークしてみませんか?
『Accept Things』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く