Home

shunirr.org

Make Jiglet on MacOSX

  • 2008-04-30 (水)
  • 未分類

いろいろあって、jigletを作ることになった。

Jigletとは?
jigブラウザを更に便利にするプラグイン”jiglet”

jiglet作成方法

1. 事前準備
現在、対応しているOSは、WindowsXPになります。

メインマシンがMacOSXなので、どうにかMacで開発したい。というか、JavaならMacでも動くだろ。と淡い気持ちを抱きながら移植してみたけど、移植ってほど大げさでもなくバッチファイル(*.bat)を淡々とシェルスクリプトに書き換える簡単なお仕事だった。

で、実際それで動いたので、シェルスクリプトコピペしとく。

create.bat → create.sh

#!/bin/sh
cd bin
java -classpath projectMaker.jar CreateJiglet $1
cd ..

c.bat → c.sh

#!/bin/sh
. setting.sh
if [ ! -d "res" ]; then
        mkdir res
fi
cd res
if [ -e "*.class" ]; then
        rm -f *.class
fi
cd ..
if [ ! -d "code" ]; then
        mkdir code
fi
cp res/* code > /dev/null
cp urlparam/* code > /dev/null
cp param.txt code > /dev/null
javac -target 1.4 -source 1.4 -classpath ../../bin/pluginemu.jar -d ./code $APP_NAME.java
if [ $? ]; then
        cd code
        java -cp ../../../bin/pluginemu.jar:./ -Dmaincls=$APP_NAME -Durlparam=$URL_PARAM -Ddlurl=$DL_URL jp.jig.jiglet.Jiglet
        cd ..
fi

m.bat → m.sh

#!/bin/sh
. setting.sh
if [ ! -d res ]; then
        mkdir res
fi
cd res
if [ -e *.class ]; then
        rm -f *.class
fi
cd ..
if [ ! -d code ]; then
        mkdir code
fi
javac -target 1.1 -source 1.2 -g:none -classpath ../../bin/pluginemu.jar:. -d code $APP_NAME.java
if [ $? ]; then
        cp res/* code > /dev/null
        cp param.txt code > /dev/null
        cp icon.gif code > /dev/null

        cd code
        java -classpath ../../../bin/jigletMaker.jar JigletMaker $APP_NAME
        cd ..
fi

setting.bat → setting.sh (create Testとした場合)

#!/bin/sh
export APP_NAME=Test
export URL_PARAM=
export DL_URL=

ds.bat → ds.sh

#!/bin/sh
rm -f code/sp.bin

これとあと、改行コードには気をつけること。

エミュレータとかjigletコンパイラは、(おそらく)Javaで書かれているのでバッチファイルを書き直すだけで動いたし、.jigletファイルを生成することも出来た。
シェルスクリプトとかあんまり書かないので調べながらに頑張ったけど、ほぼ元のバッチファイルを模倣出来た(と思う)。というか、ifあたりが微妙なんじゃないかなあ、と未だに思ってるけどこれで動くからいいよね。何か指摘する点があれば、つっこみ大歓迎です。

まだ、実際にjigletは作ってないんだけど、これでMacでも開発できるので幸せです。

sl > /dev/pts/0 とかで任意のターミナルに機関車を走らせることができる

  • 2008-04-30 (水)
  • 未分類
% tty
/dev/pts/0

LinuxとかUnixにはttyってのがあって、標準出力にデバイスが繋がってる。
で、このttyに対して書き込みとか読み込みをすると、そのttyをある意味乗っ取れる状態になれる。

% cat /dev/pts/0

とか

% echo "こんにちは" > /dev/pts/0

とかすると、/dev/pts/0が繋がっている標準入力を乗っ取ったり、標準出力に「こんにちは」とか出力できる。

これを利用しているのが、GNU Screenとか、Partty!.orgだったりするんだけど。

で、なんとなくslコマンドを任意のttyにリダイレクトしたらどうなるかって思ってやってみたら、実際に出来た。

ちなみにslコマンドってのはこんなの。

*NIX使いならおそらくみんな知っているだろうジョーク(?)ソフト。

ところで、うちの学校ではなぜかLinuxにrootでみんな同じパスワードでログインして作業をする不思議な授業があるんだけど(未だにrootでログインする意味が理解できない)、もれなくみんなsshdが立っているので任意のマシンにsshでつなげたりする。

任意のマシンにsshで入れるって相当危険なんだけど、さらにroot権限まで持ってるからかなりヤバイ。

% shutdown -h now

とか出来たり

% killall gnome

とかいろいろ楽しい事が出来たりするんだけど、視覚的に分かるものじゃないとおもしろくないよね。

というわけで、slコマンドを思いついたんだけど、思いついた頃には自宅でした。

やってるときはちょっと楽しかったけど、自宅に帰って思い返すとかなり中二な内容で少し落ち込んでます。
まぁ、まとめると/devにはいろいろおもしろいデバイスがつまってるからみんないろいろ遊んでみるといいよ!

Twitterのクラスタを可視化したいな

  • 2008-04-26 (土)
  • 未分類

Twitterのクラスタを可視化したいとかずっと前に言ってた気がするけど、なんか卒研でそういうことをやることになった。
と言っても未だなに何もしてない。

参考になりそうなプログラム見つけた。

mixiGraphやら上の動画みたいな感じで、replyがあるとそれぞれの場所に近づいていって、最終的にはクラスタが見えるようになるんじゃないのかなーなんて思ってる。

パブリックタイムラインで動かすつもりだったりするんだけど、それだと観測領域が広すぎてグラフとして見るにはノード数が多くて大変そう。

最初に自分のユーザ名入れて、スクレイピングしてfollowingリスト作って、そこのユーザからクラスタ形成するとか?

ところで、この動画はYouTubeを先に見つけてしまって、元記事が分からない・・・。知ってたら教えてください。

追記

kisさんみたいです。thanks tyoro!

まさにそのネタな件ww

Timeout::Errorが罠過ぎる

  • 2008-04-20 (日)
  • 未分類

RubyのTimeout::ErrorはStanderdErrorじゃないから、単純にrescueを書いただけでは拾ってくれない。
具体的にどういう事かというと

begin
  timeout(1) {
    sleep 10 #long long time work
  }
rescue
  retry
end

とかやってもTimeout::Errorが発生すると、retryされずにスクリプトは例外で落ちる。

begin
  timeout(1) {
    sleep 10 #long long time work
  }
rescue
  retry
rescue Timeout::Error
  retry
end

とすればいい。
が、rescueの中身が同じってとっても気持ち悪いんだけど、どうすればいいかなあ。

追記

よく考えたらスーパークラスなExceptionを指定すればいいじゃん。

begin
  timeout(1) {
    sleep 10 #long long time work
  }
rescue Exception
  retry
end

rescueの後ろを省略すると、StanderdErrorだけ補足すると言うことなのね。

つまり、Timeout::Errorが罠、というよりはrescueが罠ということか。

しかしこうすると、^cでプログラムを落とせなくなるなw

追記2

どうやら、rescue節には複数の例外を書くことができるらしい。(コメント欄参照)

begin
  timeout(1) {
    sleep 10 #long long time work
  }
rescue Timeout::Error, StanderdError
  retry
end

なるほど、こういう事ができるのか。
さすがにしっかり考えられているなぁ

参考URL

共有フォルダにPDFを入れると印刷してくれるソリューションを作ったよ

  • 2008-04-18 (金)
  • 未分類

ついに、卒研生活が始まりましたが、とても大変なことが起きました。
ネットワークプリンタが、ドライバ的な問題でMacOSXやLinuxから印刷できないのです。
卒研と言えば様々なOSを利用するわけですから、毎週報告書を印刷しないといけない僕らにとってこれは死活問題です。

ところで、WindowsServer2003を導入したので、これで印刷プロキシ的な物を作れないかと思っていました。
PSプリンタサーバになりすますWindowsServerの構築方法など、いろいろ見つけましたが思うような品質が得られないらしいので自作することに。

とりあえず深い考えはないのですが、PDFを共有フォルダにぶちこんで印刷出来るようにすればとても幸せになれるんじゃないかと思っていろいろ調べました。

最初はSendMessageを使ってAdobeReaderを操作しようだとか、ActiveXを使ってAdobeReaderを操作だとかしてましたが、実はAdobeReaderの実行時引数にある物を指定すると勝手に印刷してくれるという隠しオプションがあったんです。

"C:¥Program Files¥Adobe¥Reader 8.9¥Reader¥AcroRd32.exe" /n /t hoge.pdf

とかこんな感じでhoge.pdfが読み込まれてデフォルトプリンタで印刷されるんです。
すばらしいですね。

あとは適当に印刷キューが入るのを待って、AdobeReaderのプロセスを殺して、ファイルを削除して、フォルダにPDFが無いかをみて、あったら印刷して、という繰り返しです。

今のところは、印刷するたびAdobeReaderが立ち上がってうざいので(といっても、サーバだから関係ないけど)、出来ればAdobeReaderを起動させずに簡単に印刷出来るようにしたいですね。出来ればコマンドラインで。

AdobeReaderを起動せず(ウィンドウを表示させず)に印刷できる方法を知っている方がだれかいれば教えてください><

Home

Search
Feeds
Meta

Return to page top