Categories

  • Android開発
    android marketで目指せ億万長者(ウソ)
  • cocos2d
    pythonでも使えるゲームフレームワーク
  • Google
    ここには未来を開くためのAPIがたくさん用意されている。
  • GoogleAppEngine
    どこまでもスケールアウトするクラウドサービス。使いこなすのが大変
  • Hack
    様々な電子機器を本来の用途とは別の用途に使ってみる。
  • iPhone開発
    app storeで目指せ億万長者(ウソ)
  • python
    LightWeightLanguageで一番難しいがLispにも通じるところがある面白い言語。
  • TIPS
    覚えておくともしかしたら役に立つかもしれないチョットしたこと。
  • うまくいきません
    やってみたけど、うまくいかなかった失敗記事
  • ネット世界
  • 夢見るソフトウェア
    こんなのいいな、できたらいいな、いつかつくろう
  • 開発環境
    開発するまえに環境を整えた記録、次に同じことをするためめの忘備録
無料ブログはココログ
My Photo

python

LightWeightLanguageで一番難しいがLispにも通じるところがある面白い言語。

January 03, 2014

Python でBluetooth デバイスを直接コントロールできるなんて知らなかった

pebbleのアプリを鋭意開発中であるが、ログを出力する方法がわからない。

一世代前のSDKであれば、pythonで出力先を作れたたらしい。
なぜかSDK2からはAboutでAppLoggingがなくなっている。きっとデフォルトになったと解釈しよう。
pythonからbluetoothを扱うにはlightblueというモジュールが必要であるが、コレを入れるためには依存関係を手で解決する必要がある。
Pybluezが含まれるパッケージはわかりにくいが、プロジェクトのページを見たところ、python-bluetoothを入れればいいらしい。
openobexとlibbluetooth-devとpython-bluetoothだ。
sudo apt-get libopenobex1-dev libbluetooth-dev python-bluetooth
その後
sudo pip install lightblue
でインストール完了。
しかしながら p.pyが動かない。よく見たらbluetoothが繋がっていない仮想マシンであった。がっかり。

Continue reading "Python でBluetooth デバイスを直接コントロールできるなんて知らなかった" »

October 29, 2011

Macの中にもapacheが入っていた

 いままで、WEBサーバープログラムを作るときはネット上にサーバーを作ってftpなりsshでファイルを転送してソフトを作っていた。いや、でもよく考えたらmacはBSDベースのOSだよね。apacheインストールできないの?
 ということで検索してみたらすでにインストール済みであった。ただし、httpd.confの設定がphpを実行させないようになっているため修正が必要。
 こちらの記事を参照にさせて頂きました。

 Mac OS X. 10.6 Snow LeopardでPHP5.3を動かしてみたよ

pythonについてはmod_pythonからインストールをしないといけないらしい。
$ sudo port install mod_python
を実行してみたのものバージョンが2.4とか2.5とか書いてある。えー、今使っているのが2.6なのですんなり動きそうもないから、Lionにアップグレードしてからためそう。

前線関係ない話だが、Windowsのperlで有名なActiveStateのサイトにpythonのレシピ集があった。もちろんpython専用ではないが、圧倒的にpythonが多い。
なんだか、得した気分。

Active Code Recipes


September 12, 2011

PyPyは素晴らしい

pythonのコンパイPyPyをGoogle Dev Quizに挑戦中に知った。

何か素晴らしい響きなので、macで試してみた。

PyPyのページからmac用64bit版をダウンロードした。
ダウンロードページ

 ファイルを展開して、Downloadsから適当な場所にコピーする。
といっても何が適切なのかわからないので、ホームディレクトリにおいた

でもって、/usr/local/bin のディレクトリにpypyをシンボリックリンクする。
コピーじゃなくてシンボリックリンクだ。
sudo ln -s /Users/ohsaruman/pypy-1.6/bin/pypy pypy

あとは、pythonのかわりにpypyとタイプするだけ。

ベンチマーク替わりに、スライドパズルの課題でちょっと難しいものをやってみた。
ノーマルのpythonでは10分かかるが、pypyでは2分。大好きだPyPy

time python google-pazzle.py google.txt

real 10m32.328s
user 9m43.628s
sys 0m6.940s


time pypy google-pazzle.py google.txt

real 2m1.954s
user 1m56.695s
sys 0m2.553s

DevQuizに挑戦してみた

 今年のGoogle developer day のQuizはスライドパズルだった。
昔からある15個の数字が書いてあるコマを動かして順番に揃えるアレ、遠足の時にぼっちになったら黙々とやっていたトラウマとかどうでもいい。

普通のパズルと違って、制約事項が2つある。
1.盤面に動かせないコマがある。
2.上下左右に動かせる数は上限がある。上限を超えると失格
問題の数は5000問で1問解くごとに0.01点が与えられる。

1の条件により、一般的な15パズル解法プログラムは使えない。
また、上限があるということは、手数は丁度もしくは足りないため、正解数が最大になる組み合わせを探すことになるだろうと予測した。
これにより、満点ということはなく4900問前後での闘いになるだろうと読んだ。まあ、結果的には予測は大外れだったわけだが。

言語は日頃使っていないpythonを選択。数値演算が得意そうだし、googleに提出するしね。

 作戦は「空」つまり0を上下左右に動かして結果を記録して1手、次に1手で記録した盤面を全て上下左右を調べて記録、これで2手。
pythonのmapを使い、インデックスを盤面とした。検索が超早い。
 が、しかし爆発的に記憶する盤面の数が増えていく。当然、メモリが足りない。そこで、各コマについて本来の位置との距離を求め、合計が大きなものすなわち正解から遠いものを捨てた。
