2008-01-01から1年間の記事一覧

Py3k の super

super() について - methaneの日記 についてsuper() は、 super(Type, obj) とするとsuper型のオブジェクトを返し、そのオブジェクトには __getattr__() があって、 super(Type, obj).foo とすると、 mro の Type 以降で一番最初に foo を持っているクラスを…

Python と mix-in

http://d.hatena.ne.jp/w_o/20081205#p3 ←のエントリは、タイトルと本文とTB先に情報が分散していて引用しにくいので、このエントリで書きたい話題をまとめると、 Rubyはmix-inができるので、クラスの継承が必要無いので(親クラスのコンストラクタ呼び出しの…

Python の super のメリットとデメリット

※英語の読める人はこのエントリよりも Python's Super is nifty, but you can't use it を読んで下さいsuper を使うメリットは、コンストラクタのようなクラス階層全体にまたがるメソッドチェーンを、ダイヤモンド型の多重継承を行った場合でも実現できるこ…

Ubuntu (Debian) で、余計なパッケージをアンインストールする方法

aptitude を使うと、簡単にパッケージのアンインストールや依存関係の設定ができる。 たとえば、ubuntu-desktop から余計なパッケージをアンインストールする場合は次のような手順になる。ubuntu-desktop パッケージを開いて、「依存」の行にカーソルを当て…

Mix-inとか、うっかり防止とか

「あとそういえばMix-inという用語がちゃんとあった」 http://d.hatena.ne.jp/w_o/20081205#p3 これの問題は、「うっかりメソッド追加し忘れたら死亡」という点だろうか。最近ちょっとうっかりすることが多いというか、死亡しすぎな気がする。あと、書かれそ…

super() について

コメントやトラックバックで指摘されたとおり、下記の考察は完全に誤りです。後日 Python3 の super について記事を書きますhttp://d.hatena.ne.jp/w_o/20081205#p2 うーん…↓このぐらいに書けないものかな… class Base: def __init__(self): super().__init_…

namespace のインデント

vim

