自堕落な技術者の日記

基本は喰ってるか飲んでるかですが、よく趣味でカラオケ・PKI・署名・認証・プログラミング・情報セキュリティをやっています。旅好き。テレビ好きで芸能通

Python

(小ネタ) MacPortsのpythonのbsddbモジュールロードエラーの回避方法

みなさま、ゴールデンウィーク中如何お過ごしでしょうか。 近々、Bitcoinの技術的なお話をさせて頂くことになり、ゴールデンウィークもプログラミングして試したり資料書いたりしております。

さて、PythonのBitcoin用便利ツール "bitcointools" を使っていろいろ試していたんですが、Mac OS Xで動いているbitcoindのローカルにあるブロックデータでも見てみようかと "dbdump.py" を動かしてみようとするもエラー発生。bitcoind のブロックデータはBerkley DB形式で保存してるんですが、Mac OS X MacPortsのPython ではそのライブラリを読もうとするとエラーになるみたいなんです。

$ python
Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import bsddb
Traceback (most recent call last):
File " File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bsddb/__init__.py", line 67, in import _bsddb
ImportError: No module named _bsddb
>>>
グーグル先生に聞いてみたところ みなさんも同様に悩んでおられる様子

ActivePython 2.7にある"_bsddb.so" を MacPortsにコピーすれば動くみたいな話が書いてあったので試してみたら動きました。

まずは、ActivePythonをサイトからダウンロードしてインストールします。

MacPorts PythonとActivePythonではインストール先が違います。

ActivePython for Mac OS Xのインストール先
/Library/Frameworks/Python.framework/Versions/2.7
MacPorts の Pythonのインストール先
/System/Library/Frameworks/Python.framework/Versions/2.x (いろいろ)
インストールしたら早速ファイルコピーします。
% cd /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
% sudo cp -i lib-dynload/_bsddb.so /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/
これで MacPorts Pythonでも無事 bsddb が使えるようになりました。
$ python
Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import bsddb
>>>
今日はこんなところで。

IBMのPython バージョン3の解説

Python 3: 第 1 回 何が新しいのか
この記事は Python 3 に関するシリーズの第 1 回として、新しい print() 関数、input()、入出力 (I/O) に関する変更、新しい byte データ型、そしてストリングとストリング・フォーマットへの変更について説明し、最後に組み込みの dict 型に対する変更について説明します。この記事は、既に Python をよく理解していて変更点に関心があるものの、PEP (Python Enhancement Proposal) の長いリストを 1 つ 1 つ調べるのは避けたいと思っているプログラマーを対象としています。(PEP へのリンクは下記の「参考文献」にあります)。


いつもためになる解説が出ているIBM developerWorksでPython バージョン3の解説が始まったそうです。バージョン3になってから言語仕様が結構変わってしまいました。昔、Perlが5.0になってmyだのハッシュだのモジュールだのオブジェクト指向だのガラッと変わってしまって随分泣かされた時を思い出しました。

なかなかバージョン3は馴染めないままなので、これ読んで勉強します。

Python 3.0 リリース

Python 3.0 Release
We are pleased to announce the release of Python 3.0 (final), a new production-ready release, on December 3rd, 2008.


Python 3.0が2008年12月3日にリリースされたそうだ。

・printが予約語ではなく関数になった
・内部文字コードがUnicodeになった

というところが大きな違いらしい、、、、、
print はかなり使いにくくなったという印象だ、、、、

ナンプレを解くGUI

自堕落な技術者の日記 : ナンプレ(数独)キラー Python - livedoor Blog(ブログ)
暇があれば、足りない組込み関数実装してJythonでも動くようにしといてパズルの入力や解く仮定を表示するようなGUIをSwingなんかで作れるといいなとおもっています、、、、


ということで朝暇だったので、いつものJythonで所要時間1時間程度作ってみました。

Java AWTのプログラムを書くのが5年ぶりぐらいだったのでウィジェットやメソッドの名前をすっかり忘れておりハマリマシタ(・∀・)つ

初期画面はこんな感じ、、、、

JySudoku01




適当な所で見つけたレベル4の問題を入力してみます。

JySudoku02




ボタン押します。

JySudoku03




トホホ、1秒すら待たずにあっさり結果が表示されます、、、、、空しい、、、

入力にえらく時間がかかるのに、解くのはすぐという、、、、

乱数生成器の取扱い - PHPとPython

乱数生成器の取扱い - PHPとPython
<引用>
Stefan Esser氏のブログでmt_srandとそれほどランダムでない乱数(mt_srand and not so random numbers)というエントリが8/17に掲載されています。気になっていたのでPythonの実装も調べてみました。


