2011年6月26日

Native Instruments の Service Center が Windows7 で起動しない問題

少し前からうちの Windows7 64bit 環境で Native Instrument の Service Center が起動しなくなってしまった。
ソフトウェアのアップデート類がチェックできないのでサイトを見に行ってアップデータをダウンロードしなければいけなくて死ぬほどだるい。

今日久々に調べなおしたらどうやら原因が発覚したようで、IE9 をインストールしたタイミングでおかしくなるらしい。
以下の URL から辿れるフォーラムに書いてあった。


Clip to Evernote

2011年6月25日

ASUS の Eee Pad Transformer TF101 買った

ASUS Eee Pad Transformer TF101を買った。

有楽町のヨドバシカメラで買うと59800円+5980ポイント+先着15名に初代 iPad のオフィシャルカバーによく似たカバーがついてきた。
こういう感じのカバー。「Sleeve」と店員の台湾のお姉さんが呼んでいた。

自分は Android 詳しくないし、ノートパソコンを自分のために買ったこともない(NetWalker は持っているけどあれはノートパソコンとはちょっと違う気もする)。
そんな状態で買ったので過去の製品とかと比較するような詳細なレビューは出来ないものの、少なくとも IPS 液晶は綺麗だしキーボードも打ちやすいし Android3.0 のブラウザはそれなりに快適だしノートパソコンとして使うのにもそこそこ行けそうな感じ。
ライブ壁紙も気持ち良く動いてるし大体の操作がスムースに動いている気がする。フォントはモトヤのマルベリかな? なかなか綺麗で読みやすい。

Windows でブラウザを使うとき程の快適さには届かないものの、画面もそれなりに広いし通常の Web ブラウジングの用途であれば問題ないレベルで使えそう。
今このブログも Blogger に TF101 でアクセスして普通に書いてるけど HTML 編集モードじゃないと漢字変換できない以外はこれといった問題もなく普通に書けてる。
(この辺の機能は contentEditable 関連の厄介な部分なのでうまく動かないのは想定の範囲内だった)

キーボードで入力している最中に間違ってタッチパッドに触ってしまってフォーカス移動しちゃったりとかはするけど慣れの問題と思われる。

キャリアと結び付けられてないので合わせて契約するものもないし、購入の敷居が低くていい。
普通の Windows ノートじゃつまんないし Apple 製品持ってる人間の自慢話みたいなのはうざいし、ちょっと変わったものが欲しかった身としては面白いものを買った気がする。

これから色々とアプリケーションをインストールして遊んでみようと思う。

Flash を入れたらニコ動もそんなにコマ落ちせずに再生できるのでゴロ寝しながらだらだらニコ動ライフもできそう。いいねー。
ちなみに Blogger への画像のアップロードは上手く行かなかったのでPCから上げました。
スクリーンショット撮影用のボタンがキーボードに用意されていて撮影も超簡単。昔の Android だと厄介だったらしいですね。
Clip to Evernote

2011年6月22日

PuTTY + Ubuntu + screen + vim で左に寄る理由

今まで PuTTY を複数起動して並行して使ったりとかよくやっていたので、素晴らしいと噂の screen を使ってみようと思って sudo apt-get install byobu した。

でもなんかおかしい。

Clip to Evernote

2011年6月7日

オーディオサンプルフォーマットコンバータとリサンプラ

オーディオデータを扱う時、8bit / 16bit / 24bit / 32bit に int / unsigned int / float だの LSB / MSB だの色々なフォーマットがあり、色々な周波数があり、それらを相互に変換できると嬉しいことが多々ある。
フォーマットの違いを吸収するためにはわりと泥臭いコードを泥臭く書かないといけないし、リサンプラは下手に作ると計算量も少なくないので重くなりやすい。

もちろん変換を経由しないのが一番ではあるものの、ドライバが腐っていて特定のフォーマットは非対応だったり、入力したデータがぶっ壊れてたりすることもあったりするので、というかあったので、変換しなければいけないケースが出てくる。

