ブックマークの表示を変えた
2007年04月28日(土) 02:36
GOESBYが04/29で一旦終了するのにともない、裏のブックマークサービスを換えました。
変更先は、もともとAPIのPythonラッパを作ったりしていたma.gnolia.comです。pymagnolia、微妙に使われてるっぽくてdjango-usersメーリングリストにも登場してました:-)。
ma.gnoliaは、タグの他にレーティングとスクリーンショットイメージを持っていたり、ブックマークレットが賢かったり、グループ機能がいい感じだったりします。
なので、今度からブックマークの表示部分にスクリーンショットが出ます。
レーティングが2以上のものしか表示しないので、もし見たい人がいたらma.gnoliaで見てください。トップページのブックマーク表示ブロックにある More を私のページにリンクしてあります。
Ploneからデータをエクスポート
2007年04月26日(木) 18:11
訳あって、Ploneからデータの抜き出しをすることになりました。
難しくてよくわからないので、ゴリゴリのエクスポートスクリプトを書きました。どうでもいいものなので、公開しちゃいます。
__Broken_Persistent_っていうぶっ壊れてるっぽいオブジェクトにはまりました。
用途に応じて修正しないと求める動作はしませんよ:-)
Data.fsは必ずコピーしたものを使ってください。
日本語対策。Pythonのデフォルトエンコーディングを確認
$ cat /usr/lib/python2.4/site-packages/sitecustomize.py
import sys
sys.setdefaultencoding('utf-8')
環境変数。Plone(Zope)の起動シェルからかっぱらった。
PYTHON="/usr/bin/python" ZOPE_HOME="/usr/lib/zope" INSTANCE_HOME="/var/lib/zope" CONFIG_FILE="/var/lib/zope/etc/zope.conf" SOFTWARE_HOME="/usr/lib/zope/lib/python" PYTHONPATH="$SOFTWARE_HOME" export PYTHONPATH INSTANCE_HOME SOFTWARE_HOME
ゴリゴリのスクリプト。Pythonシェルから実行ね。
import os
import sys
import codecs
from ZODB import FileStorage, DB
storage = FileStorage.FileStorage('/path_to/Data.fs')
db = DB(storage)
connection = db.open()
root = connection.root()
plone = root.data['Application']['plone'] #必要なオブジェクトまでは頑張って辿ろう
targets = [plone] #複数でも良いよ
BASE_DIR = os.getcwd() #出力場所に注意
error_dict = {} #いっぱいエラーが出ると嫌だから辞書にしまっちゃう
def walk_through(base_dir, target):
try:
target.__Broken_Persistent__ #なんじゃ、こりゃ
target = target.__Broken_state__
cur_dir = os.path.join(base_dir, target['id'])
t_dir = target.keys()
except Exception:
cur_dir = os.path.join(base_dir, target.id)
t_dir = dir(target)
if not os.path.exists(cur_dir):
os.mkdir(cur_dir)
os.chdir(cur_dir)
for d in t_dir:
v = False
try:
v = target[d]
except Exception, e:
try:
v = target.__getattribute__(d)
except:
error_dict['%s[%s]' % (target, d)] = target
pass
if v:
export_data(cur_dir, v)
def export_data(cur_dir, v):
if 'ProjectFolder' in str(v.__class__) or 'ATFolder' in str(v.__class__) or 'DocumentFolder' in str(v.__class__):
walk_through(cur_dir, v) #フォルダだったら再帰するよん。必要なフォルダタイプを指定してね。
elif 'ATDocument' in str(v.__class__): #ドキュメント
try:
f = codecs.open(os.path.join(cur_dir, '%s.html' % (v.id.strip(),)), 'w', encoding='utf-8')
try:
body = v.getText()
except Exception:
body = v.getRawText() #なんだろうねぇ
f.write('<title>%s</title>\n%s' % (v.title, body, ))
f.close()
except Exception, e:
print 'Document: %s' % v
elif 'ATFile' in str(v.__class__) or 'ATImage' in str(v.__class__):
try:
try:
fn = v.getFilename()
except Exception:
fn = v.Title() #拡張子が消えちゃうよ
f = open(os.path.join(cur_dir, '%s' % fn), 'w')
f.write(str(v))
f.close()
except Exception, e:
print 'File: %s' % v
for t in targets:
walk_through(BASE_DIR, t)
print error_dict
djangoのブックマークレット知ってる?
2007年04月26日(木) 01:47
実は、Djangoの管理インターフェース用ブックマークレットというものがあります。
docutilsをインストールしていないと、ブックマークレットの一覧へ辿り着けません。
管理インターフェースの動的生成ドキュメントはかなり便利なので、docutilsは是非インストールしましょうね。
ブックマークレットについてはこの動画を見てください。
JavaからRubyへ、からPythonへ
2007年04月25日(水) 13:53
JavaからRubyへ(日本語訳)、の第一章がオライリーで公開されています。
Javaのリスクとして、フレームワークが次から次に出てくることがあげられています。
たしかにEJBなんていう殆どのプロジェクトで必要としないものが重要であるかのように喧伝され、そして踊らされてしまう人たちがいることはリスクかもしれません。
しかし、よく考えてみれば様々な要件に対応できる言語であるというだけなので、とりたてて問題にすることでは無い気がします。
また、Railsの良さはフルスタックである点もあげられています。
Javaにも、まだあまりフレームワークが乱立していない2000年頃から、フルスタックフレームワークのturbineがありました(まだあるみたいでびっくり)。個々のコンポーネントはある時期プロジェクトが分離され、高い人気を誇っていましたがTurbine自体は全く流行りませんでした。
フレームワークが乱立していなくて、フルスタックのメジャーフレームワーク Ruby on Rails があるいというだけで、Rubyのリスクが減っているといっているのだとしたらどうなんでしょう。
先日の日本Javaユーザ会結成総会でS2のプレゼン後、Javaのおじさんたちが喫煙所で「じゃ、社に帰ったらS2のようなフレームワークを作りますか。」と会話していました。
フレームワークが少なくて、リソースが集中して、という状況は「JavaからRubyへ」が実現したとたんに消え去りますw。
流石に、あんたらそれじゃ何しても駄目だよっ!とおじさんたちには突っ込みたかった。
第一章しか読んでないので、きっととんでもないことを書いてしまっているはずです。
気になった人は買いましょう。私は買います。
そして、「JavaからPythonへ」に読み替えてがんばろう(フレームワークの数はPythonももの凄いんだけど、大丈夫ですよね?)。
はやく!S2 All In Oneを!
2007年04月24日(火) 14:09
S2には、フルスタックに見せかけるAll In Oneという配布物があるということだったんだけど、まだダウンロードリンクが無いみたい。
必要なのはどれとどれで、このコンポーネントの設定はここのドキュンメント見てってしたくないから、早くEclipseプラグインみたいの込みの All In One が欲しいっ!
叫んどいたら入手方法がわかるといいなぁ。svn経由でもなんでもいっす
日本Javaユーザ会の結成総会
2007年04月23日(月) 23:52
日本Javaユーザ会の結成総会に行ってきた。
※24日の02:30現在、ブログサーチした結果が…。行ってきたエントリしてるの俺だけ?これじゃ駄目だよ、Javaの人たちぃ。
のっけから非常にJavaっぽい感じに笑いが出そうでした。本当に言語によってカラーが違って面白い。
今回は結成総会ということもあって、記念講演がありました。
Javaで今後DBアクセスがどうなるかとか、DAOやらO/Rやらの話しが少し。残念ながらビビットは来ず。かなり前(といってもTorqueのdelete挙動がおかしかった頃程度)からJavaでO/Rは使ってるんで。。
S2のヒガさんの登場あたりから、面白くなってきた。S2に何度もチャレンジしようと思いつつ、準備の面倒臭さを思って手が出ずにいたところ、S2の準備は面倒くさくないらしい。
開発も、Eclipseを使うという前提であればかなり楽っぽい。
ヒガさんの言うことにはイチイチうなずくことが多かった。抽象化してるつもりが却って複雑にしてるんじゃないの?とかJavaはデプロイが面倒だとか。確かにHQLとか阿呆かと思うし、ちょっとした変更をするためにwarつくってサーバに転送してアプリ停止の通知を流して1日待って再起動みたいなことに辟易してるもんね。HTMLのidをプログラム側が使うってのはちょっと好かんけど。DIがどうとかどうでも良くて、単にS2使ってみよう。S2DAOはHibernateみたいな馬鹿はしないみたいだし。
パネルディスカッションも、日本Rubyの会から高橋さんが来ていたりして、非常に面白かった。ユーザ会の最重要機能は飲み会だそうだ(Javaユーザ会@九州)。
きっとLL系イベントで見知った人が一人くらいは来ているだろうと懇親会にも参加。
みたことがあるというだけで面識の無い日本Rubyの会会長高橋さんしかいない?
いました。カヘイさんが (・д・)
これが昨日だったら冷や汗ものだったけど、秘密のゴニョゴニョも一通り最後まで頑張ったので。
カヘイさんのおかげで、S2の比嘉さん、Rubyの会の高橋さん、に面通しがかなった。
他にもlingrで元気なJavaコミュニティ java-ja の人にも挨拶をした。Javaコスプレ族の中にいて異彩を放ってた。ジャヴァ・ジャって読むんだーって頑張ってた。ねぇ、django-jaもジャンゴ・ジャって読みたい。ジェーエーってなんじゃー。
カヘイさんと、ジャヴァキュッチェの贄さんと「本が分厚かったら検索したいからデータくれっ」とか喋っていたら検索という言葉にひかれてGoogleの人が忍び寄ってきた。なかなかに楽しかった。GoogleではスクリプティングといえばやはりPythonだそうだ。&開発者のクライアントはみんなlinuxだってさー。
懇親会で、一人たたずんでいる人を救出できなかったのが無念。あぁいう場でひとりぼっちの人を放ってくのは良くない orz。俺が話しかけたところで、どうってことは無いだろうけど。
もちろん、自分から輪に飛び込めっていう意見もありだけど、そうじゃないよね。得手不得手があるじゃん。俺もカヘイさんがいなかったら間違いなく孤立してた希ガス
RailsをRailsたらしめるびー
2007年04月22日(日) 11:04
Djangoの人(=Adrian)ではないから、実のところどういうかは分からないけど、Matz日記に反応。
Railsを、Rails足らしめているもの全体としてとらえるのであれば、きっと一番適しているのはRubyなんだろうと思う。
Railsのクローンっぽいものは他の言語の実装もたくさんある。でも、他の言語ではきっと素直に書けないはずなので、オリジンとしてのRailsっぽいものは想像もしなかったんじゃないかな。
PythonにもPylonsっていうRailsっぽいという評を得ているフレームワークがある。Pythonの人にはトレースバックが異常なフレームワークってことで認知がある奴ね。
ただ、評の通り本当にRailsっぽいんだとしたらPythonの世界ではあまり流行らないんじゃないかと思うんだ。
思い出してよ、「暗黙より例示」っていう言葉がPythonの哲学にあることを。可能な限り隠さない、可能な限り分かりやすく、っていう哲学。
2006年の夏、find_or_createっていうRailsにある便利機能を使おうとした時に気づいたんだ。
「あぁ、RubyだなぁRailsは」
find_or_createなんてどこにも書いてない。「あれ便利だから入れようと思うんだけど」っていうDjango本家のメーリングリストの議論で存在については知っていたから探せたんだけど。
思うに、Rubyの人は総じてドキュメント化というサギョウが苦手なんじゃないかと思う。もちろんステレオタイプだって言われるだろうけど、Perlの「ドキュメント書く暇があったら実装する」という哲学とは違う何かがあると思わない?
これこそがRailsはRubyならではじゃないかと思う所以なんだけどどう?
あ、脳内で3ステップぐらい飛んでるからきちんと補完してね。RubyもRailsもドキュメントが気に入らないからって理由じゃないからね。
ちなみに、何度も書くけど、DjangoはPythonのRailsではないよ。全くRailsっぽくないし、そもそも、実務で運用されている期間は(Djangoのアナウンスによれば)Railsより長いんだからね。オープンソースになったのはRailsより後だけど。
ただし、Rails世代っていうくくられ方をしても別に異議は発しない。
PS. 馬鹿正直にRailsクローンを作っている人たちへ。
同じ轍を踏んでるの見ると、馬鹿じゃないかと思う。
どうしてデータベースを中心に据えてモデルアトリビュートを動的生成してるの?DRYにしたいんじゃないの?馬鹿じゃないの?
以上.. newformsがDRYじゃない感じがして戦々恐々のDjango好きより
silverlightがマルチプラットフォーム?
2007年04月16日(月) 22:46
デモムービーはなにで再生できんのよ?
silverlightがマルチプラットフォームって言われても、信用できねっす。
flashのマルチプラットフォームで動きが一緒ってのも信用できないけど、これはまじでビビる
まぁ、mac officeやらmac ieやら、ねぇ。
Rails勉強会に行ってきた
2007年04月15日(日) 23:25
Rails勉強会に行ってきました。
運営している側と参加者側の垣根の低い勉強会でした。もちろん、運営の方々が多くのタスクをこなしているからこそ17回も続いている訳ですが、喋る人もセッション内容も動的に(曰くアジャイルに)決定して行く様が面白く感じられました。
セッションは、「初級者コース」と「cruisecontrol.rb・puppet・JRuby(避難所)」に参加。
Railsは数日間試しただけなのですが、ちょくちょくPythonネタを振っていただいたりして無事に過ごしました:)
「RadRailsがaptanaに譲渡されて開発がどうなってるかがよくわからない」「gem_serverでローカルにgemでインストールしてある(Rails含む)ライブラリのドキュメントが参照できる」というようなことを学びました。
それから、「RailsのActiveRecordがモデルにアトリビュートを持っていないことは設計ミスかもしれない」、と感じている人がRails使いの中にも数人いました。ですよねぇ、DRYにならないもん。
Railsと関係のないところでは、
「セレニウムは、お客さんのバグ報告に使う。バグフィックスはシナリオを通せるようにする。シナリオをためることでエンバグを予防する」
というのがビビっときた。
で、今回はSnakes And Rubiesの日本版への一歩!
今回思いついたネタは、
開発環境の差異
ジェネレートされるものの差異
マイグレーション
汎用的なビューのあつかい(ext_paginate vs generic view)
テスト(似てるけどさ)
開発サーバの振る舞い(プロセスが刺さる!?)
エディタ(vimとかemacsとかだとつまらん)
むぅ。いまいち。次回、5月20日のRails勉強会発起人の井上さんも不参加らしいし、もう少しもんだ方がいいかも。。。
Rails 勉強会用 ポジションペーパ
2007年04月14日(土) 23:34
Rails勉強会@東京第17回用のポジションペーパを作った。
む。2.3MB。PageからPDF作るとでかいのぉ。
このタイミングで印刷してかなくて平気か!?
nginxが激っ速っぽい
2007年04月14日(土) 16:34
ロシア製のウェブサーバ nginxがすげー速いらしい。
ロシア人がDjangoを動かす設定を書いてる&Gentooにパッケージがあるっぽいからすぐに動かせそうなんだけど、今現在余裕無しorz
まぁ、Djangoが動くって言ってもFastCGIだから微妙なんだけど…。
Railsだとlighttpd+Mongelより3割くらい速くなるという話しもあるし、Djangoも2割くらい速くなる?
mod_python or mod_wsgiがFastCGIより相当速いはずだから。。。
そういえばrhacoにTwitterのAPIラッパがあるらしいよ
2007年04月10日(火) 01:18
なんだかこないだrhacoなひとが うほっ て言ってた。
Twitterをrhacoから簡単に使えそうな、Twitter APIラッパ。
そして、rhacoのTwitter APIラッパをつくったid:nazoneさんが、rhacoでTwitterの携帯電話用ゲートウェイ作ったよって。 うほっ
rhacoはPHP用のフレームワークで、ロリポでもハッスルでもサクラでも動くよ。つまりPEARもいらないし、PHP4系でもPHP5系でも動くってことだよ。id:nazoneさんの所を見るといろいろ書いてあるよ。
お休みをいただく…
2007年04月08日(日) 11:59
その昔、IT業界に入る前に、つまり新卒の時代にファッションジュエリーの会社 にいたことがあります。
ある日、休みを取っていたAさん宛にお客様(癖がorz)から電話がかかってきた時のことです。
社会人一年生で下っ端の私は「Aはお休みをいただいております」と、ありがちな答えをしました。
その後、店長に注意を受けたことは言うまでもありません。「Aさんは誰にお休みをいただいているの?」
あれから7年。その会社もずいぶん変わったようです。「契約や派遣を使わず、正社員のみで構成する」「基本給を販売系としては高めに設定して、ノルマを偏重しない」というようなポリシーを持っていたようですが…
最近は挨拶もできない店があるとかないとかあるとかあるとか。
これから開発版Djangoにおこること
2007年04月07日(土) 00:09
svn版の利用を薦めていたDjangoの開発チームから大切なお知らせ。
元エントリは、こちら
ここから超訳(誤訳はどんどん指摘ください)
長い間、我々はDjangoの最新リリース版よりも開発バージョンの利用を薦めてきました。開発版をstableに保つ努力をしてきたからです。しかし開発版に後方互換性を失う変更をしなければならないので、近い将来一時的にこのポリシーから外れることになります。
変更の一例
モデルから、auto_nowとauto_now_addを削ります
"newforms-admin" branchを取り込みます。Adminオプションの指定の仕方が変わります(よりフレキシブルな設定ができるようになります)
LazyDateショートカットを削ります
django.contrib.localflavor.usaをdjango.contrib.localflavor.usに変更します
最も大きな変更は、 newforms-admin でしょう。
私を含め多くいるであろう「Django開発版をプロダクションサイトで使っている人々」は、失われる後方互換性についてのwikiを確認してください。コードが壊れないことを確認してから、Djangoのコードを更新してください。
0.96のようなリリース版を使っている場合には、心配せずに次のリリースを待ってください。次のリリースを適用する前に修正すれば済みます。
いよいよバージョン1.0の前の最後の後方互換性を失う変更です。バージョン1.0からは互換性の確保を公約します。
変更点について議論をしたいしたい方は、気軽に django-developersメーリングリスト にメッセージを投稿してください。
Djangoの管理画面用メディアファイル
2007年04月06日(金) 02:10
運用開始時に結構はまりやすいので、メモをしておきます。
静的ファイル配信の思想
Djangoを運用する際には、メディアファイルは別の静的ファイル配信サーバからサーブすべし、というのがDjango開発者達の思想です。
つまり、推奨されるやり方は管理画面メディアファイル配信サーバとして別サーバを指し示し、メディアファイルは配信サーバにコピーしておくことです。
開発時の仕組み
デフォルトのADMIN_MEDIA_PREFIXは /media/ となっています。開発サーバは起動時にメディアファイルを配信するようにハンドラを設定します。
面白いことに、ADMIN_MEDIA_PREFIXの設定を、/adminmedia/ 等に変更しても、開発サーバ上では正しく動作します。
これは、ADMIN_MEDIA_PREFIXの値が、管理画面のcssを指し示すURLのプリフィックスだからです。もちろん開発サーバのハンドラも同じ値を見ています。
推奨される設定
- ベストな方法(別サーバapache)
運用時のADMIN_MEDIA_PREFIXを http://static.example.com/media/ のように設定する。設定したURLで管理画面用のファイルが配信されるように、django/contrib/admin/media をディレクトリごとコピーしておく。
- ベターな方法(同一サーバapache)
運用時のADMIN_MEDIA_PREFIXは /media/ のように同一サーバからの配信となるように設定する。
mod_pythonやfastcgiの設定はひとまず忘れて、「ADMIN_MEDIA_PREFIXの設定から呼び出されるURLで管理画面用のファイルが配信されるはずだ」という場所に、 django/contrib/admin/media をディレクトリごとコピーしておく。
mod_pythonで運用する場合には、以下のようにmediaディレクトリのハンドラをオフにする。
<Location "/media/"> SetHandler None </Location>
fastcgiで運用する場合には、以下のようにmediaディレクトリに対してはrewriteをかけないように設定する( コンディションを!- fにしてもよいはず)。
RewriteRule ^(media/.*)$ - [L]
推奨されない設定
しかし、管理インターフェースのメディアファイルについては量も頻度もたいしたことないので、以下のようにしても良いのではないかとも思う(イマイチな方法)。
ADMIN_MEDIA_DIR という定数を settings.py に定義する。指し示し先は管理画面用のメディアファイルディレクトリ (django/contrib/admin/media) のフルパス。
次に urls.py で Django が静的ファイルを返すように設定する。
(r'^media/(?P.*)','django.views.static.serve', {'document_root' : settings.ADMIN_MEDIA_DIR, 'show_indexes':False} )
格好いいアイコンを簡単に作る方法
2007年04月03日(火) 19:41
世の中では、Photoshopのレイヤーとかを使ってボタン用の画像を作ったりしているようです。
Photoshopでレイヤーで……。覚えられませんorz。
直感的にボタンやアイコンを簡単に作れたらいいなぁ、というデザインセンスの無い人向けのツールを見つけました。
Art Textを使う
有償($30)ですが、なかなか良くて興奮したので紹介します(あさましとかではないです)。
なんだかんだいって、高機能なPhotoshopは素人には敷居が高いのです。機能がありすぎて、どこまでやっても納得がいきません。
Art Textは、簡単&機能限定の「Web 2.0っぽいロゴやアイコンを作ることに特化したツール」です。
できることが限られているので「この程度でいいや」という諦めも得られます:)
Art Textでは、「アイコン」「ロゴ」のどちらかを作成できます。
アイコンは、ポストスクリプトやPDFといったパス情報をもとにテクスチャや、グラデーションを使って透明感のあるものを作れます。そのままつかえる大漁のパス情報が付属しています。後述のOmniGraffleを使うと、いろいろな形が簡単に作れますので、心配無用です。
ロゴは、テキストに対してアイコンと同じ効果を適用するとできます。自由変形もある程度出来るので、いろいろな場面で使えるのではないでしょうか。
アイコン、ロゴ、共に面のある部分を3Dと見なして明かりを計算しているようです。面の中央が山となるのですが、台形のような山の形からとんがった山の形まで、スライダ一つで調整できます。
注意が必要なのは「アイコン」と「ロゴ」を同時に使えないということです。アイコンの一部に文字を入れたい場合は、パス情報として別のツールで作成してこないと行けません。フォントを頻繁に換えながら見た目を確認したいのに、Art Textだけでは完結できません。
Omni Graffleでパス情報を作る
画像を作るのに使ったのは、OmniGraffleです。
ステンシルと呼ばれるシェイプが世界中のユーザによって作られており、自分で絵が描けなくてもなんとかなるかもしれません。
Illustratorのように、シェイプ同士の交差をとったりすることができます。非常に直感的に描けるので、これも購入を検討しています。
とりあえずは、20オブジェクトまでは無料で使えます。
実は、オブジェクトをグループ化するとオブジェクト数が減るのは秘密です。

