Hatena::ブログ(Diary)

rokujyouhitomaの日記 このページをアンテナに追加 RSSフィード

2012-01-01

[]DeNAに入社しました。

新年あけましておめでとうございます。id:rokujyouhitomaです。

昨年、2011年8月末に前職のRememberTheMilkの職を離れることになり、

2011年10月1日より株式会社ディー・エヌ・エー入社しました。

2011年は私にとって激動の年であり、バイドゥ=>RTM=>DeNAと職を転々とすることになりました。


転職の流れ

RTMを去った後も海外で働く意欲があったので、身の回りのエンジニア、企業にご挨拶するとともに相談に乗って頂きました。

本当にありがとうございます。

海外の企業を落ち続け、国内の企業を模索していました。

その過程で、好意を仇で返してしまった方々もいます。頭を下げることしかできません。


DeNA

DeNAは変化が激しい企業でやりがいのある企業です。

特にグローバル化を推し進めている最中で、海外との業務の連携をしています。


技術

技術面ではまだまだ精進が必要なので見守ってください。

素振り素振り。


語学

英語は必須の業務であると改めて認識しています。


関連

2011-12-26

[] jvmバックエンドに完敗 PyPy Advent Calendar 26日 + 1日目(27日目?)

まさかのPyPy Advent Calendar 2011 26日 + 1日目(27日目?)。

この記事はaodagさんのpypy cliバックエンドに完敗 aodag’s posterousにインスパイヤされて書かれてます。

