コンテンツ
IE8の検索ボックスから英語版Googleを利用する
Internet Explorer 8を最初に起動して、真っ先にやるのが検索エンジン(検索プロバイダ)の指定なんですが、日本語の検索プロバイダページにあるGoogleを指定してしまうと、自動的に「日本語のページを検索」になってしまうのが微妙なところ。
システムファイルの所有権問題でハマる on Windows Vista
テスト用にVistaのhostsファイル(C:\Windows\System32\drivers\etc\hosts)を書き換えようとしたんだけど、このファイルはシステムファイルなので、当然一般ユーザー権限では書き換えられない。そこで、管理者権限でコマンドプロンプトを実行し、vimで編集したわけなんだが、このときvimは「編集後のファイルを別のファイルに保存→オリジナルのファイルに置き換え」というステップを踏んでくれていたためにファイルのパーミッションが変わってしまうという問題発生。
編集後のファイルは、自分のみ「フルコントロール」、「Everyone」と「None」にファイル属性の読み取りのみ許可、というパーミッションになっていて、そのためシステムがhostsファイルにアクセスできなくなり、hostsに何を書いてもそれが適用されない状況に。結局、問題がパーミッションにあることに気付いたのは10数分後……。
公式には「hostsファイルの編集には管理者権限で起動したメモ帳を使え」と言われているのですが、他のエディタを使うとこういうトラブルになるよ、ということで。しかし、「SYSTEM」のパーミッションがないと本当にシステムもアクセスできないのね>NTFSのパーミッション仕様。
TortoiseGitの記事を書きました
SourceForge.JP Magazineで 実用レベルに達したWindows向けGitクライアント「TortoiseGit」でGitを始めよう を書きました。ふと TortoiseGitのWebページ を見たらバージョンが上がっていて、インストールしてみたらかなり使えるようになっていたので適当に日本語化したうえで記事を書くという、自作自演(笑)。
はてブコメント では「日本語のファイル名に対応していない現状で実用的か?」というものが見られたんですが、日本語ファイルの件はすっかり失念してました。もともとバージョン管理するようなファイル/ディレクトリには日本語のファイル名を使わないもので、一般的にもそうなのかとすっかり思いこんでいたのですが、世間は違うようです……。
ただ、これはTortoiseGitだけの問題ではない話&作者がこれを認識しているか不明なので、TortoiseGitがバージョン1.0になっても解決はされない可能性があります。ということで誰かがパッチを書いて送るべし。
# といっても、コマンドライン版(msysgit/cygwin)との互換性の話もあるので結局はGit本体のほうにファイル名の整合性をとるシステムが入るべきだという気もするのですが
## そして Cygwin 1.7ではコードページの切り替え機能によってUTF-8でファイル名を扱えるという話を初めて知った
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ですな。