programmingの最近のブログ記事

メールを送ると twitter に更新するスクリプトを作ってみた。キモの部分はこれだけ。方々のドキュメントを見たりしてちょっと時間が掛かった。

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->credentials( 'twitter.com:80',
                  'Twitter API',
                  'UserName',
                  'PassWord' );
$ua->post( 'http://twitter.com/statuses/update.json',
           [ status => 'utf-8 encoded Status' ] );

この前には ISO-2022-JP から UTF-8 に変換したり、改行を空白に変換したりする処理があったり、この後にはファイルにログを落とす処理があったりします。また後ほど晒してみましょうか。

Basic 認証は credenatial というのを使えばできるようです。

弾さんの「JavaScriptでありがちな9つのシマッタ」を読んで。

「1. 尻カンマ注意」は良くやってしまいます。そんなある時に

var theObj = {
   dummy: null
}

というテンプレを作っておいて、その上にガシガシコードを書いていけば尻カンマにはまることもないんじゃないか、と思いつきました。いまもそうしてますが、結局のところ長い関数を書き終わった後にセミコロンで締めちゃったりして、orz となってしまうこともしばしばだったりします。

次の「2. 浮気なthisは何を見てるやら」も良くやってしまいますが、もう今日日、代入でイベントハンドラを設定するコードは自分では書かないのが主流ではないでしょうか。YUI のYAHOO.util.Event.addListener だと、リスナー関数の this に任意のオブジェクトを束縛できるので便利ですし、prototype .js 1.6.0 は Release Candidate が発表されてるみたいですが、Event.observe は自動的にイベントのターゲットエレメントがリスナー関数ないの this に束縛されるようになるみたいです。 といううことでイベントハンドラの登録はライブラリを使いましょう。そうすれば this の浮気性も少しはマシになるのかも。

個人的にハマった経験があるのはこの 2 つ。

昨日作ったはてなースターマップですがスライダーを付けて、マーカーをぐりぐり回せるようにしてみました。

実は、平面近似で計算している、つまり、スライダーが示す角度にたいして Δx, Δy を cos, sin で求めているため、マーカーは真円を描かず誤差がでています。後、本当は 0 度の時には真東を向いて、NASA の管制室の地図に表示されているスペースシャトルの軌道のように S 字曲線で チリ方面へマーカーが伸びて欲しいのですけど、やり方がよく分かりません。今のところ平面近似で問題ない感じですが、またそのうち考えます。

あとスライダーの画像ですが、つまみの画像はスクリプト一緒に YUI から取ってきたのですけど、スライダーのレールの部分の画像をうまく用意することが出来ませんでした。どこかにスライダー画像ジェネレータみたいなのないですかねぇ。

実際に並べたわけじゃなくて、長さを計算してみただけですが。

すごい勢いで増えていってるはてなスター。そのスターを全部並べたらどれだけの長さなのか?という疑問に答えるべくこんなページを作ってみました。はてなスターのアイコンサイズは 11ピクセル、距離への変換は 96 dpi で計算しています。dpi は変更することはできます。

GoogleMap はマーカをドラッグして汎用的に 2 地点間の距離が分かるようになってます。

ある地点から一定の距離にある地点の緯度と経度を計算する方法はこのページを参考にしてみました。

SyntaxHighlighterはてなスター を導入してみました。

はてなスターの導入は以下の 4 行を ヘッダに追加しただけ:
   
   

3 行目はブログのスタイルに合わせて、タイトルが含まれるタグとクラス名を指定すればいいみたい。ただし、そのタグの中にタイトルへのリンクが含まれていることが必要なようです。

SyntaxHighlighter の方はダウンロードしたものに付いてきたサンプルの通りにすれば特に何も難しいことはなく、上のはてなスター導入の為の HTML もキレイな見栄えになってます。

ついでに、はてなスターを全部一列に並べた長さを測れるようにしてみました

The Programming Language CYahoo!がPHPエンジニアを雇う時に聞く質問」という非常に興味深いエントリを見つけました。

僕は、ちょっと難しい、と思ってしまったのは、ここだけの話にしておいて。PHP や Perl などの LL が主流になってきている、このご時世に

「文字列(バイト列)の順序を反転する関数 reverse を実装しなさい」

という質問はどうだろう。

言語は C がベストだけど他のでも良し。K&R に載っていそうな問題(手元にないので確認できない)ですが、インタビューの質問には向いていそうな気がします。 I/F をどうするか、エラー処理はできているか、メモリの使い方に無駄はないか?などなど見所はあると思います。

