Facebookのコードレビューツール

WHAT IS ARCANIST?Arcanist is the CLI for Facebook's code review tool, Differential. Since Differential isn't released yet, it may not be terribly useful on its own. https://github.com/facebook/arcanist ということなので、ArcanistはFacebook…

Symfony\Component\Process\Process - チラシの裏

$process->getOutput()で外部コマンド実行結果を取得。 run(); $content = $process->getOutput(); var_dump($content); $process->run($func)にCallback関数を渡して外部プロセ…

グローバル変数の保存や復元

PHPUnitのアノテーションのドキュメントを読んでいて知ったが、PHPUnitには各テストケースの実行前後にグローバル変数を保存・復元してくれる機能があるらしい。 PHPUnit Manual - Fixtures - グローバルな状態 PHPUnit Manual - 付録B アノテーション - @ba…

Python3.2はUnicode 6.0に対応した

Python has been updated to Unicode 6.0.0. The update to the standard adds over 2,000 new characters including emoji symbols which are important for mobile phones.In addition, the updated standard has altered the character properties for tw…

cacheのKEY_PREFIX, VERSION, KEY_FUNCTION

Django 1.3ではcacheにKEY_PREFIX, VERSION, KEY_FUNCTIONというオプションが追加されていた。 http://docs.djangoproject.com/en/dev/topics/cache/#cache-arguments # settings.py from django.utils.encoding import smart_str def my_make_key(key, key_…

Django 1.3では複数のキャッシュの設定ができる

ふとDjango 1.3 beta1を触ってみたら、今までのCACHE_BACKENDという設定に変わって、CACHESという設定が可能になった。これを使うと複数のキャッシュを指定できる。 # settings.py CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcache…

TwistedでThriftのクライアント/サーバーを書く

TwistedでThriftのクライアント/サーバーを書くには"--gen py:twisted"オプションをつけてモジュールを生成する必要がある。PyPIに上がっているのは大抵"--gen py:new_style"のようなオプションで生成したモジュールだから知らないとハマる。scribeのインタ…

HandlerSocket練習帳 - チラシの裏

PythonでHandlerSocket経由でMySQLにアクセスする。今回はpyhsを使ってみた。 https://bitbucket.org/excieve/pyhs データベース名はsandboxで、テーブルは、 Create Table: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varcha…

diskstoreなるものが導入されるらしい

何気なくtwitterを見ていたら、Redisの将来のリリースで導入されるdiskstoreというオプションを知った。masterブランチにはすでにコードがあるので、cloneしてビルドすれば試してみることができる。diskstoreが登場した背景はGoogle Groupのこのスレッドに詳…

post-commitを利用して自動的にレビューリクエストを作成する

Subversionのpost-commitフックを利用してReview Boardのレビューリクエストを自動的に作成する。 #!/bin/sh # /var/lib/svn/myrepository/hooks/post-commit export LANG="en_US.UTF-8" REPOS="$1" REV="$2" REVPREV=`expr $REV - 1` svnauthor=`svnlook au…

CentOSにPySVNをインストールする

ReviewBoardに入れる時にいつもPySVNで迷うので。PythonはCentOS標準のPython2.4ではなく、EPELのPython2.6とする。 Subversion関連のヘッダー・ライブラリをインストール subversion-devel, neon-develを入れておく必要がある。 $ sudo yum install subvers…

セッションIDの作り方

メモ。 PHP REMOTE_ADDR, 現在の秒数, 現在のミリ秒, (0, 1)の範囲のランダムなdoubleを結合してランダムな文字列を作る session.hash_functionで指定されたハッシュアルゴリズム(MD5 or SHA-1)でdigestをする session.entropy_lengthが0以上が指定されてい…

cryptoモジュールの乱数生成関数を使う

ErlangでセッションID生成のような用途に耐えうる十分安全な乱数生成関数はないものかと調べていたら、どうやらcryptoモジュールのrand_bytes/1やrand_uniform/2あたりが近いらしい。 1> crypto:rand_bytes(16). <<216,145,169,69,119,62,52,12,70,173,20,98…

Doctrineを使ってユーザー認証を行う