結論書くとjvmバックエンドに完敗:(


追記

この記事での敗北はid:shomah4aさんが勝利を収めました。

下記がそのまとめ記事です。


事前準備

以前、PyPyのRPythonToolChainで実装したOok!を使います。

hg clone https://bitbucket.org/rokujyouhitoma/lang-ook

また、PyPyのリポジトリに入ってるtranslate.pyを使うのでPyPyのリポジトリをcloneする必要があります。

$ hg clone https://bitbucket.org/pypy/pypy

環境


ビルド

(_)ike-no-MacBook-Air% python ~/workspace/pypy/pypy/translator/goal/translate.py --backend=jvm ook.py
[platform:msg] Setting platform to 'host' cc=None
[translation:info] Translating target as defined by ook
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/gcctest.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/gcctest.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/gcctest.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/gcctest
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_0.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_0.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_0.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_0
[translation] translate.py configuration:
[translation] [translate]
[translation]     targetspec = ook
[translation] translation configuration:
[translation] [translation]
[translation]     backend = jvm
[translation]     [backendopt]
[translation]         clever_malloc_removal = False
[translation]         constfold = False
[translation]     continuation = False
[translation]     gc = boehm
[translation]     gcremovetypeptr = False
[translation]     gcrootfinder = n/a
[translation]     gctransformer = boehm
[translation]     list_comprehension_operations = True
[translation]     type_system = ootype
[translation]     withsmallfuncsets = 5
[translation:info] Annotating&simplifying...
[translation:info] with policy: pypy.annotation.policy.AnnotatorPolicy
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_1.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_1.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_1.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_1
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_2.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_2.o
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_3.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_3.o
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_4.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_4.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_4.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_4
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_5.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_5.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_5.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_5
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_6.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_6.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_6.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_6
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_7.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_7.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_7.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_7
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_8.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_8.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_8.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_8
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_9.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_9.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_9.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_9
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_10.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_10.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_10.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_10
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_11.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_11.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_11.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_11
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_12.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_12.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_12.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_12
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_13.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_13.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_13.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_13
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_14.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_14.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_14.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_14
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_15.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_15.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_15.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_15
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_16.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_16.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_16.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_16
[platform:execute] gcc-4.2 -c -arch x86_64 -O3 -fomit-frame-pointer -mdynamic-no-pic /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_17.c -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_17.o
[platform:execute] gcc-4.2 /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_17.o -arch x86_64 -o /var/folders/lc/vw5blb150gxd3_xwxj2k3s080000gn/T/usession-default-0/platcheck_17
...+++++++++++
[translation:info] -- someobjectness  0% (0 of 14 functions polluted by SomeObjects)
[translation:info] ootyping...
...+++++++++++++++*************************%
[rtyper] specializing: 100 / 204 blocks   (49%)
[rtyper] specializing: 200 / 204 blocks   (98%)
[rtyper] -=- specialized 204 blocks -=-
...
[rtyper] -=- specialized 8 more blocks -=-
[translation:info] ootype back-end optimisations...
[backendopt:inlining] phase with threshold factor: 32.4
[backendopt:inlining] heuristic: pypy.translator.backendopt.inline.inlining_heuristic
...+++++++++++++++*************************%
[backendopt:inlining] inlined 75 callsites.
[backendopt:malloc] starting malloc removal
...+
[backendopt:malloc] removed 6 simple mallocs in total
[backendopt:mergeifblocks] starting to merge if blocks
[translation:info] Generating JVM source...
...++++++++
[rtyper] -=- specialized 22 more blocks -=-
[translation:info] Wrote JVM code
[translation:info] Compiling JVM source...
[jvm] Compiling java classes
[translation:info] Compiled JVM source
[translation:info] Creating jar file
[Timer] Timings:
[Timer] annotate                       ---  2.7 s
[Timer] rtype_ootype                   ---  2.2 s
[Timer] backendopt_ootype              ---  1.1 s
[Timer] source_jvm                     ---  0.7 s
[Timer] compile_jvm                    ---  4.5 s
[Timer] =========================================
[Timer] Total:                         --- 11.2 s

ビルドは順調に10秒ちょいで終わり。

ook-jvmとook-jvm.jarができあがり。



ook-jvm

ook-jvmバイナリかな?とのぞいてみると、シェルスクリプトでした。

(_)ike-no-MacBook-Air% cat ook-jvm
#!/bin/bash
LEDIT=`type -p ledit`
EXE=`readlink $0`
if [ -z $EXE ]
then
    EXE=$0
fi
$LEDIT java -Xmx256m -jar $EXE.jar "$@"


実行

さて、ook-jvmを実行してみる。

(_)ike-no-MacBook-Air% ./ook-jvm
Exception in thread "main" java.lang.VerifyError: (class: pypy/ConstantInit_0, method: constant_init signature: ()V) Expecting to find long on stack
	at pypy.ConstantInit.init(ConstantInit.j:6)
	at pypy.Main.<clinit>(Main.j:26)

java.lang.VerifyErrorが発生...。


jarを直接実行

うむむ。jarjavaコマンドで直接叩いてみよう。

(_)ike-no-MacBook-Air% java -jar ./ook-jvm.jar
Exception in thread "main" java.lang.VerifyError: (class: pypy/ConstantInit_0, method: constant_init signature: ()V) Expecting to find long on stack
	at pypy.ConstantInit.init(ConstantInit.j:6)
	at pypy.Main.<clinit>(Main.j:26)

うーむ...。"java.lang.VerifyError"をGoogle先生で聞いたら、pypy-devのMLにたどり着く。

I suppose it's a 32/64 bit issue again: the problem is that when you run

./translate.py with a 64 bit python, it assumes that 'int' variables are 64

bits, but on the JVM they are always 32 bit. For what I know, the CLI backend

has exactly the same problem.

http://mail.python.org/pipermail/pypy-dev/2009-December/005593.html

32bitじゃないといけないの...( ̄д ̄)エー


>プロセッサ名: Intel Core i5

だから...マイマシンは64ビットで間違いない。

プロセッサ名 32 ビット/64 ビット

Intel Core Solo 32 ビット

Intel Core Duo 32 ビット

Intel Core 2 Duo 64 ビット

Intel Quad-Core Xeon 64 ビット

Dual-Core Intel Xeon 64 ビット

Quad-Core Intel Xeon 64 ビット

Core i3 64 ビット

Core i5 64 ビット

Core i7 64 ビット

http://support.apple.com/kb/HT3696?viewlocale=ja_JP&locale=ja_JP


32bit環境無いので機会があれば試す。

CLIに似たような問題があるって書いてある...φ(..)メモメモ



追記


下記のご指摘頂きました!

  • class file レベルで 32 bit とか関係無いような…… (匿名ペンギンさん)
  • あの引用されてる英文読むと, "64bit" は Python にかかってます(匿名ペンギンさん)
  • そもそも JVM 上で 32/64 bit の差はほとんど無いはずです(匿名ペンギンさん)
  • 64bit python では int は 64bit(匿名ペンギンさん)

参考

2011-12-07

[]RPythonToolChainでOok!を実装した時のノウハウ紹介。PyPy Advent Calendar 2011 7日目

この記事はPyPy Advent Calendar 2011 7日目の記事であるとともに、仕事で来ているサンフランシスコのホテルでまさに書いています。

明日は id:jbking です!よろしくお願いします!

http://d.hatena.ne.jp/ymotongpoo/

前日の id:ymotongpoo からid:jbkingにバトンが渡る予定でしたが、割り込みしました。


RPythonToolChain

以前、Brainf*ckの類縁Ook!をPyPyのRPythonToolChainを利用して実装しました。

その時溜まったノウハウを紹介しようと思います。


RPythonToolchainで実装している処理系のログ

RPythonToolchainで実装している処理系のログを出力する方法を紹介します。

ログの出力については下記に書かれている通りです。


jit組み込みの例。
def get_location(pc, program, bracket_map):
    return "%s_%s_%s" % (
            program[:pc], program[pc], program[pc+1:]
            )
jitdriver = JitDriver(greens=['pc', 'program', 'bracket_map'], reds=['tape'],
        get_printable_location=get_location)

上記のget_locationとjitdriverが組み込まれたOok!はこちらです。

実際にook-jit-debug.pyをtranslate.pyでコンパイルしてバイナリを作成します。

$ hg clone https://bitbucket.org/rokujyouhitoma/lang-ook
$ python /path/to/pypy/translator/goal/translate.py --opt=jit ook-jit-debug.py

ログファイルを出力して実行しましょう。

$ PYPYLOG=jit-log-opt:logfile ook-jit-debug-c samples/mandel.ook

生成されたlogfileはこちら。



pypy/tool/logparser.py

pypy/tool/logparser.pyを使うと、logファイルを画像ファイルに変換し、GCやJITの発生を時間軸を元に視覚化することができます。

先ほどのlogfileを実際に試しに視覚化してみましょう。

事前準備


生成物の例

f:id:rokujyouhitoma:20111207225935p:image


使い方
$ python /path/to/pypy/tool/logparser.py draw-time logfile out.png

"logfile"はログファイル。"out.png"は出力する画像ファイル名。

  • 緑色がjit
    • 更に、jit-optimize, jit-tracing, jit-backendが細かく色分けされている。
  • 赤色がgc

ook-jit-debug-cのlogfileを視覚化。

先ほどのook-jit-debug-cが生成したlogfileの場合は次の通りです。

f:id:rokujyouhitoma:20111208003314p:image


バトン

それでは、次はid:jbkingにPyPy Advent Calendar 2011のバトンを渡そうと思います。



参考

memo

2011-12-06

[]組み込みのErrorを拡張したErrorオブジェクトを実装する。

本コンテンツの一部は、業務時間内に調べた内容を含んでおり、株式会社ディー・エヌ・エーの提供でお送りしております。

構成

/
|- MyError.js
`- MyError_spec.js

MyError.js

/**
 * @class
 * @constructor
 */
function MyError(message) {
    Error.call(this, message);
    if (message !== undefined) {
        this.message = String(message);
    }
};

MyError.prototype = (function(base) {
    var Inheritor = function(){};
    Inheritor.prototype = base.prototype;
    return new Inheritor();
})(Error);

MyError.prototype.constructor = MyError;
MyError.prototype.name = "MyError";
MyError.prototype.message = "";
MyError.prototype.toString = function() {
    return "[object " + this.name + "]";
};

exports.MyError = MyError;

上記実装だと、instanceofでErrorとMyErrorがそれぞれtrueになる。


MyError_spec.js

jasmine-nodeのspecファイルは下記の通り。

var MyError = require("./MyError").MyError;

describe("MyError packages called new", function() {
    var e;
    beforeEach(function() {
        e = new MyError("throw new MyError");
    });

    it("type of", function() {
        type = typeof e;
        expect(type).toEqual("object");
    });

    it("instance of MyError", function() {
        expect(e instanceof MyError).toEqual(true);
    });

    it("instance of Error", function() {
        expect(e instanceof Error).toEqual(true);
    });

    it("throw new MyError", function() {
        try {
            throw e;
        } catch (e) {
            var name = e.name;
            var message = e.message;
            expect(name).toEqual("MyError");
            expect(message).toEqual("throw new MyError");
        }
    });

    it("toString method", function() {
        var str = e.toString();
        expect(str).toEqual("[object MyError]");
    });
});

追記

特になし。

2011-12-03

[]早速PyPyでIPython使ってみた。

PyPy Advent Calendar 2011@iizukakさんがPyPyでIPythonの導入について書いています。

せっかくの機会なので導入してみた。

ついでに、id:nishiohirokazuさんがnumpyを試してたので、PyPy1.7から入ったnumpypyで試してみる。

環境

  • Mac OS X 10.7.2
  • virtualenvでPyPy1.7の環境構築済み

- rokujyouhitomaの日記 Python実装としてPyPy1.7をインストールする。

$ python --version
Python 2.7.1 (7773f8fc4223, Nov 18 2011, 22:15:49)
[PyPy 1.7.0 with GCC 4.0.1]
% pip --version
pip 1.0.2 from /Users/rokujyouhitoma/.virtualenvs/_/site-packages/pip-1.0.2-py2.7.egg (python 2.7)

IPythonのインストール

IPythonをインストールする。

$ pip install ipython
バージョンの確認をする
$ ipython --version
0.11

IPythonを起動する

% ipython
Python 2.7.1 (7773f8fc4223, Nov 18 2011, 22:15:49)
Type "copyright", "credits" or "license" for more information.

IPython 0.11 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: 

numpypyを試す

In [1]: from numpypy import array

In [2]: x = [[6, 5], [4, 3], [2, 1]]

In [3]: y = array(x)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Users/rokujyouhitoma/<ipython-input-3-0c58b1f2d887> in <module>()
----> 1 y = array(x)

TypeError: unsupported operand type for float(): 'list'

ああれ...?TypeError....。

どうやら、一次元配列しかサポートしてないっぽい??

うーむ。この時点でid:nishiohirokazuさんが試したコードを試すことができず。

numpypyをもっと調べねば。

追伸

numpypyの詳細は、PyPy Advent Calendar 2011@iizukakさんが記事を書いてくれるはずなので、楽しみにしてまっていましょう!

参考