それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

RubyでWindowsのフォルダを監視する

Windowsのフォルダを監視して,ファイルが追加されたら、通知したい.
.NetFramework つかえば簡単にできるんだけど.IronPythonとか使えば一瞬で出来るんだけどね.Rubyのgems でがんばってみて

Windowsのフォルダ監視

WinShotがどんどんキャプチャしてくれるんだけど,ファイル名をいちいちメモするのがめんどくさい.Gyazoを入れるほどでもないので,画面キャプチャしてファイル名を返してくれるWin32APIが欲しいと思ったけど,そんなモノ無いので、適当に作る.

rubyにはwin32APIを使うライブラリがある

今回使ったのはこれ

require 'win32/changenotify'

ruby でフォルダ監視

'C:\Users\takuya\Pictures\capture'を監視する。
ファイルが追加されたら、ファイル名をクリップボードにコピーする.

require 'rubygems'
require 'win32/changenotify'
require 'win32/clipboard'

$KCODE="s"
include Win32
class Clipboard
  def Clipboard.data=(bin) self.set_data bin end
end
filter = ChangeNotify::FILE_NAME | ChangeNotify::DIR_NAME
path   = 'C:\Users\takuya\Pictures\capture'

cn = ChangeNotify.new(path, true, filter)
cn.wait{ |arr|
  arr.each{ |info|
     Clipboard.data= "file:"+ info.file_name if info.action == "added"
  }
}

起動方法

rubyw.exe watch_folder.rb

ruby.exeでなく rubyw.exe を使う。コンソール画面が残ると邪魔なので.rubyw.exeを使ってプロセスをバックグラウンドで動かす方が便利だし.

2011-12-26追記

サービス登録すると便利だと思う.


Cygwinを使えばスクリプトを簡単にサービス登録できるので,これを活用することにする.
CygwinでWindowsサービスを作る。簡単だった。 - ブックマクロ開発に

jQuery でHTMLElementを取り出す(方法がブラウザごとに異なるかも)

jQuery を使っていると,HTMLElementはほとんど使わないので,存在を忘れそうになります.しかし、たまに元要素を参照して値を見たい!と思うときやEventをAddしたいと思うときがあります.

元HTML要素を取得する方法

jquery#get を使います
jQuery("#menu").get() //=> セレクトされた要素が入った配列。一つでも配列に入れて返す
jQuery("#menu").get(0)//一つ目 

とココまで書いて終わりだったんですが,

事件発生

ブラウザごとにjQuery の挙動が違うんです
ブラウザごとにjQueryの結果の表示が違います.

まとめると

|ブラウザ|$(セレクタ)の戻り値|HTMLElementを取るには|
|chrome | HTMLElement| そのままで取得可能|
|firefox|HTMLElement| そのままで取得可能|
|safari |jQuery Object(HTMLElement)| get()経由で取得可能|
|opera |jQuery Object(HTMLElement)| get()経由で取得可能|

つまりget を使うべきは

safari/operaだけらしい.*1

配列のふりをしたObjectだった

id:edvakf さん、突然質問してすいませんでした.ありがとうございます。
なんかパニックになっててid:edvakfさんに何ででしょうねと聞いてみたら,親切に一緒に考えてくださいました.


jQueryが配列のふりをしたObjectを返している.

FireBugChromeは配列と同等と考え配列の中身を表示している
SafariOperajQueryをオブジェクトと考えObjectとして表示している

safariもobjectと表示されているが配列として扱える


id:edvakfさん感謝です.



たしかに昔のjQueryは、オブジェクトを返していたと思うんです.

ナナピはGoogleホスティングしているjQuery を利用している。

考えられる原因は三つあって

  • Googleがブラウザごとに違いのあるjQueryを返すのか
  • ブラウザごとにjQueryが自分の挙動を変えるのか
  • ブラウザのJavaScriptの動作に起因するのか

僕は3番目だと思うんだけど,GooglejQuery をブラウザごとに異なるモノを送ってるとしたらやだなぁ.

時間があれば調べたい.

*1:あ、IEは無視です。

PT2でBS用にLNB電源15Vを供給する

PT2のためにBSアンテナ買ってみました

