2013年11月22日金曜日

Windows, Mac, Linux共通のエディタが欲しい:Windowsのsublime text2その後

結局、色々やってるうちに知らないうちに画面表示までくずれていることに気づき、あきらめて再インストールすることにしました。


  1. sublime text2のアンストール
  2. python 3.xのアンインストール
python 3.xを入れていたのは、Blender2.69がpython 3.xを推奨していたからですが、同時にインストールしていたLinuxの方はpython 2.xなんですが特にBlenderの動作に問題は見られないし、Blenderのサイトをよく読むと、推奨はするけどまだpython 3.xでは動かないplug-inがあるよ、と必須ではないようです。(特にpython入ってなくても、手動操作でBlender動かすだけならそんなに問題ないようす)
次に再度インストールです。


  1. python 2.xのインストール(2.7.6にしました)
  2. sublime text2のインストール
さあこれで再度パッケージとか入れなおしていけばいいだろうと思いきや、画面が変です。例によってwindowの最下段に情報表示がされていないし、Tabのファイル名表示もおかしい。おまけになぜかまだパッケージのインストールをしていないのに、日本語のインライン入力までできちゃう???

あきらからにどこかに設定ファイルを残しています。大体予想はつきますが、以下のところに見つけました。

個人設定の「AppData」以下のRoamingというところにありました。sublime text2をインストールしたばかりですが、終了してこのフォルダを削除してしまいます。(中身はpythonがそのまま入っているかとおもったら、わけわからないXMLでした)ここでsublime text2を起動すると、おそらくProgram Dataのところからでしょうがデフォルトのデータをまたここに作ります。
今度はPackage Installすらないまっさらな状態なので、再度環境構築です。結果として日本語入力しても画面表示の乱れない状態で動くようになりました。


最下段の情報ラインが表示されますし、日本語のインライン入力もできます。さらにTabの表示もよくなりました。

python 3.x系がリリースされたのは2008年12月ですからもう5年たっています。このとき後方互換性が犠牲にされたため、いまだにpython 2.xからpython 3.xへの移行は進んでいないようです。言語としての「美しさ」を求めるのはわかるけど、なんらかの移行手段を考えてくれないと困ったことになるといういい見本ですな。(話変わりますが、そういえばc++の第4版、夏ごろ決まった聞きましたがかなり揉めたようですね。新しい機能が欲しい、でもStrupがダメだ!と議論がもめたと聞いています。互換性の問題を保ちつつ、言語はシンプルかつ高機能にすることのせめぎあいですね。)

2013年11月16日土曜日

Windows, Mac, Linux共通のエディタが欲しい

これまでWindowsでテキスト編集するときはSakuraを愛用していました。なんてったって起動が速い!ただこのところLinux, Mac同時並行で操作することが増えて、共通のエディタに何かいいものはないかと考えていました。
Linux, Macでテキスト編集するなら端末開いてemacsでやるのが速いんですが、相互の文字コードの違いの問題もあり面倒くさくなってきました。

最初に見つけたのがKomodo editorです。かなり高機能で、html, python, javaScriptなどのプログラム作成時の支援機能までついています。Windows, Linux, Mac共通のUIで使えるとのことで試しに触ってみました。

なかなかいい感じですが、機能が豊富なためか起動が遅い!ちょっとこれには閉口してしまい、さらに探すと、sublime Textがなんか評判よさそうです。




順にWindows、Linux、Macそれぞれにインストールしてpythonのプログラムを表示してみました。komodoと同じようにプログラム作成時の支援機能もついてますし、右端にファイル全体を表示するミニウィンドウがあるところまで同じです。ただ明らかにKomodoより起動は速いです。(さすがにWindowsのSakuraほどではないですが)なんかPythonでできてるんですかね?様々なPluginがあり、簡単に追加できます。

これはシェアウェアなので、しばらく使ってみてよさげなら登録しましょうかね。

PS:
重大な問題が発生!! Macは問題ないんですが、WindowsとLinuxで日本語入力がまともにできません!!
プログラム書くのには問題ないんですが、コメントに日本語書けないのは致命的です。お金払うなら日本語入力(マルチバイト文字対応)できるようにならないと困ります。(特にwindows64bitだとタイトルも乱れて、どのwindow編集中かもわからないし、windowの文字も乱れる。。。 せっかくマルチOS環境で使えるエディタが手に入ったと思ったんだけど、これでは使えません)