また、結果から逆に問題の方向へ動かすこともやった。
最大手数を100手あたりに設定して、3000問は解けた。手数が多いと何をやってもメモリ不足となる。

9月に入って結果を見ると全問正解者がいらっしゃいます。え~、目論見が外れた。

締め切り前日になって、盤面の大きなパズルは半分ずつとけばいいと気がついた。
急いで実装してみたが、半分でもまだ手数が多すぎる、じゃあ1/4とか1/16でということになるが、時すでに遅し。

計算時間を短くするために、複数のマシンで分散して処理できるようにした。8台で分散させたが、COREi7のマシン1台に負けるんだよね。

満点にはならなかったけど、pythonはプログラムしていて楽しい。他の言語に比べて、コアな部分に専念できるような感じた。
Cythonやpypyは今回試していないが、こういうものがあると知っただけでも今回参加したかいがあった。

以下ソース。ちょっと汚い。

Continue reading "DevQuizに挑戦してみた" »

August 02, 2010

ファイルから1行づつ取り出して、正規表現でマッチングして、書式をつけて出力する

ファイルから1行づつ取り出して、正規表現でマッチングして、書式をつけて出力する要件があった。
対象のマシンにperlが入ってなかったので、perl で 30秒ぐらいで済むことをpythonで3時間かかることになるとは。 結構、日本語処理にハマる。
 文字コードを指定してファイルを開く
 fin  = codecs.open('euc.txt', 'r', 'euc_jp')
 fout = codecs.open('sjis.txt', 'w', 'shift_jis')

行末の改行が邪魔だ。chompはないのか、いや、rstripがある。
  for l in fin:
    l=l.rstrip();

正規表現でマッチングするときに文字列の前にuを付ける
 s.match(u'項目:')

先頭で文字コードを宣言して
# -*- coding: utf-8 -*-
ソースファイルはutf-8で保存する。

出力結果を画面で確認したので、ファイルにリダイレクトしようとするとエラーになる。 たぶん、自動フィルターの何かの設定がダメなんだろう。  ここでpythonの再インストールすると、今まで頑張ってきたのが無駄になるので、ファイルを開いて書き込んだ。

参考にしたページ  Pythonで日本語を使う

June 13, 2010

GoogleAppEngine

1日かけてgoogle app engineのチュートリアルをやってみた。
スタート ガイド: Python - Google App Engine - Google Code

新しい環境で、webサイトを作るときに確認することは、以下の3つだ

  1. get,postなどのパラメーターの受け取り
  2. データーベースへのアクセス
  3. テンプレートエンジン

引数を受け取って、データーベースに書き込んだり読出したりして得た結果を、テンプレートに流し込んで表示する。
 Google App Engine で使えるフレームワークwebappでは、それぞれ以下のように取り扱う

  1. webapp.RequestHandlerの派生クラスで、request.getにてパラメーターを受け取る
  2. db.Modelの派生クラスでフィールドを定義して、SQLとそっくりな文法のGQLにてデーターベースにアクセスする。どのDBサーバーでどのように処理されているかは考えなくて良い
  3. template.renderを使って、予め用意されているテンプレートに値を流し込む。Django のテンプレート構文
ということだ。

次のステップで読んでおくところ
App Engine Python の概要 - Google App Engine - Google Code

Python プログラマのための Django テンプレート言語ガイド — Django v1.0 documentation

先は長そうだ。

January 12, 2010

Pythonを使っても寂しくないんだ

 海外では絶大な人気のpythonなのですが、日本では今ひとつ盛り上がりません。本当はpythonが大好きなんですけど、会社ではphpを使っていて「pythonってわけわかんねえよ」という周りの意見に空気を読んで合わせている人いませんか。俺だけ?
 そんな私に勇気をくれるサイト見つけました。

PythonMatrixJp

 いやあ、このサイトを読めば少数派の孤独感が癒されます。他の言語を貶すことなく、pythonを使ってこんなことやあんなことができると紹介しているのがさわやかでいいです。
 自分にとっては、perlはスクリプト言語の入り口だったし、phpは今も一番使っている言語だし、rubyは書いていて楽しいし、schemeはわけがわからないけどカッコいいし、他の言語もスキだから。

 ゲームのプロトタイプとか、モデリングに頼らないコンピューターグラフィックスとかはpythonが一番向いているんじゃないかと思います。根拠の一つが強力なライブラリとフレームワーク。

PythonGameLibraries

こういうの見るとわくわくしませんか。

October 09, 2009

pythonでbox2dを使う

さっさとcocos2dの続きをやれ!と自分でも思うのだが、寄り道が楽しくて仕方がない。

pythonとpygletの組み合わせは実に楽しい。コンパイル不要でサクサクopenGLが動くなんて、10年前はシリコングラフィックスでも夢だった。いい時代だ。

物体が表示できたら動かしてみたくなるのはプログラマーの性。ただの線形運動とかは面白くないので、物理エンジンを探す。
pythonにはpybox2dを組み合わせて使うらしい。

Downloads - pybox2d - Project Hosting on Google Code

 よりダウンロードしてインストールしたらすぐに使えそうだが、そう甘くない。
物理エンジンは入力された条件と時間の経過を元に数値を返すだけなので、外から見て実にわかりにくい。pybox-testbedのダウンロードは必須だ。といっても、hello.pyなんかは数字しか返さないけど。

 

 なにせ、日本語の情報がほとんどない。testbed付属のサンプルソースを読め。いや、読むんじゃなくて感じろ、実行しろ。demos.pyを実行すればメニューが出る。それぞれ、遊ぶと面白い。