vimでC++のコードを書くとき、 namespace foo { とか書くときに、インデントレベルを増やさないにはどうしたら良いのだろうか。ActionScript3 で package も同じく。 package foo {} でインデントレベル増やしたくない。

委譲があれば継承がいらない?

引き続き、Pythonistaによる http://d.hatena.ne.jp/w_o/20081204#p2 への反論 で、Rubyはmoduleを使って委譲ができるので、クラスの継承が必要無いのであまり関係無い。 意味が判らなかったんだけど、http://synth.jp/pg/2007/04/ruby_10.html のことかな。…

Pythonにコンストラクタなんて構文は無いし、親クラスを呼び出す構文も無い

http://d.hatena.ne.jp/w_o/20081204#p2 まず…って書こうとしたら追記してあった。superの件に関しては、Pythonの人は、「やりかたはひとつがよい」と言ってるので、複数の書きかたができるPythonは悪であると言えるだろう。 これ、よく誤解されてるけど、「…

親クラスのコンストラクタ

http://d.hatena.ne.jp/w_o/20081203#p1 Pythonで親クラスの__init__を呼ぶルールって酷いと思うのだけど、これPython信者たちはなんて言って褒めてるのかな… * super(Type, self)というのが意味不明すぎ * 自分のクラスを書かないといけない * 忘れると死亡…

帰省中

弟が順調にプログラマへの道を進んでいた。 現在高校二年生なんだけれども、まともに動くテトリスを作っていた。文化祭で展示するらしい。僕が高専3年生のときに、文化祭でDDRもどきつくったっけなぁ。あの時はC++で判らないことだらけで、大変だった。今の…

urlの扱いが判らない

mod_wsgi + Django を試している。Apache configで WSGIScriptAlias /test /path/to/app.wsgi として、app.wsgiでは、 application = django.core.handlers.wsgi.WSGIHandler() としている。この設定だと、environment['SCRIPT_PATH']が/testに、environment…

mercurialをsubversionクライアントとして使う

hgsvnはsvnへのpushへの対応が完了しないまま開発が停滞しているっぽいんだけど、hgsvn意外にもmercurialをsubversionクライアント化するextensionがあった。http://www.bitbucket.org/durin42/hgsubversion/wiki/HomeBazaarに比べて軽快だったmercurialだけ…

Bazaar 1.8 Released

出た。 http://doc.bazaar-vcs.org/bzr.dev/en/release-notes/NEWS.html#bzr-1-8-2008-10-16 http://bazaar-vcs.org/Download 個人的には、bzr+ssh:// を使ったときにエラーになる場合があるバグが修正されたのが大きい。

最新のFlash Playerは10ですよ

Gigazineから、PS3が最新のFlash Playerに対応したという記事が出てた。http://gigazine.net/index.php?/news/20081015_ps3_flash/ただし、ちょうどFlash Player10が出たので、すでに最新ではなくなっている罠。http://www.adobe.com/shockwave/download/dow…

Bazaarがいい感じ

Bazaarの開発速度、というかリリースサイクルがすさまじいな。現在1.8rc。1.5くらいのころは、Mercurial/Gitと比べると、helpをはじめとする簡単なコマンドの反応速度が遅くてイライラしていた。1.7ではイライラしない程度に早くなってる。大規模なリポジト…

wxGTK と ATOK X3 の組み合わせで問題が

ダイアログのテキストボックスに日本語入れて、Enterで確定しようとすると、OKボタンを押したことになってしまう。 SCIM-Anthyなら問題なかった。wxGTKじゃないGTKでも大丈夫。何が問題なんだろう・・・。

Intrepid @ amd64

今までamd64のintrepidが、hald起動の部分で固まって再起動してたんだけど、halのupdateがきて起動するようになった。やった。

なんとなく擁護してみる

http://anond.hatelabo.jp/20080731154801 インデントうぜー。ブロックの終端がわからんしワンライナーかけないし。 だよね、2chにコード張るときに実態参照しないとインデント消えるし。 ちょっとした事を片付けるなら、ワンライナーよりも対話モード。 ア…

shredの安全性について

http://dsas.blog.klab.org/archives/51321653.html http://d.hatena.ne.jp/jj1bdx/20080919/p1 について コンテキスト 実はこの日記、社内のMLに投げたメールを、殆どそのままコピペにして公開しちゃったので、コンテキストが完全に抜けてる。既存のshredを…

uimなら大丈夫?(gvimで日本語入力

imをUbuntu標準のSCIMからuimに変更してみた。 vim協調モードとかあるのが素晴らしい。insert modeからcommand modeに抜けるときに直接入力に戻る。 vimがSEGVるのも直った。半角/全角キーでスイッチすると、日本語入力と直接入力が激しくトグルするけど、Sh…

やっぱりだめだった(gvimで日本語入力

insertモードでscimをanthyにして、日本語を入力する。 scimがanthyのまま、Ctrl-[を押す。 gvimがSEGVで落ちる。

↓の解決策

sudo update-alternatives --config xinput-ja_JP をして、scimを選ぶ。今まではscim-bridgeになっていたけど、これが悪かったみたい。 scim-immoduleってのもあるけど、これは何なんだろう?imまわりは全然判らない。

gvimと日本語入力

gvimとscimとの連携がなんかいまいち。 gvim上で、scimが日本語になっている状態で、間違ってなにか入力する 入力した未確定文字列を削除する scimを英語にして、i (インサートモード) を押してから、一文字でも入力すると、その後の文字列が一期に削除され…

xfce4-terminalとscreen

Ubuntu 8.04で、xfce4-terminal上でscreenを動かすと、BackSpaceキーが効かなくなる。なのでgnome-terminalを使おう。

tracebackをログに残す場合のお約束コード

import traceback try: ... except: log.error(traceback.format_exc()) raise 例外は、こまめにチェックするよりも、あえてチェックしない方が良いことがある。 とくに、例外をcatchしておいて、結局自作の情報量が少ない例外を再送出するのは最悪。 エラー…

ipythonの()無し関数呼び出し

Pythonでは、関数呼び出しには()が必要。これは、関数とオブジェクトの区別が無いPythonにおいて、オブジェクトの参照と関数callとを明確に分けるという点で可読性に寄与している。 しかし、インタラクティブシェルで「お試し」中には、カッコを使うのが面倒…

ipythonのdoctest_mode

「普通のPython インタラクティブシェルのほうが、そのままdoctestにコピペできるから楽」 それ、doctest_modeでできるよ! In [26]: %doctest_mode *** Pasting of code with ">>>" or "..." has been enabled. Exception reporting mode: Plain Doctest mo…

ipython tips

Python Code Readingの後の懇親会で少し話題になっていたので公開。 ipythonで、便利だと思う機能の列挙1. 補完 タブキーで補完してくれる。まぁ、これは誰でも知ってるだろう。2. コマンドを実行できる !を使えば、Pythonの外のプログラムと連携が可能。そ…

loglevelは正の整数でないといけない

getoptで-vの数だけloglevel -= 10してたらハマった。 >>> import logging >>> logging.getLogger('root') <logging.Logger instance at 0xb7d12cac> >>> log = _ >>> log <logging.Logger instance at 0xb7d12cac> >>> log.debug('foo') >>> log.setLevel(10) >>> log.debug('foo') No handlers could be found for logger "root" >>> im…</logging.logger></logging.logger>

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。