探してみると BSD 系ライセンスでその辺をやってくれるコードが見つかる。
  • PortAudio のサンプルフォーマットコンバータ実装箇所 pa_converters.c
    クリッピングやディザリングに対応したコンバータも一部ある
  • Speex のリサンプラ実装箇所 resample.c / resample_sse.h
    ファイル名からわかるとおり SSE 最適化済みコードも含んでいる
どちらのソースもわりと切り出しやすくなっていて部分的に使う場合でもハードルが低くてありがたい。

自分のように技術力がうんこでも一見うんこじゃないプログラムが作れるよ! うんこの部分はクローズドソースなんだ! ごめんな! でも普通うんこはクローズドでするだろ!

まあ結局これら使って作ってたソフトは情熱が冷めてやめちゃったんですがね……。
Clip to Evernote

Python + wxPython で GUI アプリケーションを作る 7 ステップ

会社で PythonwxPython を使って簡単な GUI アプリケーションを作った。
案外調べながら作ると結構色々と大変だったので大まかにまとめておく。

1. Python をインストールする
Python は歴史的な事情からどれを入れるのか迷う。
Google App Engine を使うなら未だに 2.5 系じゃないと駄目だし、3 系はサードパーティ製のものを組み合わせて使う場合若干時期尚早な感じもある。今回の場合は wxPython が 2.7 系までしかまだ配布されていなかったので、Python 2.7 を選択した。

自分の環境に合わせたインストーラをダウンロードして簡単にインストールできるので特に問題になるようなことはないと思う。今回は特に 64bit 版である必要がなかったので 32bit 版を Windows7 64bit 版にインストールした。

2. wxPython をインストールする
wxPythonwxWidgets を Python から使えるようにしたもので、OS ネイティブな部品を活用するので見た目が独特になりにくいクロスプラットフォーム GUI ライブラリとして重宝されているように思う。
しかし元々 Python で作られたライブラリではないのでメソッド名などの命名規則は基本的に Python ソースコードとしてはかなり浮いてる感じになる(実害はないけど)。

色々あるのだが、さっき 32bit 版の Python 2.7 をインストールしたのでその時点で選択肢は2つ。更に今後は unicode 版に統一されていくらしいので unicode 版を選択することにした。つまり wxPython2.8-win32-unicode-py27 を選んだ。これもインストーラが提供されているので次へ次へで上手くいくはず。

3. GUI ビルダーの XRCed を使えるようにする
GUI アプリケーションは GUI の組み立てが果てしなく面倒臭いが、wxPython をインストールした際に標準で XRCed がインストールされる。他にも自分で探せば wxGlade とか wxFormBuilder とかまあ色々あって、特に wxFormBuilder なんかは Delphi に慣れた人には扱いやすそうな代物ではあるけど取りあえず最初から入ってるヤツを使うことにした。

が、どうもそのままでは起動させられないようだ。標準のインストール先であれば以下の場所にあるファイルでコメントアウトしなければいけない箇所があった。
C:\Python27\Lib\site-packages\wx-2.8-msw-unicode\wx\tools\XRCed\plugins\xh_wxlib.pyの20行目
#self.AddStyle('FPB_DEFAULT_STYLE', fpb.FPB_DEFAULT_STYLE)
ここだけ直せば、後は C:\Python27\Scripts\xrced.bat を実行すればエディタが起動するはず。起動にちょっと時間掛かるかも。

実際にモノ作ってからまとめとしてこの記事を書いているので、実のところ今では wxFormBuilder の方がよかったかなと思っている。

4. GUI を設計する
取りあえず会社で作ったのは2つのサーバに存在するファイルを SSH 経由で見比べるソフトだったので、接続設定を入力するためのダイアログが必要だった。そのためこういう感じにした。
XRCed で GUI を作って、まず xrc ファイルを保存する。その後に Python スクリプトファイルを生成するためにメニューから [Generate Python...] を選ぶと生成に関する設定項目などが現れる。
設定次第で色々な出力の仕方が出来るようだが、取りあえず xrc ファイルの内容自体を生成するスクリプトに埋め込める設定が便利そうなのでそれを使ったりした(ちなみに wxFormBuilder の場合はそもそも XRC ファイルを経由しないでフォームが生成できたりする。これはこれでいい)。
で、スクリプトファイルが生成されるので、これを使えばすぐにプログラムが作れるところまでいける。