リンク先の質問のように特定の言語に対する知識を問う質問ではないので、ちょっと質問のジャンルが異なりますが、String#reverse や Array#reverse が組み込み関数として実装されている言語に慣れている人にとっては、問題の本質をとらえる力と考え方を問われる、そこそこ骨の折れる質問になるのではないかと思います。

訳あって /dev/null の実装を調べてみた。なにはなくともまず ls

%ls -l /dev/null
crw-rw-rw-  1 root  wheel    2,   2 Mar 27 22:38 /dev/null

属性の 1 文字目が c であることから /dev/null はキャラクタデバイスということがわかります。では、はたしてその実装は? ソースは sys/i386/i386/mem.c にあります。どうやってこのファイルを見つけたかは忘れました。"/dev/null implementation" とかでググって、いろいろ見てたらどうやら mem.c というファイルにあるっぽいということで、find したんだっけかな。

この前の続きです。

unsigned short htons( unsigned short ); の実体はそれぞれ微妙に異なるが、短いものでは以下のようなアセンブリ。

ENTRY(htons)
	movzwl	4(%esp),%eax
	xchgb	%al,%ah
	ret

とか

ENTRY(htons)
	movzwl	4(%esp),%eax
	rorw	$8,%ax
	ret

わずか 3 命令。 movzwl は引数処理だから実質 xchgb や rorw を使って一発!引数以外にスタックを使わないので、ベースレジスタを弄りもしない、潔さ。xchgb のところでブレークさせたときにバックトレースがどうなるのか、気になるところではあるけれど。 xchg とかいう命令があるとは知らなかった。

これを C で書くとどうなるのか、OS がアセンブラで提供するほど非効率なものができあがるのか。

C で書いたもの:

unsigned short myhtons( unsigned short s ){
   return (s >> 8) | (s << 8);
}

を以下のように gcc でコンパイルしてアセンブリを生成し、上のアセンブリと比べてみる。

gcc -o myhtons.s -O1 -S myhtons.c

2 つのマシンでやってみた。その結果:

2 オクテットのデータのバイトオーダーをビッグエンディアンに変更する htons という関数がありますが、 x86 系の CPU で動いているマシンなら htons の動きはバイトスワップになります。

で、この関数の実装を見てみると FreeBSDOpenBSDglibc-2.1.1のいずれもアセンブリで実装されていることが分かります。リンク先はいずれも x86 系ですが、他の CPU での実装も見た限りではアセンブリになっているようです。

続きは後で書く。

(2007.04.10 追記) 続きを書いた。

JavaScript で配列をループで回すときに継続判定の条件に Array.length を使うのってどうなんだろう?というブログの記事を読みました。要約すると

var arr = [1,2,3,4,5];
for( var i = 0; i < arr.length; i++ ){
  alert( arr[i] );
}

とした場合、ループごとに length が評価されてしまうため、特に巨大な DOM ツリーなんかをループしているときは、ループ全体の処理時間が大きくなってしまいます。だから、

var arr = [1,2,0,4,5];
for(var i = 0; arr[i] !== undefined; i++ ){
  alert( arr[i] );
}

としたらどうでしょうか?という話題です。リンク先の記事では「なにか見逃しているところがあって、この方法にも短所があるんではないか?」と書かれていますが、どうなんでしょう。自分で評価してないのにいうのもなんですが、僕にはいい方法に思えます。

1 2 3 4 5 6

最近の画像

Zero History - ギブスンの新作が 9 月に発売 -
虐殺器官
ドミニオンのランダマイザアプリ、dominion minion が日本語対応!
ハイペリオンの没落 ~ 完結...でもまだ続く~
ハイペリオンの没落 ~ 完結...でもまだ続く~
ハイペリオン - 長大な叙事詩 SF のスタート -
ハイペリオン - 長大な叙事詩 SF のスタート -
「都市と星」 - 10億年と言われてもよく分からない -
「星を継ぐもの」 - 良い Sci-Fi -
トールサイズのニューロマンサーを買った
虎よ、虎よ! - 主人公フォイルの執念の物語 -

私の本棚

 

自転車走行距離

自転車走行距離

Flickr Photos

FlickrPhotos

なかのひと

Y!ログール

このサイトについて

2015年2月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

アーカイブ

My Update

  • Loading...

その他

あわせて読みたいブログパーツ