2009/03/29

Mac OS X で CS-1734A 経由の HHK(PD-KB02)を利用する

ATEN の KVM Switch CS-1734A は Mac 対応をうたっているが、 PS/2 接続の Happy Hacking Keyboard(PD-KB02) を CS-1734A に付属する PS/2 -> USB 変換ケーブルを利用して Mac OS X Leopard に接続する様な使い方の場合、 キーボード手前の左右 Meta キー ('◇' )が何故か 'a' になってしまう。

市販の PS/2-USB 変換アダプタを利用して PS/2 接続の Happy Hacking Keyboard を Mac OS X で利用するための デバイスドライバ HHKPS2USBDriver をみつけたので、 リストにない変換アダプタでの動作を確認する方法を参考に CS-1734A の Vendor ID と Product ID を登録したところ、 キーボード手前の左右 Meta キー ('◇') が Command キーとして正しく動作する様になった。

ちなみに ATEN の Vendor ID は 1367(10)、 Product ID は 8723(10) なので、

  1<key>HHK via ATEN CS-1734A</key>
  2<dict>
  3    <key>CFBundleIdentifier</key>
  4    <string>org.nnip.driver.HHKPS2USBDriver</string>
  5    <key>HIDDefaultBehavior</key>
  6    <string></string>
  7    <key>IOClass</key>
  8    <string>HHKPS2USBDriver</string>
  9    <key>IOProviderClass</key>
 10    <string>IOUSBInterface</string>
 11    <key>bConfigurationValue</key>
 12    <integer>1</integer>
 13    <key>bInterfaceNumber</key>
 14    <integer>0</integer>
 15    <key>idProduct</key>
 16    <integer>8723</integer>             <!-- Product ID -->
 17    <key>idVendor</key>
 18    <integer>1367</integer>             <!-- Vendor ID -->
 19</dict>
    
の記述を追加した。

2009/02/18

wget でファイル送信

wget (1) でファイルを送信する必要が生じたので、 ブラウザでファイルを送信する際のパケットをキャプチャして 通信内容を調べてみる。

想定しているのは input type='file'enctype='multipart/form-data' を指定した フォームによるファイル送信処理。
通常の http ヘッダ以外に "Content-Type""boundary"wget (1) の --header オプションで指定し、 multipart/form-data 形式に整形した送信するファイルの内容を --post-data オプションで指定するだけで送信できる。
Content-Type'multipart/form-data'boundary は送信するデータの中に含まれない 任意の文字列を指定すれば問題ない。

multipart/form-data 形式は以下の形式に整形する。

--任意の文字列
Content-Disposition: form-data; name="フォーム名"; filename="ファイル名"
Content-Type: text/plain
(空行)
ファイルの中身
(空行)
--任意の文字列

実際にコマンドライン形式に記述するとこの様になる。

wget --header="Content-Type: multipart/form-data; boundary=バウンダリ" \
	--post-data='
--バウンダリ
Content-Disposition: form-data; name="フォーム名"; filename="ファイル名"
Content-Type: text/plain

ファイルの中身
         :

--バウンダリ
	' 送信先URL

スクリプトの場合などはシェル変数などを利用すると、 もう少し見やすいスクリプトになるだろう。

	:
	:
# バウンダリ文字列は世界標準時基準時点からの秒数とする
boundary="boundary-`date '+%s'`"
# 受信する cgi の <input type="file" name="..."> で指定されるフォーム名
formname="フォーム名"
# 送信するファイル
filename="ファイル名"
# 送信するファイルのデータ
contents="`cat ${filename}`"

# multipart/form-data 形式のデータ生成
data="
--${boundary}
Content-Disposition: form-data; name='${formname}'; filename='${filename}'
Content-Type: text/plain

${contents}

--${boundary}
"

# ファイルの送信処理
wget --header="Content-Type: multipart/form-data; boundary=${boundary}" \
    --post-data="$data" 送信先 URL
	:
	:

2009/02/01

DNS DDoS

詐称された IP address から `. IN NS' という query を投げる DNS DDoS 攻撃が最近流行っているらしい。
この query に対して root servers のリストを応答すると、 わずか数バイトの問い合わせに対して数百バイトの応答が発生してしまうので、 詐称された IP address に膨大なトラヒックが集中してしまい、 結果として DDoS攻撃 分散型サービス拒否攻撃 Distributed Denial of Service attack となってしまうらしい。

bind は既に対策が実施されており、 `. IN NS' query に `refused' と応答する様になったので、 対策されていない DNS の管理者は早急に対策するした方が良いと思う。

2008/12/10

GNU Bourne-Again Shell を便利に使う

