2009/11/16

WebGLのDemoを見てみた

気になっていたので見てみることにした
うまく行ったら開発もしてみたい

使ったOSはUbuntu 9.10


1.ブラウザ(firefox)を用意

まずはMinefieldをインストール
と言っても公式サイトからtarボールを取得して展開するだけ

展開したディレクトリ内のシェルスクリプト filefox を実行したら
正式リリース版と同じプロファイルで起動した
Minefield用のプロファイルを作ったが良い気もするけど
とりあえず今回はこのまま使う事にする

早速WebGLのDemoを検索して表示してみたが
WebGLなんて知らないよみたいな表示が。。。


2.ブラウザの設定

で、Minefieldの設定
アドレスバーを使って about:config を表示
フィルターで webgl に絞ってみる

'webgl.enabled_for_all_sites'

おぉ。これだ。
trueに変更して再起動

。。。表示されない
再度 about:config

'webgl.osmesalib'
がブランクになってるのが怪しい

$ locate libmesa
/usr/lib/nvidia/libGL.so.1.2.xlibmesa
/usr/lib/nvidia/libGL.so.1.xlibmesa
※使ったのはGeForceを積んだ自作機

という事で'webgl.osmesalib'に'/usr/lib/nvidia/libGL.so.1.xlibmesa'を設定


3.表示

再起動して再度表示
今度はうまく動いてくれた
いくつか試してみたけどほとんどのdemoがうまく動いてる


4.所感

良さそうな所
 flashと違って右クリックもホイールも使える
 javaと違ってプラグインもいらないし起動も早い
 ECMA

気になる所
 右ドラッグはマウスジェスチャも反応してしまう
 ホイールもスクロールしてしまう
 Webアプリにするにはポップアップメニューが問題になりそう
 結構CPUを消費する(使ったマシンが貧弱ではあった(Pentium4 2.4C))


5.ところで

Minefieldすごい!とにかく描画が早い
fireofxの次バージョンは相当に期待できる気がする

dnsmasq

dnsmasqの概要:
・軽量なDNSサーバ
・DNSをキャッシュしてくれる
・DHCP機能も持っている
・TFTP機能も持っている※

 ※TFTP:Trivial File Transfer Protocol
UDPを使ったファイル転送プロトコル。FTPの軽量版。

導入目的:
・LAN上のホスト名を一元管理したい

付加価値:
・インターネットの名前解決が高速になる
・余計なパケットを他所様に流さなくて済む

インストール:
Debian GNU/Linux(Lenny)
#aptitude install dnsmasq

サーバの設定:
/etc/dnsmasq.conf(抜粋)
-----------------------------------------------------------------------
...
# Never forward plain names (without a dot or domain part)
domain-needed #コメントアウト
# Never forward addresses in the non-routed address spaces.
bogus-priv #コメントアウト
...
# Include a another lot of configuration options.
conf-file=/etc/dnsmasq.more.conf #コメントアウト
#conf-dir=/etc/dnsmasq.d
-----------------------------------------------------------------------

/etc/dnsmasq.more.conf
-----------------------------------------------------------------------
# キャッシュサイズを設定
cache-size=150
# 名前解決用の設定ファイルを指定
resolv-file=/etc/resolv.dnsmasq
-----------------------------------------------------------------------

/etc/resolv.dnsmasq
-----------------------------------------------------------------------
# 知らないホストはルーターに任せる
nameserver 192.168.11.1
-----------------------------------------------------------------------

/etc/resolv.conf
-----------------------------------------------------------------------
# 自前のDNS(dnsmasq)で名前解決する
nameserver 172.0.0.1
-----------------------------------------------------------------------

ルーターの設定:
 ルータが通知するDNSサーバにdnsmasqを立てたサーバを指定する

結果:
 ・LAN上のホストのhostsにいちいち設定しなくても名前解決できるようになった
 ・ブラウジングが格段に早くなった
 ・LAN上のトラフィックが(名前解決の分)増えたハズだけど一瞬だから気にならない
 ・dnsmasqのプロセスによるメモリ消費は約700KB。どうでも良い。

2009/11/08

作業中のファイルを自動的に世代管理#1

友人がOpenCanvasで試行錯誤をしているのを見て思った。
ファイルの変更を検知して自動的に世代管理してくれるツールがあったら便利だなぁと。

