このブログ更新したらエラーが。
SQLite3::BusyException (database is locked):
timeoutをどんだけ増やしてもダメ。
% sqlite3 production.sqlite3 vacuum
SQL error: disk I/O error
passengerが掴んでるのか知らんけど、ロックしてるプロセスはどうやって探せば良いんだろう?
% cp production.sqlite3 foo
% rm -f production.sqlite3
% mv foo production.sqlite3
とりあえずコピーして削除したらロック消えた・・・。
% stat -c '%s' production.sqlite3
2905088
% sqlite3 production.sqlite3 vacuum
% sqlite3 production.sqlite3 reindex
% stat -c '%s' production.sqlite3
2865152
ついでにvacuumしたけどあんまりサイズ減らないなあ・・・。
「クラウドって何?」
と聞かれてすっぱり答えられなかったので自分でも良く理解してないんだろうということで調べてまとめてみる。(絵を描いたり文章にしないと理解できない残念な頭になっている・・・)
クラウドとは
ビジネス的にはクラウド(大体はクラウドコンピューティングの意味で使われる)とはソフトを自分のPCにインストールするのではなく、Gmailみたいにインターネット上のサービスを使うコンピューターの利用形態のこと。
技術的にはクラウド(大体はクラウドコンピューターの意味で使われる)とは仮想化技術や大規模分散技術のこと。
メリット
- コスト安
- どこからでも同じデータにアクセスできる利便性
デメリット
- カスタマイズ性が低い
- UIがヘボイ
- 遅い
Google App Engine入門:実行効率を犠牲にせずに開発効率だけを上げるテクニックmemoize (デコレータ)
これはPythonを使う人たちの間では良く使われるデコレータのパターンで、関数の戻り値をクロージャを使ってキャッシュすることにより、実行効率を上げる仕組みである。Google App Engineの場合、サーバーが一度メモリーにロードしたモジュールは、アプリへのアクセスが途絶えてアプリそのものがサーバーから追い出されない限りはメモリーに常駐していてくれるので、memoizeとはとても相性が良い。
kwargs(デコレータ)
これは、HTTPリクエストをプロセスするRequestHandlerのメソッドを実装する際に、getやpostに渡されたパラメータを、関数へのnamed argumentとして渡された形でのコーディングを可能にするデコレータである。
イイね!イイね!(何様だ > 俺)
めもいずって糞面倒臭いイメージがあったんだけどデコレータでこんなにシンプルに実装できるんですね!
こういう、"大きな仕事はしないけど、ちょっと便利にしてくれて、マイナス面はほとんど無くて、嫌なら別に使わなくても問題無い"みたいな、プログラムに幸せだけを振り掛けてくれるような、きざみパセリみたいなモジュールとても好きです。(最近のRubyだと"g"みたいな)
質問!
GAEのwebappでCRUDはどういう名前使うんでしょうか。世間のコードにはjava風、rails風、我流といろいろあって迷う。
BookmarkのCRUD
モデルのクラス名はBookmarkで良いとして、actionの良い命名規約が欲しい。
| 名称 | URL | クラス | メソッド |
|---|---|---|---|
| 一覧 | /bookmarks | BookmarksHandler | get |
| 詳細 | /bookmarks/1 | BookmarkHandler | get |
| 登録フォーム | /bookmarks/new | BookmarkNewHandler | get |
| 登録 | /bookmarks | BookmarksHandler | post |
| 編集フォーム | /bookmarks/1/edit | BookmarkEditHandler | get |
| 編集 | /bookmarks/1 | BookmarkHandler | put |
| 削除 | /bookmarks/1 | BookmarkHandler | delete |
とりあえずはこんな感じで行こうかなあ・・・。(みんなどうやってる?)
まずHTTPのメソッドについてはREST厨的にはこれしか無い気がする。そうなるとgetが4個あるので最低でも4個のクラスが必要になる。suffixはAction, Handler, Page, Controllerなど色々な例を見るけど、どうもどれもしっくりこない。
Actionはその後に動詞が来るので"XxxActionがgetする"っていうのは何か変な感じがする。Handlerは無難な感じがするけど逆にあってもなくても良いものをわざわざ付けてるという雰囲気が気になる。Pageはページだけじゃないし、Controllerはリソースに対して一つのControllerが対応しないとおかしい気がする。
NewとかEditもちょっとなぁ・・・。
花京院の続き。
"プログラマーとして困る"というのはみみっちい話だけど2点ある。(両方個人的な話で、「俺は関係無いな」という人も沢山いると思う。)
プログラマーの価値が下がる
超大雑把に言うと、IT業界のエンタープライズ系・コンシューマ系は、
- 垂直統合型の時代
- 水平分業型の時代
- オープンソースの時代
- Googleの時代
って感じだと思う。1、2の時代はある程度鉄板ソリューションがあったんだけど、オープンソースが仕事にも使える様になってきて、プログラマにコーディングだけじゃなく、カオスな中からソリューション自体を選ぶ目利き的な事も期待されるようになった。
それが全部Googleでいいんでしょ?ということになるとIDEやフレームワーク、ミドルウェアなどもGAEに特化してきて今よりプログラマーの差異は小さくなる。(カオスな中をHackして一刀両断に問題解決するのが醍醐味だったわけだ)
多様性が減るとつまらない
プログラムは仕事と同時に趣味でもあるわけだけど、オープンソースが上手い具合にGoogleに誘導・操作されると多様性が無くなってつまらない。
同じジャンルに沢山のプレーヤーがひしめいて、パクりパクられ、鎬を削って、時には"誰得"的なものもあって、煮詰まりつつじりじりと全体のレベルが上がってきてある時、ポンッ!みたいのが面白い。
わがまま
要は業界が成熟してきたっつーことなんでしょう。黎明期を回顧する典型的おっさんなんですが、オープンソースでその成熟が思い切り予想外の方向にすっ飛んでいったのを見ると軌道修正されてGoogleに集約されずに行く方向は何か無いのかなあと思っちゃうわけです。
真面目に考えると、インフラをどうにかしないと変わりそうにないですな。SETIやFONみたいにP2Pか相互幇助なハードウェアリソースの上で動くレイヤーを開発する?難しそうだなー・・・。
関連:
Hpricotで良いなと思ってたのが、"クラス名と同名の関数にデフォルト動作をさせる"というやつ。
class Foo
def initialize
puts "new"
# code...
end
def fetch
puts "fetch"
# code...
end
def send
puts "send"
# code...
end
end
def Foo
foo = Foo.new
foo.fetch
foo.send
end
こんな感じでFooクラスにFoo関数を作っておく。
% irb -r foo
>> Foo()
new
fetch
send
=> nil
普通こういう場合Foo.run!とかを用意するけど、クラス名をとりあえず実行してみればいいというのは楽。変数と関数の2値を持てるところを利用してるんだけどシンプルで好きだ。
このパターンの名前みたいのあるのかな?
Life is yak shaving: GAEOに関するレポートを公開しましたTwiiterの知り合いでkomagata氏に、GAEO(Google AppEngine Oil)の調査をご依頼いただいたので、調査してましたがGoogle Codeにそのレポートと簡単なサンプルを載せてありますので、ご興味のある方は見てください。
Python迷子のkomagataです。
GAEで利用できるフレームワーク調査とGAEOのサンプル作成をnaokitsさんにお願いしてたんですが、とても分かり易くまとまっているのでGAEやPythonの大海原で溺れている情報弱者の俺の様な人はとても参考になると思います。特にGAEOは何か日本語情報少ないですからね。
フレームワークといってもdjangoなどのハードなのとは違ってwebappとかDatastoreとかをちょろっと薄皮かぶせた様なもんで、行数自体少ないのでソースを全部読むのもそれほど苦じゃない感じです。(pythonは特に他人のコード見易いですし、railsなんかより全然小さい。)
お仕事依頼したのは人助けみたいなものだけじゃなくて、
- python歴1週間未満だったジャパン価格の人日単価の俺が調査するよりiPhoneやGAE, Pythonに習熟しているnaokitsさんにお願いした方が遙かに合理的。
- 海外の方にtwitterのみで依頼するというスタイルは今後のためにも以前から試したかった。
- 会ったこと無いひとにリモートでの仕事依頼は何度もやってるのでリスクは感じなかった。
- プログラマーというだけで無条件で好きなのでそういう人の助けになりたい。
- 盗難にあったnaokitsさんも助かる、GAE, Pythonに詳しい人に調査してもらえて僕も助かる。という状態なのでやらない理由が見つからない。
ということでtwitterのTLでみた3分後ぐらいに依頼しました。正直、会ったこと無い人に何回も仕事依頼してますが、コード見れば一発で素晴らしい仕事をしてくれるかどうかはほぼ100%わかるし、今のところその通りになってます。逆に履歴書・職務経歴書は12%ぐらいしか参考にならない。
実際に依頼する手順としては依頼内容と金額と口座を聞いてネットバンクから振り込むだけ。まったく手間かかりません。
naokitsさんの仕事は上記の内容で確認して頂けると思います。それ系の仕事依頼したい人はiPhoneもOKなのでtwitterで気軽に依頼してみてはどうでしょうか。(naokitsさんのtwitterアカウント:naokits (naokits) on Twitter)
参照:


