2009年2月13日金曜日

(週刊漫画) PSYREN─サイレン─ #57

CALL.57 "改変・12月2日"

ドルキさんこの頃はまだロンゲではなかったんだなあ…
DVDの内容変わった!
でもDVD自体が存在してる、ということはまだ未来崩壊は食い止められてない?!


ああカイルがリーダーしてる、凛々しい、かっこいい、可愛い…
それだけに再ゲブラーとかはやめて欲しいわけですよ。
ドルキさんの攻撃はまあ防いだとしてジュナス!
やめて!!串刺し系はホントやめて!!!

ヒリューさん何とか言えよおおお!
ということで来週が超気になる引きです。
どうでもいいけど天樹院ワッペンがちょっと欲しい…


こちらは以前書いた56話の感想です。

 

2009年2月2日月曜日

USBヘッドホンのinputデバイス利用

Linux上でUSBヘッドホンのボタンにコマンドを割り当てるコードを書き
inputデバイスとして使えるようにしてみました。
そのコードと関係するudevの設定についての記事です。


PCで音を聞くのにUSBヘッドホンを愛用してます。
アナログヘッドホンとは違い雑音知らず、かつ、USBポートにさくさく接続でき便利。
また、ヘッドホン自体に操作用のボタンがついており、音量調節等をマウスやキーボードに
触らずできたりします。

もう生産終了してますがこちらの製品を愛用しています。
オーディオテクニカ社 ATC-HA7USB
http://www.audio-technica.co.jp/products/hp/pc/atc-ha7usb.html


最近はワイヤレスの製品も出ているようです。
ラトックシステム社 REX-WHP2
http://www.ratocsystems.com/products/subpage/rexwhp1u.html


 



ただ、Linuxだと専用のドライバーがなくUSBヘッドホンのボタンが使えなかったり、
Windows等のOSでもボタンに別の機能を割り当てられず、不満がありました。

そこでLinux向けにATC-HA7USB用のコードを書いてみました。
以下のようにコンパイルして実行します。
$ gcc -Wall -O2 -o atc-ha7usb atc-ha7usb.c
$ strip atc-ha7usb
$ ls -l atc-ha7sub
-rwxr-xr-x 1 user user 3576 Feb 2 18:10 atc-ha7usb
$ ./atc-ha7sub


udevの設定

USB接続なので端子を抜き差しするたびにデバイスの名前が変わる可能性があります。
そこで、毎回同じ名前(例では"/dev/input/atc-ha7usb")で使用できるようにします。
また、このinputデバイスを一般ユーザーでも読めるようにします。

Linuxのディストリビューションはdebian-lennyを使っています。
/etc/udev/rules.d/10-local.rulesを作成します。内容は以下のものです。
SUBSYSTEMS=="input", ATTRS{name}=="Audio-Technica.corp ATC-HA7USB", SYMLINK="input/atc-ha7usb", MODE="0640", GROUP="user"

この後USBヘッドホンを抜き差しすれば/dev/input/atc-ha7usbとして認識されるようになりました。
udevの再起動は特に必要ありませんでした。

$ ls -al /dev/input
lrwxrwxrwx 1 root root 6 Feb 2 18:10 atc-ha7usb -> event0
drwxr-xr-x 2 root root 100 Feb 2 17:42 by-id/
drwxr-xr-x 2 root root 140 Feb 2 18:10 by-path/
crw-r----- 1 root user 13, 64 Feb 2 18:10 event0
crw-rw---- 1 root root 13, 65 Feb 2 17:42 event1
crw-rw---- 1 root root 13, 66 Feb 2 17:42 event2
crw-rw---- 1 root root 13, 63 Feb 2 17:42 mice
crw-rw---- 1 root root 13, 32 Feb 2 17:42 mouse0

実際には、event*へのシンボリックリンクになります。
以上の例ではevent0へリンクされ、group"user"も読めるようになっていることが分かります。


原理的にどんなコマンドでもUSBヘッドホンのボタンに割り当てられるようになりました。
素早くボリュームアップボタンを2連打すると次の曲へ!というような利用もできそう。
少し便利になりました。


参考リンク

Linux Input Subsystemの使い方
http://www.aya.or.jp/~takuo/input_subsystem/input_subsystem.html


udevルールの書き方
http://www.gentoo.gr.jp/transdocs/udevrules/udevrules.html



環境

OS: Linux
debian-lenny(i386)
 