PSその2:
その後、なんとかWindowsとLinuxで日本語入力できる方法を見つけました。Windowsはインライン入力できますが、Linuxは別windowでの入力(;;) ちょっとこれでは常用にはできません;;
ところでKomodo Editorですが、こちらはwindows/Linux/Macどれでも問題なく日本語のインライン入力ができました。見た目のシンプルさはsublime Textが好みなんだが、、、もう少し様子見です。

PSその3:
上記3画面ですが、あらためて見るとWindowsが変わっちゃってます。おそらくなぜか日本語のインライン入力ができるようになったころからでしょうか。。。

・複数Tabは表示できるが、Tabの切れ目がうまく表示されていない。
・最下段に編集中ファイルの言語等を表示するラインがありますが、それが表示されない。
・上記でも少し述べましたが、Tabのタイトル表示が最初乱れる。(Windowを一度小さくして再描画させれば直りますが、、、)

ちょっと気になっているのが、今使ってみているsublime Text2はpython2.x系なんだそうですが、たまたまWindowsだけはpython3.x系を別の事情でインストールした状態でした。そのせいかとも思い、python2.x系を入れなおしたんですが、状態変わりません。もう少し頑張らないとだめなようです。(これだから日本語はつらい)

2013年11月12日火曜日

Ubuntu起動直後のDisk IO

Ubuntuを使っていると、大抵は非常に起動が速いくて助かります。ureadahead(起動時にいつも読み込むファイルを先読みしてファイルキャッシュしてしまう)のおかげなんでしょうが、時々起動後もDisk IOが煩雑に動いていることがあります。ureadaheadのせいではないかもしれませんが、何が動いているのか気になります。(SSは画面上に表示しているシステム負荷の表示です。起動直後のものですが、Disk IOで真っ赤です。)

しばらくするとおさまりますし、何時もこうなるわけではないんですがそのうち調べてみないと。

2013年11月9日土曜日

Raspberry Pi カメラモジュール設定

さてせっかくなんで、簡単な監視装置にしてみます。最初は自動起動にしてしまえばいいと思ったんですが、せっかくなのであまっていたUSB WLANのモジュール(バッファロー:WLI-UC-GNHP 11gが可能です)を使えるようにし、キーボードとかはつけずにリモートログインでコマンド実行するようにしてみました。装置の外観は以下の様な感じです。
カメラからのハーネスは、ケースのLANソケットの隙間から表にだし、USB WLANのアンテナ部分に借り止めでつけてあります。下の黒いのがUSBパワーを供給するバッテリーで、これで好きなところ(ただし、WLANが届くところ)に設置できます。

WLANの設定ですが、以下のようになります。

1.WLANを有効にする
以下の設定ファイルを2か所修正します。

$ sudo vi /etc/network/interfaces

iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
         ↓
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

2.無線LANの接続設定
次に親機と接続できるよう、SSIDやキーを設定してやる必要があります。ファイルは、/etc/wpa_supplicant/wpa_supplicant.confです。rootになって以下のコマンドをじっこうします。

# wpa_passphrase SSID pass >> wpa_supplicant.conf

SSID:親機のID
pass:使用しているセキュリティに応じたキー

こうすると以下のような感じになります。

pi@raspberrypi /etc/wpa_supplicant $ sudo cat wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="***335786826CE295923343F371E9100"
        #proto=wpa2
        #key_mgmt=WPA-PSK
        #pairwise=TKIP CCMP
        #group=TKIP CCMP
        psk="****ba48855fb70911eb244034920f6a4440d314b341b604891569796a565"
        #psk=****d233afa24051e209237e4ec79b8659d32f7a650e4bb1a0d08720f4d759e
}

SSIDやキーは一部かくしてあります。#のコメント行は基本的に後から自分が追加したものです。もしかしたら必要かもと調べたサイトにあったんですが、自分の場合は必要ありませんでした。それでも最初なかなか接続ができず、なんでだろうと親機のログをみてみるとDHCPのアドレス発行まではいっているようです。どうもキーの設定が悪く、うまく接続できないようです。実は、psk行が2ラインありますが、最初は1行目(赤字部分)がコメントになっていて、2行目が有効になっていました。しかし親機の設定をみるとコメントにしてあるほうが設定してあるキーです。理由がわかりませんが、そちらを有効にしたらつながるようになりました。

