« August 2007 | Main | October 2007 »

2007.09.24

[Zaurus]Lua 5.1.2のZaurus向けパッケージ

プログラミング言語Lua 5.1.2のLinux Zaurus向けパッケージを作ったので置いておきます。VMware PlayerにVine Linuxをインストールしてクロスコンパイル環境を作って、何か試したかっただけで特に意味はありません。

「lua_5.1.2-1_armv5tel.ipk.bin」をダウンロード

「readline_5.2-1_armv5tel.ipk.bin」をダウンロード

参考:解説サイト

readlineはスタティックリンクにした方がいいんでしょうね、きっと。

|

2007.09.18

[Windows Mobile][Zaurus]Linux Zaurus用Advanced/W-ZERO3 [es]モデムドライバー

Advanced/W-ZERO3 [es]をLinux Zaurus SL-C3200のモデムとして使いたいと思い立ち、SL-C3200のKernel Source付属のドライバー(Kernel Module)ipaq.cを、Advanced/W-ZERO3 [es]のデバイスIDを追加してコンパイルしてみました。とりあえず使えています。

インストール

下記のipkをダウンロードして、インストールするだけでOKだと思います。自分のSL-C3200ではAdvanced/W-ZERO3 [es]がモデムとして認識しています。3桁機種には使えません。
無保証です。

「zero3modem_0.1-1_armv5tel.ipk」をダウンロード(コンテクストメニュー等から保存してください)

ダウンローダ向けにURLも書いておきます。
http://moyashi.air-nifty.com/hitori/files/zero3modem_0.1-1_armv5tel.ipk


/lib/modules/2.4.2.0/kernel/drivers/usb/serial/ipaq.o
/lib/modules/2.4.2.0/kernel/drivers/usb/serial/usbserial.o

をインストールします。ほかのディレクトリにこれらが入っている場合は削除しといてください。
また、ここに同名のファイルがある場合は、問答無用で上書きすると思います。注意してください。

確認

USBケーブルで接続する前にAdvanced/W-ZERO3 [es]の「設定>接続タブ>USB接続」を表示し、「モデムとして使用する」のラジオボタンをONに。

USBホストケーブル経由でAdvanced/W-ZERO3 [es]をZaurusに接続。両方ともUSBホスト機ですが、無論Zaurus側にUSBホストケーブルを。

「設定タブ>システム情報」を実行し、「デバイス」タブを表示します。USBのツリーの下を見て、以下のように「Driver: serial」となっていればOK。

設定

Small Islandさんのエントリ「ZAURUSにW-ZERO3をモデムとして使う(2)」を見て設定してください。

「設定タブ>ネットワーク設定」でダイヤルアップ接続の「追加」を実行。「PPPダイヤルアップ接続 [赤外線]」を選択して「選択」ボタンを押す。基本的には通常通りのダイヤルアップの設定をし、「モデム」タブの初期化コマンドを「AT」にして「OK」ボタンを押して保存。

ターミナルで以下を実行。

$ su
# cd /etc/ppp/peers/
# vi `ls IRDA*`

で、viで以下のようにタイプ。

ji/dev/ttyUSB0 [Cancel]:wq

[Cancel]はキャンセルボタンを押す、(Escを押す)ってことです。
要するに2行目の「115200」を「/dev/ttyUSB0 115200」と書き換え、保存します。

ソース変更内容

ipaq.hには以下を追加

#define SHARP_VENDOR_ID 0x04dd
#define SHARP_WS003SH_ID 0x9102
#define SHARP_WS004SH_ID 0x9121
#define SHARP_WS007SH_ID 0x9123
#define SHARP_WS011SH_ID 0x91ac
#define SHARP_S01SH_ID 0x9151

ipaq.cには以下を追加

{ USB_DEVICE(SHARP_VENDOR_ID, SHARP_WS003SH_ID) },
{ USB_DEVICE(SHARP_VENDOR_ID, SHARP_WS004SH_ID) },
{ USB_DEVICE(SHARP_VENDOR_ID, SHARP_WS007SH_ID) },
{ USB_DEVICE(SHARP_VENDOR_ID, SHARP_WS011SH_ID) },
{ USB_DEVICE(SHARP_VENDOR_ID, SHARP_S01SH_ID) },

つまり、ipaq.cのデフォルトに加え、ZERO3シリーズ+EM・ONE(S01SH)しか認識しません。

|

2007.09.15

[Windows Mobile]Advanced/W-ZERO3 [es]でGSFinderとPythonCE/ruby-mswinceを組み合わせて使う

