川口淳一郎氏の講演会

川口淳一郎氏の講演会に行ってきた。

書籍などで広く紹介されている「はやぶさプロジェクト」を中心にしながら、関連する様々な話題やジョークを織り交ぜながらのあっと言う間の楽しい2時間。何より専門的な内容を含めてそれぞれのお話が上手に絡み合いながら収束していく様がとても心地よく、何だか自分の頭の回転が速くなったように錯覚した。

そんな中で印象に残ったのは「技術よりも根性」という一節。
はやぶさプロジェクトは、その目的を達成するために様々な技術を組み合わせて行われ、そのどれもが必須の(最低限の)条件であって決して安心できる条件ではなく、よって不安要素などは重箱の隅をつつくまでもなく数限りなくあった。しかしそんな条件にありながらも数々の難しいミッションに挑戦し結果的に成功裏に終わらせることが出来たのは、なんとしても「世界初」を目指そうとする思いをチームの全員が共有できたからこそであり、それが「技術よりも根性」という言葉に現れているのだと思う。必ず成功する(であろう)ことに取り組むことは挑戦とは言わない。可能かどうかわからない、まして答えがあるのかどうかすらわからない事に取り組むことには並々ならぬ精神力と技術が必要であり、それこそがきっと挑戦の名に値するのだろう。

また、質疑応答で「太陽の光が届かないような遠く離れた場所でどのようにして電力を得るのか」という質問に対して「原子力を利用することが有力である」と回答をされていた。そのとき「昨今の原子力問題に対して賛成または反対の立場に関係なく」と前置きをした上でお話をされていたのが印象的だった。この社会情勢からか、または、きっと誤解をするであろう方々に向けての言葉だと思われるが、誰もが原子力そのものの価値とその使い方を明確に分けて考えることが出来たら、今回の原子力発電所の問題ももう少し違った方向に進めるのではないかと思った。

のら

近所の公園を散歩していたらねこが近づいてきた。なんだかとても人なつこくて、私の周りをずっとうろうろとしていて立ち止まると「ごろにゃーん」と膝の上に乗ってくる。のらなのか、飼いねこなのかわからないけどちょっと癒された。

NEC TWINPOS 3500のエラーについて(メモ)

POSレジが壊れた。運用を初めてすでに7,8年が経過しており、その間にもディスクエラー等により瀕死の重体に陥ったがその都度どうにか復旧をしてきた。その間、LAN経由でのバックアップが不能になり、RAID0も破棄されほぼ満身創痍の状態。今回のそんな中での致命的エラー。

仕様

メーカー
NEC
型番
TWINPOS 3500
OS
WindowsXP Embedded

関連するディレクトリ/ファイル構成

メインディレクトリ
c:\APOS\
データディレクトリ
c:\APOS\Data\
c:\APOS\Data\APOS.mdb
c:\APOS\Data\APOS.bak
そのほか
練習用ファイルディレクトリ
c:\APOS\RenshuuData\
c:\APOS\RenshuuData\APOS.mdb
そのほか

エラーの発生までのログ

2011/10/14
  • 締め処理終了(完了)
  • バックアップデータ作成(完了)
2011/10/15
  • 締め処理終了(不明/おそらく失敗)
  • バックアップデータ作成(失敗)
2011/10/16
  • お昼過ぎにエラー1が発生(以降立ち上げ不可)

概要としては、下記の立ち上がり順において「OKをクリック」をした段階でエラー1が発生し、それが解決した後にエラー2が発生した模様。

  1. レジの電源ON
  2. A-POS2000の立ち上げ
  3. 営業日の入力(基本的に自動入力)
  4. OKをクリック
  5. メインメニュー/通常処理へ

具体的なエラー内容(エラーログより)は次の通り。

エラー1
2011/10/16 19:23:00  APOS2000システムエラー
                     プログラム :APOSMain
                     モジュール :APOSMain.bas
                     プロシージャ:sub_OpenDatabase
                     エラー詳細 :3043 ディスクまたはネットワークのエラーです。
