φ(.. ) 備忘録
amazonアソシエイト

2014年5月31日土曜日

hubot文字化け対策

会社のchatbotが調子悪そうなので、新しいマシンにhubotをインストールして構築しなおしている。チャットの文字コードはISO-2022-JPだが、hubotがutf-8しか対応していないので結構文字化けに悩まされた。
ちまたでは、ZNCなどのプロキシを使うのが常套手段らしいがメンテするツールが増えるのがいやだったので、coffeescriptの改版で乗り切ったので備忘録を残しておく。
改版するスクリプトはこれ。
 hubot/node_modules/hubot-irc/src/irc.coffee

■変更箇所①sendするところでutf-8からISO-2022-JPに変換するperlを起動する。
      8   send: (envelope, strings...) ->
      9     mybot = @bot
     10     # Use @notice if SEND_NOTICE_MODE is set
     11     return @notice envelope, strings if process.env.HUBOT_IRC_SEND_NOTICE_MODE?
     12
     13     target = @_getTargetFromEnvelope envelope
     14
     15     unless target
     16       return console.log "ERROR: Not sure who to send to. envelope=", envelope
     17
     18     for str in strings
     19       cmd = "hubot/perl/nkf.pl -out " + escape(str)
     20       exec = require('child_process').exec
     21       exec cmd, (err,stdout,stderr) ->
     22         mybot.say target, stdout

■変更箇所②message受信時にISO-2022-JPからutf-8に変換するperlを起動する。
    215     bot.addListener 'message', (from, to, message) ->
    216       cmd = "hubot/perl/nkf.pl -in " + escape(message)
    217       exec = require('child_process').exec
    218       exec cmd, (err,stdout,stderr) ->
    219         message = stdout
    220         if options.nick.toLowerCase() == to.toLowerCase()
    221           # this is a private message, let the 'pm' listener handle it
    222           return
    223
    224         if from in options.ignoreUsers
    225           console.log('Ignoring user: %s', from)
    226           # we'll ignore this message if it's from someone we want to ignore
    227           return
    228
    229         console.log "From #{from} to #{to}: #{message}"
    230
    231         user = self.createUser to, from
    232         if user.room
    233           console.log "#{to} <#{from}> #{message}"
    234         else
    235           unless message.indexOf(to) == 0
    236             message = "#{to}: #{message}"
    237           console.log "msg <#{from}> #{message}"
    238
    239         self.receive new TextMessage(user, message)
