ゴミ箱の中のメモ帳

まだ見ぬ息子たちへ綴る手記

Pythonではてな記法っぽいパーサ

このブログを始めた当初ははてなブログを使っていた。だがはてなの対応が悪いのと、はてなのやり口が気に入らなくて使うのをやめた。

だが「はてな記法」はなかなか便利だと思っている。ドキュメント記法ではMarkdownやreStructuredTextもよく使われているが、それらはあくまでも「ドキュメント向き」なのでブログの記述にはあまり向いていない。

ということで、はてなブログから自作システムに乗り換えた今もこのブログでは「はてな記法もどき」を作って実装している。

現在の実装は急いではてなブログから離れたかったので取り急ぎと作ったのであまり品質が良くなく、およそそこら中でエラーが出ている。読むことには支障はないとタグが不正でも無視しているのだが、どうせならと作りなおすことにした。

正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)

正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)

詳説 正規表現 第3版

詳説 正規表現 第3版

正規表現クックブック

正規表現クックブック

正規表現辞典 (DESKTOP REFERENCE)

正規表現辞典 (DESKTOP REFERENCE)

続きを読む

Python Bottleのコードを読んだ

なんか最近は何にもやる気が起きない。なので最近は雑務のような作業ばかりしているのだけど、今日はその延長としてPythonのBottleマクロフレームワークのコードを読んでみた。

「今日は」といっても実際に読んだのは1時間半ほど。そのほかは今現在まで結局何もしていない。なにか作ってほしいものなどあればお気軽にリクエストを。

作るものすらも思いつかないほどの重症だ。

 

 

Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!] (Software Design plus)

Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!] (Software Design plus)

 
Pythonプロフェッショナルプログラミング第2版

Pythonプロフェッショナルプログラミング第2版

 

====
Bottleは本日現在最新の開発版を読んだ。

WSGIについては理解していないので読み飛ばし、その他のサーバアダプターもエンジン側を読んでいないので飛ばし、テンプレートエンジンもJinja2以外は飛ばした。まぁそれらは飛ばしてもBottleのコネクタなので関係ない。

Bottleは全体で4000行ほどなので概要を掴むようにして読んだが、まぁ非常にシンプルな設計だ。かなり冗長な部分があるように見えるが、なぜそこが冗長なのかまでは読んでいない。

だが全体的には構造化されており、RouterやRoute周りはプログラミングの勉強をしている人間は読んで損はないだろう。4000行やそこらでWSGI、アダプタ、テンプレートエンジン、URLディスパッチャを含んでいるマイクロフレームワークとしてもシンプルな部類であろう。

 

Bottleのドキュメンは全体的にざっと読んだがどうも複雑に感じてしまっていた。URLディスパッチャにしても記述ルールの全体を理解できているのかがわからなかった。

だがソースを読むことでまさにそのルールの全体像がわかった。そしてその他にもドキュメントを読む以上の理解が出来た。

やはり小さなコードはドキュメントよりも本体を読むべきだ。

Python2.5からPython3.xに対応させるために色々な工夫がされており、その点についても勉強になる。

HTCPCPなんかのジョークも組み込まれていたり良いコードだ。

 

最新版のコードはGitHubに上がっている。

 

https://github.com/bottlepy/bottle.git


と、することもないので読んだことを日記に書いた。

Pylfanがなんとなく動くようになった

多分。

https://github.com/kmasaya/Pylfan

つい今しがた寝ようとしても寝れないので仕方なくコード書いたら動くようになった。

暇な人は確認してください。

但し不具合が主だと思うのでもちろんコピーしたディレクトリで確認してください。

 

ImageMagick逆引きコマンドリファレンス

ImageMagick逆引きコマンドリファレンス

 
wxPython GUIプログラミング

wxPython GUIプログラミング

 
エキスパートPythonプログラミング

エキスパートPythonプログラミング

 

====
前回からの変更点は主に全て変わってます。

前回はJPEGで動作確認をしていましたが、PNGで使おうとした途端に一切動かないという事に気がついたのでそのへんも改善しています。