間違えてはいけないのは生成されたファイル自体は書き換えるべきではない
まあちょっといじれば理由はすぐにわかるとは思うけど、プログラム弄る場合にGUIを変更しようとすると、そのたびに Python のソースコードファイルを生成しなおす必要がある。
直接書き換えていたらもちろん失われるので、基本的にこのソースコードには触らずに中で定義されているクラスを継承して使うようにするべき。

GUI の設計自体も Sizer の概念が理解できるまで苦労する。しかも wxStaticText が縦方向のセンタリングができないためそこにも Sizer を入れてセンタリングしたり、案外泥臭い真似をすることになった。
ただこれを覚えずに設計すると OS によって GUI 部品のサイズが違ったりするので簡単に悲惨な状態になる。

あと、wx.stc.StyledTextCtrl のように XRCed からは挿入できないコントロールもあった。
この辺は自分で継承したクラス内でコントロールを追加するようにスクリプトを書いた。

5. 処理を書く
GUI 設計とプログラム作りはある程度並行でやることになったりすると思うのでこの順番にあまり深い意味はないけどそろそろプログラムを書く頃合い。まあ自分が作りたいもの作ればいいと思うからそんなのは深く語る必要はないね?
# -*- coding: utf-8 -*-
import wx, test_xrc

class TestDialog(test_xrc.xrcTestDialog):
    pass

def main():
    app = wx.App()
    TestDialog(None)
    app.MainLoop()
動かしてないから間違ってるところあるかも知れないけどまあ書き始めはこんな感じでしょう。

6. There is no rule six.
ルールじゃねえというツッコミは把握しているため必要ありませんことよ。

7. 配布するには
他の人がこのプログラムを使うために同じ環境構築させるのはあまりに酷な話なので、この辺は上手く exe ファイルとかにまとめられるといい。
こういうのには py2exe とか py2app とか cx_Freeze とか色々あるのだが、cx_Freeze は手元の Norton がヤバいプログラムと誤認識したので今回は使わず、py2exe と py2app で Windows 用アプリケーションと Mac OSX 用アプリケーションとして生成した(そもそもコンパイル済みのスクリプト言語はアンチウィルスソフトからは解析しづらく、誤検出されてもおかしくはないわけで……)。

Mac OSX の app 形式の場合実態はディレクトリだからファイルが散らかる心配はないのだが、Windows の exe 形式の場合は対策しないとプログラム内で使ってるだけのアイコンファイルを外に配置するハメになってしまう。
この辺の対策は真面目に考えると結構面倒なのだが、wxPython は標準のインストール先に
C:\Python27\Lib\site-packages\wx-2.8-msw-unicode\wx\tools\img2py.py
というスクリプトを用意していて、これを使うと画像ファイルを Python スクリプトの中に埋め込むことができる。こうしておけばどこの環境でも同じコードで同じリソースが読める状態に持ち込めるので便利。
(ただし完全に埋め込む形になるのでコンパイル済みのものから取り出すのは微妙な感じに)

自分の場合は Windows と Mac OSX で動かすのが取りあえずの目標だったので、Windows らしいアプローチとしてリソースから読み出す手段を選択した。詳しいやり方に関してはこの辺に詳しく書いてある。
検索すると ctypes を使わずに win32api を使ってリソースを読むための API を呼ぶ例もあったのだが、ctypes を使うもののほうがポータブルな感じなのでこれを使わせてもらった。

出来上がったアプリケーションは zip 圧縮した状態で Windows 版が 6.4MB、Mac OSX 版が 16.8MB になった。少しでかいけどまあそれが問題になるような時代でもないかな。
Clip to Evernote