(Code: c) atc-ha7usb

USBヘッドホンの付属ボタン操作用に書いたCのコードです。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>
#include <unistd.h>
#include <stdlib.h>

#define CMD_MUTE "amixer set PCM mute >/dev/null 2>&1"
#define CMD_UNMUTE "amixer set PCM unmute >/dev/null 2>&1"
#define CMD_VOLUMEDOWN "amixer set PCM 10%- >/dev/null 2>&1"
#define CMD_VOLUMEUP "amixer set PCM 10%+ >/dev/null 2>&1"


int main()
{
int fd;
int flg_mute = 0;

fd = open("/dev/input/atc-ha7usb", O_RDONLY);
if (fd < 0) {
perror("open");
return -1;
}

while (1) {
struct input_event event;

if (read(fd, &event, sizeof(event)) != sizeof(event)) {
close(fd);
exit(EXIT_FAILURE);
}
if (event.type == EV_KEY && event.value) {
switch(event.code) {
case KEY_MUTE:
if (!flg_mute) {
system(CMD_MUTE);
flg_mute = 1;
} else {
system(CMD_UNMUTE);
flg_mute = 0;
}
break;
case KEY_VOLUMEDOWN:
system(CMD_VOLUMEDOWN);
break;
case KEY_VOLUMEUP:
system(CMD_VOLUMEUP);
break;
default:
break;
}
}
}

close(fd);
return 0;
}

このコードはこちらの記事のように使っています。

USBヘッドホンのinputデバイス利用
http://p2pob.blogspot.com/2009/02/usbinput.html



環境

OS: Linux
debian-lenny(i386)
gcc-4.3.2
 

(週刊漫画) PSYREN─サイレン─ #56

CALL.56 "病院にて"

女の子が自分のためにミソ汁(豆腐)をエプロン姿でつくってくれるう!
そう、野郎なら一度は妄想するはず夢にみるはずなのです…
そしてハレンチな恰好の詳細が知りたい。
そんな岩代先生の週刊少年ジャンプ連載、サイレン56話の感想です。


ていうか雨宮さん久しぶり過ぎる。なんか髪が伸びたような?
頬に目立つ傷が残るもカイル生存。DVDのカイルには傷がなかったし
この時点でもう未来が変わっているのですね…

PSI強盗コンビフルボッコ。ていうか生き残ったのかー!
アマギミロクにコロコロされるものとばかり…
キュアの達人(名前忘れた)の登場がシュールすぎるw


億の金でも買えない土下座!
情報源とはいえ、赤の他人の妹のためにそこまでする影虎さんの理由が分からない。
救えるもんは全部拾うと決めたから?

とは言え、今回の一件で心境に変化があったであろう
影虎さんとかハルランコンビが戦いに参戦しそう。
DVDにチルドレン以外の登場人物もどんどん増えていくのかな?
熱い展開です。


カブト!ヒリューさん!!
来週からはドリフト面子が活躍してくれるはず。
それはそうと、雨宮さんとますます仲良くなってますよ的描写が深まるほどに
桜子もしかして未来でし…とか考えてしまう……

とにかく色々気になります。来週に期待。


こちらは以前書いた55話の感想です。

 

(週刊漫画) PSYREN─サイレン─ #55

CALL.55 "ミロク"

連載一周年突破記念。なんといい響きか──!!
でも、この漫画ばっか追ってるせいかもう3、4年連載してる感すらしてます。


Cカラー見てアニメ化決定か?!とか思った僕を何とかしてください!
カイル、アゲハ、シャオ君が素直にかっこいい!!
ヴァン、フレデリカかわえええ!!!
マリーがまたはっちゃけててですね…グっと来ます。
なんか以前のカラーに比べて今風というか脱昭和風というか、とにかくイイ感じ。

ゲブった三郎→アマギミロク=DVDのマスク野郎確定。話がつながってきました。
シャオ君ビジョンで賢者の石状態。まわるまわる宙(そら)の中心!
岩代絵が見れたら読めたらいいのだ的読者だったのだけれど、今更話にも興味が出てきた!


こちらは以前書いた54話の感想です。

 

2009年1月23日金曜日

(週刊漫画) PSYREN─サイレン─ #54

CALL.54 "兄弟"

扉絵久しぶりにキタ-!!
結局偽弟だったのだけれど"絆は他人には壊せない"、なんか良いですこのコピー。