エラー2(テーブル名を変えて複数出現)
2011/10/16 20:10:11  APOS2000システムエラー
                     プログラム :APOSMain
                     モジュール :業務開始
                     プロシージャ:subMakeRenshuuData
                     エラー詳細 :3078 入力テーブルまたはクエリ 'T_HTファンクションキーマスタ' が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。

エラー1の原因と修復

結果的にはc\:APOS\Data\APOS.mdbが破損しておりプログラムから読めなかった事が原因。それが判明したのは、データに不具合があるとはいえ処理前にコピーを取っておこうとコピーを始めたところ、該当のファイルでコピーエラーが発生したことから。そこでバックアップファイル内の「14日に締め処理が完了し、15日分のデータが入っているAPOS.mdbおよびAPOS.bak(いずれもバックアップされている)」を現行のAPOS\Data\へ上書きコピーするだけで修復完了。その後、15日分の締め処理を行って再起動。ここで、エラー2が発生。

エラー2の原因と修復

当初、エラーはバックアップからコピーした前日のAPOS.mdbについて発生していると考え、mdbファイルを開いてテーブルを確認してみたが該当のテーブルはきちんと存在している。で、エラーをよく見直してみたところ「プロシージャ:subMakeRenshuuData」とあったので、もしかしてと思い「c:\APOS\RenshuuData\APOS.mdb」を確認したところその予想は当たり。

そこで「T_HTファンクションキーマスタ」を昔の(初期の)データからコピーして再起動したところ今度は別のテーブルが見つからないと言われる。該当のテーブルに対して同様の操作をするも次々に別のテールブルを要求される。おそらく「●●●マスタ」の全てが壊れていると思われたため、最も古いバックアップファイルの中の「RenshuuData\APOS.mdb」で上書きしたところ正常に立ち上がるようになった。

まとめ

今回は次の二つの不具合が重なったことによるエラー。原因究明までしばらくかかったがとりあえず直って良かった。

  • c:\APOS\Data\APOS.mdbの破損
  • c:\APOS\Data\APOS.mdbの破損に伴うc:\APOS\RenshuuData\APOS.mdbの連鎖的破損

かなり昔の機種かなと思っていたけれど、現役モデルなのね。NEC TWINPOS 3500

トータルリコール

レンタル屋さんでふと目についたタイトル「トータルリコール」。懐かしくて思わず借りてしまった。この映画を初めて見たのは小学生か中学生の頃。映画の中では、そのテーマである火星移住、記憶のインプラント、各所で登場するテレビ電話(モニタはブラウン管、キーボードは本物を埋め込んだもの!)、A3サイズくらいの分厚いラップトップ、、腕時計型のホログラム発生装置、などなど当時としては近未来に実現するであろうとされていた最先端の技術が登場する。それらを観ながらこんなことが実際にできたらどんなに楽しいだろうと夢をふくらませていた。

あれから20年、テレビ電話の代わりとしてFaceTimeやタッチパネル、有機ELを利用した極薄ディスプレイなど、デバイスによってはそれ以上のものがすでに完成されて僕らの手の中にある。ホログラムだって実験段階ではもう出来つつある。火星移住や記憶のインプラントまでは実現できなかったけれど、きっと近い将来に実現するのだと今だから思う。

「バック・トゥ・ザ・フューチャー」や「ターミネーター」、「マトリクス」、「トロン」など近未来の世界を描いた作品を単なるフィクションとして片付けられないのは、実際に可能かどうかは別としてもこの何年か、何十年かの技術発展のスピードが速すぎるから。それらを眺めていれば弥が上にもそう期待せざるを得ない。

僕はちょうど1970年代の生まれで、コンピュータが僕たちの生活に入り込みそして必要不可欠なものになるのをずっと肌身で感じてきた。これからどこまで発展していくのかはわからないけれど、こうして日々新しい技術に触れならが、未来に思いを馳せながら生きて行かれる事は本当に幸せだと思う。