対話シェルとして使用する bash (1) の コマンドライン履歴機能の便利な使い方。
bash (1) のコマンドライン履歴機能のうち イベント指示子、単語指示子、修飾指示子は オンラインマニュアルにも情報が少ないが、 慣れると非常に便利でキータイプ量も減るので是非マスターしておきたい。
以下の文中で nm は任意の整数、 foobarbaz などは任意の文字列を示す。

機能一覧

イベント指示子
!! 直前に実行したコマンドを実行する
!-n n 回前に実行したコマンドを実行する
^foo^bar
!:s/foo/bar
直前に実行したコマンドの foobar に変更して実行する
!:gs/foo/bar 直前に実行したコマンドの全ての foobar に変更して実行する
!foo foo で開始されるコマンドを実行する
!n
n 番目に実行されたコマンドを実行する
単語指示子
!:n 直前に実行したコマンドの n 番目の引数を取得する
!^ 直前に実行したコマンドの 1 番目の引数を取得する
!$ 直前に実行したコマンドの最後の引数を取得する
!* 直前に実行したコマンドの全ての引数を取得する
!:n* 直前に実行したコマンドの n 番目から最後までの引数を取得する
!:n-m 直前に実行したコマンドの n 番目から m 番目までの引数を取得する
!:-n 直前に実行したコマンドの最初から n 番目までの引数を取得する
!:n- 直前に実行したコマンドの n 番目から最後の 1 個前までの引数を取得する
修飾指示子
:p コマンドを表示のみして実行しない
:h パスのファイル名部分を取り除きディレクトリ名を取得する
:t パスのディレクトリ名部分を取り除きファイル名を取得する
:r ファイル名の拡張子を取り除き "." の前を取得する
:e ファイル名の拡張子を "." 付きで取得する

イベント指示子

  • !!
  • 直前に実行したコマンドを実行する
    $ echo foo bar baz
    foo bar baz
    $ !!
    echo foo bar baz
    foo bar baz
    

  • !-n
  • n 回前に実行したコマンドを実行する (複数のコマンドを繰り返して実行する場合に便利)
    $ echo foo bar baz
    foo bar baz
    $ echo FOO BAR BAZ
    FOO BAR BAZ
    $ !-2
    echo foo bar baz
    foo bar baz
    $ !-2
    echo FOO BAR BAZ
    FOO BAR BAZ
    

  • ^foo^bar
    !:s/foo/bar
  • 直前に実行したコマンドの foobar に変更して実行する (下のパターンの場合 "/" は任意の文字に変更が可能)
    $ echo foo foo foo
    foo foo foo
    $ ^foo^bar
    echo bar foo foo
    bar foo foo
    $ echo foo foo foo
    foo foo foo
    $ !:s/foo/bar
    echo bar foo foo
    bar foo foo
    

  • !:gs/foo/bar
  • 直前に実行したコマンドの全ての foobar に変更して実行する ("/" は任意の文字に変更が可能)
    $ echo foo foo foo
    foo foo foo
    $ !:gs/foo/bar
    echo bar bar bar
    bar bar bar
    

  • !foo
  • foo で開始されるコマンドを実行する
    $ echo foo bar baz
    foo bar baz
    $ touch foo bar baz
    $ !ec
    echo foo bar baz
    foo bar baz
    

  • !n
  • n 番目に実行されたコマンドを実行する
    $ echo foo bar baz
    foo bar baz
    $ echo FOO BAR BAZ
    FOO BAR BAZ
    $ !1
    echo foo bar baz
    foo bar baz
    

単語指示子

  • !:n
  • 直前に実行したコマンドの n 番目の引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !:0
    echo echo
    echo
    $ echo foo bar baz
    foo bar baz
    $ echo !:2
    echo bar
    bar
    

  • !^
  • 直前に実行したコマンドの 1 番目の引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !^
    echo foo
    foo
    

  • !$
  • 直前に実行したコマンドの最後の引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !$
    echo baz
    foo
    

  • !*
  • 直前に実行したコマンドの全ての引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !*
    echo foo bar baz
    foo bar baz
    

  • !:n*
  • 直前に実行したコマンドの n 番目から最後までの引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !:2*
    echo bar baz
    bar baz
    

  • !:n-m
  • 直前に実行したコマンドの n 番目から m 番目までの引数を取得する
    $ echo foo bar baz FOO BAR BAZ
    foo bar baz FOO BAR BAZ
    $ echo !:3-5
    echo baz FOO BAR
    baz FOO BAR

  • !:-n
  • 直前に実行したコマンドの最初から n 番目までの引数を取得する
    $ echo foo bar baz FOO BAR BAZ
    foo bar baz FOO BAR BAZ
    $ echo !:-4
    echo foo bar baz FOO
    foo bar baz FOO
    

  • n-
  • 直前に実行したコマンドの n 番目から 最後の 1 個前までの引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !:1-
    echo foo bar
    foo bar
    