PythonCEやruby-mswinceをAdvanced/W-ZERO3 [es]上で実用的に使おうと思うと、やはり不出来なコンソールが障害として立ちはだかります。

何とかPythonスクリプトやRubyスクリプトをうまく使う方法は無いもんでしょうか。
ということで、GSFinderを使う手を考えてみました。

着目したのはGSFinderにある「ファイル>送る」機能です。GSFinderで選択中のファイルをPython/Rubyスクリプトに送ることにします。

拡張子への関連づけを変更

スクリプトにGSFinderで選択したファイルを引数として渡すためには、拡張子の関連づけの内容を変更する必要があります。要するにコマンドラインの末尾に"%2"を付け加えます。

PythonCEの場合:

"\Program FIles\Python25\python.exe" "%1"

"\Program FIles\Python25\python.exe" "%1" "%2"

ruby-mswinceの場合:

"\microSD\Ruby\bin\ruby.exe" "%1"

"\microSD\Ruby\bin\ruby.exe" "%1" "%2"

こっちはユーザーごとに違うと思いますが。

引数を取るスクリプトを書く

PythonCEの場合は、以下のような感じです。
Shift-JISのテキストファイルを、EUC-JPに変換して別ファイルに書き出すという処理内容です。
GSFinderから渡された引数は、sys.argv[1]で参照できます。

#! /usr/bin/env python
# coding: utf-8

import sys
import codecs
import os

fin = codecs.open(sys.argv[1], 'r', 'shift_jis')
res = os.path.splitext(sys.argv[1])
fout = codecs.open(res[0] + '_euc' + res[1], 'w', 'euc_jp')
for line in fin:
fout.write(line)
fout.close()

ruby-mswinceの場合は以下のような感じでGSFinderから渡された引数が参照できます。

hikisuu = ARGV[0].split('"')[0]

なぜか「ファイル名→"→ゴミ文字列」とダブルコーテーションを挟んでゴミが後ろに付くので、splitでゴミを掃除してます。ファイル名にダブルコーテーションを含むことは許されていないので、一応大丈夫かと。
ただしこれは完全な対策ではなく、少なくとも半角カナがファイル名に交じる場合は変なことになるのは確認してます。cmd.exe&バッチファイル、PythonCE(MortScript、nScript/nScriptmも引数取れるかな?)でファイル名を書き出すなどワンクッション挟んだ方が確実かもしれません。

GSFinderの「アプリケーションの起動」の設定

「ツール>オプション>アプリケーションの起動」で指定したフォルダに、スクリプトのショートカットを作成します。
デフォルトは「\Windows\SendTo」だったかな。
任意の場所に置いた(スペースが含まれないパスがいいと思います)スクリプトをコピー(Ctrl+C)し、上記フォルダで「編集>ショートカットの貼り付け」をすると簡単です。

GSFinderを一度終了し、再起動すると、「ファイル>送る」の中にスクリプトが現れているはずです。
ファイルを選択し、スクリプトに「送る」とすれば、スクリプトでそのファイルが処理できます。

何が便利?

GSFinderに、いろんな機能を追加できるといった感じで考えるといいですね。
PythonCEなら、GSFinderで選択中のファイルをftpでアップしたりできます。
でもその用途ならSimpleUploaderが非常に便利だったり……。
事前処理をやってからアップ、となってくると意味が出てきますね。

GSFinderで選択したテキストファイルをどっかのWebページのフォームからSubmitしたりとか。
GSFinderで選択したテキストファイルに、ネット上から引っ張ってきたデータを追記したりとか。
GSFinderで選択した画像を、いきなり決まっただれかにメールしたりとか。
GSFinderで選択したテキストファイルに対して、定型の置換処理をしたりとか。

いろいろあるかと思います。

不具合

そもそもおかしいことだらけですが、拡張子の関連づけで"%3" "%4"などと引数を増やしても参照できる引数は一つだけです。PythonCEでもruby-mswinceでも、"%3" "%4"などと増やそうが増やすまいが、GSFinderから渡ってくるのはファイル一つだけ。PythonCEの場合は、2番目以降の引数には変な制御文字(?)が入ってきます。ruby-mswinceの場合は2番目以降の引数の中身はnilです。前述のように、ARGV[0]に、GSFinderから渡ってきたファイル名とゴミが交ざって入ります。

今自分が使っているGSFinderはごりぽんさんのGSFinder+ for W-ZERO3ですが、GSFinder+TQでも同じでした。