以上、2箇所。noticeもかえたければ上記を参考に変更する。220行目以降は変更はないが、インデントを2文字ずつ後ろにする必要がある。これをやらないとうまくうごかないぞ!
次は文字コード変換perl。
※ここはperlのnkfモジュールを使うように以前の投稿から変更する。以前はファイル出力しnkfコマンドを使っていたがモジュールを使うことにする。
perlのnkfモジュールは sudo apt-get install libnkf-perlでインストールできる。
■hubot/perl/nkf.pl
#!/usr/bin/perl
use utf8;use NKF;use URI::Escape;
exit if($#ARGV < 1);
$str=uri_unescape($ARGV[1]);
if($ARGV[0] eq "-in"){print nkf("--oc=utf-8 --ic=ISO-2022-JP",$str);}
else{
    $str=~s/%u([0-9a-fA-F]{4})/pack("U",hex($1))/ego;
    print nkf("--ic=utf-8 --oc=ISO-2022-JP",$str);
}

chmod 755 nkf.pl を忘れずに!。
これでほぼ文字化けは回避できた。ポイントは文字をescapeしてからperlに渡しているところで、これをしないと「Д」とか「:」が入力されたとき動作がおかしくなる。


つくって覚えるCoffeeScript入門
飯塚直
アスキー・メディアワークス
売り上げランキング: 292,335

2014年5月20日火曜日

Ubuntuでリモコンを使う。その2

赤外線リモコンの設定を前回紹介したが、そんなのがなくてもipadがあればXBMCのリモコン操作が可能なことを発見した。アプリはこれ。

Official XBMC Remote - iTunes - Apple


Android版はこれ。


ios版しか試してないが、XBMCのyoutubeアドオンの検索において、デスクトップ上ですらできない日本語入力があっさりできてしまう優れもの。
これは常用してもいいかも。

2014年5月10日土曜日

Ubuntuでリモコンを使う

WindowsXPのサポート終了を契機に、XPの自作省電力TV録画PCをUbuntuに更改した。どーせならxbmcをいれて、youtubeや写真などをテレビでみれるようにしようと思い作業を開始。
使ったリモコンは、家に転がっていたやつ。

BUFFALO パソコン用地デジチューナー専用リモコン DT-OP-RC
バッファロー (2008-12-10)
売り上げランキング: 7,428

以前Vistaパソコンをメディアサーバーにしようとしてたときにかったやつ。これのいいところはドライバのインストールがいらないところ。なぜいらないかというとパソコン側はUSBキーボードがつながったと認識するから。なのでUbuntuでも普通に使える。安かったのに結構つかえるリモコンだね。
早速設定。
つなげるとUbuntuはキーボードがつながったと認識するので、リモコンボタンによる操作の割付は基本キーボードショートカットのカスタマイズで行う。Ubuntu標準のUnityをデスクトップとして使っているならその設定は、CompizConfig 設定マネージャーで可能(不具合がでているので注意。詳細は追伸参照)。インストールは以下。
$ sudo apt-get install compizconfig-settings-manager
すでにある標準のキーボードショートカットをリモコンで実施したい場合は、compizconfigの一般オプション内にあるキー割り当てで割り当てが可能。
標準のキーボードショートカットで満足できない人は、compizconfigのコマンドタブでの設定をおすすめする。こちらはボタン毎に動作するコマンドを設定することができる。もちろん自作のシェルスクリプトなどを動作させることが可能。
WindowsではAutohotkeyを常用していたため、おなじようなものがUbuntuにないか探したが最終的に自分のやりかったことはこのcompizconfigのコマンドタブでひととおりできそう。とりいそぎxbmcのリモコン操作はできるようになった。


追伸
本件。しばらく運用していたらショートカットの設定が消え去る事象が発生。その都度設定するも解決手段がわからず・・・。compizconfig設定マネージャーではなく、dconf-editorで設定して様子を見る。dconf-editorで設定後、compizconfig設定マネージャーでみると設定は消える模様。なので、しばらくcompizconfigは起動禁止してみる。
再度追伸
やっぱり設定が消える。これはログイン契機にコマンドで毎回設定するしかないな。以下のシェルを毎回起動しよっとw

#!/bin/sh
/usr/bin/dconf load / <<"EOF"
[org/compiz/integrated]
command-1='/etc/acpi/powerbtn.sh'
command-2='~/xbmc/sh/xbmc_start_stop.sh'
run-command-1=['<Control><Alt>h']
run-command-2=['<Control><Shift>b']
EOF

2014年5月5日月曜日

Ubuntuでリモートデスクトップ

Ubuntuで手軽にリモートデスクトップを実施するならvino-serverがよい。
 $ sudo apt-get install xrdp
でxrdpインストール後、ログインしてGUIから設定するだけでWindowsのリモートデスクトップ接続で普通につながる。ただし、以下の不具合がある。
・カーソルアニメーションが動作しない。常に矢印の状態。
・半角/全角キーがきかない。
常用するにはちょっと致命的。なので、私はx11vncを使うことにした。設定方法は以下。
<Ubuntu側の設定方法>
  1. vino-serverを使用するために設定したデスクトップの共有設定を削除
  2. x11vncをインストール
  3. $ sudo apt-get install x11vnc
  4. 自動起動するアプリケーションに以下を設定。※repeatをつけるとキーリピートが有効になる。
  5. $ /usr/bin/x11vnc -forever -nossl -noncache -nolookup -bg -usepw -repeat 
  6. 接続用パスワード設定
$ x11vnc -storepasswd
<クライアント側>
  1. VNC-Viewer-5.1.1-Windows-64bit.exeをインストール
  2. VNC Server欄にIPアドレス:5900を設定しConnectボタンクリックで接続可能。
接続するだけなら以上。半角/全角キーをつかうなら、IBus-Anthyとか自分使っている入力メソッドの設定を開き、「Key Binding」タブのon_offに「Zenkaku」と「Hankaku」をセットするとキーが有効になる。「Zenkaku_Hankaku」でないところがミソ!

デスクトップ画面を共有するなら上記が簡単便利。会社などで同じサーバーを複数人で使用するシチュエーションでは、デスクトップを共有しないxdmcp+Xmingがおすすめ。

超かんたんUbuntu 100%活用ガイド
佐々木 康之
技術評論社
売り上げランキング: 12,247