これで準備万端です。さっそくベランダに置いてみて、外の風景を撮影してみました。快適に動きます。

2013年11月8日金曜日

Rapberry Pi カメラモジュール購入

今年の5月に発売になっていて、気にはなっていたんですが注文してみました。Rapberry Pi本体を購入したときはRS Componentsのサイトから注文したらイギリスからの輸入(代金はユーロ、レートは発送時のものという条件)になってしまい、クレジットカードの登録がいやだったんでPayPalで注文しましたが、今度は日本のサイトで注文受け付けてくれるようで、代金引換でOKでした。
代金も日本円で表示されたので在庫があるのかなと思ったら、翌日に届きました。そこでさっそく試してみました。

 届いた箱です。チープです。(2,400円ですから。説明サイトだと白箱で、Raspberryの印刷もありませんでした。)
 箱の中に入ってたのはこれだけ。静電防止用の袋にモジュールが入れてあるだけ。袋は封もしてありませんでした。説明書はなし。箱に説明用のURLが書いてありました。(下の白い箱は、Raspberry Piを購入した時、一緒に購入した専用ケースです。)

説明用サイトを見て、接続。コネクタはEtherのソケットのすぐ後ろです。力加減は、慣れが必要かと。なにせスマホが流行ってからこっち、やわいコネクタ増えましたからね。端子ピッチはかなり大きいので、それほどビビるほどではありませんが、初めてこの種のコネクタ触る人は注意が必要だと思います。
 sudo raspi-configでカメラを有効(Enable)にしますが、config画面のカメラ設定の位置が説明用サイトと違いますw(まあこれくらいではめげません。メニューの位置が階層構造になって、隠れてないだけマシ)
静止画の撮影例です。2592x1944と、モジュールのサイズからは信じられないくらいの高精度の絵がとれました。自動焦点のようで、静止画の撮影コマンド実行しても、1,2秒焦点を合わせようとしているような画面が表示されました。










おそらくスマホ用のカメラモジュールなんでしょうが、すごいですね!こんなのが安価にでまわるとは。基盤もろだしなんで、使うときにケースや固定方法を考えないといけません。
何に使おうかというと、Raspebrry PiがUSBパワーで動くので、電源On自動起動で一定時間毎に静止画を監視用に撮影するようにしようかと企んでいます。ノートPCも動かせるUSBパワーの外部バッテリ持ってるんで、それ使えば一日くらい動くんではないかと♪(本当は電源確保して、ネット接続とか考えるんでしょうが、インフラ整備がめんどくさい。元のコストが安いので、簡単な監視カメラ程度になれば十分かと思います。)

2013年11月4日月曜日

番外編:水道 水漏れの修理

外の水道がなんか水漏れしているような、、、下のセメントが常時濡れた状態になっています。気になっていたんですが、ついにパッキンを交換してみました。構造は知っていたんですが、あらためて蛇口を見ると、パッキンを交換するためのナットが蛇口を回すプラスチックによりカバーされています。これどうやるんだ?調べてみたら、先端のカバーは簡単にマイナスドライバーで外れることがわかり、作業してみました。その記録です。


 蛇口を回す取っ手上部のカバーを外したとこです。簡単に外れました。
 中にプラスねじが見えます。これを外します。
 取っ手を外すと、蛇口のパッキンを交換するために外さないといけないナットが見えるようになりました。ここで家の水道の元栓を閉めます。
ナットをはずしてパッキンを確認したところ。直径15mm程度のものでした。見たところ特に痛んでいるようには見えませんね。












家に蛇口のナットを外すような大きなサイズのスパナがなく、ホームセンターで購入してからの作業です。ものの数分で作業は済み、漏れも止まりました。

2013年11月3日日曜日

Androidアプリ開発:Blenderで作成したモデルをopenGL ESで表示したい

Androidのアプリで3Dモデルデータを表示するサンプルプログラムがあります。表示用のサンプルデータも添付していて、それを表示する分には問題ないんですが、自分でモデルを作成したくなりました。
とりあえず簡単に手に入るモデラーとしてBlender(2.69)で簡単な立方体を作成して、表面に色をつけてみました。ところがどうしても表示できません。モデルデータはWavefrontのobj形式です。添付されていたobjファイルはBlenderで作成したものではなく、若干キーワードに相違はありましたが、プログラム内でデータ読み込みをしている部分を調べた限りでは問題なさそうに見えます。
結局、2,3日かかりましたがBlenderでobjファイル形式でExportするときはこのアプリでは以下の注意が必要でした。

