SmallStyle


2007-10-01

_ Buffalo WHR-G54Sにtomato firmwareをインストール

Buffalo の無線 LAN ルータ WHR-G54S のファームウェアを書き換えて,機能強化したルータにしてみた.今回は,Tomato Firmware で挑戦.こうした代替ファームウェアを利用すると,例えば Tomato Firmware の場合,帯域使用量のグラフ化や,スクリプトの実行などなど,さまざまな機能が利用できるようになります.この辺は,無線LANアクセスポイントを機能強化する無料ファームウェア「Tomato Firmware」- GIGAZINEなんかを参考に.

Windows の機能

導入手順については,まず,ファームウェアを書き換えるにあたって,Windows で tftp クライアントを利用可能な状態にしておきます.Windows Vista では 「Windows の機能の有効化または無効化」で"TFTP クライアント"にチェックをいれておきます.有効化は若干時間がかかりました.気長に待ちましょう.

次に Windows のネットワークの設定を以下のように設定します.

IP アドレス
192.168.11.2
サブネットマスク
255.255.255.0
デフォルト ゲートウェイ
192.168.11.1

WHR-G54S 側は底面の INIT を長押しして初期化しておきます.

ここで,Windows と WHR-G54S を接続し,WHR-G54Sの電源ケーブルをいったん抜きます.Windows では更新用のバッチファイル (whr_install.bat) が用意されているので,これを実行します.実行したらWHR-G54Sの電源ケーブルを再度接続して,バッチを実行.

===========================================================================
This batch file will upload tomato.trx in the current directory to
192.168.11.1 during the router's bootup.

* Set your ethernet card's settings to:
     IP:      192.168.11.2
     Mask:    255.255.255.0
     Gateway: 192.168.11.1.
* Unplug the router's power cable.

Press Ctrl+C to abort or any other key to continue...

* Re-plug the router's power cable.

===============================================================================
Waiting for the router... Press Ctrl+C to abort.

tftp -i 192.168.11.1 put tomato.trx
転送を正常に完了しました: 4 秒間に 2764800 バイト、691200 バイト/秒

===============================================================================
* WAIT for about 2 minutes while the firmware is being flashed.
* Reset your ethernet card's settings back to DHCP.
* The default router address will be at 192.168.1.1.

続行するには何かキーを押してください . . .

転送が完了したら,Windows のネットワーク設定を DHCP に戻しておきます.書き換えが済むであろう数分後にルータにアクセス (192.168.1.1) すると,Tomato Firmware の設定画面が表示されます.ちなみにログインユーザの初期値はユーザが root,パスワードは admin.

Ajax を利用したユーザインターフェースで,これはこれでいい感じです.


2007-10-09

_ Java Service Wrapper を使って NicoCache をWindows サービスとして登録する

ニコニコ動画をローカルにキャッシュして,快適に利用できる便利ツール「NicoCache」ですが,起動するとプロンプトが開いたままになります.ま,残っていても別段気になるわけでもないですが,Windows のサービスに登録しちゃったりすると,すっきりするかな,ということでその方法.

Java アプリケーションを Windows のサービスとして利用する方法としては,JavaServiceJakarta Commons Daemon などがあるみたいですが,今回は,Java Service Wrapper を利用して,NicoCache をサービス化しようと思います.この後に書く手順は,事前に NicoCache の導入と稼動確認が取れているものとして,そこから Windows サービス化への手順を紹介します.

まず,Java Service Wrapper のサイトから,Wrapper をダウンロードします.左メニューの Binaries リンクから,wrapper-windows-x86-32-3.2.3.zip をダウンロードし,任意の場所に解凍します.解凍したフォルダを以下の src\bin 以下に下記のファイルがあります.{WRAPPER_HOME} は解凍したフォルダ.

バッチファイルのコピー

  • {WRAPPER_HOME}\src\bin\App.bat.in
  • {WRAPPER_HOME}\src\bin\InstallApp-NT.bat.in
  • {WRAPPER_HOME}\src\bin\UninstallApp-NT.bat.in

これらを以下のように名前を変えて,bin 以下にコピーします.

  • {WRAPPER_HOME}\bin\NicoCache.bat
  • {WRAPPER_HOME}\bin\InstallNicoCache-NT.bat
  • {WRAPPER_HOME}\bin\UninstallNicoCache-NT.bat

NicoCache関連ファイルのコピー

次に NicoCache のフォルダにある以下のファイルJava Service Wrapper の bin 以下にコピーします.(NicoCache.bat はコピーしない)

  • {WRAPPER_HOME}\bin\cache
  • {WRAPPER_HOME}\bin\NicoCache.jar
  • {WRAPPER_HOME}\bin\config.properties

