タグ

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

  • 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
    clavier
    clavier 2016/02/09
  • Web エンジニア 6 年 5 ヶ月やってたどり着いた価値観 | Born Too Late

    Web エンジニアとして経験を積むことでいくつかのプログラミング言語やツール・ミドルウェアの使い方を覚えたりもしたけど、それらのうちいくつかは 10 年後ぐらいには陳腐化してしまっているかもしれない。 だけどそれらを通じて身につけた価値観や哲学はもっと普遍性を持っているような気がする。 大学を卒業し、Web エンジニアとしての職を得て 6 年 5 ヶ月、日数にして 2344 日経ったので、現時点での頭の中にあるもののダンプを残しておく。 どこかで聞いたようなことばかりで新鮮味はないと思うけど、自分で実感を持ってたどり着けたことには意味があるはず。 プログラミングについて 言語はいろいろなものを試してみる 毎年新しい言語に挑戦せよ、というのは確か dankogai さんの講演をまとめた記事で読んだはずなんだけど、記事が見つからない。 キーワードをもとに検索してみたら達人プログラマーにもそうい

  • Woothee を PHP に移植した (2014-02-18 追記あり) | Born Too Late

    TL;DR User Agent 判定器 Woothee の PHP 実装を作った Packagist には登録できてなかったりするので少々お待ちください (2014-12-18 追記 Packagist に woothee/woothee として登録しました) Woothee は便利プロジェクトなので盛り上がってほしい Woothee とは Woothee というのは @tagomoris さんが作った User Agent 判定器プロジェクトです。 Perl, Java, JavaScript, Python と、複数の言語に実装が用意されていて、元になるデータセットや、テスト用のデータセットは YAML 形式で公開されています。 詳しくは以下のブログ記事を読むのが良いでしょう。 UserAgent判定器 Project Woothee はじめました 最近の多言語対応User-Agen

    Woothee を PHP に移植した (2014-02-18 追記あり) | Born Too Late
  • Ruby/Rails 用 DI コンテナ Dee をつくった、あるいは Ruby のカルチャーについて | Born Too Late

    あけましておめでとうございます。 大晦日は実家でプログレ聞きながらコード書いてました。 今さらながら Heldon の Stand by とか聞いてたんですが、Tangerine Dream を思わせるミニマルなシンセサイザーの反復と、リシャール・ピナスによるロバート・フリップばりの暴力的なギターソロが絡みあっており、大変良いですね。 作ったもの また説明長くなりそうなので、はじめに作ったものの紹介です。 dee dee-rails この Dee というのが DI コンテナの体です。 名前は Ozzy Osbourne ソロ 1st Blizzard of Ozz におけるランディ・ローズのギター曲からです。 50 秒と短く、メタルアルバムの中にあってクラシック風の静かなギター曲ですが、同時にアルバムから欠かせない存在感を放つ名曲です。 何が言いたいかというと、Dee はコンパクトな実装

  • 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
  • PHP と MySQL でカジュアルに MapReduce する | Born Too Late

    副題: ビッグデータ時代の非ビッグデータ集計戦略 PHPMySQL を使ってカジュアルに MapReduce する MyMR というものを作ってみました. とても安直な名前ですね. yuya-takeyama/mymr - GitHub とりあえず試してみる MyMR には, MapReduce のマナー (?) に従って, WordCount するためのサンプルコードとサンプルデータを同梱してみました. map/reduce 関数は PHP で書かれています. WordCount.php MySQL のユーザ名・パスワード等は適宜置き換えて下さい. 見事, 入力テーブル内の単語の出現回数を集計することができました. MyMR の特徴 データの入出力はいずれも MySQL のテーブル 入力と出力のデータベースは同じでもいいし別でもいい (入力はプロダクションサービスの Slave サ

    PHP と MySQL でカジュアルに MapReduce する | Born Too Late
  • 例えば, Singleton を避ける | Born Too Late

    この記事は TDD Advent Calendar jp: 2011 の 14 日目です. 前日: TDD戦略 -TDDを導入し進化させる方法- #TDDAdventJP (@kyon_mm さん) 翌日: TDDに対して思っていること (@gab_km さん) この記事の概要 TDD で開発することで設計上の問題点に気づきやすくなる Singleton はグローバル変数である Singleton の使用はできる限り避けるべきである テスタビリティを意識しよう TDD では, 原則としてユニットテストを書いてから実際のコードを実装します. なので, 自然と「テストのしやすさ (テスタビリティ)」を意識して実装することになります. そして, TDD においては一般的に, テスタビリティを意識することで, 設計が改善されるとされています. オブジェクト指向には難しい概念がたくさん登場します.

  • phpenv で複数の PHP 環境を管理する | Born Too Late

    phpenv とは CHH/phpenv - GitHub 複数のバージョンの PHP を管理し, コマンドで簡単に切り替えるためのものです. Ruby でいう rbenv や RVM, Perl でいうところの perlbrew にあたるものです. なお, phpenv の中身は rbenv を流用することで動いています. インストール まず, 以下のコマンドでインストールスクリプトを実行します. $ curl https://raw.github.com/CHH/phpenv/master/install.sh | sh 中では rbenv を git clone していたりするので, Git をインストールしている必要があります. 上記コマンドが成功したら, ~/.bashrc もしくは zsh 使いなら ~/.zshrc に以下のコマンドを追記します. あとはいま編集したファイルを

    phpenv で複数の PHP 環境を管理する | Born Too Late
  • Ubuntu 上に IS01 の開発環境構築 #2 PhoneGap 編 | Born Too Late

    #1 Android SDK 編 #2 PhoneGap 編 #3 実機にデプロイ編 PhoneGap とは PhoneGap は、 HTML/CSS/JavaScript でスマートフォンアプリを開発するためのフレームワークです。複数のプラットフォームに対応しており、 Android だけでなく iPhoneiPad のアプリも開発できます。 PhoneGap が用意した API を、 JavaScript を通じて呼び出すことにより、より低レイヤの、位置情報やカメラにアクセスすることもできます。 この記事では、前回の #1 Android SDK 編から引き続き、 Ubuntu で Au の IS01 上で動作する Android アプリを構築する上での、環境構築について紹介します。 今回は PhoneGap をインストールし、アプリをエミュレータ上で実行するところまでやります。

    Ubuntu 上に IS01 の開発環境構築 #2 PhoneGap 編 | Born Too Late
  • PHP 用ベンチマーキングフレームワーク Joshimane というのを作った | Born Too Late

    あくまでもプロトタイプですが. gist: 813246 - Joshimane: A Tiny PHP Benchmarking Framework... But it's just a prototype yet.- GitHub プロトタイプなので, API は大幅に変わると思います. 使用イメージ 以下のようにして使用します. これを実行すると, 以下のような結果が得られます. $ php example.php Job A: 0.52975106 Job B: 0.26065207 一応補足すると, Job A ではループ時に毎回 (つまり 100 回) count($range) が実行されるのに対して, Job B ではループの開始前に一度だけしか count($range) が実行されないので, これだけの差が出ます. 名前について 女子マネです. なんかこう... 陸上部

  • 1