1.法線ベクトルを出力する
デフォルトでは法線ベクトルの出力がoffになっています。"Include Normals"にチェックを入れてやりましょう。(→これでobjファイルに、vn成分が出力されるようになります。)

2.面の定義が終了したことを示すための別の行を入れる
これはたまたま参考にしたサンプルプログラムの仕様でしたが、これを見つけるのが一番時間がかかりました。objファイルには面の定義のf行(頂点番号/テクスチャ座標の番号/法線の番号)が一つのオブジェクトで連続して出力されていますが、データの最終行を示すマークがありません。サンプルプログラムでは、何か別の行を読み込んだときにf行が終了したと判断して、自分のobjectデータに登録していました。
Blenderでobj形式で出力してやると、最後の行がf行で終了していました。つまり、サンプルプログラムが最後のobjectの塊を認識できないことになります。(1個しか定義してなければ、0個になります。)ここは仕方なく、手作業で1行害のなさそうな”usemtl default”を最終行に追加しておきました。(複数のobjectが定義してあれば、次のobjectの定義の始まりで通常は認識できるんですが。。。)

3.面は三角形で出力する
上記まででサンプルプログラムに自分がBlenderで作成した立方体が表示されるようになりましたが、各面が三角形で表示されます。Blenderの出力を見ると四角形でf行を出力していました。OpenGLは面の定義が基本三角形のはずで、BlenderのExport時のデフォルトが四角形になっていました。これを三角形にしてやります。("Triangulate Faces"にチェックを入れてやります。)
これで無事立方体が表示されました。

参考までに、2つチェックしたExportの設定画面をのせておきます。


objファイルは色の定義に*.mtlファイルが別途必要になります。ちょっと面倒なので、今度はcollada形式を調べてみようかと思います。

2013年11月2日土曜日

Androidアプリ開発:ファイル入出力 assetsディレクトリ

以前、ファイル入出力に躓いたことがありました。(Androidが複数ユーザー・ログインに対応した直後です)

Androidプログラム開発ーファイル入出力

その後、別のサンプルアプリでeclipseの開発環境内で、assets/ディレクトリがあることを知りました。どうもそこにファイルを配置しておくと簡単にアプリ側の設定等を入出力できるようです。(いつの間にかデフォルトでeclipseのAndroid開発環境に作成されるようになってました。気付かなかった。)

AssetManager assets = context.getAssets();  // 追加
reader = new BufferedReader(new InputStreamReader(assets.open(fileName)));

contextは例の如く、Androidプログラムの本体のインスタンスです。これで個々のアプリのファイルであるassets以下までのパスを供給してくれるようです。これなら簡単にこのアプリの設定ファイル等を作成できます。(一々、アクセス可能なファイルパスを考えなくてもすみます)

あと、最近気づいたんですが以下のデータクラスによるファイルアクセスはもう古い(?)スタイルなのでやめろとeclipseから注意されました。

DataInputStream in=new DataInputStream(context.getAssets().open(path));

どちらも同じ以下の関数で1行を読み込むんですが、何故か注意されます。

String line=in.readLine();

注意されるだけで動きには問題ないんですが、eclipse上で注意のマークが表示されるのが気になります。(古いというより、プリミティブな方法での入出力なので今後の変化に対応出来ない可能性があるからやめとけということですかね。)

PS:
後、assetsフォルダ以外にアプリ内でデータにアクセスする方法として以下の方法があります。(mResourcesは、import android.content.res.Resourcesにより提供されるクラスで、res/ディレクトリ以下の資源を扱うのに使われます)


InputStream is = this.mResources.openRawResource(R.raw.sample);

入力であるInputStreamの定義なんですが、ファイルの指定方法として引数に( R.raw.sample )を指定しています。これはeclipse開発環境内でいうと、res/raw/sample.daeというファイルを指定していることになります。これはこれで便利な方法です。(ただ.以下の拡張子が表示されない、それでも問題ないのがちょっと気になります。この例ではxmlファイルなんですが、R.raw.と入力した時点で、res/raw/以下のファイルがeclipseの補助機能により選択肢に表示されます。)