次に,Java Service Wrapper から NicoCache を呼び出すように設定していきます.Java Service Wrapper の conf 以下に wrapper.conf があるので,こちらを編集します.

wrapper.java.mainclass

wrapper.java.mainclass=org.tanukisoftware.wrapper.test.Main

を以下に変更.

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

wrapper.java.classpath

wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../lib/wrappertest.jar

の下に,以下を追加

wrapper.java.classpath.3=NicoCache.jar

wrapper.app.parameter

#wrapper.app.parameter.1=

を以下に変更

wrapper.app.parameter.1=dareka.Main

Java Service Wrapper のログがデフォルトでは大きくなり続けるので,適当にローテーションさせるようにしておきます.

wrapper.logfile.maxsize

wrapper.logfile.maxsize=200k

ログファイルサイズは任意の値に変更.それなりにサイズがあればいいと思います.

wrapper.logfile.maxfiles

wrapper.logfile.maxfiles=1

ログファイルの数も任意の値で.

Windows サービスに登録するので,サービス名などの定義もします.

wrapper.ntservice.name=NicoCache
wrapper.ntservice.displayname=NicoCache
wrapper.ntservice.description=ニコニコ動画の動画をキャッシュして一度見た動画を二度目以降は快適に見られるようにするツールです

上記は一例ですが,名前はなんでもかまいません.

ここまで準備ができたら,一度 Java Service Wrapper 経由で NicoCache を起動してみます.

F:\tool\javasrv-wrapper\wrapper-windows-x86-32-3.2.3\bin>NicoCache.bat
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | NicoCache v0.04
jvm 1    | port=8080
jvm 1    | direct mode (no secondary proxy)
jvm 1    | title=true
jvm 1    | total cache size=120,266,163bytes

こんな感じで表示されればうまく起動できています.ためしにブラウザで何か動画を見てみます.今日のマイリスト登録ランキング 1 位のものでも…

jvm 1    | no cache found: sm1224062_百人の組曲『ニコニコ動画』大合奏+リアレンジ+大合唱(大砲付き).flv
jvm 1    | cache completed: sm1224062_百人の組曲『ニコニコ動画』大合奏+リアレンジ+大合唱(大砲付き).flv

コンピュータの管理

NicoCacheのプロパティ

ここまでこれば,あとはサービスとして登録するだけ.さきほど起動した NicoCache をいったん Ctrl + C で停止します.次に InstallNicoCache-NT.bat を実行すると,サービスの一覧に NicoCache が登録されます.

F:\tool\javasrv-wrapper\wrapper-windows-x86-32-3.2.3\bin>InstallNicoCache-NT.bat
wrapper  | NicoCache installed.

登録が完了したらあとはサービスを開始して,正常に動作するか確認してください.

これで,再起動してもサービスとして自動で起動してくれるので,その存在すらも忘れてしまいそうな感じです.ちなみにサービスから削除する場合は,UninstallNicoCache-NT.bat を実行すると削除されます.

つづき: 2007-12-31
本日のツッコミ(全1件) [ツッコミを入れる]

