タグ

ブックマーク / blog.xole.net (41)

  • ハタさんのブログ(復刻版) : PHP で ConsistentHash

    ConsistentHashの動きをPHPでもやってみた via - http://www.hyuki.com/yukiwiki/wiki.cgi?ConsistentHashing こんな感じで実装 interface HashFunction { public function hash($key); } interface Circle { public function put($key, $value); } interface Node { public function put($key, $value); public function get($key); public function has($key); public function keys(); public function getName(); } class TreeMap implements Cir

    hiro_y
    hiro_y 2010/01/12
    PHPでコンシステントハッシュ。
  • ハタさんのブログ(復刻版) : PHPカンファレンス2009「Q4MとFlareを使って スケーラブルなサービスを作る!」の資料

    すいません、遅くなっていましたが、とりあえずここに置いておきます。 ref - http://www.slideshare.net/nowelium/building-highscalable-web-applications-using-q4m-and-flare Building High-Scalable Web Applications Using Q4M and Flare View more documents from nowelium. Ustreamはこの辺 ref - http://www.ustream.tv/recorded/2107541 いくつか質問があったものは、別途書きます

    hiro_y
    hiro_y 2009/10/02
    Q4MとFlareについての発表資料。
  • ハタさんのブログ : Q4MをPHP(PDO)で

    Q4Mが無事インストールできたので、PHPから触ってみる。詳細なことは今度書く。とりあえず触りだけでも テーブル定義 drop table if exists hoge_queue; create table hoge_queue( id int not null, name varchar(25) not null ) engine=queue; こんなスクリプトをガンガン回して、監視 $conn = new PDO('mysql:host=localhost; dbname=hogetest', 'user', 'password'); $wait = $conn->prepare('SELECT queue_wait("hoge_queue", 10)'); $abort = $conn->prepare('SELECT queue_abort()'); $e = $conn->pr

    hiro_y
    hiro_y 2008/12/07
    PHPからQ4M。PDO使用。
  • ハタさんのブログ : 第2回設計勉強会に参加してきた

    第2回設計勉強会に参加してきました。 まず、こういった機会を提供してくれた id:shimookaさん、ありがとうございます。株式会社ディノさんも会場の提供ありがとうございます。LINDさんも毎度ありがとうです。 とりあえず、資料を置いておきます。 Event Php Study Design 2 View SlideShare presentation or Upload your own. (tags: php design) ちなみに、Teedaのレイヤーは Teeda Extension featuring Goya 〜アーキテクチャ【レイヤー構成】〜 - たかのり日記 さんのを、チョーそのまま使ってます Hermit は http://svn.coderepos.org/share/lang/php/misc/Hermit/ 今回の発表は、すいません。あまりまとめきれていなく

    hiro_y
    hiro_y 2008/11/16
    設計勉強会資料。サービスレイヤーは必要だと思う派。
  • ハタさんのブログ : pdo で Procedure の call. MySQL 編

    ホントは S2Dao.PHP5 を作ったときにまとめてあったけど、出てなかったので。メモ Stored Procedure と Stored Function の呼び出しについて IN パラメータで入力して OUT パラメータで値を受け取る こんなプロシージャコールの場合 CREATE PROCEDURE SALES_TAX(IN sales INTEGER, OUT tax INTEGER) begin set tax = sales * 0.2; end; @変数に値を入れておいて、取り出す。 こんな感じ try { $pdo = new PDO('mysql:host=localhost;dbname=hoge', 'root', 'password'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    hiro_y
    hiro_y 2008/09/10
    PDOでprocedureを使う場合に。
  • ハタさんのブログ : Symfony で ActionScript(AMF) と通信する

    PHP と ActionScript が通信するためのライブラリとして AMFPHP とかが有名ですが、名前空間とかライセンスとか色々な部分が気になるので、SabreAMF を Symfony に乗っけて動かしてみるテスト ちなみに、既に sfAMFPlugin っていうプラギンも同様のアプローチなのですが、こいつだと README に書いてあるコードが何故か動かないです。 ↓こんなの class amfAMFAction extends sfAction { public function execute($request) { $this->setLayout(false); $gateway = new sfAmfGateway; $response = sfContext::getInstance()->getResponse(); $response->setContent($

    hiro_y
    hiro_y 2008/09/04
    SabreAMFを使ってsymfonyでAMF。
  • ハタさんのブログ : re: [JavaScript][prototype]メソッドがなければprototypeをさかのぼる

    あなたの疑問答えます!のコーナーの時間です。 via - メソッドがなければprototypeをさかのぼる - lesamoureusesの日記 その2で書いたコードについて、 var Echo = { hello: function (){ return 'hello'; } }; var Hoge = function (){}; Hoge.prototype = Echo; var hoge = new Hoge; alert(hoge.hello()); // hello Echo.world = function (){ return 'world'; }; alert(hoge.world()); // world これはEchoがオブジェクトで(newしていなくて)、hogeがメソッド「world」を探そうとした時に 自分にないからHogeにさかのぼり、さらにHogeにな

    hiro_y
    hiro_y 2007/12/21
    prototypeのさかのぼり方。
  • ハタさんのブログ(復刻版) : javascriptを初めて学ぶ人についてのおさらい。その2

    前回のエントリが700users突入しました。ありがとうございます。参考になれば幸いです。 ということで、その2になります。 前回書いた通り、C/Javaについてはある程度の知識がある人なので、クラスなどのオブジェクト指向はちゃんと理解されているようですが、プロトタイプ指向は初めて学ぶようです。 javascript(ECMAScript)のプロトタイプは他のプロトタイプ指向言語とはひと味違う動作をするので、その点も含めておさらい プロトタイプとはなんですか?プロトタイプとは継承パターンの一つでしかないです プロトタイプは単なる継承パターンであり、単一の方向への継承しか行わない点についてはクラスベースと同じです。 var Hoge = function (){}; Hoge.prototype.methodA = function (){ return "this is methodA

    hiro_y
    hiro_y 2007/12/18
    プロトタイプベースのオブジェクトについて。
  • ハタさんのブログ : S2Dao.PHP5 Eclipse Plugin for PDT できたよー\(^o^)/

    「You! 作っちゃいなよ」と、神のお告げが聞こえたので、S2Dao.PHP5 Eclipse Plugin for PDTを作ったよー レッツEclipse から find/Install ! ref - http://update.s2php5.jp/s2dao/ 前回のリリースから結構経っちゃいました。反省。 機能面では前回同様、getter/setter/serialize/unserialize/__toStringメソッドの生成と一部定数アノテーション生成のみサポートしてます。 あと、細かいところですが、for PHPEclipse も微妙にバージョン上げてます。 ただあまりテストしてないので、一部動かないかもしれないです。(動作環境はLeopard/JRE 1.5) 不具合などがありましたら連絡をお願いします。。 ってことで、作ったはいいけど、ソースとか見えないとラ

    hiro_y
    hiro_y 2007/12/07
    S2Dao.PHP5用のPDTプラグイン。
  • ハタさんのブログ(復刻版) : javascriptを初めて学ぶ人についてのおさらい。その1

    僕にも教える人ができた(? というか人にモノを教える立場)になったので、とりあえず、最近はもっぱらjavascriptを教えています。 もともとCやJavaなどについてはある程度の知識がある人なので、それを少しjs的な意味で、関数言語的な教えをやっている最中のメモ 変数って何ですか?変数って値もしくは式そのものに利便的な名前をつけているものです 次のhogeとfooは値をいれる箱ではなく、値そのものに別名(もしくは分かりやすい名称)を割り当てているだけに過ぎませんよ。 var hoge = 1; var foo = [1, 2, 3]; alert(hoge + 1); // 2 alert(foo[0]); // 1 alert(1 + 1); // 2 alert([1, 2, 3][0]); // 1 つまり、関数自体を変数に代入する事ができます。(functionとは特別な呼び名

    hiro_y
    hiro_y 2007/12/02
    JavaScriptの基本。
  • ハタさんのブログ : PHP開発者のためのデザインパターン。Controller

    はてブコメントにて、「シリーズ化して欲しい」とあったので、もう少し書いてみます。 今回紹介するパターンは、Controllerパターン。 たぶん、デザパタ(GoFとかのヤツ)ではControllerパターンなんてものは存在しないのですが、よく見掛けるパターンなので紹介します。 よくあるControllerパターンは、FrontControllerパターンを使ったデータ遷移パターンですが、今回僕が紹介するパターンはCommandController(これもGoFとかのパターンにたぶん無いので勝手に命名)です。 何か実行したいCommandについて、Controllerが適切に実装を振り分けその後のActionを実行するためのパターンです。 よくある実装 例えば、以下にCommandインタフェースを実装した複数のクラスがあり、そのCommandによって、実行するActionを振り分けるCo

    hiro_y
    hiro_y 2007/11/02
    PHPでControllerパターン。
  • ハタさんのブログ : PHP開発者のためのデザインパターン。Delegate

    ITT-WEB - XOOPSCubeにおけるDelegateとは何か?というエントリが上がっているので、ちょっとだけDelegateについて触れてみたいです。 Delegateとは、そのままの意味で「委譲」を示します。(集約ではないです) とある処理をそれまで行っていたクラスから、ちがうクラスに対して処理を行ってもらうようにします。 Delegateと書くとちょっと堅苦しいですが、proxyやTemplate Methodに近い存在です。 Delegateは慣れてくると色々なパターンに適用しやすい便利なパターンなので、是非身に着けたいものです。 以下にファイルのデータを書き込む処理の例を示します。 class DataWriter { public function write(Data $data){ $file = new File($data->getPath()); if(

    hiro_y
    hiro_y 2007/11/01
    PHPでDelegate。
  • ハタさんのブログ : setTimeoutの実行は、functionの評価が終わってから

    たぶん、IT戦記な人とかが書いてるんだろうけど、少し書く。 setTimeoutが実行されるのは、functionの評価が終わってから。ということ。 もっというと、setTimeoutが宣言されたスコープ(コンテキスト? 関数?)の評価が終わってから、setTimeoutで登録された関数がスタックで登録される(実行待ち) その後、登録された関数を順次実行していく とりあえず、サンプル たとえば、次のコードに書かれているsetTimeoutが実行されるのは、0ms後ではなく、functionの評価が終わってから Event.observe(window, 'load', function (){ var start = new Date; console.log("start: " + (new Date - start)); setTimeout(function (){ console

    hiro_y
    hiro_y 2007/10/18
    setTimeoutに登録された関数の実行タイミング。
  • ハタさんのブログ : javascriptのコンストラクタとか

    偶然、javascriptでMixinとかを読んでいるときに、見付けたのでメモ。 newされたfunctionの参照先は? 突然ですが、javascriptで以下のコードを実行した際、どのような動きをするかわかりますでしょうか? var Hoge = function (){ this.message = 'hoge'; }; Hoge.prototype = { createFoo: function (){ this.message = 'foo'; } }; var hoge = new Hoge; alert('No1: ' + hoge.message); hoge.createFoo(); alert('No2: ' + hoge.message); この場合、想像通り、No1: hoge、No2: fooと表示されます。 では、次のように書いた場合はどう出力されるでしょう?

    hiro_y
    hiro_y 2007/10/16
    newした場合のthisのスコープについて。
  • ハタさんのブログ : Javascriptによる大規模開発の覚え書き。高速化編

    前回書いた「Javascriptによる大規模開発の覚え書き」が凄いことになってました。 今回は、省略した「5.高速化せよ」について書きます。 僕にとってjavascriptは非常に高速な言語です。それは何が高速か 開発速度が高速である 開発速度、及びそこに至るまでの修得速度はとても高速です。動的言語を上手く操る開発者はもちろん、開発に不慣れな(言葉が悪いけど)新人達でさえ「動く」モノをサクっと作ってしまえる。 また、プラットフォーム(? というかブラウザ)が広く普及しているので、ググればスグに問題解決もできる。 それにローカルで簡単に作れる。javascript、それは動作環境を含めて高速です。 高速にUI操作ができる(UI操作が非常に簡単である) swingとかでUI操作をするには多くのオブジェクト操作をしなければならないけど、javascript(もといDHTML)は非常に簡単に

    hiro_y
    hiro_y 2007/09/30
    JavaScriptの高速化で意識すべきところ。
  • ハタさんのブログ : Javascriptによる大規模開発の覚え書き

    未だに半年前のエントリにブクマされるみたいなので、もう少しjavascriptについて書いてみる。 今回は大規模化開発におけるJavascriptの注意点とかそういうの。当てはまらない環境の方もいます。(しかも基的な事だらけで大したことは書いてないです) ほぼリッチクライアントを主目的としたjavascripterとコードを対象とします。 どちらかというと、ライブラリを提供する側の視点から 1.ログを出力せよ あなたが書いたコードは遅い、と必ず言われます。なので言われる前から、自分の書いたコードの処理時間をログするようにしましょう。 次のような処理時間を計測するロガーを作ります。 var TraceLog = function (){ this.startTime = -1; var outer = document.getElementById('_outer'); if(oute

    hiro_y
    hiro_y 2007/09/28
    JavaScriptの開発で注意/留意すること。
  • ハタさんのブログ : そのユーザビリティは本当にユーザビリティですか?

    最近ユーザビリティというコトバが嫌いだ。というかユーザビリティというコトバは疑うべき対象と見ている。 ユーザビリティを満たすためにはどんな実装(手法/方法)を用いてもいいのだろうか。 そのユーザビリティは当に必要だろうか?そのユーザビリティにはなぜそれを用いらなければならないのだろうか。 (中略) 「誰が為のユーザビリティ」といえば、多くはプログラム(プログラマ)の為のユーザビリティだったりするのが大半で、誤動作をまねく原因はユーザビリティとして排除していくだろうし、そうする。 一番有名なのは、HTMLのForm上からエレメントをreadonlyにするなり、フェードアウトするなりで「現在操作できないですよ」ってのをユーザに教えるためのやつだと思う。 言わば、誤動作が起きたときにユーザに何度も同じ手順をさせなくて済ませるものが、ユーザビリティって言うんだろう。多くの場合。 今の僕が

    hiro_y
    hiro_y 2007/09/07
    「デザイン(UI/レイアウト)が悪いと無駄なユーザビリティを確保しなきゃいけなくなる」
  • ハタさんのブログ : PHPでは実装済みのinterfaceを多重に実装できない

    ぶっちゃけ、これバグだろ。と思うけど、bugsにレポートを書けない。いやいやPHP的にバグじゃないならバグじゃない。 PHP interface Service { } interface SoapService extends Service { public function add(); } class SoapServiceImpl implements SoapService, Service { public function add(){ } } Java public interface Service { } public interface SoapService extends Service { public void add(); } public class SoapServiceImpl implements SoapService, Service { pu

    hiro_y
    hiro_y 2007/08/20
    インタフェースを多重実装できない件。
  • ハタさんのブログ : javascriptの暗黒面

    javascript の暗黒面については、ちょっと書かれているので何も言わずもがな。なのですが、最近こういった質問が増えてきたので少し書く。 via - JavaScript の暗黒面を覗く nullはオブジェクトだ! nullは歴史的理由からobjectです。なので、typeofするとobjectって返ってきます。 alert(typeof null); // object なので、この事に気がついている方は次のようなコードを書きます。 if(typeof hoge == 'undefined' || hoge == null){ // do something } たとえば、次のようなコード var hoge = function (a){ if(typeof a == 'number'){ // was number // 数値計算とか return a + 1; } if(type

    hiro_y
    hiro_y 2007/07/08
    typeof null == 'object' な件とか。
  • ハタさんのブログ : PHP5.2.xで新しくなったインタフェース

    PHP5.2.xになってからインタフェースが進化しました。(良くも悪くも) PHP: 下位互換性のない変更点 - ManualやPHP: その他の機能向上 - Manualで少し書かれていますが、一部紹介 コンストラクタを強制することのできるインタフェース ぶっちゃけこれが5.2.xにするべき一番大きな理由になるかもしれない、変更点です。 Javaみたいな言語はinterfaceの実装にコンストラクタを定義することができなかった(クラス名メソッドがコンストラクタとするので)ためにabstractクラスを継承してたりしたんですが、PHPの__constructっていうコンストラクタ定義があるので、インタフェースでコンストラクタの定義をすることが可能になりました。 interface IComponent { public function __construct(IHoge $hoge,

    hiro_y
    hiro_y 2007/06/21
    PHP 5.2のインタフェースの仕様。