コンテンツ
TortoiseGitの記事を書きました
SourceForge.JP Magazineで 実用レベルに達したWindows向けGitクライアント「TortoiseGit」でGitを始めよう を書きました。ふと TortoiseGitのWebページ を見たらバージョンが上がっていて、インストールしてみたらかなり使えるようになっていたので適当に日本語化したうえで記事を書くという、自作自演(笑)。
はてブコメント では「日本語のファイル名に対応していない現状で実用的か?」というものが見られたんですが、日本語ファイルの件はすっかり失念してました。もともとバージョン管理するようなファイル/ディレクトリには日本語のファイル名を使わないもので、一般的にもそうなのかとすっかり思いこんでいたのですが、世間は違うようです……。
ただ、これはTortoiseGitだけの問題ではない話&作者がこれを認識しているか不明なので、TortoiseGitがバージョン1.0になっても解決はされない可能性があります。ということで誰かがパッチを書いて送るべし。
# といっても、コマンドライン版(msysgit/cygwin)との互換性の話もあるので結局はGit本体のほうにファイル名の整合性をとるシステムが入るべきだという気もするのですが
## そして Cygwin 1.7ではコードページの切り替え機能によってUTF-8でファイル名を扱えるという話を初めて知った
Pythonのクラスの挙動を調べる:class構文の外でクラスにメンバ関数を追加(2)
今度は、別のモジュールで定義したクラスにメンバ関数を追加してみる。
[Macintosh:~]$ python
Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
# importすることで定義されたクラスは、その名前空間内に閉じこめられる
>>> import foobar
>>> print foobar.FooBar
<class 'foobar.FooBar'>
# 名前空間が異なっていても、名前空間さえ指定すればメンバ関数を追加できる
>>> f = foobar.FooBar()
>>> f.show_name()
I'm FooBar.
>>> def rename(self,new_name):
... self.name = new_name
...
>>> foobar.FooBar.rename = rename
>>> f.rename("john")
>>> f.show_name()
I'm john.
大体予想通りの結果ですな。
Pythonのクラスの挙動を調べる:class構文の外からクラスにメンバ関数を追加(1)
Pythonのクラスの挙動を調べる:class構文の外からクラスにメンバ関数を追加(1)
Pythonでプラグイン的な機構を実装する際、あるモジュールで定義されたクラスに対し、ほかのモジュールからメンバ関数を追加できると楽しいのでは?とふと思う。
ちょっと分かりにくいが、例えばHogeというクラスがhoge.pyで定義されており、Hogeクラスのメンバ関数を追加するコードがplugin.pyで定義されている。そして、plugin.pyで定義されている機能を使いたい場合のみimport pluginすると、その機能がHogeクラスで利用できるようになる、というイメージだ。
ということで、ちょっと試してみた。
[Macintosh:~]$ python
Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
# 適当な関数を定義
>>> class FooBar(object):
... def func1(self):
... print "func1!"
... def func2(self):
... print "func2!"
...
# FooBarクラスのインスタンスを作成
>>> a = FooBar()
>>> a.func1()
func1!
>>> a.func2()
func2!
# FooBarは__main___内にクラスオブジェクトして記録される
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__':
'__main__', '__doc__': None, 'a': <__main__.FooBar object at
0x2454f0>, 'FooBar': <class '__main__.FooBar'>}
>>> print FooBar
<class '__main__.FooBar'>
>>> print FooBar.__dict__
{'func2': <function func2 at 0x5e2f0>, '__module__': '__main__',
'func1': <function func1 at 0x5e2b0>, '__dict__': <attribute
'__dict__' of 'FooBar' objects>, '__weakref__': <attribute
'__weakref__' of 'FooBar' objects>, '__doc__': None}
# FooBarクラスに追加する関数を定義
>>> def add1(self):
... print "add1!"
...
# add1関数をFooBarクラスのメンバに追加
>>> FooBar.add1 = add1
# クラスを改変する前に作成したインスタンスも影響を受ける!
>>> a.add1()
add1!
>>> print FooBar.__dict__
{'func2': <function func2 at 0x5e2f0>, '__module__': '__main__',
'add1': <function add1 at 0x5e270>, 'func1': <function func1 at
0x5e2b0>, '__dict__': <attribute '__dict__' of 'FooBar' objects>,
'__weakref__': <attribute '__weakref__' of 'FooBar' objects>,
'__doc__': None}
>>>
ということで、少なくともクラスオブジェクトに対して属性を追加することで、クラスにメンバ関数を追加できることは分かりました。なるほどなるほど。
Windows MobileやAndroid携帯の開発コストは「ハイエンド携帯」の3〜4倍?
GIGAZINEの記事「 一部の携帯電話メーカー、スマートフォンの開発からハイエンド音声端末の開発へシフトか 」がよく分からず「おまえはなにをいっているんだ」状態だったんだがソースを読んで理解。
この記事のソースは台湾・中国系ネタではおなじみ DigiTimes 。これによると、Windows MobileやAndroid携帯の開発コスト(ロイヤリティや開発リソースを含む)はマルチメディア機能を備えたハイエンド携帯の3〜4倍にも上るが、その一方で市場は狭いため、台湾のスマートフォンメーカーはWindows MobileやAndroid携帯だけでなく、ハイエンド携帯への開発により多くのリソースを投入する計画を立てている可能性があるとのこと。
スマートフォンよりもマルチメディアハイエンド端末のほうが部品数が少なくて済む、というのはGIGAZINEの記事通り。また、非スマートフォンのハイエンド携帯にもタッチパネルが採用されるようになってきており、そのためスマートフォンとマルチメディア端末の差異は少なくなって来ているとのこと。
GIGAZINEの記事では主語が「一部の携帯電話メーカー」となっているからピンとこないんだが、「スマートフォンメーカーが」に読み替えると分かりやすい。まず思い浮かぶのはHTCですな。
新プロジェクト「BlueGriffon日本語版」始めました
突発的に新プロジェクトBlueGriffon日本語版」を始めました( プロジェクトのトップページ )。
BlueGriffonは古くはNetscape Navigator Goldに端を発したMozilla系のHTMLエディタで、Nvu、KompoZerなどの後継ソフトだそうです。本家は bluegriffon.org 。
BrueGriffonはXULベースで作成されており、レンダリングエンジンはもちろんGecko。XULベースなのでFirefoxなどと同じ感じで日本語化できるので、ちょっと日本語化してみました。まだ本家も開発版という位置付けで、基本的なHTML編集くらいしかできないんですがざっとテキストリソースを見る限り良さげな感じです。
ということで期待しつつ、様子をみる感じで日本語化。しかし本家の開発リソースは少なそうなので開発の進捗はちょっと遅めの模様。まぁ請うご期待、ということで。