そのためにPILの機能に頼っていた部分を自前で実装しています。そしてそれは条件分岐でぶっ飛ばしてるのでそこそこ遅くなっています。なので色数変換とネガポジ反転の動作が重いかも知れません。

そしてその二つは思いつきで実装したので処理があっているかもわかりません。例えば1ビット以外では「黒」は出ません。

 

これで当初予定していた機能は実装できたはずですが、この左記いくつかの機能だけ実装予定です。他にもリクエストがあればコメントください。

  • 画像コメント追加

PythonのBottleとPeeweeのサンプル

だいぶ前にPythonのBottleとPeeweeを使ったサンプルとして「bottle.peewee.sample」を試しに公開していた。

本当に簡単なサンプルとして作ったのでいい例ではなかったと思うのだがたまにアクセスが有る。なのでもう少しまともなサンプルを作ることにした。

そしてもう少し現実的なコードでテンプレートとしても使えるようにと作ってみることにした。

公開したのはこちら。「bottle.peewee.template」。

名前からしても今後テンプレートとして使えるようになればと思っている。

Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!] (Software Design plus)

Pythonエンジニア養成読本[いまどきの開発ノウハウ満載!] (Software Design plus)

 
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

 

====
前回のサンプルとは違い、ファイルもいくつかに分割し機能を分離した。なので見通しが良くなっており、サンプルとしてもいいかと思う。

そしてユーザ認証やセッション的なものも簡易的に実装しているのでセッションライブラリを使わないユーザ管理も行える。DjangoやFlaskからBottleに移動する人はセッションが気になっているかも知れないが、Sessionはこうやって自前で実装してもいいかと思う。

ただしModelに密結合してたりとあまり良くないので、ライブラリがあればそれを使うべきだろう。もっと良い実装方法があればご助言願いたい。

とりあえず今回のサンプルも、テンプレートと言いつつもBottleとPeeweeであればこんなに簡単にこれくらいのものは出来ますよという参考にはなると思う。

 

まだ私も全然わかっていないので、指摘などがあればバシバシいただけると嬉しい。

kivy_table_widgetをPython3に移植

わけあってKivyを使い始めたのだけど、公式のテーブル(表)ウィジェットが見つからない。

誰か作っている人が居るだろうとGitHubを探すとやはり先駆者は居るもんだ。その名もズバリ「kivy_table_widget」。

だがシェバンを見てからもわかる通りPython2が前提となっている。printも関数では無く文で書かれていたりとPython3で使う気は無いのだろう。Python2.7ならprint関数も導入されているのになぜそうしないのか。

まぁ、製作者も私のように自分用に作ったのであろうから文句を言える身分ではない。

ということで簡単にPython3に対応させてみた。

PythonでかんたんiOSアプリプログラミング―Kivyによるマルチタッチアプリケーション制作

PythonでかんたんiOSアプリプログラミング―Kivyによるマルチタッチアプリケーション制作

 

 ====
基本的には2to3で一括変換し、フォーマットを直した位になる。

とりあえずはそれでサンプルは動くようになったのだが、これがなかなか問題が多いモジュールでなかなかバグバグしい。

私が表を表示させるためだけに使おうと思ったのだが、それでもいくつかのバグにぶつかった。自分に必要な最低限のものだけ治そうと思うが、これがなかなが込み入ったややこしいコードで修正がしづらい。

そしてなによりKivyを使い始めて2時間位なので、そもそもKivyのルールや使い方すらわかっていない。デザイニング言語があるようだが、それがわからないのでPyGtkよろしくコードでGUIを生成している。

PyGtkもGladeなんかでデザイニングができるが、Gladeの使い方を覚える時間でデザインができると今まで使ってこなかったことに今は感謝している。

 

ということで、「kivy_table_widget」をForkした。これからも使いそうならちょこちょこバグを直すかも知れないが、なにしろKivyを今後も使うかわからないのでコレっきりに成るかも知れない。

しばらくしたら本家の方にもバグ報告をするかも知れない。Forkしたことで気がついてもらえたら助かるが。

私がForkしたのはこちらから。

https://github.com/kmasaya/kivy_table_widget