前エントリの続き。config.ymlにユーザーを定義していたのを、Doctrineを使ってデータベースに保存してあるユーザー情報を使うようにする。Symfony2でDoctrineを使う設定はこのあたりのドキュメントを元ににすでに設定済みとする。まず、app/config/config.y…

フォーム認証・はじめの一歩

Symfony2のセキュリティー機構を使ってフォーム認証をやってみる。 security.configを設定する 参考記事。 Documentation » Guides » Security » Users app/config/config.ymlにsecurity.configを設定する。 security.config: encoders: default: class: Sym…

Emacsでtwigテンプレートを編集する

【追記(2012/1/25)】 元記事から一年後。自分の.emacsをメンテナンスする上で活用しているこのgithubアカウントを眺めていたら、jinja2-modeというのがあるのを見つけた。 https://github.com/paradoxxxzero/jinja2-mode TwigはDjangoのテンプレートエンジン…

Twigのタグやフィルターを使おうとしてハマった

最新のSymfonyとSandboxアプリケーションを使っていてハマった話。Twigテンプレートを使って、フォームをrenderしようとして、 {{ form|render }} のようにrenderフィルターを使おうとしても、Unknown tag name "route"というエラーで動かない。手動でTwig E…

Symfony2のCrawlerオブジェクトを使う

ここに書いてあるとおり、Crawlerオブジェクトのインスタンスを直接作れば、HTMLを直接与えてテストができるようだ。 http://docs.symfony-reloaded.org/guides/testing/crawler.html うまく使えば、Symfony2アプリケーションではないPHPアプリケーションのF…

Functional Testを実行する

前回Symfonyで触っていた時からだいぶ時間がたってしまったので、環境構築から。今回はgitでsandboxをcloneしてやってみる。 symfony-sandboxのセットアップ $ git clone git://github.com/symfony/symfony-sandbox.git $ cd symfony-sandbox $ chmod 777 ap…

IPyからipaddrに乗り換えるか検討中

今までIPアドレスの操作にはIPyを使ってきたのですが、Google App EngineのPython SDKにはipaddrが含まれているなぁと気付いてからipaddrに乗り換えようか検討中。 import timeit from IPy import IP from ipaddr import IPv4Network, IPv4Address def test_…

非同期Webサーバーならばcycloneがよさげ

まだ深くソースコードを読めていないので「非同期Webサーバー」という言い方が正しいかどうかは自信がない。 https://github.com/fiorix/cyclone cycloneはtornadoと非常によく似たAPIをもっている。例えば、お馴染みのHello Worldならば次の通り。 # -*- mo…

erlang-mysql-driverを使う - チラシの裏

