2009-01-01から1年間の記事一覧
goroutine は GOMAXPROCS >= 2 の場合は OS の thread も使って動くので、 そもそもgoroutineはスレッドじゃない。 そう、goroutineはスレッドじゃない。Big Sky :: 非同期UI この部分はちょっと誤解を招くかもなあと思いました。実際に複数の goroutine か…
Casual track に引き続いて、 Hacker track の 17日目も書きました。Sub::Pipe で UNIX pipe みたいな関数適用をする
JPerl Advent Calendar 2009 casual track の 14日目を書かせていただきました。 こちらからどうぞ パスワード保存のお供に Crypt::SaltedHash
かつて Windows server で動いていたらしい、とあるコンテンツを Linux + Apache の環境に載せてくれないか、というお話をいただきまして。何のことはない、静的コンテンツなのでファイル置くだけだろうと思ったら、なんと URL の大文字小文字が同一視される…
via #golang でマルチコアをつかいきれた人っているの? http://twitter.com/tokuhirom/status/6229784117 # 何か、以下のような意味じゃない気もするんだけどとりあえずお互いに無関係な (フィボナッチ数を求める) goroutine を 3つ走らせて、それに対して環…
同じ機能を両方で書いてみたらどんな感じになるかなと。 起動されたコマンド名から SHA1 or MD5 を求めるように切り替わる コマンドライン引数があれば引数のファイルについて、なければ標準入力からの入力について SHA1(MD5) hash を求めて表示 こんな仕様…
perl でいうと、Test::TCP::empty_port() が欲しかったのでちょっと書く。 import ( "net"; "fmt"; ) func empty_port() int { for port := 10000; port < 20000; port++ { addr := fmt.Sprintf("localhost:%d", port); l, err := net.Listen("tcp", addr); …
54行で分散KVSを実装する(レプリケーション機能付き)をみて、Go でとりあえず分散もレプリケーションもしないのを書いた。といっても rpc ライブラリは付いてきているので、それを使うだけ。http://golang.org/pkg/rpc/ サーバ側の保存は map[string] stri…
このあたり でベンチマークの結果が python に負けてるのもあってがっかり、みたいな話題に対して、id:tokuhirom さんが「チートぎみなのもあるからソースをよく読んで判断せよ」という話。http://d.hatena.ne.jp/tokuhirom/20091124/1259029688探してみたら…
http://d.hatena.ne.jp/tokuhirom/20090710/1247196134 この Coro の例を Go でやってみます。まず特定数 (ここでは 3) の worker thread を立ち上げておいて、そこにメッセージを送って仕事させるモデル。メッセージのやりとりに Coro::Channel を使います…
http://d.hatena.ne.jp/tokuhirom/20091117/1258418742 をみて。 Go に付いてくるテンプレートエンジンは json-template て奴でした。 記法は リファレンス にありますが、テストケース を眺めると雰囲気がつかみやすいかも。こんなコードを書いて package m…
8g とか 6l とかのコマンドが (分かりにくい|打ちづらい) ということに定評のある Go ですが、パッケージを作るような場合は Makefile をこんな風に書くと make 一発でことが済むので簡単です。via http://blog.yappo.jp/yappo/archives/000697.htmlでもちょ…
デフォルトで付いてくるパッケージで、httpd (アプリケーション) が簡単に作れます。import . "http" とすると、http. の前置なしで http パッケージの関数が使えるので、見た目も結構すっきり。 HandlerFunc(func(c *Conn, req *Request) { が繰り返される…
string を返す String() を実装した型のオブジェクト foo があったとして、 fmt.Printf("%s", foo); とすると foo.String() を評価してくれる。これが duck typing ってやつですね。特に何も宣言しないでも、とにかく String() が実装されていれば ok。inter…
go で関数の実行を並列化できる(非同期化が正しい?)。結果は channel というものを使って取り扱うのかな。このあたりは Erlang ぽい? あまり意味のない例だけど、sleep を並列にするとこんなかんじ。 [Wed Nov 11 20:29:29 2009] sleep 1 seconds [Wed Nov 1…
とりいそぎ FizzBuzz ってみる。 The Go Programming Language package main import "fmt" func main() { for i := 1; i <= 100; i++ { switch { case i % 15 == 0 : fmt.Printf("fizz buzz\n"); case i % 3 == 0 : fmt.Printf("fizz\n"); case i % 5 == 0 :…
【注意】2009年10月16日現在の情報です。 【追記】 初出時にあった configure.ac, Makefile の問題は修正されたため、記事内容も修正しました。mod_psgi を試してみたのでメモしておきます。 Ubuntu 9.04 x86_64 Apache/2.2.11 (Ubuntu) Perl v5.10.0 built …
対象は feed の entry を本文込みで保存した 100万行ほどのテーブル。PostgreSQL 8.3.7 on x86_64-pc-linux-gnu.まずは単純な方法。 SELECT * FROM entry ORDER BY random() LIMIT 1; 直感的 シンプル しかしシーケンシャルスキャンが起きる $ EXPLAIN ANALY…
「Perl で Salesforce」という題で発表させて頂きました。 かなり詰め込んだので駆け足になってしまった感がありますが、スライドは http://labs.topicmaker.com/~fujiwara/yapc2009/ に置いておきます。カーソルキーの左右で捲れます。(今見たら Safari / C…
Google のモバイル クロールでコンテンツがクロールされるようにするにはどうすればよいですか によると携帯向け Googlebot の IP アドレス帯域は 72.14.199.0/25 (72.14.199.0 - 72.14.199.127) 209.85.238.0/25 (209.85.238.0 - 209.85.238.127) だそうな…
タイトルがすべてですよ。 Debug mode ではログに query param が出力されるので、(ファイルアップロードじゃなく) 大きなデータを渡すと、一旦全部文字列にしてメモリに持つため予想以上にメモリを食って「どこでこんな使ってるんだ?」と悩んだお話。 1MB …
ちゃんと PREFERRED_PARSER を指定すること。 $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; なにかこう、2005年ぐらいにみた感じの話題で恐縮なのですが。XML::SAX をインストールしたら、いきなり XML::Simple を使ってたコードが Cannot decode strin…
pg_dump で (-t オプションなしで) 出力したファイルは、すべてのテーブルのデータが一緒になっているわけです。 が、バックアップが必要な時って「データベース全体を復旧したい」だけではなくて、「このテーブルのデータ間違って消しちゃった(updateしちゃ…
MinimalCGI だと $request->upload が CGI::Simple->upload の wrapper になっているので、他の interface みたいに HTTP::Engine::Request::Upload オブジェクトを返すようにしたかった。 まったく同じにはできなかったけど。 同じ name の input (type=fil…
http://github.com/fujiwara/p5-Data-Model/tree/masterData::Model を PostgreSQL でも使いたいので対応作業をやってみたら、テストまわりでいくつか困ったことが。 テーブル名 user は PostgreSQL では予約語のため、quote しないと使えない quote すれば…
Data::YUID::Generator が 32bit でも動くように Math::BigInt 使ってみた。ベンチマーク。new() が遅い。 # new->get_id Rate bigint original bigint 2635/s -- -95% original 51945/s 1872% -- # get_id Rate bigint original bigint 79591/s -- -70% ori…
何を言っているのか分からねーと思うが(ry Sub::Filter http://github.com/fujiwara/Sub-Filter/tree/master これを作って、さて CPAN に up しようかと思ったら dan さんが perl - id:sfujiwaraのFilter.pmをSub::Pipeに http://blog.livedoor.jp/dankogai/…
TT (Template-Toolkit) で値にフィルタを掛ける時に [% value | replace('x','y') | uri | html %]みたいに書きますが、Text::MicroTemplate だと仮に replace(), uri() という関数を用意しても こんな感じ。なんか読みにくい気がする。(まあ PHP だってそう…
最初に X あったものが 1年後に Y になるとしたらこの先どうなるか、が分かるウェブサービス このままのスピードで をリリースしました。インスパイア元はご存知のこちらです。 このままのスピードでエグザイルが増えていけば2040年に地球は滅亡する。 h…
PostgreSQL で簡易に MQ - Mi manca qualche giovedi`? を読んで、こりゃ素晴らしいと思ったので Perl モジュール化しました。 simple message queue using PostgreSQL. http://github.com/fujiwara/perl-queue-q4pg-lite/tree/master 割と簡易な Message Qu…