タグ

ブックマーク / blog.yuyat.jp (6)

  • PHP のコードパスを解析する CodePathAnalyzer を作った | Born Too Late

    レガシーコードと戦っていると、「このコードのどこをどう通ってこういう結果になってしまっているのか」がわからなくなることがあります。 初見でコードを理解する能力は、コードを読んできた経験が多ければ多いほど、向上するものだと思います。 とは言っても、構造化やモジュール化が適切でなく、スコープの長大なコードなどは、人間の限界を超えているものもあるでしょう。 ステップ実行のできる IDE などを使う、という選択もあると思いますが、僕は重厚な IDE を好みません。 もっと楽にできる方法で、コードパスを解析する方法があれば、ということで作ってみました。 yuya-takeyama/code_path_analyzer 元になっているのは、仕事の時にコード中にベタ書きした関数です。 Gist に公開したところはてブが 10 ぐらい付いたのと、次必要になったときにすぐ使えるようにしておきたかったので、ラ

    PHP のコードパスを解析する CodePathAnalyzer を作った | Born Too Late
    bigwest
    bigwest 2012/11/14
  • PHP/MySQL でレコードを N 件ずつバルクインサート | Born Too Late

    昨日の ParallelHttp の話に引き続き、PHP でのバッチ処理のパフォーマンス改善の話です。 あと、昨日と同じく PHP 5.2 で使えるライブラリを開発した話でもあります。 バルクインサートとは ひとことで言えば「複数のレコードをまとめてインサートすること」です。 例えば MySQL で言えば、 INSERT INTO `users` (`name`) VALUES ('foo'); INSERT INTO `users` (`name`) VALUES ('bar'); INSERT INTO `users` (`name`) VALUES ('baz'); ではなく INSERT INTO `users` (`name`) VALUES ('foo'), ('bar'), ('baz'); というようにやることです。 これで何が嬉しいかというと、サーバにクエリを投げてその結

    PHP/MySQL でレコードを N 件ずつバルクインサート | Born Too Late
  • PHP 5.2 で並列数を保ちつつ非同期 HTTP 処理 | Born Too Late

    最近は Admiral Sir Cloudesley Shovell というバンドの 1st フルアルバム Don't Hear It... Feat It をよく聴いています。 Sir Lord Baltimore のような、骨太なリフと、ブルージーでドラマ性もある楽曲が魅力のバンドですが、現在進行形で活動中のバンドです。 ストーナーロックとか好きな人は是非。 ここから題です。 あるところに、Web API を数十万回単位で叩きまくる、PHP で書かれたバッチプログラムがあったとしましょう。 処理件数が増えるごとに処理時間が増大するので、いつしか 1 日経っても終わらないようになってしまいました。 そのプログラムは HTTP リクエストを直列に行っていたので、それを並列化させれば何とかなるのではないか、と考えて作ったのが以下のライブラリ。 yuya-takeyama/parallel_

    PHP 5.2 で並列数を保ちつつ非同期 HTTP 処理 | Born Too Late
  • シェルコマンド学習用ツール shellfish を作った | Born Too Late

    シェルコマンドに関して、昨日は 2 つの記事が目につきました。 sort と uniq でさくっとランキングを出力する シェル操作課題 (cut, sort, uniq などで集計を行う) 設問編 これらはそんなに難しい処理ではないものの、この辺の技量は普段どれぐらい黒い画面上で生活しているかによって大分違ってくる気がします。 こういうのを効率的に学習できツールがあれば便利なんじゃないかと思ったので、shellfish というツールを作りました。 yuya-takeyama/shellfish Shellfish とは 与えられた問題を、コマンドを駆使して解決していくゲームです。 Shellfish のシェル上でコマンドを実行し、出力が問題ごとの期待結果に一致すれば正解です。 言ってみればターミナル上で動作する、ワンライナー専用の Anarchy Golf みたいなものです。 問題ファイル

    シェルコマンド学習用ツール shellfish を作った | Born Too Late
  • PHP で Reactor パターンを使った非同期 MySQL 問い合わせ | Born Too Late

    最近は非同期処理に興味があります。 Reactor パターンというのは、非同期処理の実装パターンのひとつで、例えば HTTP 問い合わせなんかで「読み込みが完了するのを監視しつつその他のタスクを進め、読み込みが完了したタイミングでその結果を処理する」みたいなヤツです。 例えば Node.js では Reactor パターンを使ったプログラミングが比較的簡単に行えます。 PHP でも同じことをやりたい、というときには React というフレームワークがあって、少し前に話題になりました。 PHPでもリアルタイムWeb。node.phpReact」 現状 React ではファイル I/O やソケット通信を非同期に行えるようになっております。 が、MySQL で非同期処理を行う方法は今の所提供されていません。 PHP でも mysqli_poll を使えば非同期に MySQL にクエリを投げられ

    PHP で Reactor パターンを使った非同期 MySQL 問い合わせ | Born Too Late
  • PHPUnit の実行を自動化する 3 つの方法 | Born Too Late

    皆さん, ユニットテスト書いてますか. TDD (テスト駆動開発) によるプログラミングは当に楽しいものですが, コマンドをいちいち手動で実行するのは面倒ですよね. テストを自動化しているんだから, その実行も自動化したいですよね. この記事では, 私が仕事趣味で使っている PHPUnit を例に, テストの実行の自動化について紹介します. PHPUnit の, としてはいますが, 他の言語で使えるテクニックもあります. なお, ここでの自動化は開発しながらの自動実行のことで, CI (継続的インテグレーション) の話は出てきません. その前に... 私の開発時のターミナルは以下のようになっています. [caption id="attachment_1298" align="alignnone" width="300" caption="開発時のターミナル"][/caption] GN

    PHPUnit の実行を自動化する 3 つの方法 | Born Too Late
  • 1