影虎さん復活→弟は死んでるんだぜ?→口からセフィロトー!
アマギミロクが黒幕!三郎覚醒!!カイル逃げてえええ!!!
もう何が何やら…でも未来につながって良かったのです。

来週カラーに期待。


こちらは以前書いた53話の感想です。

 

(Code: sh) コンソールから英和・和英

アルク社の提供するWEB英和・和英辞書サービス英辞郎をコンソールから使うシェルスクリプトを
書いてみました。curlでサービスにアクセス、awkやsedでパース、w3mで出力しています。
件のサービスは例文が豊富で愛用しています。

・辞書データーを買うほどヘビーに使わない
・WEBブラウザーを開く手間が惜しい
そんなニッチ用途に。

※2009年9月に、UserAgentが空(curl -A '' )だとALCが無条件に「現在アクセスが集中しております。」と返答する仕様に変わったようです。UserAgentを指定するようにコードを変えました。(2009-10-2)


eijiro
#!/bin/sh

## prog
PROG=`basename $0`

## check cmd
LIST="mktemp curl w3m"
for CMD in $LIST ;do
  TEST_CMD=`which $CMD`
  if [ -z "$TEST_CMD" ] ;then
    echo "$PROG: Error: we need command \"$CMD\"" >&2
    exit 1
  fi
done

## usage
function my_usage {
  echo "usage: $PROG <word>"
  exit 1


## init
### arg
if [ -z "$1" ] ;then
  my_usage
fi
KEY=`echo "$1" |sed 's/ /+/g'`

### dir and file
DIR_TMP=`mktemp -d /tmp/$PROG.XXXXXXXXXX`
FILE_SRC=$DIR_TMP/src
FILE_CUT=$DIR_TMP/cut
FILE_MOD=$DIR_TMP/mod

DIR_HOME="$HOME"/.$PROG
if [ ! -d "$DIR_HOME" ] ;then 
  mkdir "$DIR_HOME"
fi
FILE_CACHE="$DIR_HOME"/"$KEY"

### function
function my_exit {
  #echo $DIR_TMP  ## debug
  rm -r $DIR_TMP
  exit $1
}

### environment
export LANG=ja_JP.UTF-8


## body
if [ -r "$FILE_CACHE" ] ;then
  echo "Warning: cache file exists for \"$KEY\". don't use curl" >&2
  echo "---" >&2
  cat "$FILE_CACHE"
  my_exit 0
fi

UA='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'
URL=http://eow.alc.co.jp/"$KEY"/UTF-8/
curl -Ss -m 10 --compressed -A "$UA" "$URL" -o $FILE_SRC
TEST_SRC=$?
if [ $TEST_SRC -ne 0 ] ;then
  echo "$PROG: Error: can't get source $URL" >&2
  my_exit 1
fi

NUMS=(`grep -n '<\/\?li>' $FILE_SRC |awk -F: '{print $1}'`)
awk "NR >= ${NUMS[0]} && NR <= ${NUMS[${#NUMS[*]} - 1]}" $FILE_SRC >$FILE_CUT

sed -e 's/<span class="midashi">/* /g' -e 's/<ol>/<br>/g' -e 's/<\/ol>//g' -e 's/<\/div>/<\/div><br>/g' $FILE_CUT >$FILE_MOD

w3m -dump -T text/html -cols 100 $FILE_MOD |tee "$FILE_CACHE"


## end
my_exit 0
$ eijiro '英和・和英したい言葉'

と実行して使ってます。


このスクリプトを、さらに以下のスクリプト経由で別のターミナル(xterm)に表示して使っています。

x-eijiro
#!/bin/sh

xterm -geometry 100x64+0+0 -bg grey90 -T eijiro -e "eval eijiro \'$@\' 2>&1 |less -m"


スクリーンショット

「置き去り」を和英したときのスクリーンショットです。


$ x-eijiro '置き去り'

と実行しています。改めて思うに"置きざり"はすごくネガティブワードです…


他情報

英辞郎を利用するFirefoxの機能拡張や検索pluginをつくってる方がいらっしゃるみたい。

機能拡張
Mouseover Dictionary
http://maru.bonyari.jp
/mouseoverdictionary/
英辞郎ローカル辞書データー(2,000円)が必要になるようです。

検索plugin
KOMOREBI || blog
http://www.freesia.org/archives/2006/01/firefox.html

アルク社の規約で制限されているため公開を取りやめられたようです。


環境

OS: Linux
debian-lenny