BSアンテナはLNB15vを供給しないと動かないらしい.調べてみたらPT2から供給可能とのことでした.

ドライバの再構築

今回はドライバだけを弄るので、ソースコードは最新のモノで良い.

チェンジセット: 119:7662d0ecd74b
タグ: tip
ユーザ: Yoshiki Yazawa
日付: Fri Nov 19 11:19:25 2010 +0900
要約: revised new ioctl functions

のバージョンを使用した.

ソースを開いて、LNBを供給する

ソースを開いて、LNBを供給する様にコードを書換える
cd ~/PT1.2011-03-08/pt1/
vi driver/pt1_pci.c

driver/pt1_pci.c

  52 MODULE_LICENSE("GPL");
  53
  54 static int debug = 7;           /* 1 normal messages, 0 quiet .. 7 verbose. */
  55 static int lnb = 2;         /* LNB OFF:0 +11V:1 +15V:2 */
  56

ビルドを実行

make clean 
make 
sudo make install


つぎに再起動.カーネルドライバだから再起動しないとダメみたい
再起動後

/dev/pt1*
takuya@atom:~$ ls /dev/pt1*
/dev/pt1video0  /dev/pt1video1  /dev/pt1video2  /dev/pt1video3


これでLNB給電が出来る様だ

2011-11-10追記

BS動作確認をする時に必要になるチャンネル番号表。

チャンネル名 チャンネル番号
NHK BS1 101/102
NHK BS hi 103
BS 日テレ 141
BS 朝日 151
BS-i 161
BS Japan 171
Bs フジ 181

pt1/pt2が動作しない時に調べる項目

PT1が急に動作しなくなった・・・調べてみたらUbuntuのアップデートが原因だった。

調べること

とりあえず 、PCIのデバイスがあるか調べる

lspci | grep media
03:00.0 Multimedia controller: Xilinx Corporation Device 222a (rev 01)

つぎに、ドライバを調べる

ls /dev/pt1*
/dev/pt1video0  /dev/pt1video1  /dev/pt1video2  /dev/pt1video3

無い。つまりUbuntuのアップデートでカーネルが更新されたためバージョンが上がったんだな。
そしてPT1ドライバが読み込まれなくなった

ドライバの再構築とインストール

cd PT1/driver
make clean
make 
sudo make install

再起動

再起動したら読み込まれた

ls /dev/pt1*
/dev/pt1video0  /dev/pt1video1  /dev/pt1video2  /dev/pt1video3


有志が開発したPT1のLinuxドライバは、カーネルが更新されたら動かなくなる。なのでMakeしたソースコードは捨てずに取っておくのがコツらしい.Ubuntuなど Linux OS のアップデート時にはkernel XXXという文字列に注意。適当にアップグレード繰り返していると何度もビルドする羽目に.。

pt1ドライバにdvbを使えばそういうことなさそうだけど.めんどくさい

alternatives を使って使うプログラムを切替えるには

alternatives を使って使うプログラムを切替えるには

update-alternatives --config  プログラム名

実際に editor を切替えてみる.

takuya@atom:~$ update-alternatives --config  editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                優        Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number: 3 # ←vim 指定

editor をVimにした

alternatives候補一覧表示

takuya@atom:~$ update-alternatives --list editor
/bin/ed
/bin/nano
/usr/bin/vim.basic
/usr/bin/vim.tiny

alternativesとは

alternatives は同じソフトを使い分けるのに使われてる。
たとえばJavaJavaならSunJDKとOpenJDK。
たとえばエディタ。Editorではnano/emacs/vim/ed など
たとえばmta.メールサーバーでは sendmail/postfix/qmailなど

たとえば同じソフトウェアのバージョン違い
ruby だと ruby1.8 と ruby19 とか
python だと python 2.4 python 2.5 python 3 など

名前が同じソフトウェアで機能も似ているものを一括管理してしまう仕組み.
仕組みと言っても単なるsymbolicリンクで、ファイルの保存先が約束事になっているだけ
もともとDebianが競合するソフトをAptで管理するのに使われていたが
いまではどのディストリビューションでも採用されているみたい。

alternativesの仕組み

通常 vim は /usr/bin/vim になるが

