例のあれ(仮題)

むしろ一昨日参ります。

“python”な記事の一覧画像一覧

4 Pages1234>

雰囲気だけでもPythonicな感じで。 - 2010/3/21 (日) p.m.10:52 -

 PyChecker: a python source code checking tool
 Python Package Index : pep8 0.5.0

 Perlさんでは“-cw”というオプションを付けて実行する事で構文チェック的な事を行う事ができるのですけど、GoogleさんのPythonスタイルガイドを紹介した時に、Pycheckerというツールを使って同じような事を行っていると知りまして、「あ、これだな」と使うようになりましたが、さらにPythonさん標準のコーディング規約に沿っているかチェックするpep8というツールもある事も知りましたので試してみました。
 Pycheckerはソースをダウンロードして setup.py で、pep8 は easy_install に対応しているのでコマンドライン一発で、どちらもお手軽に導入する事ができます。

 て事で、先日垂れ流した waitcontroller.py に pep8 を適用してみましたら、

risa:Desktop tac$ pep8 waitcontroller.py
waitcontroller.py:12:1: E302 expected 2 blank lines, found 1
waitcontroller.py:66:16: E701 multiple statements on one line (colon)
waitcontroller.py:97:10: E111 indentation is not a multiple of four
waitcontroller.py:122:80: E501 line too long (83 characters)
waitcontroller.py:263:1: W391 blank line at end of file

 などと言われたので試しに修正してみたりして。んー、細かいなぁ。

PHPerのためのPython入門な記事。 - 2010/3/20 (土) p.m.11:42 -

 PHP 開発者のための Python の基本

 さっきちょいとお話したので突発的にするエントリー。

 僕らがPHPを始めたときはプログラミングの入り口と捉えている人が多かったのか、その後いろいろな言語の方へと移行していった人が多かったのだけど、最近ではそうでもないのかなぁと。いろんな言語、いろんな環境をやってみるのも楽しいですよ、実に。

