うーむ。
いくつかの処理を連続してやろうとすると、
PHPの文法の範疇ではコールバックの型を縛るのがしんどいなあ。
なんか変な気もするけど、洗練させていけば何かのデザインパターンに落ち着くのかな。
class Hoge1
{
public function execute()
{
$foo = new Foo();
$foo->askSomething(array($this, 'afterFoo'));
}
public function afterFoo(Response $res)
{
// $resに応じて何かの処理があって…
$bar = new Bar();
$bar->askSomething(array($this, 'afterBar'));
}
public function afterBar(Response $res)
{
// $resに応じて何かの処理があって…
$baz = new Baz();
$baz->askSomething(array($this, 'afterBaz'));
}
public function afterBaz(Response $res)
{
// $resに応じて何かの処理
}
}
class Hoge2
{
public function execute()
{
$foo = new Foo();
$res = $foo->askSomething();
// $resに応じて何かの処理があって…
$bar = new Bar();
$res = $bar->askSomething();
// $resに応じて何かの処理があって…
$buz = new Baz();
$res = $buz->askSomething();
// $resに応じて何かの処理
}
}
Buzz by 福冨諭 from Posted from the web
というわけで結果を
* 戻値で受け取る場合(execute1)
* コールバックで受け取る場合(execute2)
のコード片を書いてみた。
どっちも微妙っちゃあ微妙だなあ。
class Response
{
// 略
}
interface Responder
{
public function whenAccepted(Response $res);
public function whenRejected(Response $res);
}
class Hoge implements Responder
{
public function whenAccepted(Response $res)
{
// 依頼が受け付けられたとき
// $resに入っている受け付け番号とかの処理
}
public function whenRejected(Response $res)
{
// 依頼が拒否されたとき
// $resに入っている拒否理由とかの処理
}
public function execute1()
{
$foo = new Foo();
try {
$res = $foo->askSomething();
} catch (Exception $e) {
// エラー処理
}
if ($res->accepted) {
$this->whenAccepted($res);
} elseif ($res->rejected) {
$this->whenRejected($res);
}
// 共通の後片付け
}
public function execute2()
{
$foo = new Foo();
try {
$foo->askSomething($this);
} catch (Exception $e) {
// エラー処理
}
// 共通の後片付け
}
}
AがBに依頼して、受け付けられるかもしれないし、拒否されるかもしれない。
拒否されるときは理由があるし、受理のときも条件付きかもしれない、
そんな結果をオブジェクトで返すという話だった。
手続きが結果を返すべきではないとすると、最近思ったけど、
コールバック関数を呼べばいいのかもしれない。
非同期処理の話をみて、上の例は非同期じゃないけどそう思った。
関係ないけどDBにキューとか作って、それぞれ別の機能を持つ複数のサーバーで
非同期処理したら面白いな。Node.jsみたく書きやすいコードで。
そういうソリューションあるかな。
例外をめぐる雑談 - いぬビーム
Google Chrome のアップデートができなくなったのだけど、なんか直ったのでメモ。
現象は、スパナアイコンから「Google Chrome について」を選んでアップデートを確認して、
再起動しろというメッセージに従って再起動するのだけど、
またアップデートを確認すると再起動しろと出る、無限地獄のパターン。
試したけど無駄だったのはPCの再起動。
http://www.no-review.net/life/pc/20101026004202.php
を参考に、
C:\Documents and Settings\fuktommy\Local Settings\Application Data\Google\Chrome\Application
から chome.exe と 7.0.517.41 フォルダを削除して、
new_chome.exe を chrome.exe にリネームした。
そしたらバージョン番号は新しくなったが、7.0.517.44 unknown と表示される。
http://2bangai.net/read/7d9d02ea6ee860abbdc1ad3b96b6baa96b1ac787c60dc5407010f1b581604391/301
を参考に、chome.exe と 7.0.517.44 フォルダを削除して、
GoogleからChromeを再インストールしてみたところ、unknown 表示が消えた。
たぶん旧アプリを消して再インストールすれば直るのだと思う。
僕も時々思うけど、方向性は逆で、寂れてる、つまり客が来なくても潰れない店があるなら、そんな店をやりたい。たぶん責任が怖くて、失敗のない仕事がしたいか、むしろ引き込もっていたいんだろうと、自分では解釈している。
Satoshi Fukutomi(@fuktommy)が
あなたとツイートを共有しました:
"abendjpn: @tdaiki オレの世代でもいたけどね。どんな世代でもいるかなと思うよ。仕事がつまらなければ、仕事なんか辞めて何もしたくないと思うだろうから。責任とか仕事を任されて初めて仕事なりが面白くなるんじゃないだろーか。"
--
http://twitter.com/abendjpn/status/1222916783996928
過去30日間の統計
フィード合計: 389
既読アイテム: 53,554
クリックされたアイテム: 2,482 個
スター付きアイテム: 0
共有アイテム: 361
メールしたアイテム: 0
Since 2010/06/20 you have read a total of 300,000+ items.
あなたが、考えてるキャラクターは、ジダンですか 御坂 美琴. あなたも、携帯で魔人と対戦してみましょう
http://www.akinator.mobi/share.php?l=jaなんか日本語がおかしい。
それはいいけど、Android 版は正解率が悪いなあ。Flash 版とはデータを共有してないのかな。
過去30日間の統計
フィード合計: 386
既読アイテム: 55,214
クリックされたアイテム: 2,946 個
スター付きアイテム: 0
共有アイテム: 398
メールしたアイテム: 0
Since 2010/06/18 you have read a total of 300,000+ items.
Android2.2のブラウザでブックマークレットが使えるのがわかった。下のを登録した。
Twitterのフィード
javascript:(function(){var a=document.getElementsByTagName('div');for(var i=0;i<a.length;i++){if(a[i].className.search(/profile-actions-(\d+)/)>0){prompt('','
http://twitter.com/statuses/user_timeline/'+RegExp.$1+'.atom');break;}}})();void(0);
Buzzで共有2パターン
javascript:location.href='
http://www.google.com/reader/link?url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title);
javascript:location.href='
http://www.google.com/buzz/post?url='+encodeURIComponent(location.href);
マニュアルにもこの方法が書いてあるけど、
設定→無線とネットワーク→USB設定→カードリーダーモード
を選んでおけば、たぶんドライバーなしで、標準のUSBフラッシュメモリとして認識されるみたい。
たぶんというのは、既にドライバーを入れちゃってるからね。
この方法だとドライブレターつきでマウントされるので、一般的なバックアップツールでバックアップできる。
[Galaxy S] PC(Windows)との接続 « Gagdet's Blog