Windows Mobileネイティブな処理系、MortScript、nScript/nScriptmで引数を(受け取れるものなら)受け取って、書き出したファイル経由でPythonCE/ruby-mswinceに渡した方がいいのかもしれませんね。

多分続く

cmd.exe等との連携はテストしてみようと思ってます。

おまけ:PythonCEで標準出力をじっくり読む

PythonCEで標準出力に出力しても、コンソールがすぐ閉じてしまい読めません。
そういう場合は、

res = raw_input("Pause")

という一文を最後に書いておくとダイアログが表示され、コンソールがすぐ閉じず、標準出力をじっくり読むことができます。
ruby-mswinceの場合は、標準出力の具合がよろしくないので、素直にファイルに書き出して読みましょう。

|

2007.09.09

[Mac OS X]iPhotoで選択中の画像をココログに一発でアップロード

ブログに貼る画像を用意するのが面倒で、Flockを使ってFlickrと連携させているのですが、Flickrが重いことが多くて、これもイマイチだなーと思っていたところで暴想さんのエントリ「暴想: cocolog_image_uploader.rbをバージョンアップ」を発見。

こりゃ便利! ということで真似をさせていただきました。

まずは動作環境を作ります。
既に/usr/local/binにruby1.8.6をインストールしているので、そこまでは(恐らく)暴想さんと同じですね。

ちなみに、僕はMac OS X Tigerを使ってます。

RMagickのMac OS X Tigerへのインストール

cocolog_image_uploader.rbではRMagickを使っているのでインストールします。
RMagickは依存しているライブラリが多いので、結構インストールが大変です。

RMagickのMac OS X Tigerへのインストールについては、Installing RMagick on OS Xを参考にしました。

X11のインストール

X11のインストールをします。僕はもうインストール済みでした。
Mac OS X Tiger用のX11はOSのインストールDVDに収録されてます。

Xcode ToolsとX11 SDKのインストール

これもインストール済み。
ADCからXcode 2.4.1をダウンロードしてインストールしてあります。

Xcodeには3.3と4.0のGCCが入ってますが、gcc4.0の方を選択しておく必要あり。
リンク先ではlnを使ってシンボリックリンクを手動で張ってますが、gcc_selectというコマンドでできます。

sudo gcc_select 4.0

これでOK。

MacPortsのインストール

これもインストール済み。公式ページ

参考「はこべにっき#: MacPortsでステキなUNIXツールをインストール」

MacPortsから必要ライブラリをインストール

以下を実行し、

sudo port install jpeg
sudo port install libpng
sudo port install libwmf
sudo port install freetype
sudo port install ghostscript

さらに以下を実行して、

freetype-config --cflags

以下の出力が得られていればOK。

-I/opt/local/include/freetype2 -I/opt/local/include

ImageMagickのインストール

ImageMagickのページからImageMagick.tar.gzを落としてきて、以下の通りにオペレートします。

tar xvzf ImageMagick.tar.gz
cd ImageMagick-X.Y.Z
export CPPFLAGS=-I/opt/local/include
export LDFLAGS=-L/opt/local/lib
./configure --prefix=/opt/local --disable-static --with-modules --without-perl \
--without-magick-plus-plus --with-quantum-depth=8 \
--with-gs-font-dir=/opt/local/share/ghostscript/fonts
make
sudo make install

RMagickのインストール

RubyGems経由でRMagickをインストールします。
無論、RubyGemsがインストールされていないといけません。

sudo gem install rmagick

ソースからインストールする場合は以下でいけるそうです。

tar xvzf RMagick-X.Y.Z.tar.gz
cd RMagick-X.Y.Z
./configure
make
sudo make install

cocolog_image_uploader.rbの動作確認

cocolog_image_uploader.rbに実行権を与えます。

chmod +x cocolog_image_uploader.rb

RubyGems経由でRMagickをインストールしたので、スクリプトの冒頭に、

require 'rubygems'

を追記。

accountsを自分のアカウントに書き換え。
iPhotoからデスクトップ上に作ったblogフォルダに画像を放り込んで、スクリプトを実行

cd ~/Desktop
./cocolog_image_uploader.rb blog

ちゃんと動きました。

cocolog_image_uploader.rbを改造

iPhotoからコピーするのが面倒なので、iPhotoで選択中の画像を直接アップロードするよう改造してみました。

「cocolog_image_uploader_variant.rb」をダウンロード

ライブラリ、rb-appscriptを使ってます。
rb-appscriptはRubyGemsからインストールできます。