/usr/bin/vim ->     /etc/alternatives/vim -> /usr/bin/vim.basic
 みえるもの  →リンク→ 中間 管理         →  実際に起動するプログラム 

のようにシンボリックリンクがクッションの役目を果たす.
使うときは /usr/bin/vim を見るだけ。
管理するとき /etc/alternatives で実体を指定する

ファイルの実体

もともとDebianがパッケージ管理に使っている由来のためDebianでは
/var/lib/dpkg/alternativesにAlternativesの実体(設定)がある

alternatives のファイルの中身など

ls -l  /var/lib/dpkg/alternatives
合計 408
-rw-r--r-- 1 root root   53 2011-02-01 20:30 aptitude
-rw-r--r-- 1 root root  269 2011-03-05 22:37 automake
-rw-r--r-- 1 root root  207 2010-10-08 00:57 awk
(略)
-rw-r--r-- 1 root root  718 2011-04-09 13:07 editor
(略)

-rw-r--r-- 1 root root   42 2011-02-01 20:30 vim
-rw-r--r-- 1 root root   46 2011-02-01 20:30 vimdiff
-rw-r--r-- 1 root root  107 2010-10-08 00:57 w
-rw-r--r-- 1 root root  122 2010-10-08 01:12 write
-rw-r--r-- 1 root root  127 2010-10-08 01:13 www-browser

alternatives はシンボリックリンクで管理されている

/etc/alternatives にシンボリックリンクの実体がある

takuya@atom:~$ ls -l  /etc/alternatives
lrwxrwxrwx 1 root root  24 2011-02-01 20:30 aptitude -> /usr/bin/aptitude-curses
lrwxrwxrwx 1 root root  22 2011-03-05 22:37 automake -> /usr/bin/automake-1.11
lrwxrwxrwx 1 root root  13 2011-02-01 19:30 awk -> /usr/bin/mawk
(略)
rwxrwxrwx 1 root root   18 2011-04-09 13:07 editor -> /usr/bin/vim.basic
(略)
lrwxrwxrwx 1 root root  18 2011-02-01 20:30 vim -> /usr/bin/vim.basic
lrwxrwxrwx 1 root root  18 2011-02-01 20:30 vimdiff -> /usr/bin/vim.basic
lrwxrwxrwx 1 root root  17 2011-02-01 19:30 w -> /usr/bin/w.procps
lrwxrwxrwx 1 root root  33 2011-02-01 19:30 w.1.gz -> /usr/share/man/man1/w.procps.1.gz
lrwxrwxrwx 1 root root  18 2011-02-01 19:30 write -> /usr/bin/bsd-write
lrwxrwxrwx 1 root root  12 2011-02-01 19:30 www-browser -> /usr/bin/w3m

管理されているモノはどう見えるか

vim は alternatives を指している

takuya@atom:~$ ls -l `which vim `
lrwxrwxrwx 1 root root 21 2011-02-01 20:30 /usr/bin/vim -> /etc/alternatives/vim

alternatives の vim は プログラム本体を指している

takuya@atom:~$ ls -l  /etc/alternatives/vim
lrwxrwxrwx 1 root root 18 2011-02-01 20:30 /etc/alternatives/vim -> /usr/bin/vim.basic

alternatives のさらなる詳細表示

takuya@atom:~$ update-alternatives --display editor
editor - manual mode
  link currently points to /usr/bin/vim.basic
/bin/ed - priority -100
  slave editor.1.gz: /usr/share/man/man1/ed.1.gz
/bin/nano - priority 40
  slave editor.1.gz: /usr/share/man/man1/nano.1.gz
/usr/bin/vim.basic - priority 30
  slave editor.1.gz: /usr/share/man/man1/vim.1.gz
  slave editor.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz
  slave editor.it.1.gz: /usr/share/man/it/man1/vim.1.gz
  slave editor.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz
  slave editor.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz
/usr/bin/vim.tiny - priority 10
  slave editor.1.gz: /usr/share/man/man1/vim.1.gz
  slave editor.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz
  slave editor.it.1.gz: /usr/share/man/it/man1/vim.1.gz
  slave editor.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz
  slave editor.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz
Current 'best' version is '/bin/nano'.


また、デフォルトの状態に戻すには、--auto オプションで指定

  update-alternatives --auto editor