コンピュータやソフトウェアのあれこれ@道民(&元道民)
Archive for 8月, 2010
[Perl][Ruby]真夏の勉強会ラッシュ前半
8月 9th
今年にはいってから結構な量の勉強会に参加させていただいてて、そのたびに何かアウトプットしなきゃと思ってるんだけど全然書けてなくてすいません。
8月は勉強会ラッシュです。書かないよりマシ程度に書いておきます。
Ruby勉強会@札幌-15
- collect vs mapはmap派が多い模様
- cloneとdupって違うんだ
- メタプログラミング入門 http://www.ustream.tv/recorded/5069318
- Redisを使ったメッセージキュー http://github.com/defunkt/resque
Hokkaido.pm #1
懇親会で聞いた話
- PostgreSQLの拡張は外のモノ(ライブラリとか)を使うのにはいいけど、ストレージにアクセスしたりはMySQLの方が簡単らしい
- RoleとTraitについてもっと学びたい
- 「モダンPerl入門」を買いましょう
- 何だかんだでC++は人気
- 「プログラミングの魔導書」も
なにげにどちらの勉強会も参加者のレベルが高くておどろきました。
Sapporo.jsに行った
8月 8th
Sapporo.jsに行った
おもしろかったです.主催の人が読んで進める形だったけど,主催の人が大変だったら,回し読みしてもいいかなと思いました. 途中でfirebugとかで検証しながら進めるのはいいですねー
ちゃんとしたレポートは誰かが書くと思うので,読み合わせの途中に出た話題についてメモを残しておきます.
1 良いパーツ
1.1 なぜJavaScriptなのか
- 作者どんだけDOM嫌いなんだよ
- DOMってそんなに悪かったでしたっけ?
- そうでもないような…
1.2 JavaScriptを解析する
- 昔VBScriptってあったよね
- 原著だとクラス型の言語はclassical languageになっている
- レキシカルなスコープを持つファーストクラスオブジェクト?
- レキシカルな
- 書いてあるだけの部分で作用する.
グローバルダイナミックの反対? - ファーストクラスオブジェクト
- 変数に何でも突っこめて,そのままそのものとして使える
1.3 プログラムをテストする簡単な方法
2 文法
- ホワイトスペース = 空白だけじゃなくて,タブとかも含まれているよ
2.1 ホワイトペース
- (鉄道ダイアログを見て)この図読めないと,この先つらいの?
- 全然そんなことないよ!
- コメントアウトする時は毎行//で囲まないといけないの?
- この本ではそうなっていますよねー.
- お使いのIDEやエディタのお力を借りてコメントアウトしましょう
2.2 名前
- 予約語は使ったらどうなるの?
- 種々の環境によって変わるみたい??よくわからないなー??
- 色々でわかりにくいので使わないようにしましょう
2.3 数値
- NaNになるのはどんな場合?
- Infinity/Infinity とか Infinity/0 とか 0/0 とか 'a'/2 とか
2.4 文字
- = 2つと = 3つはどう違うの?
- = 2つだと型変換して比較する.= 3つだと型変換しないで比較する.
2.5 命令文
- try節あるの?
- あるよー
- truthy とか falsy とかなんなの
- これ英英辞典にもないわ.きっとうまく訳せなかったんだろうなー
- break ラベル名 って書くと,ラベルの部分まで飛べるのは初めて知った
2.6 式
- & はないの?
- あるけど「悪いパーツ」なので使わないことになっている
2.7 リテラル
- ポインタしかねぇw
2.8 関数
- こいつもポインタしかねぇw
札幌アサラト友の会、第一回目終了
8月 7th
今春、東京出張していたときに出会った、西アフリカの楽器「アサラト」。
札幌に帰ってきても、一緒に振れる仲間がいるか心配でしたが・・・・
いましたすげぇのが!
ご許可を頂いていないので、名前などは伏せておきますが、アサラト暦7年のかなりやばすぎるスキルをお持ちの方でした。しかも3名!
超スピナー、回す、回す!
@smokeymonkeyさんと「とりあえずアテンド立ててやってみるか」ぐらいだったのですが、ほんとにすごいのが釣れましたwww
いろいろ聞こうと思ったのですが、彼曰く「やろうとして続けていれば、そのうちできるよ!特に教えること無いよ~!」って言われました。
確かに彼自身、7年というアサラト暦の人で、ずっと継続されていたからこそのあのスキルなんでしょうけど。
そして、哲Jさんが北海道の芸術の森でやったWSに参加していた、ディジュ吹きの方もいて、まじうまかった。
やりたいけどコソコソしているあなた!どんどん出てコイよ!
札幌は熱いぜ!!!!
[プログラミング]プログラミングのいろいろとわからないことに全力で答えてみる
8月 1st
わりと直感でプログラムを書いてしまうほうなので、どのように書くのが良いのか、何故そのように書くのかということについて説明するのは結構難しいのですが、考え方を整理してみる良い機会なので、自分はどうしているかというのを思いつくかぎり書いてみます。
変数の命名ってどうしたらいいのだろう
接頭辞を揃えるのは良い習慣だと思います。一方「どのような時に配列を使いたくなるか」という問題については、
1. foreachでぐるぐる廻したいとき
2. 関数の引数や戻り値として、まとめたい時
というのが考えられます。2.についてもう少し説明すると、関数というのは複数の引数をとり、1つの戻り値を返します(参照渡しという方法もありますが私は滅多に使いません)。
引数 -> +----+ 引数 -> |関数| -> 戻り値 引数 -> +----+
ある関数に渡す引数があまりに増えてきた時に、1つの配列に纏めてしまいたいと考えるでしょう。
また、複数の値を戻したい時は
return array($hogeCnt, $hogeTitle);
あるいは、
return array('cnt' => $hogeCnt, 'title' => $hogeTitle);
と、配列を使って書くかもしれません。また、「複数の値を1つに纏めたい」という理由でクラスを使う場合もあります。
データベースの接続と切断
PHPスクリプトが終了すればデータベースとの接続は切断されるので、私はデータベースの切断処理は(PHPスクリプトの最後にすら)ほとんど書いたことが無いです。
一時変数
私はunset()はほとんど使ったことが無いですが、「この変数はここまでしか使っていないよ」という意味でunset()を書くのは悪く無いと思います。また、同じ意味で関数やクラスを定義してプライベート変数を使うのは、unset()より良い方法です。
なので、unset()を使いたくなったら、そこを関数にしてしまうことはできないか考えてみるのも良いでしょう。
いずれにせよ、あとからソースコードを見てみたときに「この変数の影響範囲はここまでだよ」とわかるよう書く、というのは良い習慣です。
三項演算子が嫌い
使わなくて良いと思います。おそらく「三項演算子じゃなきゃヤダ」と言うプログラマーはそれほど多数派では無いでしょう。
私が使うとすれば、どうしてもちょっとだけ一行で書きたいとき、たとえば
<tr class="<?php echo ($i % 2) == 0 ? "even" : "odd"; ?>">
みたいな使い方でしょうか。
md5って大丈夫なのか
md5がよく使われている理由はたぶん単に古くからあったからでしょう。大丈夫かといわれるとそれは用途によるのですが。
元の文字列を推測できないような一意の文字列を生成する、という用途であれば、単にmd5()やsha1()するよりも、秘密鍵を使ったhash_hmac()を使うのが良いと思います。
とりあえずここまで。後は今度直接聞いていただければ。
PostgreSQLのマニュアルでよく使われている英単語(をPostgreSQLで調べる)
8月 1st
PostgreSQLの標準の全文検索機能に含まれるts_stat()関数を使って、ドキュメントでよく使われている英単語を調べてみます。
とにかくデータベースにドキュメントを入れてさえしまえば、htmlタグを除いたり、大文字小文字や複数形なんかはPostgreSQLが面倒見てくれます。
全文検索機能についてはこちらもご覧下さい。
=# create table pg90doc (path text primary key, contents text, vec tsvector);
テーブルはこんな感じ。実際のところ今回はtsvectorだけあればOK。
<?php $contents = file_get_contents($argv[1]); $dbh = new PDO("pgsql:dbname=db1 options=--client_encoding=iso88591"); $stmt = $dbh->prepare("insert into pg90doc values(?, ?, to_tsvector('english', ?))"); $rst = $stmt->execute(array($argv[1], $contents, $contents));
手抜きですが投入するプログラムはこんな感じ。client_encodingがiso88591になってるのと、to_vector()呼んでるあたりがポイントです。で、シェルから実行
$ for x in $(find postgresql-9.0beta3/doc/src/sgml/html -name '*.html'); do php importdoc.php $x; done
投入できたら、こんなSQLで単語の出現回数を調べることができます。
=# select rank() over (order by nentry desc),
word, nentry from ts_stat('select vec from pg90doc');
rank | word | nentry
------+--------------------------------------+--------
1 | use | 6222
2 | function | 5489
3 | tabl | 5085
4 | name | 4907
5 | type | 4605
6 | valu | 3826
7 | data | 3350
8 | postgresql | 3131
9 | pg | 3101
10 | set | 3083
11 | creat | 3006
12 | databas | 2980
12 | row | 2980
14 | return | 2802
15 | column | 2750
16 | index | 2651
17 | oper | 2575
18 | command | 2551
19 | server | 2463
20 | queri | 2385
...
まあわりと普通な結果でした。何でか知らんけど38位にtomというのがいましたがw。
MSDNの上位だったretrieveは568位、specifiyは34位、elementは348位、containは57位、syntaxが214位でした。
他のドキュメントと単語の出現傾向を比較してみると面白いかもしれませんね。