sudo gem install rb-appscript

使い方は、以下の通りです。
iPhotoでアップロードしたい画像を、並べたい順番に一つずつ選択して実行します。iPhotoで選択した順番が反映されます。

./cocolog_image_uploader_variant.rb アカウント名

引数として、アカウント名を指定します。
もちろん、実行前にaccountsの部分を自分のアカウントに書き換えておく必要があります。

エラー処理がほとんど無いので、注意して使ってください。
結果に責任を持てません。

|

2007.09.04

[Zaurus]拡張オーディオドライバでLinux Zaurusをドンシャリサウンドに

tetsuさんのspecial kernelが、Andre Beckedorf氏の拡張オーディオドライバ対応版になったという話を聞いたので試してみました。

Andre Beckedorf氏の拡張オーディオドライバは、Zaurus SL-C1000/C3×00に内蔵されながら未使用だったWM8750 mixerを使い、以下のようなことができるようになっているとのこと。

  • 高音、低音、3Dステレオサウンドの制御
  • サウンドチップの各種カットオフ周波数の制御
  • 出力先の選択(自動、内蔵スピーカ、ヘッドフォン)

インストール

tetsuさんのページに従い、カーネルをv18i(現時点の最新版。それ以上のバージョンなら対応済みでしょう)に入れ替えます。

さらに、Andre Beckedorf氏のページに行って、「wm8750mixer_0.9_arm.ipk - WM8750 mixer for Sharp ROM / Cacko ROM」をダウンロードしてきてインストール。設定タブに現れた「WM8750Mixer」のアイコンを長押し、「ルート権限で実行する」チェックボックスをON、これで準備OK。

Wm8750scrn001

使ってみる、調整してみる

WM8750Mixerを起動します。

Wm8750scrn002

適当に曲を再生、設定をいじってみます。

このわたくし、何を隠そうドンシャリ厨で、Nakamichiの試聴機の過剰な音が大好物。

早速「ドン」を求めて「Bass」のスライダをググっと上げていくと、簡単に音が割れます。

そこで、「-6 dB ATT/Prevent Clipping」のチェックボックスをONにして、クリッピング防止-6dBアッテネータを有効にします。これで音割れが防げて一安心。

「Adaptive Bass Boost」というチェックボックスが気になるのでONにします。「Bass Boostに適応」ということなので、ドンシャリ厨の自分が退くことはありません。……が、よく効能が分からない。デフォルトでは-6dB〜+9dBとマイナスの値から振られた「Bass」のスライダの目盛りが0%〜100%とプラスの数値だけになります。

小さいヘッドフォンでは「Bass」の「Cut-Off」が「200Hz」でないと増幅した感がないかもしれません。
「130Hz」では、音程感の無いバスドラムの下の方が、「200Hz」ではベースの下の方から増幅される感じです。
「200Hz」だと、ヘッドホンによってはちょっとくぐもった印象が出るかもしれません。

続いて「シャリ」の方も、と「Treble」のスライダを上げていきます。

「Cut-Off」は「4kHz」と「8kHz」で迷うところかもしれません。
「4kHz」の方は人声の擦過音辺りが強調される感じです。
「8kHz」はハイハット、ノコギリ波の倍音辺りが強調されます。

手持ちのSennheiser HD25では、自分的に上の画像のようなセッティングになりました。

「3D Stereo」は音が悪くなるし気持ち悪いので無効です。

個人的に超使える「Output」選択機能

「Output」という項目があり、スピーカー、ヘッドフォン端子、自動切替から選べます。

「Headphone」を選ぶと、ヘッドフォンを接続していようがしていまいが強制的にヘッドホン端子からのみ音が出るようになります。

この設定はオーディオプレイヤーとして使うときにとても便利ですね。

例えば、満員電車でだれかにヘッドフォンのケーブルが引っ張られて、ヘッドフォン端子からヘッドフォンが外れてしまった場合、デフォルトではカバンの中のZaurusのスピーカーから再生中の曲が流れてしまうことになりますが、「Headphone」を選んでおくと、そういうことは起きません。

インプレッション

この手のイコライザーはiPodに実装されているもののように(4Gまでしか知りませんが)音が割れてしまって使いものにならないのが常ですが、これは十分実用になります。使わない手はありません。

バキバキにドンシャリにしたセッティングでKoss PortaProと組み合わせると、あのNakamichiの試聴機ばりに過剰な音が出て満足です。

|

« August 2007 | Main | October 2007 »