ErlangでMySQLを使うにはどうするんだろうと思っていて、最初Yxaを見ていたが、erlang-mysql-driverを使うのが正解らしい。今回はPure Erlangな実装のものしか調べていない。 -module(mysqltest). -export([start/0, start/4]). start() -> start("localhost…

membaseは真剣に使わない方がいいと思う

membaseはなかなか面白いプロジェクト、そう思っていた時期が俺にもありました。(AA略membaseのWebコンソールは本当にリッチなので、Erlangでどういう風に書いているのかなぁと思って研究していた次第。とりあえず、管理ユーザーのログイン状態の保持、所謂…

HTMLを出力するあまり使えないアイディア

Webmachineのサンプルコードを見ていて、次のようにhtmlモジュールを作ってhtml出力関数を定義し、 -module(html). -compile(export_all). -define(TAG(T), T(Attrs, Content) -> tag(??T, Attrs, Content)). ?TAG(head). ?TAG(script). ?TAG(title). ?TAG(b…

S3を使った開発にbaltic-avenueを利用する

baltic-avenueはGoogle App Engine上で動くAmazon S3のクローン。 baltic-avenue http://code.google.com/p/baltic-avenue/ これを使って実際のサービスをやるのはどうかと思うが、開発に使うのは便利かもしれないと思って試してみた。ソーシャルゲームでじ…

Watir練習帳3 - Test::Unitでテストを行う

ナウでヤングなRubyistがTest::Unitを使うのかどうかも分からない。 require 'watir' require 'test/unit' class MyTest < Test::Unit::TestCase def setup @browser = Watir::Browser.new end def teardown @browser.close end def test_search_japanese_wo…

s3cmdを使ってS3にアクセスする

AWS

AWS Management ConsoleやFirefox拡張を使ってS3にアクセスする奴はゆとり(笑)。s3cmdが一番楽な気がするなぁ。CentOSならばepelレポジトリを使うと簡単に入る。 $ sudo yum install s3cmd 最初に--configure~/.s3cfgを作る。 $ s3cmd --configure Access Ke…

Watir練習帳2 - 要素を選択する

要素をindexで選択する 1番目のフォームに何かを入力して投稿したいという場合は、 browser.forms[1].submit のようにformsプロパティを使えばよい。indexは1から始まるのが注意点。formに限らず、 # 最初のimg要素 browser.images[1] # 2番目のtable要素 br…

Watir練習帳1 - チラシの裏

WatirはRubyで書かれたWebアプリケーションのテスト自動化フレームワーク。 http://watir.com/ 個人的にはSeleniumよりしっくりくる。今のところ実際のテストで使っているというよりも、Webサイトのアクセス自動化にしか使おうとしていないけど。練習のため…

rabbitmq-managementは使える!

rabbitmq-managementはWebベースでRabbitMQを管理・監視するためのRabbitMQプラグイン。 RabbitMQ - Management Plugin http://www.rabbitmq.com/management.html rabbitmqadminを使ってCLIで出来ることとほぼ同等のことができるようだ。RabbitMQはExchange…

Riak事始

RiakはErlang製の分散型KVS。 http://www.basho.com/Riak.html https://wiki.basho.com/display/RIAK/Riak 「またKVSですか」という見方もあるかと思うが、RiakはRiakなりの良さがある。まずインストールが簡単。以下のページからRPMをダウンロードしてイン…

pfffを試す

https://github.com/facebook/pfff github上のfacebookのレポジトリで最近活発に開発されている印象があるので気になっていたツール。 pfff is mainly an OCaml API to write static analysis, dynamic analysis, code visualizations, code navigations, or…

ErlangのWebSocketの実装

MochiWebをベースにしたもの。もっとあるかもしれないが、試していない。 https://github.com/RJ/mochiweb-websockets https://github.com/davebryson/erlang_websocket https://github.com/sendtopms/Erlwebsockserver misultinもWebSocketをサポートしてい…

Django1.3ではloggingの設定が加わった

Django1.3のalpha版が公開されて、変更点をつらつらと眺めているが、一番気に入っているのはsettings.pyにloggingの設定をかけるようになったところ。 http://docs.djangoproject.com/en/dev/topics/logging/ settings.pyに、 LOGGING = { 'version': 1, 'di…

HailDB事始

http://www.haildb.com/ Embedded InnoDBはMySQLのストレージエンジンとして名高いInnoDBの組み込み版、HailDBはそのEmbedded InnoDBの独自オープンソース版。「どうせオマエらが好きなのはMySQLではなくてInnoDBなんだろ!」ってのは間違いないと思っている…

簡易HTTPサーバーを立てる

最近「あー、このディレクトリのファイルをブラウザで開きたいなぁ*1」という時に、 $ python -m SimpleHTTPServer 8080 で簡易HTTPサーバーを起動できることを知り重宝している。8080はポート番号。当然のことながら、この簡易HTTPサーバーで全世界に向けて…

rabbit-lifeが面白い

rabbit-lifeはサーバー側をErlang、クライアント側をJavaScriptで実装したライフゲーム。マルチプレーも可能。 https://github.com/kenpratt/rabbit-life 画面イメージとしてはこんな感じ。ゲームとして面白いというよりは、アーキテクチャや使用しているラ…

kombuを味わう

kombuはceleryの作者askによるメッセージングフレームワーク。 https://github.com/ask/kombu 同じ作者によるcarrotというライブラリ/フレームワークもあるが、kombuはcarrotをリライトしなおしたもので、今後はkombuの方を開発していくらしい。それにしても…

npmをインストールする

空前のTDDブーム(棒読み)なので、Vowsを試そうと思ったのだが、「Vowsをインストールするのにはnpmを使うのがいいよ!」というところでちょっとハマった。npmとはnode.jsのパッケージ管理ツールのこと。 npm is a package manager for node. You can use it …

node.jsでZeroMQを使う

空前のZeroMQ, node.jsブームの中、皆様いかがお過ごしでしょうか。ブームと言いつつもnode.jsに今日始めて触った僕が最初に試したのはZeroMQを使うこと。zeromq.nodeを使えば簡単に出来ますね。 http://github.com/JustinTulloss/zeromq.node サーバー側を…

Symfony2.0初感

最初の印象。 symfony1.*系と全く別フレームワーク symfony ccはどこ? *Foundationとか*Bundle, Resourceといった命名規約、ディレクトリ構成がCocoaっぽい PHP5.3のnamespaceは案外気にならない(ドヤ顔 調査、学習する価値あり インストール とりあえず試…

Controller, Entityを追加する

自分でControllerとEntityを追加するところまでやってみる。 データーベースへの接続を使う http://docs.symfony-reloaded.org/guides/doctrine/dbal/overview.html まず下準備としてUserControllerへのroutingを定義する。この程度ならば規約によるrouting…

libmemcachedでcas値を取得する

memcached_fetch_resultでmemcached_result_stを取得した後、memcached_result_casでcas値を取るというのはヘッダーファイルのAPIを見ていて分かったのですが、memcached_getではなく、memcached_mgetを呼んでからmemcached_fetch_resultを呼ばなくてはいけ…

OpenSocial RESTful APIのテスト用のアプリケーションを書いた

mixiのサーバーに対してOpenSocial RESTful APIのテストをしていたらそのうち逮捕されるのではないかと思い、Djangoでテスト用のアプリケーションを書いた。 http://github.com/csakatoku/freunde 起動方法。 $ git clone git://github.com/csakatoku/freund…

2-legged OAuthで認証して外部APIを利用する

Erlangでerlang-oauthを使い、2-legged OAuthで認証をして外部APIを利用したい。 http://github.com/tim/erlang-oauth 外部APIというのは、具体的に言うと、ここではmixiのOpenSocial RESTful APIのこと。ちょっと前まではどうやってやるのか分からない(対応…

Rowzと戯れる

gizzardやgizzardの使用例のRowzが気になっていても、ビルドに失敗することが多く手を出せないでいた。最近、だいぶScalaの勘所がつかめてきて、ようやく自分で試してみることができるようになったので、そのメモ。Rowzのテストは通らないような気がするので…

HBaseのテーブルにはTTLを指定できる

「履歴情報を三ヶ月分だけ残しておきたい」ってことをMySQLでやると、データ量が多くなった場合にたいへん面倒なことになるが、HBaseならばTTLが指定できるということを知った。 hbase(main):026:0> create "mytable", {NAME => "value", VERSIONS => 1, TTL…

Erlangのthrift_clientを使ってCassandraと戯れる

もう何度目か分からない空前のErlangブームを迎えているわけですが、ErlangでCassandra/Thriftを使う方法がちょっと分からなかったので、メモ。まず、Thriftの配布物に含まれているlib/erlをMakeして、Erlang用のThriftライブラリをインストールしておくこと…

trunk版のCassandraと戯れる

trunk版のCassandra(Cassandra 0.7)で遊んでみた。 設定ファイルがYAMLに変わるのは誰得?って印象があったが案外違和感がない。普段LAMP系のソフトウェアを扱っている人間にはYAMLの方が自然に感じる。 動的にKeyspaceやColumnFamilyを追加できる機能はgood…

uamobileとSoftBank/2.0

SoftBank/2.0のUser-Agentが正しく解析できないならば、今の安定版に手をいれようかと思いましたが、特に問題ないようですね。 >>> import uamobile >>> uamobile.__version__ '0.2.11' >>> ua = uamobile.detect({'HTTP_USER_AGENT': 'SoftBank/2.0/944SH/S…