適当にリクエスト制限するモノ。 - 2010/3/13 (土) p.m.12:17 -

 RWS開発日記 — 【重要】ウェブサービスのリクエスト制限についてのお知らせ - 楽天ウェブサービスの開発・運用チームのブログ -

 少し前にまた楽天ウェブサービスさんに障害が発生しまして、まったく繋がらないわけじゃないのですけど20回に1回くらいしかちゃんとしたレスポンスを返してくれないような事態に陥りまして、そのお知らせとして出されたのがこのブログの記事なんですけど、どうやら1秒間に1リクエスト以上行っているところが多いみたいですね。
 実際にアクセスが1秒に1回以上なくても、1ページ生成するのに複数のリクエストを行うような作りだと確かに簡単に超えてしまいそうです。

 うちも細々とあさましい事に精を出しておりますのでこれは他人事ではないなという事で、私が使っているロックファイルを参照して指定の秒数が経過していなかったら待ちを入れるみたいなPythonのスクリプトを適当にあれしてみます。

 http://reiare.net/site_media/file/waitcontroller.txt

 都合により拡張子を変更していて、コメントアウトしたコードが盛大に残っていたりするけど、小ちゃい事は気にす(ry 使い方はdoctest見てください……。

 うちのは1分間に5、6回くらいしかリクエストを投げていないみたいなので、ちゃんと機能しているのかはわかりませんけど、怒られてはいないみたいなのでそうおかしくもないんだろうなぁと思ってるよ。

Djangoのドキュメントの落とし元と避難先。 - 2010/3/9 (火) p.m.10:18 -

 503 Service Temporarily Unavailable

 あえて表示されるままにリンクを張っておりますけど、昨日何かの拍子に参照しようとしたら、何かの拍子て読みたかったからだろ、この状態でありました。
 そんなときの為にドキュメントのダウンロードができるところと、ドキュメントの参照ができるミラー的なところをtwitterで拾ったので以下に。

 MiCHiLU / Django-doc-ja / overview — bitbucket.org
 Django ドキュメント — Django v1.1 documentation
 Django ドキュメント — Django v1.1 documentation

 これだけあればどれか一つは生きているだろー。そもそも本家的なところが落ちないのが一番いいけど、どんな感じなのかも知らないからいろいろ言えないです。頑張れ頑張れぃ。

urllib.quoteで/もquoteしたかったの。 - 2010/1/20 (水) p.m.11:27 -

 18.5 urllib -- URL による任意のリソースへのアクセス

 Pythonのurllib.quote()で“/”も“%xx”エスケープしたいなぁと思って、String.replace()かなとか適当に思っていたのだけど、urllib.quote()はデフォルトで“/”を渡しているという事を知って、

urllib.quote(文字列, '')

 ですっきりしっかり。常識ですか、そうですか、人はこうやって一歩ずつ歩みを進めるわけですよ、えぇ、そうですとも。

 これからもドキュメントはちゃんと読みたいです。

GoogleさんのPythonスタイルガイドの翻訳版。 - 2010/1/18 (月) p.m.09:58 -

 Google Python スタイルガイド — lazy programmer's works. v1.0 documentation

 Google最強、大好き、何がなんでもGoogle、Googleで決まり、Googleしかあり得ない。みたいな人ではありませんけど、Googleさん嫌いじゃない、結構お世話になってる、正直なところなくなると困難に陥る可能性高い。くらいな人ではありますから、信頼度高いです、Googleさん。
 PEP 8 -- Style Guide for Python Codeというご本家様のガイドラインもありますけど、こちらも絶賛参照して参考にしたい、していきたいですね。

 そんなわけで、つらつら読んでおりましたら、プロパティを利用しようみたいなところがありまして、つい先日、某処理を勢い余ってモジュール化クラス化した時に、

def __setattr__(self, attr, value):
    if attr == 'lock_file':
        self.__dict__[attr] = os.path.join(os.getcwd(), value)
    elif attr == 'wait':
        self.__dict__[attr] = int(value)
    else:
        self.__dict__[attr] = value

 みたいなプログラムを書いていたので、こういうところをプロパティに置き換えるといいんかなー、いいんだろうなー、置き換えてしまえー。

_lock_file = None
_wait = None

def __set_lock_file(self, value):
    self._lock_file = os.path.join(os.getcwd(), value)

lock_file = property(lambda self: self._lock_file, __set_lock_file, None, None)

def __set_wait(self, value):
    self._wait = int(value)

wait = property(lambda self: self._wait, __set_wait, None, None)

 とこうしてみました。一応テスト通ったから良しとする。

 Googleさんの例が「___」と「__」が前に付いた二つのメソッドで二段階にしている意味はわからずじまいだったけど、まぁ、いいか、ひとまず。あと、これでネームマングリングも思い出したよ、あったわー、こういうの。全然身に付いてねー。

djangologgingが素晴らしすぎた。 - 2009/11/17 (火) p.m.04:49 -

 Overview - django-logging - A very brief overview of django-logging. - Project Hosting on Google Code
 Screencast 2: Logging in Django, for fun and profit | Surfing in Kansas
 ログをとる - スコトプリゴニエフスク通信

 全く気にかけていなかったわけではないですけど、積極的に追っかけていたわけではないDjangoさんですから、例によって世の流れ的に周回遅れなのですけど、開発時、デバッグ時に超大活躍しそうなロギングツール“djangologging”が凄すぎて格好良すぎて素敵すぎた。
 実行したSQLまで表示する事ができたりして、あれって思った事は全て追っかけられそう。Djangoのmiddlewareなので導入も楽々、設定もsettings.pyに追記するだけ。

 詳しくは二つ目のリンク先のスクリーンキャストをご覧になって頂きたいですけど、もう全てのプロジェクトでこれを使いたいと思ったよ。全てのプロジェクトっつったって、れいあれさんしかないのだけどな。

Amazon Product Advertising API リクエストの署名認証な記事。 - 2009/11/17 (火) a.m.08:58 -

 Amazon アソシエイト(アフィリエイト) - ヘルプ
 Amazon アソシエイト Web サービス改め Product Advertising API の電子署名について調べてみました - にーやんのブログ 2

 流石に周回遅れも甚だしい事もあって、あっさりと日本語の素晴らしい記事の数々を見つけましてあっさり対応できました。

 上記二つ目のリンク先はPythonで実装されていますが、必要条件やプロセスなども詳細に説明されていますので、他の言語で対応される際にもすごく参考になると思いますよ。

画像を扱うモデルを拵えようとしている。の3 - 2009/9/30 (水) p.m.01:38 -

 例のあれ(仮題)・画像を扱うモデルを拵えようとしている。
 例のあれ(仮題)・ 画像を扱うモデルを拵えようとしている。の2

 古い記事ですけども、とりあえず上記記事が前提です。もう二年半以上前の話なんだね。まぁ、これから書く話も結構前の事でいまいちしっかりと思い出せるか不安なんだけどさ。

 私が一人勝手にうっかりしている間にDjangoさんは1.1がリリースされていたりしまして(Django | The Web framework for perfectionists with deadlines)、「そいうえば全然追っかけてないし、多分動かないのだろうなぁ、とりあえず動くようにしはしておかないとなぁ、何があるかわからないし」って事で作業を開始。
 実は1.0に対応するタイミングも逃していて、それはもうそこはかとなくさりげなく変更点があったりして管理画面を出すのにも手間取る有様だったのだけど、何とか完了。その中でも面倒くさかったのがImageFieldの扱い(多分FileFieldも、試してないけど)だったのでメモしておこうかなぁと。
 あ、ぼやぼやしているので解決するまでが面倒だっただけで、解決法は面倒ではないです、むしろやっつけ適当対応しちゃったから。

image = models.ImageField(upload_to='images/%Y/%m/%d', height_field='height', width_field='width')

 上記のようにModelで記述してファイルをアップロードするとDjangoさんの方で勝手にパスを追加してくれて、パス込みのファイル名を取れるようになります。と言うのを利用してsave()メソッド内でごにょごにょして使っていましたが、1.1から挙動が変わってしまったようで最初の保存時のsave()メソッド実行時にはまだ追加されていません。こちらとしてはパス込みのファイル名が返ってきて欲しいのに、パスなしの普通のファイル名だけが返ってきてしまいます。
 save()メソッドの中で自分で追加したりとか、Djangoのソースをひっくり返して追加する処理を探したりとかいろいろやってみましたが、いちいちしっくりこない、納得できない、なんかヤだ。事前に呼んでくれないのなら、自前で呼んでやる。一発目で呼んでやる。と、

super(EntryImage, self).save(force_insert, force_update)

 を最初に実行すると上手くいったりしました。良かった良かった。

 そんなわけで、改変したsave()メソッドを抜粋。

def save(self, force_insert=False, force_update=False):
    #if not self.id == None:
    # Django 1.1の仕様変更によりとりあえずセーブ
    super(EntryImage, self).save(force_insert, force_update)

    base, ext = os.path.splitext(self.image.field.generate_filename(self.image, self.image.name))

(中略)

    org_img = Image.open(settings.MEDIA_ROOT + "/" + self.image.url).copy()

(中略)

    super(EntryImage, self).save(force_insert, force_update)

 これまでと扱いが変わってしまうので改悪だと思う向きもあるかと思いますけど、事前に保存されていたこれまでの挙動もそれはそれで余計な事だと感じるケースもあったと思うよ、上書きすると二回保存処理が走って気持ち悪いとか。
 難しい事はよくわからないのでどっちでもいいです、とりあえず動いたしー。

最近読んだ本。'09/09/03 - 2009/9/3 (木) p.m.01:06 -

 やっと読んだ。購入時、既に私だけの空前のPerlブームは終わっていたけれども、「Mooseとか今時のPerl開発手法とかどんななの?」と思って購入。
 本の小タイトルにある通り、実用的である事に重きを置いた内容で端折るところは端折る、突っ込むところは突っ込むと言った感じで、一通りPerlを使った後でこれからも活用していきたい、同時にオブジェクト指向的な開発を行いたい人に取っては一つの指針になりそう。個人的にもMooseの設計仕様やオブジェクトデザインパターンの項などは非常に興味深く楽しかった。
 ほかにも各モジュールやツールを活用したテスト手法や最適化手法、果てはXS作成などまで紹介されていて、今後何かあったら必ず参考にしたい。中でもCPANの流儀に沿うといろいろいい事があったり便利だったりするのを今さら知ったのが大きくて、外から見ると色々難儀な事がありがちなPerl界ですけども、言語とも相まってか懐が深いなぁと思ったりした。
 そのままのいきおいでこの自前blogアプリをCatalystで! と思ったけど無気力だからすぐ忘れた。

 Django使ってこのblogアプリを作りたいだけでPythonを始めた様な輩なので、この辺の「ちょっとこういい感じの? 原典っぽい? オライリーの動物本で?」とか思っていかにもに購入。正直、厚さと文字の細やかさによる情報量に楽しみな半分、心も折れそうに。毎度毎度折れやすい心ですね。
 改訂を重ね読み継がれている本ですから安定感ばっちりで、ゆったりたっぷりしっとり系統立てて説明してあります。「初めての」というタイトルに偽りなくこれでもかと実例を交えて紹介します。これだけの情報量ですから、詳細です。しかしながら、ところどころで内部的な処理の説明が織り込まれるなど、「単純に表だけわかりやすくラップしました」という感じでもないのが良いです。とその辺に興味だけあるボクが。
 前置きしながらもそれまでに説明した事を再度説明したり、Pythonの思想ではみたいな事が出てきがちですのでクドいと思われる向きもあると思いますが、量的にもじっくり取り組まねばなりませんからこれはこれでいいのではないかと感じました。忘れっぽい私は随分と思い出させてもらいました。
 できればdoctesなどにも触れて欲しかったですけども、とりあえずこれ一冊あればなんとかなるんじゃないかと思いますよ。

 他にも何冊が読んでいるけど、飽きたので今回はここまでー。

Google App Engineでもいけます、web2py。 - 2009/5/17 (日) p.m.08:50 -

 web2py: Enterprise Web Framework

 アプリケーション形式で配布されていて、それにアクセスしたブラウザ上で設定やプログラムを編集したりして構築していくPython製のWebアプリケーションフレームワーク。

 ホンのちょっとだけ触ってみましたけど、面白いと思いました。そのうち暇になったらもっと本格的に遊んでみたい。暇は作るぞ、絶対。そろそろ結論出してやるんさ。

Python 3の概要的な記事。 - 2009/3/5 (木) p.m.10:28 -

 Python 3が後方互換性を捨てても求めたもの - @IT
 言語としての一貫性を重視したPython 3の進化 - @IT

 メモ。

 最近Python 3系どころかPython自体からすっかりご無沙汰でありますが、その分PerlとかPHPとかJavascriptとかと慣れ親しめた様な気がします。気がするだけ。
 そろそろまたPythonをやりたいなぁという気持ちは持っていて、「初めてのPython」とかも買っていますが、最初の方をちらっと読んだだけですねぇ。まぁ、当分はPython 2.5系で行きたいと思う私であります。

Django 1.0 リリース! - 2008/9/7 (日) p.m.07:57 -

 Django 1.0 が遂にリリースされました。 | Djangoと日本の仲間たち

 ついにPython製WebアプリケーションフレームワークであるところのDjangoが1.0に到達しました、目出たい。

 思えば、私がDjangoなるモノに始めて触れたのは0.95がリリースされたその次の日でありました。これは狙ったわけではなくてたまたまそうなったのですけど、いいタイミングだったなぁとちょっと思っていたりして。そうそう、それまでPythonは憧れの言語で、かつ手をださないものだったので未経験でありましたよ。ある人に薦められてちょいとやってみようと思ったレベル。
 その時はチュートリアルだけやって、「なるほど面白い、格好いい」とは思ったのだけども、当時ほら、WebObjectsとかが大変とても微妙な時期だったりしたからさ。なんとなくもうちょっとこっちでみたいな気分だったし、今でも“WebObjects >>>>>>> Django”みたいに思っているくらいだからあまりその気にはなっていなかったりして。

 でも、その数ヶ月後、色々と状況に変化があったりもして、気持ち的にも色々やってみたくもあったので、とりあえず自分で使う用のブログっぽいものを作ろうとしてみた。あー、某スパムの人のblogkitとかいうのを凄く参考にさせて頂きました(Djangoのblogキット | スパムとか)。いや、あまり面影がないという話もあるけど、元がそういうものだからそういうものなんじゃないの。
 でまぁ、別にそのアプリを「れいあれ」として採用する気なんてなかったんですよ、本当は。やってみたかったから作ってみただけ、そんなノリですから。当時のこのページはWebObjectsで稼働していて、意地でも維持してやるとかそんな気持ちも強かったですし、前述の様に“WebObjects >>>>>>>>>>>>>>> Django”とか思っていましたから(←まぁ、比べる様なモノじゃないのですけどね)。実際、最初は別ページとして公開していたりもしました。
 しかしまぁ、色々思うところあり、こっちでいいかなとお乗り換え。レンタルサーバにも移行できて、部屋も静かに奇麗さっぱり。ソースも垂れ流して今の様な体制に。

 現在はDjangoどころかPythonにすら縁遠い生活を送っておりますので、1.0への追従は全くできておりません。できておりませんが、「そのうち!」という気持ちだけはありますよ。なんだかんだで大好きであります、PythonもDjangoも。これからも超よろしく!

PyDevがAptana入り。 - 2008/8/31 (日) p.m.01:28 -

 AptanaでPython開発が可能に、「Aptana Pydev」リリース:CodeZine

 Aptanaってのは基本的にWeb系向けの開発環境なのですけど、それにPython向けのプラグインであるPyDevが含まれる様になりました。
 これはDjangoの影響、ではなくてGoogle App Engineの方の影響なんでしょうね。まぁ、Google App EngineにDjangoは含まれておりますからどちらでも別にいいのですけど。

 と言うか、最近PyDevどころかPython自体触ってないし。

Django 1.0 beta 1 released! - 2008/8/15 (金) p.m.11:29 -

 Django | Weblog | Django 1.0 beta 1 released!

 9/2の1.0リリースへ向けて、こちらも順調の様でございます。オンタイム、凄くオンタイム。

 ちなみにこのサイトで使っているDjangoアプリケーションは1.0上でまったく動作しません。て事だけ確認してます。それなりに追従したかった。リリース前だが既に過去形。

NetBeansがPythonのサポートを強化する模様。 - 2008/7/13 (日) p.m.09:58 -

 NetBeans IDE、Pythonサポートへ本腰 - Jythonも | エンタープライズ | マイコミジャーナル

 「ネコがどうとかうるさいから使わない」と公言して憚らず一度も使った事がない私ですけども、Pythonがサポートされるとなればちょっとだけ手を出してしまうかも知れない。ネコなんたらは支持しないけど。

 でもねぇ、どうせIDE使うなら何でもEclipseがわかりやすくていいかなぁとも思うんだよね。Xcodeは仕方がないとして(←なんでだ)。

“みんなのPython Webアプリ編”を読んだ。 - 2008/5/24 (土) p.m.01:12 -

 感動した。Webアプリを作っていたり、Webアプリケーションフレームワークに興味がある方々は是非手に取って頂きたい。

 目次が発表されてからその内容にも興味があって「読みたい!」と思っていたのだけども、貧乏とか気持ちとかいろいろあって今頃になってやっと読みました。一応写経しながら内容を押さえつつだったのだけど、予想通り非常に面白く、かつ興味深い話でわりと一気に読んでしまいました。
 そもそも、私はDjangoからPythonに入った様なにわかでありますし、Webアプリを作る事しか出来ない様な輩でありますから、Pythonの事自体には全然詳しくもなんともなかったので簡単にHTTPサーバやアプリケーションサーバもどきが書けてテストに使えたり、テンプレートエンジンなんかも標準モジュールを使って簡単に書き始められる事に軽く衝撃を受けてしまいました。
 もちろん他の言語の事もあまり存じませんので当たり前の事なのかも知れませんけども、Pythonの標準モジュールの充実度は素晴らしいなぁと、あらためて思ったりしましたよ。

 私はこれまで10年以上Webと言うモノに触れてきて、Webアプリを開発する事を始めてからも同じくらいの年月を過ごしていますけども、ずっとWebアプリケーションフレームワークというものに興味があります。昔から開発している方々は覚えがあると思うのですけど、みんな俺様ライブラリ的なモノを持っていましたよね、DB接続用クラスだったり文字列生成関数だったりもろもろ……。私もPHPでやっていた頃はアプリを開発する度にそれらのライブラリがアップデートして行きました。
 そして、自分だけで作って使い続ける事に限界を感じるのと同時に、世の中にはもっともっと凄いモノがある、フレームワークとしてまとまりまくっているものがあると知り、それを使う道を選んできたわけです(←まぁ、WebObjectsとかだったりするわけですよ、私的には)。基本そのフレームワークを使い、その上に自分好みに変更、拡張、改悪した様なライブラリをかぶせて(←WebObjectsだとWebObject用のフレームワークが作れる)。
 そんなこんなで、Webアプリケーションフレームワークを使う事にも興味がありますが、その中身にも興味があったりしまして、Djangoを使い出してから感動した事に「ソースが公開されていて中が見える」というのもありました。しかしながら、中が見えるからとそれを理解する事には凄く隔たりがあって、それはこれまで自分が不勉強であった事を恥じるものでありますけど、この本を読む事で基本的な事を理解する道が開けた様な気がします。

 さぁ、いつかまた俺様フレームワークを作るぞw。

Google App EngineでDjangoのマネジャ的なモノを。 - 2008/4/26 (土) p.m.01:39 -

 モデル API リファレンス : Django オンラインドキュメント和訳

 Google App Engineでモデル以外にDjangoを使って遊んでいると(←遊んでいるのか)、ついついモデルの方もDjango的にやってしまって、先日なども公開フラグを使ってフラグが立っているものだけを抽出する様なカスタムマネジャが欲しくてひととおり実装して動かない、何故か動かない。……動くわけない。

 てわけで、@classmethodデコレータを使ってそれっぽいヤツをでっち上げて満足した。

  published = db.BooleanProperty(default=True)

  @classmethod
  def published_objects(cls):
    objects = cls.all()
    objects.filter('published =', True)
    return objects

 こういうのをModel内に仕込んでおけば

Object.published_objects()

 などと呼び出す事ができる。

Google App EngineとGoogle Data APIsで超絶アプリを。 - 2008/4/25 (金) p.m.09:26 -

 Google App Engine Blog: Google App Engine + Google Data APIs: A Match Made on the Web

 GoogleフェチのPythonistaには貯まらない展開ですねぇ。ボクは違いますけど。

DjangoのチュートリアルをGoogle App Engineで。 - 2008/4/18 (金) p.m.09:27 -

 Using Django with Appengine

 Adminサイトを使えない時点で同じには成り得ないわけですが、Google App EngineアプリをDjangoを活かしつつ開発してみたいと思うDjango未経験の向きの入り口として非常に良いのではないかと思ったり思わなかったりします。

4 Pages1234>

“ひとりごと”的な(Twitter

    Googleさんでけんさく

    Google

    このページと私のコト

    長崎市在住おそらくWeb系エンジニア“たくぅ”さんが適当に適当な事を書いているページです。
    色んな方面から脱ニートしました。

    Mii

    Skype: reiare

    “れいあれ”ふぁみりー
    Touch! れいあれ
    例のtumblr
    あさましいあれ(仮題)
    あまぞしいあれ(仮題)β

    当blogのソースを公開中
    +++ download +++
    (Python 2.5.1 + Django 0.96用)