自習メモ〜メッセージパッシングをもうちょっと確認
公開されているpdfで頭が煮えてきたメッセージパッシングをもうちょっとやってみました。「困ったらマニュアル」ということで、http://www.erlang.org/doc/doc-5.5.4/doc/getting_started/part_frame.htmlのhttp://www.erlang.org/doc/doc-5.5.4/doc/getting_started/conc_prog.html#3を読みながらサンプルを入力・実行して確認。
% % @see http://www.erlang.org/doc/doc-5.5.4/doc/getting_started/conc_prog.html#3.2 % -module(tut15). -export([start/0, ping/2, pong/0]). ping(0, Pong_PID) -> Pong_PID ! finished, io:format("ping finished~n", []); ping(N, Pong_PID) -> Pong_PID ! {ping, self()}, receive pong -> io:format("Ping received pong~n", []) end, ping(N - 1, Pong_PID). pong() -> receive finished -> io:format("pong finished~n", []); {ping, Ping_PID} -> io:format("Pong received ping~n", []), Ping_PID ! pong, pong() end. start() -> Pong_PID = spawn(?MODULE, pong, []), spawn(?MODULE, ping, [3, Pong_PID]).
2つのプロセスがメッセージを送受信し合うサンプルですが、だいぶ理解が進んだ感じです。「メッセージ=文字列」みたいな固定観念があった模様。また、これをやったあとに前回のサンプルを見直してみましたが、頭が煮えることなくコードを追えました :-)
まあ、まだ行末にセミコロンを打ってしまうのは、しょうがないなぁ。。。
自習メモ〜プロセス名の登録
前のエントリに続いて、Erlangマニュアルをやってみました。3.3 Registered Process Namesです。
% % @see http://www.erlang.org/doc/doc-5.5.4/doc/getting_started/conc_prog.html % -module(tut16). -export([ping/1, pong/0, start/0]). ping(0) -> registerd_name ! finished, io:format("ping finished~n", []); ping(N) -> registerd_name ! {ping, self()}, receive pong -> io:format("Ping received pong~n", []) end, ping(N - 1). pong() -> receive finished -> io:format("Pong finished~n", []); {ping, Ping_PID} -> io:format("Pong received ping~n", []), Ping_PID ! pong, pong() end. start() -> register(registerd_name, spawn(?MODULE, pong, [])), spawn(?MODULE, ping, [3]).
へぇ、GLOBAL変数っぽく使えるんだ。多用すると大変そうだけど、便利だ。
上のサンプルはマニュアルそのままではなく、registerした名前が分かるよう「registerd_name」に変えてあります。ちなみに、register/2のリファレンスは以下。
PHPで刺激を求めるには?
もう、id:MugeSoさんが書かれているとおりです。
先日のエントリのコメントでid:MugeSoさんとやりとりしたあと、一服しながら後輩と話をしながら考えてました。以下散文気味で。。。
PHP extensionは開発言語こそC/C++などでありPHPではありません。しかし、一度作ればPHPの一部となりPHP環境そのものに溶け込んでいき、PHPから使うことができるのです。PHPerは新しいextensionを開発したり見つけたりすることでPHPerとしての道*1を歩みながら、知的刺激も得ることができるのではないでしょうか。
やはり、PHPって「extensionありき」なんですよ。それも充分にそろっていて、「ほとんど何でもできる」ぐらい。PECLに登録されていないextensionを含めると、相当数あると思います。一介のPHPerとしてPHPを見たときも、extensionは「バージョンが変わると云々」を上回るメリットや可能性があると思っています。先日のPHP勉強会でhaltさんがlibusbのバインドを書いてミサイル飛ばしてましたが、そういったこともできるわけです。
なので、そこが一番面白いと思うし、できれば自分でも何か作ってみたいと思っていて、PEAR::CodeGen_PECLに手を出してみたり*1。PHPで拡張しているわけではない(基本的にC/C++)ですが、最終的にPHPと一体になる。最初は大したextensionでなくても、「拡張すること」が実感できます。それが、dankogaiさんが書かれた
なんじゃないかと思います。
プログラマーがプログラムを続けるための一番のご褒美
個人的には、決められた環境(機能用件とか実装内容とか)でプログラミングするのが最近苦痛で、dankogaiさんが書かれたとおり、
という感覚に近いものがあります。どうせPHP使うならもっと面白いことやりたいし、先日のエントリのコメントにも書いてますが、
PHP「環境」に用意された車輪を使い続ける
というのを感じています。今は(というか今後も)そこに注力したいなぁ。
ま、その前にCのスキルを上げなきゃね orz
*1:まだlibuuidのバインド程度ぐらいですが
Yahoo!がPHPエンジニアを雇う時に聞く質問
via.Yahoo!がPHPエンジニアを雇う時に聞く質問 | IDEA*IDEA
とりあえず適当に訳してみました。間違いがあれば指摘をお願いします :-)
1.配列usersに「john」を追加しないのはどれか?
1. $users[] = ‘john’; 2. array_add($users,’john’); 3. array_push($users,‘john’); 4. $users ||= ‘john’;
2. sort(), assort(), ksort()の違いを述べよ。また、どういった状況で利用するかを述べよ。
3. 以下のコードは何を出力するか?それはなぜか?
$num = 10; function multiply(){ $num = $num * 10; } multiply(); echo $num;
4. 参照と通常の変数の違いを述べよ。また、どのように参照渡しをするか、なぜそうするかを述べよ。
5. 実行中のスクリプトにライブラリコードを追加する関数は何か?
6. foo() と @foo()の違いを述べよ。
7. あなたがどのようにPHPアプリをデバッグしているかを述べよ。
8. 「===」は何をするか? 「==」がtrueを返し「===」がtrueを返さないサンプルを示せ。
9. メソッドやプロパティを持たないクラス「myclass」はどのように宣言するかを示せ。
10. 「myclass」のインスタンスをどうやって生成するかを述べよ。
11. どうやってクラスのプロパティにアクセスしたり値を設定するかを述べよ。
12. includeとinclude_onceの違いを述べよ。また、includeとrequireの違いを述べよ。
13. ブラウザに新しいページにリダイレクトさせるための関数は何か?
1. redir() 2. header() 3. location() 4. redirect()
14. ファイルを読み書きするため、ファイルを「開く」関数どれか?
1. fget(); 2. file_open(); 3. fopen(); 4. open_file();
15. mysql_fetch_row()とmysql_fetch_array()の違いを述べよ。
16. 以下のコードは何をするか?起こっていることを説明せよ。
$date=’08/26/2003’; print ereg_replace(“([0-9]+)/([0-9]+)/([0-9]+)”,\\2/\\1/\\3,$date);
17. $stringにテキストが代入されているとき、HTMLタグを全て除去する正規表現はどのように書けば良いか?
18. PHPとPerlにおいて、配列とハッシュの扱い方の違いを述べよ。
19. HTTPのステートレスな性質を避ける方法を述べよ。
20. GDライブラリは何をするかを述べよ。
21. HTMLコードブロックを出力するいくつかの例を挙げよ。
22. PHPはPerlより優れているか、論じよ。
最後の問いは、やはり激論になるのか。。。?
第24回PHP勉強会 - 君はまたextensionか(PECL_CodeGenでC++するとハマる件)
第24回PHP勉強会 - 携帯とPC両対応システムの構築
第24回PHP勉強会の発表内容ダイジェスト。
野間さん。
- 印刷資料だ!「今日5時ぐらいからやってました」
- テンプレートは共通。分けるところだけ分ける
- 1カ所のフィルタでタグ除去とか絵文字変換とか
- mod_rewriteを使って画像をハンドリング
- デザインはヘッダ・共通メニュー・共通コンテンツ
- PCはCSSでデザイン。アイコンも含め
- 携帯はfontタグでデザイン
- 来月新会社立ち上げますっ!(2007/6/1登記予定)
- 「Smartyですか?」「いや、そもそもPerlで、一部PHPです」(笑
第24回PHP勉強会 - Twitter API+GraphViz一発ネタ
第24回PHP勉強会の発表内容ダイジェスト。
shimooka。
- Twitterの人脈図をGraphVizで作る
- イメージはmixiGraph
- 誰か面白いサービス作って〜
- 使ってたツールは以下です
- shimookaを売りに出します。良い所あったら拾って〜!
- ウノウ入りたい!サイボウズ・ラボ入りたい!面白いことやってるすごい連中と仕事したい!
第24回PHP勉強会 - プレゼン終了
まったり事務連絡&座談会中。
- ウィルスチェックのextensionもあるらしい
- CramAVだっけかな?
- 「なぜTx?」「作者さんに振り向いてもらいたかったから」(爆
本日はこれにて終了。お疲れさまでした〜。
ということで、今から懇親会です :-)