_ TrackBack [http://www.smallstyle.com/20080113.html#p01 SmallStyle OS ..]


2007-10-12

_ 中京大学公開講座に参加

中京大学公開講座ソフトサイエンスシリーズ第 28 回が「世界に広がるRuby〜生みの親が語る〜」というものだったので,会社の近くの名古屋市科学館での開催ということで申し込んで行ってきた.(ちなみに開催案内は地下鉄の中吊り広告で見つけた)

大学の公開講座ということもあってか,学生さんやら年配の方やら結構幅広い層の方々が参加されてたみたい.名古屋市学館のサイエンスホールでの開催だったのですが,席もかなり埋まってた.

内容は Ruby が生まれた経緯や,Ruby が愛される理由,エンタープライズと Ruby などなど.

最後に SE に必要なもの的な話があって,やっぱ英語は重要ってのがあった.読むのは抵抗ないけど,英語でコミュニケーションとるのがどうにもダメだ.聞けないし話せない.その前に,そもそもやる気がないってのが一番ダメなのはわかって るんだけど…


2007-10-18

_ なしのコンポート

なしのコンポート

時間があったのでちょろっと作ってみた(時間がなくても十分作れる簡単なものだけど.

白ワインと砂糖,水を沸騰させて,皮と芯をとって,8 等分くらいにしたなしを10分程度煮る.あとは適当に粗熱がとれたら冷蔵庫にいれて冷やすだけ.

お好みでヨーグルトとかアイスをそえるとおいしいかも.簡単でおいしいデザートができました.


2007-10-29

_ plaggerのFilter::FFmpegで変換するときにファイル名が文字化けしてエラーになる

ニコニコ動画/YouTube の動画を Plagger で落として変換しようとした記録(3) - HsbtDiary(2007-10-29)について,週末に同じことをやろうとして,文字化けについては自分の環境では解決したっぽいので,せっかくだから書いておこう.ちなみに実行環境は OS X 上で文字コードは UTF-8 の環境です.

以下の yaml で実行してみる.

(略)
- module: Filter::FFmpeg
  config:
    dir: /tmp/work
    ext: MP4
    command: /opt/local/bin/ffmpeg
    encoding: utf-8
    option_string: '-y -threads 4 -s 640x480 -r 29.97 -vcodec xvid -g 250 -aspect 4:3 -b 600 -level 13 -loop 1 -sc_threshold 40 -partp4x4 1 -rc_eq blurCplx^(1-qComp) -refs 3 -maxrate 768 -async 50 -acodec aac -ar 44100 -ac 2 -ab 128'

で,実行してみると以下のようなエラーで変換に失敗する.

Plagger::Plugin::Filter::FFmpeg [info] Converting ぬこぬこトーク ...
Plagger::Plugin::Filter::FFmpeg [error] FFmpeg version SVN-r9102, Copyright (c) 2000-2007 Fabrice Bellard, et al.
 configuration: --prefix=/opt/local --prefix=/opt/local --disable-vhook --mandir=/opt/local/share/man --enable-shared --enable-pthreads --enable-libmp3lame --enable-libogg --enable-libvorbis --enable-libtheora --enable-gpl --enable-libfaac --enable-libfaad --enable-xvid --enable-x264 --enable-liba52
 libavutil version: 49.4.0
 libavcodec version: 51.40.4
 libavformat version: 51.12.1
 built on Oct 22 2007 01:34:17, gcc: 4.0.1 (Apple Computer, Inc. build 5367)
/tmp/work/???????????.flv: no such file or directory

まぁ,見てのとおりファイル名が化けてしまっている(???? の部分は実際は変な記号で化けています)ので,対象のファイルがありませんよー,ということ.文字コード問題ってのはどこにでもつきもののややこしいものです.

いろいろと調べてみた結果,UTF-8 フラグというのがキーワードっぽい.これがついてると何かと文字化けを引き起こす原因となっているらしい.そこで FFmpeg.pm に以下の関数を追加して,UTF-8 フラグがあれば除去してencodeするようにしてみた.

sub convert
  my ($self, $str) = @_;
  utf8::decode($str) unless utf8::is_utf8($str);
  return encode($self->conf->{encoding} || 'cp932', $str);
}

上記コードは,Publish::Pipe にあったものをそのまま利用しました.で,FFmpeg.pm 内で,

encode($encoding, $enclosure->local_path)

のような,encodeしている部分を,

$self->convert($enclosure->local_path)

先ほど追加した関数を通すようにしたところ,文字化けせずにファイルを出力できるようになりました.

一応,diffを貼付けておきます.

--- FFmpeg.pm.old       2007-09-24 22:10:10.000000000 +0900
+++ FFmpeg.pm   2007-10-29 22:05:44.000000000 +0900
@@ -48,15 +48,15 @@
         }

         my $ff = FFmpeg::Command->new($self->conf->{command});
-        $ff->input_options({ file => encode($encoding, $enclosure->local_path) });
+        $ff->input_options({ file =>  $self->convert($enclosure->local_path) });

         my $output_file = File::Spec->catfile($self->conf->{dir}, "$file");
         my $output_options = {
-            file    => encode($encoding, $output_file),
+            file    => $self->convert($output_file),
             device  => $self->conf->{device} || 'ipod',
-            title   => encode($encoding, $entry->title),
-            author  => encode($encoding, $entry->author),
-            comment => encode($encoding, $entry->summary),
+            title   => $self->convert($entry->title),
+            author  => $self->convert($entry->author),
+            comment => $self->convert($entry->summary),
             %{ $self->conf->{options} || {} },
         };

@@ -91,6 +91,13 @@
     }
 }

+
+sub convert {
+  my ($self, $str) = @_;
+  utf8::decode($str) unless utf8::is_utf8($str);
+  return encode($self->conf->{encoding} || 'cp932', $str);
+}
+
 1;
 __END__

試した環境は OS X 上なので,その他の環境でうまくいくかどうかわかりませんが,文字化けでお悩みの場合は一度お試しあれ.

Perl についてはあまりよく理解していないので,間違っていればどしどしご指摘ください.


about me

いろいろと興味を持ったことを書いてます.ちょっとしたことは hb(@smallstyle) on Twitter で書いてます.

Archive

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|12|