※そういえば、この時代の映画だからか描写として今ではきっと刺激が強すぎるような映像が多い。腕がもげたり、顔に鉄棒を刺したり、効果音がそれっぽかったり。個人的にはこのくらいあってもまったく普通だと思うんだけど。

rsyncとsshを利用してファイルのバックアップ(同期)を行う

rsyncを利用してファイルのバックアップを行う。sshdおよびrsyncはインストール済みとする。

サーバー側のsshdの設定を行う。下記2行の#を外して再起動する。

#PubkeyAuthentication yes
#AuthorizedKeysFile      .ssh/authorized_keys
userTo:~$ /etc/init.d/sshd restart

キーペアをクライアント側で作成する。このときにpassphraseは空白のままにしておく。もし入力をするとsshの実行時にパスワードを聞かれるため、自動実行が不可能になる。

userFrom:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user_from/.ssh/id_rsa):
/home/userFrom/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):(空白にする)
Enter same passphrase again:(空白にする)
Your identification has been saved in /home/userFrom/.ssh/id_rsa.
Your public key has been saved in /home/userFrom/.ssh/id_rsa.pub.
The key fingerprint is:
05:41:78:63:93:3c:65:e1:66:85:b3:dd:28:3a:57:9f userFrom@server

公開鍵をサーバー側のauthorized_keysへ追加する。

userTo:~$ cat id_rsa.pub >> /home/userFrom/.ssh/authorized_keys

sshのテストを行う。下記のコマンドを実行した際にパスワードは聞かれずにログインできれば問題ない。

userFrom:~$ ssh 192.168.1.***

rsyncを開始する。nohupを付けることにより、処理をユーザーがログアウト後も実行し続ける。

userFrom:~$ nohup rsync -avz -e ssh /path/to/files 192.168.1.***:/home/userTo/backup&
nohup: appending output to `nohup.out'
[1] 1333

場合により –delete を付けてバックアップを行う。バックアップ先に存在しないファイルはバックアップ元でも削除される。上記のように付けない場合には単純にコピーを行う。

userFrom:~$ nohup rsync -avz -delete -e ssh /path/to/files 192.168.1.***:/home/userTo/backup&

参考:rsyncとsshで別のマシンにバックアップ

zfs/raidz on FreeBSD

zpoolの作成からファイルシステムの作成とマウント、それぞれの削除、アンマウントまでのコマンド備忘録。

ada0からada3までを使ってraidzのzpoolを作成する。

#zpool create zpool0 raidz ada0 ada1 ada2 ada3

作成したzpoolの状態はzpool statusコマンドで表示する。

#zpool status
	NAME	STATE	READ	WRITE	CKSUM
	zpool0	ONLINE	 0	0	0
	 raidz1	ONLINE	 0	0	0
	  ada0	ONLINE	 0	0	0
	  ada1	ONLINE	 0	0	0
	  ada2	ONLINE	 0	0	0
	  ada3	ONLINE	 0	0	0

zfsのファイルシステムの状態はzfs listコマンドで表示する。

#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0
zpool0/storage	31.4K	5.34T	31.4K	/zpool0/storage

zpool0以下にstorageという名前のファイルシステムを作成する。

#zfs create zpool0/storage
#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0
zpool0/storage	31.4K	5.34T	31.4K	/zpool0/storage

作成したzpool0/storageを/mnt/storageにマウントする。

#mkdir /mnt/storage
#zfs set mountpoint=/mnt/storage zpool0/storage
#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0
zpool0/storage	31.4K	5.34T	31.4K	/mnt/storage

マウントポイントを消去する。

#zfs set mountpoint=none zpool0/storage
#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0
zpool0/storage	31.4K	5.34T	31.4K	none

ファイルシステムを消去する。

#zfs destroy zpool0/storage
#zfs list
        USED	AVAIL	REFER	MOUNTPOINT
zpool0	155K	5.34T	31.4K	/zpool0

その他1:zpool0を消去する。

#zpool destroy zpool0

その他2:ada0とada1を使ってmirrorのzpoolを作成する。

#zpool create zpool0 mirror ada0 ada1