鍵生成なんかでこういう変な乱数を使うことはほぼ無いと思いますが、セッションクッキーとかでは結構ありがちな話ですよね。

ちなみに手持ちですぐ使えるJavaのSecureRandomはこんなとこ、、、、










JCEプロバイダアルゴリズム提供元ソフト
SUNSHA1PRNGSun Java 6
EntrustFIPS186_2usingSHA1Entrust Toolkit 7.2
EntrustX9_31usingAES256Entrust Toolkit 7.2
EntrustX9_31usingDESedeEntrust Toolkit 7.2
SunMSCAPIWindows-PRNGSun Java 6
IBMIBMSecureRandomIBM Java 1.6.0
IBMSHA1PRNGIBM Java 1.6.0


Microsoft CryptoAPIのSecureRandomも使えるんですね。ちょっとマニアックなFIPS、ANSI準拠のSecureRandomが必要な場合には是非Entrust Toolkit買ってください(笑)

Jython 2.5α3リリース

The Jython Project
As of September 10, 2008, the Jython development team is proud to announce a new alpha release: Jython 2.5a3!


9月10日にスクリプト言語PythonのJava実装であるJythonのアルファ版 2.5a3 がリリースされました。

個人的には基本的にはJythonに含まれるPythonライブラリを使うことはあまりなくて基本機能さえあればあとはJavaでカバーするので2.1でもまったく構わないのですが、先日のブログの「ナンプレ(数独)を解くPythonプログラム」はPython 2.5系でしか動きません。

インストール方法は別館にて解説を書いてみました。(ただ、Next押せって書いてあるだけですけどね、、、)

早速、Jython 2.5でナンプレ(数独)を解くプログラムを動かしてみるとバッチリ動きました(^^)v

<追記>
ちなみに使用ディスク容量は



Jython-2.5α330.7MB
Jython-2.110.0MB

2.5太りすぎだろ〜〜〜って感じですね。
普段の利用では2.1で全く困ってないので2.1でいいや、、、、、






XML正規化とPyXML

今日は、XML正規化について調べたいことがあり仕方なくPyXMLとPythonを入れてみました。この記事によれば、簡単にXML正規化が扱えるのだそう、、、、、

本当はcygwinバイナリがあればよかったのだけど、、、、

PyXMLのサイトを見てみるとPython 2.4.xのWindowsバイナリが必要な雰囲気で先に、Python 2.4.4のWindowsバイナリをインストールして、次にpyxml 0.8.4を入れました。

上記記事のサイトにある例を試してみたんですが、子要素を持たない開始・終了タグの対が逆に空要素に変換されちゃってますよ〜〜〜〜〜。だめじゃんPyXML

<ほげ></ほげ>
↓PyXML0.8.4の間違っていると思うXML正規化
<ほげ/>


Javaの方で単体でXML正規化が使えればいいんですけど、XML署名とセットでないと使えないんですよね〜〜〜〜。困ったもんです。

ナンプレ(数独)キラー Python

うちのカミさんや子どもは前からナンプレ(数独 or SUDOKU)が好きで、暇があれば新聞の土曜版やら本を買ったりしてやっています。

ちょっと前は海外出張した際に、恋人たちがなかむつまじく二人でSUDOKUやりながら飛行機を待っているなんていう姿もよく見かけました。日本円は弱いしカミさんはあまりお土産など欲しがらないみたいなので、フランスやスペインやドイツのナンプレ(SUDOKU)を買ってきてあげると、まぁ、結構うれしいらしく子どもと競ってやっているようです。あれは、言語が変わってもやり方は同じなのでアラブ語だろうがフィンランド語だろうがお土産にはイイみたい、、、、、

話し変わって、「LispプログラマのためのPython入門」(邦訳)という記事を書いたPeter Norvingさんという方がいらっしゃいます。これはいまだにLispのプログラムはEmacsのためだけに書くことがある私にとってPythonを最初勉強するのにとてもありがたかった記事です。Peterさんは私も昔生業としていた人工知能に関する記事も書いておられ、NASAに勤めておられる雰囲気です。

たまたま氏のサイトを眺めていたら「Solving Every Sudoku Puzzle」という記事があるのを発見しました。

ここでは任意の数独のパズルを解くことができるたった100行程度のPythonのプログラムを紹介しています。実装方法としては、昔懐かしい人工知能の制約伝播やら解の探索やら枝刈りやらそんな方法を使っています。

未定のマスを"0"として9×9の行列を一行で"0001034008..."のように一つのパズルを表現すれば、それを入力ファイルとして処理してくれます。

Java実装のPythonであるJython 2.1 で試してみたところ dict, set, max, min など一部の組込み関数がなかったために実行できませんでした。