修飾指示子

  • :p
  • コマンドを表示のみして実行しない
    $ echo foo bar baz
    foo bar baz
    $ touch foo bar baz
    $ !e:p
    echo foo bar baz
    

  • :h
  • パスのファイル名部分を取り除きディレクトリ名を取得する
    $ echo /foo/bar/baz
    /foo/bar/baz
    $ echo !$:h
    echo /foo/bar
    /foo/bar
    

  • :t
  • パスのディレクトリ名部分を取り除きファイル名を取得する
    $ echo /foo/bar/baz
    /foo/bar/baz
    $ echo !$:t
    echo baz
    baz
    

  • :r
  • ファイル名の拡張子を取り除き "." の前を取得する
    $ echo foo.c
    foo.c
    $ echo !$:r
    echo foo
    foo
    

  • :e
  • ファイル名の拡張子を "." 付きで取得する
    $ echo foo.c
    foo.c
    $ echo !$:e
    echo .c
    .c
    

2008/11/25

Catalyst

ひかりoneではCISCOは使えないらしい
これはネタですか?ネタですよね?ネタって言ってください…

Catalyst が良いハードか悪いハードかはともかく、 KDDI のサポセンならせめて CISCO Catalyst 位は知っていて欲しい気がする。

2008/10/22

Dual Head + KVM Switch + Synergy その2

BENQ の 24インチワイド液晶が届いたのでそのまま目の前でメイン液晶となり、 今までメインだった 19インチ液晶がサブになり右隣に移動した。
1920x1200 の大画面には相変わらず FreeBSD の画面が表示されているのだが、 入力が DVI、D-Sub、HDMI と3系統に対応しているので、 D-Sub 端子に FreeBSD マシン、DVI 端子に MacMini を接続している。
右隣のサブ液晶には FreeBSD、WindowsXp、仕事用の評価機が接続される事になり、 Plat'Home の PShare で切替ながらの作業は相変わらずである。

メインの液晶は今まで FreeBSD の画面だけを表示していたのだが、 最近は MacMini の画面を表示している事が非常に多くなり、 MacMini 用の BlueTooth キーボード/マウスが デスクトップにある機会が多くなっている。

更には 13インチの MacBook もデスクトップ上に置かれる事が多くなり、 synergy でキーボード/マウスを共用しているとはいえ デスクトップは非常に手狭になってしまった。

何とかしなくちゃ

2008/09/12

Dual Head + KVM Switch + Synergy

目の前の19インチ液晶(メイン)には FreeBSD の画面が常時表示されている
その右隣の17インチ液晶(サブ)は KVM Switch 経由で FreeBSD の画面(Dual Head)、 Windows Xp、Mac mini、仕事用の評価機が接続されていて、 必要に応じて切り替えながら使用している。
FreeBSD、Windows Xp、Mac mini には Synergy がインストールされているので、 サブ画面を Windows Xp、Mac mini に切り替えた時でも、 画面を切り替えながら1組のキーボード/マウスで透過的に操作可能。
(勿論 KVM Swith に接続されたキーボード/マウスでも操作可能。

職場の作業環境が非常に快適になりました。

2008/08/26

三者三様のキーボード風景

職場で USB キーボードがどうしても必要になったので、
ちゃんと経費で出してくれるって言うから…つい………
この機会にと Happy Hacking Keyboard Professional 2(PD-KB400WN) をゲット
1997年頃からずっと愛用している Happy Hacking Keyboard (PD-KB02)と、 最近すっかりはまっている Apple Wireless Keyboard を並べて記念撮影

Image: NEC_0023.JPG


それぞれ素晴らしいキーボード達である。

2008/08/09

HDD交換

製造が中止になってしまった様で巷からめっきり姿を消してしまった HTS721010G9AT00(2.5インチ、Ultra ATA、7200rpm)の未使用新品を、 某大手オークションで落札できたので T43 の内蔵 HDD を交換した。

交換直後は BIOS が ERROR 2010 となってしまったが、 ネットで検索した内容を参考に アメリカのLenovoのサイトから firemware の更新プログラムを取得して HDD のファームウェアを アップデート(?)したら表示されなくなった。

2008/07/30

PLC

引っ越ししてから生活環境が大幅に変わってしまった。
今までは寝室のみが1階で、 生活のほとんど全てが2階に集約していたので無線 LAN も快適に使えていたのだが、 新しい環境では見事に 1階と2階に分散してしまったので、 この機会に PLC を導入してみた。

Image: IMG_1154.JPG

とりあえず無線 LAN よりは多少早い程度で繋がっている。
上は Panasonic のノイズフィルタ


Copyright © 2008-2020 Mitzyuki IMAIZUMI. All rights reserved.