SVX日記
2005-02-25(Fri) イイ訳しつつWeb上に訳文を
さて、インターネットによりバイオレンスにグローバリゼーションがプログレスするトゥデイであるから、エンジニアならイングリッシュにナーバスしていてはノンノンである。バット、ミーがイングリッシュなテクニカルドキュメントがスムーズかつファストにリーディングできるかといえばノットであり、ポッシブルならジャパニーズでアンダスタンディングしたいのがホネストなマインドである(疲れるのでヤメ)。
実際、ググって訳文を発見し、ありがたく読ませてもらうコトも多い。なので、オイラも昨日のように微力ながらも訳文を公開したりして、多少の貢献をしているつもりもある。しかしながらオイラの訳文を筆頭とし、ヘボい訳文に当たったりすると、どうしても「原文はどーなっとるんじゃ?」と思うこともママある話ではある。
というか、むしろ原文を横に添えたいのは訳文に自信がないオイラの方なのである。しかしながら横に並べると、どーしてもかなりうっとおしい見た目になるのは避けられない。ハナから原文なんぞ読むつもりもない閲覧者も多いであろうから、その場合は100%無駄になる。んじゃ、どうするか……むむむ、平目板ッ!! ……もとい、閃いたッ!! バルーンヘルプを使えばイイのである。
どうやら、IEもOperaもtitle要素(TITLEタグではない)に文字列を埋め込んでおくと、バルーンヘルプとして同じようにポップアップしてくれるようである。title要素は多くのタグに有効であるが、特にHTML的に表示や意味に影響が少ないタグとしてSPANタグあたりが妥当と思われる。そこに訳文を押し込んでしまえば、見たいヒトはマウスカーソルをそこに当てて1秒ほど待てば原文を読むことができる寸法だ。こんな感じに記述するのだ。
SVXはゴキゲンな車です<SPAN class='original' title="The SVX is a wonderful car.">。</SPAN>
読点である「。」にマウスカーソルを位置して1秒ほど待つと「The SVX is a wonderful car.」がポップアップするハズだ。これなら、訳文だけを読む場合はまったく気にすることなく、引っかかる表現の原文を確認したい場合も簡単である。なかなかグレートな解法ではないだろうか。
ちなみに今回は「。」にだけSPANタグを作用させたが、コレはこのページのblogシステムであるtdiaryの都合でやっているだけなので、文章全体に作用させても問題はない。せっかくなので、昨日の訳文に全て適用してみた。興味のある人は試してみて欲しい。
2007-02-25(Sun) サーバ移動
先のLHD-NAS160が飛びまくる件は、Nehemiahの可変クロック機構であるLonghaulsの周りのバグらしいことがわかった。cpuspeedデーモンを落としたら、丸一日CPU使用率90%以上を保っても、ピタッと安定して動くようになった。しかし、tdiaryを動かすには少々力不足。
内部のホコリを払ったら、サーバを落としたついでに増設。転がっていた133メモリを挿す。既に入手経路の記憶がない128MBと256MB。CUB-Xのメモリスロット4つを埋めても合計640MB。まだまだ遠いHighMemへの道だ。
2008-02-25(Mon) 電解コンデンサ圧力臨界ッ!!
2011-02-25(Fri) VPSまでトンネルを掘る
先日より「さくらのVPS」を契約している……いや、先日、というか……先月、というか……実は、契約したのはかなり前(10月17日)だったりするのだが、その後、仕事が忙しくなったので、金だけ払って放置、という状態が続いていたのだった。
まぁ、980円/月だし、ちょっとカジってみようか、という動機だったのだが、されど、980円/月である。使わなければもったいない話だ。とりあえず、20Gもあることだし、iSCSIターゲットの設定をして「外付けハードディスク」にでも仕立ててみようか、などと、変なことを考えてみた。
ところが、iSCSIは暗号化をしない。よって、暗号化トンネルを確保してやる必要があるだろう。そんな時、OpenVPNがリングに上がるのである。あ、別に、iSCSIに限らずとも、nfsやsambaなどを利用するにしても、通信経路の暗号化はしておいた方がいいと思うので、今回の手順は有用なはずである。
OpenVPNには、サーバとクライアントの概念がある。もちろん、通信経路としては双方向に利用できるが、関係としては一方向というわけである。クライアントが提出するデジタル証明書を、サーバが検証、接続を許すというカラクリだ。
sheonite.itline.jp:/root # yum install openvpn
sheonite.itline.jp:/root # cd /etc/openvpn/
sheonite.itline.jp:/etc/openvpn # cp /usr/share/doc/openvpn-2.1/sample-config-files/server.conf .
sheonite.itline.jp:/etc/openvpn # cp -a /usr/share/openvpn/easy-rsa/ .
sheonite.itline.jp:/etc/openvpn # cd easy-rsa/2.0/
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # vi vars
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # diff vars.org vars
64,68c64,68
< export KEY_COUNTRY="US"
< export KEY_PROVINCE="CA"
< export KEY_CITY="SanFrancisco"
< export KEY_ORG="Fort-Funston"
< export KEY_EMAIL="me@myhost.mydomain"
---
> export KEY_COUNTRY="JP"
> export KEY_PROVINCE="Aichi"
> export KEY_CITY="Nagoya" ★自宅は名古屋
> export KEY_ORG="ITLine, Inc."
> export KEY_EMAIL="hoge@fuga.jp"
★認証局/サーバの証明書への登録内容を入力
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # . ./vars
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # ./clean-all
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # ./build-ca
★Returnキー連打で、認証局の証明書と秘密鍵を作る
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # ./build-key-server itline.jp
★Returnキー連打で、サーバの証明書と秘密鍵を作り、認証局の証明書で署名する
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # ./build-dh
★共通鍵交換用のパラメータを作る
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # cp keys/ca.crt /etc/openvpn/
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # cp keys/itline.jp.crt /etc/openvpn/
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # cp keys/itline.jp.key /etc/openvpn/
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # cp keys/dh1024.pem /etc/openvpn/
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # cd /etc/openvpn/
sheonite.itline.jp:/etc/openvpn # vi server.conf
sheonite.itline.jp:/etc/openvpn # diff server.conf.org server.conf
79,80c79,80
< cert server.crt
< key server.key # This file should be kept secret
---
> cert itline.jp.crt
> key itline.jp.key # This file should be kept secret
★サーバの証明書と秘密鍵を指定する
162c162
< ;client-config-dir ccd
---
> client-config-dir ccd
★常に同じIPアドレスでトンネルを掘るための設定
sheonite.itline.jp:/etc/openvpn # mkdir ccd
sheonite.itline.jp:/etc/openvpn # vi ccd/darius.ddo.jp
sheonite.itline.jp:/etc/openvpn # cat ccd/darius.ddo.jp
ifconfig-push 10.8.0.101 10.8.0.102
★VPSクライアントホスト「darius.ddo.jp」は、常に10.8.0.101/10.8.0.102でトンネルを掘る
sheonite.itline.jp:/etc/openvpn # service openvpn start
★openvpnのサーバ側の待ち受け開始!
sheonite.itline.jp:/etc/openvpn # ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
★トンネルI/Fが出現、サーバ側の出入口は10.8.0.1
sheonite.itline.jp:/etc/openvpn # chkconfig openvpn on
[root@www1234x ~]# yum install openvpn
[root@www1234x ~]# cd /etc/openvpn/
[root@www1234x openvpn]# cp /usr/share/doc/openvpn-2.1.1/sample-config-files/client.conf .
[root@www1234x openvpn]# cp -a /usr/share/openvpn/easy-rsa/ .
[root@www1234x openvpn]# cd easy-rsa/2.0/
[root@www1234x 2.0]# vi vars
[root@www1234x 2.0]# diff vars.org vars
64,68c64,68
< export KEY_COUNTRY="US"
< export KEY_PROVINCE="CA"
< export KEY_CITY="SanFrancisco"
< export KEY_ORG="Fort-Funston"
< export KEY_EMAIL="me@myhost.mydomain"
---
> export KEY_COUNTRY="JP"
> export KEY_PROVINCE="Tokyo"
> export KEY_CITY="Shinjyuku" ★VPSはたぶん新宿
> export KEY_ORG="ITLine, Inc."
> export KEY_EMAIL="hoge@fuga.jp"
★クライアントの証明書への登録内容を入力
[root@www1234x 2.0]# . ./vars
[root@www1234x 2.0]# ./clean-all
[root@www1234x 2.0]# ./build-req darius.ddo.jp
★Returnキー連打で、クライアントの証明書(未署名)と秘密鍵を作る
ここで、いったん自宅側に戻る。クライアントの証明書(未署名)に、認証局として署名をしてやらないといけないからだ。巷のサイトでは、このようにクライアント側ではなく、サーバ側でクライアントの証明書を作ってしまう手順を紹介している事例が多いが、そういうコトを書いてしまうということは「非対称鍵のなんたるかは全く理解できてません」と公表しているようなモンである。
sheonite.itline.jp:/etc/openvpn # cd easy-rsa/2.0/
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # cp ~user/darius.ddo.jp.csr keys/
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # ./sign-req darius.ddo.jp
★クライアントの証明書に認証局の証明書で署名する
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # cp keys/ca.crt ~user/
sheonite.itline.jp:/etc/openvpn/easy-rsa/2.0 # cp keys/darius.ddo.jp.crt ~user/
[root@www1234x 2.0]# mv ca.crt keys/
[root@www1234x 2.0]# mv darius.ddo.jp.crt keys/
[root@www1234x 2.0]# cp keys/ca.crt /etc/openvpn/
[root@www1234x 2.0]# cp keys/darius.ddo.jp.crt /etc/openvpn/
[root@www1234x 2.0]# cp keys/darius.ddo.jp.key /etc/openvpn/
[root@www1234x 2.0]# cd /etc/openvpn/
[root@www1234x openvpn]# vi client.conf
[root@www1234x openvpn]# diff client.conf.org client.conf
42c42
< remote my-server-1 1194
---
> remote itline.jp 1194
★接続先であるOpenVPNサーバを指定する
89,90c89,90
< cert client.crt
< key client.key
---
> cert darius.ddo.jp.crt
> key darius.ddo.jp.key
★クライアントの証明書と秘密鍵を指定する
[root@www1234x openvpn]# service openvpn start
★openvpnのクライアント側の接続開始!
[root@www1234x sysconfig]# ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.101 P-t-P:10.8.0.102 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:86 errors:0 dropped:0 overruns:0 frame:0
TX packets:88 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:15903 (15.5 KiB) TX bytes:10959 (10.7 KiB)
★トンネルI/Fが出現、クライアント側の出入口は10.8.0.101
[root@www1234x sysconfig]# chkconfig openvpn on
なお、以上の手順で証明書ファイルをやりとりする限り、暗号化された通信経路でやる必要はない。もちろんフロッピーやUSBメモリで運ぶ必要もない(無理だし)。ファイルどこかに置き忘れても構わない。なぜなら、証明書に対応する秘密鍵を各々のホストの上から「移動していない」からだ。
これに関しては著名なITサイトですらアフォなことを書いている。まさに「非対称鍵のなんたるかは全く理解できてません」と公表している。要するに、以前に書いたこの記事と同じことなのだが、今回はクライアント側もLinuxであるだけに、サーバ側でクライアントの証明書を作らなければならない理由は皆無である。
# openvpn
-A INPUT -m udp -p udp --dport 1194 -j ACCEPT
sheonite.itline.jp:/root # ping 10.8.0.101
PING 10.8.0.101 (10.8.0.101) 56(84) bytes of data.
64 bytes from 10.8.0.101: icmp_seq=1 ttl=64 time=9.82 ms
64 bytes from 10.8.0.101: icmp_seq=2 ttl=64 time=9.10 ms
64 bytes from 10.8.0.101: icmp_seq=3 ttl=64 time=9.86 ms
64 bytes from 10.8.0.101: icmp_seq=4 ttl=64 time=9.59 ms
★pingを打つと……
sheonite.itline.jp:/root # tcpdump -i tun0
tcpdump: WARNING: arptype 65534 not supported by libpcap - falling back to cooked socket
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
23:12:56.979174 IP 10.8.0.1 > 10.8.0.101: ICMP echo request, id 63070, seq 1, length 64
23:12:56.988956 IP 10.8.0.101 > 10.8.0.1: ICMP echo reply, id 63070, seq 1, length 64
23:12:57.980163 IP 10.8.0.1 > 10.8.0.101: ICMP echo request, id 63070, seq 2, length 64
23:12:57.989201 IP 10.8.0.101 > 10.8.0.1: ICMP echo reply, id 63070, seq 2, length 64
23:12:58.980788 IP 10.8.0.1 > 10.8.0.101: ICMP echo request, id 63070, seq 3, length 64
23:12:58.990588 IP 10.8.0.101 > 10.8.0.1: ICMP echo reply, id 63070, seq 3, length 64
23:12:59.981796 IP 10.8.0.1 > 10.8.0.101: ICMP echo request, id 63070, seq 4, length 64
23:12:59.991334 IP 10.8.0.101 > 10.8.0.1: ICMP echo reply, id 63070, seq 4, length 64
★トンネルI/F上ではICMPパケットに見えるが……
sheonite.itline.jp:/root # tcpdump -i ppp0 port openvpn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ppp0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
23:12:56.979393 IP CEPci-12p34-567.ppp89.odn.ad.jp.openvpn > www1234x.sakura.ne.jp.46126: UDP, length 125
23:12:56.988794 IP www1234x.sakura.ne.jp.46126 > CEPci-12p34-567.ppp89.odn.ad.jp.openvpn: UDP, length 125
23:12:57.980387 IP CEPci-12p34-567.ppp89.odn.ad.jp.openvpn > www1234x.sakura.ne.jp.46126: UDP, length 125
23:12:57.989083 IP www1234x.sakura.ne.jp.46126 > CEPci-12p34-567.ppp89.odn.ad.jp.openvpn: UDP, length 125
23:12:58.981005 IP CEPci-12p34-567.ppp89.odn.ad.jp.openvpn > www1234x.sakura.ne.jp.46126: UDP, length 125
23:12:58.990467 IP www1234x.sakura.ne.jp.46126 > CEPci-12p34-567.ppp89.odn.ad.jp.openvpn: UDP, length 125
23:12:59.982007 IP CEPci-12p34-567.ppp89.odn.ad.jp.openvpn > www1234x.sakura.ne.jp.46126: UDP, length 125
23:12:59.991210 IP www1234x.sakura.ne.jp.46126 > CEPci-12p34-567.ppp89.odn.ad.jp.openvpn: UDP, length 125
★PPP接続上では暗号化されている、ということがわかる
2012-02-25(Sat) 治具C改を作る
2013-02-25(Mon) マシン語でゲームを作る本
ふと、思い立って、表記の本を入手してしまった。別にそうプレミア価格なわけでなく、千円弱で。
とはいえ、この本は私にとっては思い出深い本だ。中1か、たぶん小6だったはず。そんな頃に買った本だ。Z80のマシン語はこの本でマスターした。いまでも覚えていて、実際にいまでも英字を書くときは、自然にこの記述に従ってしまう。まさに三つ子の魂四十まで、である。
以前に、「この世の本はすべて俺の手中にある」という気分とかいいつつ、やっぱりそうも簡単に割り切れんのよねぇ。
2017-02-25(Sat) MAGICよりOpenGLへ、こちらガルデロータ
負けてらんないのよーッ! OpenGLなんかにーッ!などと叫びつつ、舌の根の乾かぬうちに、OpenGLの試食を始めたのであった。いや、実は仕事半分なのではあるが。
実はオイラ、68MACの末期の時代に、ちょっとレイトレーシングにハマった時期がある。モデラは使わず、完全にテキストファイル(テクスチャデータ以外)のみから、画像が生成されるというロジカルなところに魅力を感じ、毎晩、レンダリングさせつつ寝入っては、翌朝に結果をみて一喜一憂する、という日々を送っていた。
というわけで、3DCGのイロハくらいは身につけているのであるが、OpenGLはポリゴンが基本なので、ちょっと勝手が違う。ペラペラで中身がなく、表裏があり、勝手に影がつかない。一番驚いたのは、陰影をつけるためには、ポリゴンの法線ベクトルを自分で計算しなければならないところだ。
レイトレーシングの計算方法のストイックさに比べると、OpenGLには強いニセモノ感を感じる。例えるならグランツーリスモとレッジレーサーみたいなものか。とはいえ、様々に擬似する技術が次々に投入され、実写に近いクオリティでリアルタイムレンダリングできるまでに到達しているのはOpenGLの方なのも確かだ。
つーわけで、OpenGLを「自分のモノ」にするため、いつものように、ウェブ上からサンプルプログラムを持ってきて、写経するように、コードスタイルを自分好みに書き換えながら内容を理解し、ちょっとしたものを作るのである。
今回のお題は「ガルデロータ」。記憶が定かでないが、確か昔シャープのX1で「ガルデロータ」をモデリングし、そのワイヤーフレームをクルクル回して遊んでいた気がするのだ。Oh!mzで、高速グラフィックパッケージ「MAGIC」が発表されたのは1986年9月だから、たぶん、その頃のはず。30年を経て、いま、ポリゴン化するのである。
習作なので、敢えて雑に作ってあるが、陰影付きのガルデロータが30FPSでなめらかに回転できている。ソルバルウ(1991)、バージョン0.01といったところか。あとはバキュラを回して、ゲームっぽいモノにまとめてみたいところだが。
しかし、やたらとあちらこちらでみかける「ドビン」は、OpenGLのサンプルモデルだったのね。妙に納得したわ……。
2023-02-25(Sat) 九四ドライブ7日目
今日は7時起き。軍艦島上陸ツアーへの参加予定なので、まずは軍艦島デジタルミュージアムに向かう。で、いきなり「ツアーで接岸できるか微妙」と告げられる。接岸は天候の影響に左右され、そもそも島の周回すら中止になることもあるらしい。最終決定はもう少し後らしいのだが。ムムム。
それはそれとして、この軍艦島について、自分的にはだいぶ複雑な思いがある。自分は、1997年発売のプレイステーションのゲーム「クーロンズ・ゲート-九龍風水傳-」のプレイを通じて、廃墟に魅力を感じ、2003年には香港に旅行した際に九龍城砦公園や重慶大厦を訪れていたりもして、軍艦島は観光地化されるずっと前から訪れてみたいと思っていた場所だからだ。当時は、漁船に頼み込んで仮に接岸できたとしても、上陸は不法侵入であり、探索の危険度も非常に高いという状況だった。それが、そんな廃墟マニアの聖地から一転、一般人が上陸できる観光地へ。キレイな遊歩道が作られ観光地化されたことに対するガッカリ感や、廃墟がブーム化していくことで薄れる特別感にちょっと寂しさのようなものを感じてもいたからだ。
にしても、この軍艦島デジタルミュージアムは、クドい。いい意味で。手抜き感がない。ちょっとヤリすぎ感を受けるほど。デカいスクリーンの前で生解説する方の軽妙な語り口もスゴくいい。思ったよりは、廃墟という扱いよりも、島の歴史的事実にフォーカスしている感。で、驚かされたのは炭坑の位置。島の真下のとんでもない深さまで潜り、そこから斜めに延びている。炭坑が島の下にあるというよりは、島は単なるマンホールの蓋に過ぎないという感じだ。そのスケール感には恐ろしさを覚えるほどだわ。
たっぷりと時間をかけて見て回ってから、普通の観光地へ。まずは、グラバー園。と、ここで唐突だが、戦艦武蔵を作ったのは佐世保ではなく、長崎だったことに気づいた。吉村昭の小説に、武蔵が船台から進水する時に対岸に衝突しないよう苦労した、とあったが佐世保には該当する対岸がない。で、帰宅して、グラバー園の高い場所からなんとなく撮った港の写真の端に、戦艦武蔵を作った第二船台が写っていた。左端の橋形クレーンがそうだ。確かに小説にあるように、港はすり鉢状の地形の中心にあり、周辺のどこから(このグラバー園から)でも見下ろせてしまうので、秘匿のために大量のシュロの葉でドックを覆った、というのはよくわかる。予習が足りなかったな。
グラバー園を後にする頃、軍艦島上陸ツアーの出航中止が伝えられた。正直、デジタルミュージアムでだいぶお腹いっぱいだったし、恐ろしく船酔いしそうな気配なので、キャンセルで助かった気分。オランダ坂を通り抜け、中華街で昼飯のつもりが大混雑で、中華街を抜けた先の台湾系カフェで昼飯を済ます。
時間が余ったので、軍艦島を目視で見ようとクルマで南にドライブすることにした。結局、目視でも意外と見えるなぁ、なんて言いながら、結局、半島のほぼ先端まで行き、結局、そこにあった軍艦島資料館を見て回る。軍艦島の資料館いくつあんだよ。しかし改めて不思議なのは、よくもまぁこんな優良コンテンツを長らく放っておいたなぁ、ってことだ。いまや軍艦島は長崎が全力で担いでいる観光資源であるが、数年前まではまったく見向きもされてなかったのだ。そう考えると、村おこしの方法なんて星の数ほどもあるんだと思える。
カフェで少し休憩して、北に戻る。ついでなので女神大橋を渡って、南から稲佐山公園へ登っていく。なかなかに微妙な道なのが楽しい。まだ明るいうちに稲佐山公園駐車場から歩いて展望台へ向かう。途中、鹿と猿にエサをやったり。展望台の中は暖かいが、外はどうにも風が強くて寒い。週末だから、結構な混雑度合いだ。ひととおり暗くなり、徐々に夜景が完成していくのを見る。本当にエラい狭いところに張り付いた行き止まりの街なんだだなぁ。帰りはスロープカーというのに乗って駐車場に戻って山を下りる。
自分のベストアーティストのひとりである村下孝蔵の楽曲に「坂道から」という曲がある。彼の楽曲の中では、ひときわ明るい曲なのだが、これが長崎のことを歌った曲なのだということに旅立つ直前に気づいた。「オランダ坂を登り 誰か探していたよ 縁切山と思案橋と 春の教会前に見てた」。気づいたきっかけは、思案橋という特徴的な地名が歌詞に入っていたこと。で、縁切山とは夜景を見た稲佐山のことらしい。んが、春の教会が大浦天主堂だとすると、それらを一度に前に見る場所って、だいぶ大きなスケールになってしまう気がするが。なんにせよ、曲調も含め、自分の持ち歌に組み込むくらいに改めて気に入ってしまった。