検索してみたところ、Windows用のツールはそれなりにあるようだ。
ちなみに良さそうに思えたのは「AutoVer」 (試してはいない)
[Beans' Place:http://beanland.net.au/]

Linuxでは需要が無いのか、ツールがない。
実装してみても良いなぁと思ったけど、
まずは細かいツールの組み合わせでできないか考えてみる事にした。

候補:
 make + watch
 inotify
 logrotate

2009/04/26

PythonでDynamicDNSのIP更新

普段 ieserver.net を利用しているのだけれど
オフィシャルにあるIPアドレス更新サンプルスクリプト(Perl)を眺めていたらPythonで書いて見たくなった。

「Pythonって括弧の代わりにインデントを使うやつだよね?」
くらいの知識なので取り合えずオフィシャルでドキュメントを読んでみる。

IP自動登録スクリプトを書いてみて思った事:
  1. schemeもこのくらい標準ライブラリが充実してたらなぁ
  2. わりととっつき易い感じの言語だなぁ
  3. ちょっとした処理でも意外と長くなるなぁ
  4. 最近の高級スクリプト言語っていうよりは高級C言語だなぁ
  5. 知ってる言語の中ではPHPが一番似てるかな(怒られそw
作ったスクリプトも残しておく。
オフィシャルのは
  1.  自分のグローバルIPを記録しておいて
  2.  ieserver.netのページでグローバルIPを引いて
  3.  代わってたら更新
って流れだけど、作ったのは
  1.  自分のドメイン名でpingを発行
  2.  pingが通らなかったらieserver.netのIP更新cgiを叩く
って流れにした。

本当はこのスクリプトで使ってるos.system()はobsoleteになっているらしい。
代替となるPopenクラスで実装して、ついでにieserverからのHTMLから時間とIPを抜き出してsyslogに投げるようなコードも書いてみたけど行数が4倍くらいになったし、読み辛くてうんざりしたから末梢した。

このくらいの処理だと細かいコマンドを組み合わせてbashでやった方がスマートっぽかった。
というかやっぱりシェルスクリプトで書き直した。
取り合えず今回はPythonの基本構造とかどんな標準ライブラリがあるかとかがわかったからOK。
----------

#!/usr/bin/python
# coding=utf-8
import os

"""
ping が通らない場合のみ ieserver.net の DNS 情報を更新する
"""

ieserverURL = 'http://ieserver.net/cgi-bin/dip.cgi'
user = 'xxxxxx'
domain = 'xxxx.xxx'
password = 'xxxxxx'
pingCount = 3

if os.system('ping -c %d %s.%s > /dev/null' % (3, user, domain)) != 0 :
os.system(
"wget -q -O - '%s"
"?username=%s"
"&domain=%s"
"&password=%s"
"&updatehost=1'"
" > /dev/null"
%
(ieserverURL, user, domain, password)
)

2008/07/11

Mac mini

Mac miniに乗り換えてみた。
初Macのため刺激的。

データの移行はMacの勝手がわからなくて時間がかかったけど
難しい作業ではなかった。

ひと通り使える環境にしたので
開発環境を整えることにした。

が、MacPortによるインストールは良く失敗する。
そしてMacにはJava6が無い。
気づいた時は「は?」って感じ。

Debianからの移行のためパッケージ管理システムが無いのが非常に不便に感じる。
アプリケーションのアンインストールってどうやるんだろ?w

マウスでしかできない事が多いのも気になる。
Ctrl+Alt+Enterでターミナルを開くにはどうしたら良いのだろうか。
当面はDashboardにTerminal Widgetを貼ってしのぐ事にする。

どうもMacってできる事が少ない気がする...
Debianが何でもアリ過ぎるのかも知れないが...

2007/03/09

jdk6 日本語ドキュメント

API仕様を含めてJDK6の日本語ドキュメントが2007/03/07から公開されたらしい. scanだけなら日本語の方が早いから今DLしている.

実際には今月(Mar 2007)の頭頃から数日間だけは, web上で閲覧可能だったが, 数日前からAPI仕様だけ英語になったりしていた. 自分は全く知らないが誰かが何かしらの作業を頑張ってくれていたのだろう...と勝手に推測.

詳細不明だけど, 翻訳作業をした誰かさん, お疲れさまでした.

2007/03/01

テキストとバイナリ

 テキストとバイナリの一番特徴的な違いはひとかたまりのデータの長さを知る/伝える方法にあると思う. バイナリの場合は一般には0x00から0xFFまで全てのビットパターンが有効な意味を持つ. 対して文字は使わないビットパターンがある. この使わないビットパターンに特別な意味を持たせる事でデータの区切りに利用したり, 次の 8bit が連続したデータである事を示す事ができる. 前者の代表例が制御文字, 後者の
代表例はマルチバイト文字で良く使われる最小上位 1bit のフラグ.

 最近, ネットワーク越しにアプリケーションを利用する事が多くなってきているけどそこで利用されているプロトコルでは XML などのテキストデータを利用する場合がほとんどだ. 通信にテキストを利用する場合, エンコーディング(の合意とサポート)が問題になったり, データサイズが大きくなったりっていう問題がある.

 それでもテキストを利用するのは, データの構造(とか区切り)を表現しやすいからだと思う. 画像ファイルにしても音声にしても, 大概のバイナリデータは最初にヘッダがあって, どこからの何バイトが何のデータとかそういうメタ情報がそこに格納される. その情報が得られるまでは実際のコンテンツを解釈できない. 通信の場合, 今何のデータを解釈しているのかわからないと通信の終了も解釈できないし, データの論理的なエラーも検出出来ない. だからコンテンツの送信に先だって少なくともデータの種類とサイズを通知する必要がある.

 送信側でデータを生成して送る場合に, 送信に先だってデータサイズを通知する必要があるとすると, 生成したデータをバッファとか, 何か送信側のリソース上に配置して, そのサイズを調べるまでそれを開放できない事になる. だからテキストデータを利用する. テキストなら取り合えず送信を開始して, 全部済んだら, これで終わりって意味の特別なビットパターンを送れば良い.

 じゃぁテキストベースのプロトコル上でバイナリデータを送りたい場合はどうすれば良いだろうか? メールで使われてるバイナリからテキストへのエンコーディングが参考になる. 言ってみれば 0xff っていうビット列を 0xff っていう文字列として送信すればテキストベースで遅れるぢゃんって言う発想の応用だ. でもそれってすごく肥大化する. だったら通信内容を圧縮すれば良い. zip 圧縮してから送信すれば大抵は問題にならないくらい小さくなる. zip はワンパスで圧縮できるからそういうフィルター的な使いかたに向いてるし.