仕方なくcygwinのPython 2.5を使ってみると一つの問題解くのに0.1秒もかかっていないような感じです、、、、、空しい、、、、、

4 1 7 |3 6 9 |8 2 5
6 3 2 |1 5 8 |9 4 7
9 5 8 |7 2 4 |3 1 6
------+------+------
8 2 5 |4 3 7 |1 6 9
7 9 1 |5 8 6 |4 3 2
3 4 6 |9 1 2 |7 5 8
------+------+------
2 8 9 |6 4 3 |5 7 1
5 7 3 |2 9 1 |6 8 4
1 6 4 |8 7 5 |2 9 3


暇があれば、足りない組込み関数実装してJythonでも動くようにしといてパズルの入力や解く仮定を表示するようなGUIをSwingなんかで作れるといいなとおもっています、、、、

しかし空しい、、、、、やっぱり、頭は使わなくちゃね、、、、

JyConsole (その2)

先日紹介したJavaによるPython実装であるJythonのインタプリタのGUIフロントエンドであるJyConsoleですが、やっと時間がとれたので今更遊び始めています。

まず、やらなければならないのは


  1. Jythonのアーカイブを解凍して適当な場所(C:\Java\JyConsole等)におく

  2. 私はJDKを切り替えて使う派なのでWindowsの環境変数にはPathやJava_HOMEなどは設定していないためJyConsole.batをいじる必要がある。例えばこんな感じ
    set JAVA_HOME=C:\jdk1.6.0_03
    set Path=C:\jdk1.6.0_03\bin
    java -cp "JyConsole.jar;thirdpart/jython2.2/jython.jar;thirdpart/ArtTk/ArtTk.jar" com.artenum.jyconsole.JyConsole

  3. 上でクラスパスの区切りがJyConsole 1.4のJyConsole.batではWindowsなのにセミコロン";"ではなくコロンになっている":"ので必ず直します。



とこれだけやれば、とりあえず起動はできます。

普通にJyConsole.batを起動するとコマンドシェルが煩わしいのでJyConsole.batのショートカット作って、ショートカットのプロパティ設定で「ウィンドウ最小化」「フォントは小さめのもの」を設定しておけばいいでしょう。

う〜〜ん、なかなか楽しい。Javaでちょっと寂しいインタプリタがないところで、Jythonはそれをカバーしてくれたりもするんですが、便利さに欠けるところがあります。JyConsoleはそれをカバーしてくれると思います。

  • Javaのコードを型を気にせずインタプリタで試すことができる

  • Javaのコードをコンパイルしなくてよい

  • Javaのコードについてあまり例外を気にしなくてよい

  • 初期読み込みスクリプトの設定



と、早速JyConsole1.4を使ってみて問題発覚
from java.math import *
#↑ワイルドカードだとちゃんとインポートされない
from java.math import BigInteger
#↑明示すればちゃんとインポートされる


ムムム、これは問題だ、、、、ワイルドカード使えないととても面倒だし。


とりあえず、こんな感じで入力。

JyConsoleでBigInteger

例えば証明書のシリアル番号とかXMLDSig,XAdESとかでは10進数で表示されてしまうんだけども、普通の電卓じゃ桁があふれちゃうなんて場合に、不定整数を扱えるjava.math.BigIntegerが使えてしまいます。

もっといろんなEntrust ToolkitとかIAIKとかBouncyCastleとか自作のクラスとかクラスパスを通しておけばもっと楽しめそう。

一瞬、コンソールからクラスパスの設定抜きに動的に設定してロードさせたいと思ったんですが、これが結構厄介でURLClassLoader使って実装しないといけないので、それだったらまぁ、予めクラスパスに設定させとくしかないかな、、、と

jyconsole.propertiesでは

# Loading script for initial configuration
jyconsole.pref.loading.script=script/init.py


好きな起動スクリプトを設定できるらしいので、お気に入りのコマンドなど入れておいたり何時でもテスト用の秘密鍵、証明書など使えるようにしとけばコマンドラインであれやこれやできてしまうのではないかと思います。

今日は、とりあえず属性証明書を何とかしないとなりません、、、、(謎)

Jython 2.5a1 リリース (2008.07.16)

FrontPage - JythonWiki


いつのまにかJavaにポーティングされたPythonであるJythonの2.5a1 (アルファ版?)がリリースされていました。Jythonはもうあまり更新されないのかと思っていたんですが、、、、
最新記事
Categories
Archives
Twitter
記事Google検索

本ブログ内をGoogle検索
Yahoo!アクセス解析
Travel Advisor
記事検索
QRコード
QRコード
  • ライブドアブログ