OmniGraffleで白黒画像を作る posted by (C)everes
Omni Graffleで文字を追加したアイコンを再びArt Textへ。

簡単にこんなのも作れる posted by (C)everes
練習する
で、とりあえずrhacoのバッジを作ってみました:)

rhaco-badge posted by (C)everes
日本Javaユーザー会
2007年04月03日(火) 12:27
きっと昔はJava-Houseがその役割を担っていたんだろうけど、やっとJavaのユーザ会が発足する模様。
JJUG 結成総会が4/23にあるようなので、とりあえず申し込んだんだけど、申し込みフォームがものすごいJava臭をはなっていてww
結成総会のタイムテーブルに「総会」があるんだけど、何をするのかスゲー気になる。
参加した人を会員と見なして何かを議決するのかな?
スーツは着ていかない予定だけど、会場で浮かないかな?
djblogkitのRSS配信部分にバグがありました
2007年04月01日(日) 12:19
このエントリはエイプリルフールとは関係ありません(マジです)。
djblogkitのRSS配信にバグがありました。
- 一度タグで絞られたRSSが配信されると、それ以降に配信される素のRSSは最後に絞り込みされたタグで絞られる
- feeds.pyにエンコーディング指定が無かったため、descriptionにマルチバイト文字を使っていると文字化けする
全ての活動を停止します
2007年04月01日(日) 01:37
今となっては全て終わったorz
ウノウがムノウになったことにショックを受けて、全ての活動を停止します。
生命維持装置を外すことも、無能な私には無理なのです。
いままで引き立ててくださった皆様、申し訳ありません。失踪します。
せめて makoto2.0カンファレンスを開いてからにしたかった

