FreeBSD 8.2-RELEASE-p6

投稿日: Leave a comment

FreeBSD 8.2-RELEASE-p6 が5日前のリリースされていたのでアップデート。

20120104:       p6      FreeBSD-EN-12:01.freebsd-update
        Extend the character set accepted by freebsd-update(8) in file
        names in order to allow upgrades to FreeBSD 9.0-RELEASE.

内容的にはシェルスクリプト1個 (freebsd-update.sh) が変更されただけなので、buildworld も buildkernel も意味なさ気だけど念のため実施。

MZK-RP150N の WPS を無効にする

投稿日: Leave a comment

ここの続き。

プラネックスに問い合わせしたら回答が来た。

■WPSを無効にする方法

1. 設定画面で「無線LAN」「WPS」の順にクリックしてください。

2.「WPSを有効にする」のチェックを外してください。

3.「PBC開始」をクリックしてください。

4.「2分以内に子機のWPSボタンを押してください」と
  表示されますので「OK」をクリックしてください。

5. 画面内のカウントダウンが終わるまでお待ちください。

6. 無線LAN基本設定など別の画面で
 「適用」「適用」「OK」の順にクリックして設定を保存してください。

2分もまたなきゃいけないのか。

やってみたら一応「WPSを有効にする」のチェックが外れた状態が保持されるようになった。

有効にする場合もこの手順でいいのかな。

Python 始めて見た

投稿日: Leave a comment

年末に宣言した Python。

インストーラがPython.org本家版とActivePythonとあって迷ったけど、ActivePythonの方がライブラリ系が充実してそうだったので、ActivePythonを入れて色々試してみた。

インデントでブロック範囲を規定する独特の文法になれるのに少し戸惑ったけど、なれるとコードが見やすいし書きやすいので良い感じ。

肝心のDLLを呼び出すのも、ctypesモジュールのwindll関数で簡単に呼び出せる。このへんはrubyより書きやすい。特に、cの変数とpythonの変数の変換用関数が用意されていて、ポインタを渡したりするのもコード的には簡単に書ける。

というわけで、ちょっと書いてみただけでPython良さげと思えてきて、早々に乗り換えようかと思えてきた。

2012年はpythonやってみようかな

投稿日: Leave a comment

会社同期の友人と飲んでいて、pythonの話になった。具体的にどうのこうのというわけではなく、言語のバリエーションの話の流れで。

これまで仕事でプログラムを書くときに C → C++ → Rubyと手を出してきて、それぞれでやりたいこと (DLLで書かれたほかのプログラムを呼び出すのが主) はできているが、特にVISAで測定器との入出力をさせることを考えると、

  • DLLで用意されたIOドライバのRead系関数とWrite系関数の呼び出し
  • Read関数で返ってきたASCIIの数値や配列の文字列を整数型なり浮動小数型に変換する
  • 欲を言えば、パラメータ(セット)を配列で持たせて、イテレータでループさせる

ということをやらせたくなるわけで、そうした場合に C → C++ → Ruby の順で余計なコードが少なくて済む(=わりと簡単に書ける)ようになる。

そういう意味では、Rubyで十分やりたいことは達成できているが、同じオブジェクト指向でDLL呼び出しの仕組みも持っているPythonもちょっとかじってみたい様に思えてきた。

自動測定のプログラムは、2007年くらいからC (gcc) で書き始め、2009年頃からC++ (VC++) に手を出し、2011年はC++で書いたプログラムのメンテナンスをしつつ、新規のプログラムはひたすらRubyで書いてきた。なので、来年はPythonに手を出してみようかなと思い始めた。

仕事的には余計なことに手を出さずに過去の遺産は活用すべし、ってところなんだろうけど、そこはコソコソと自己研鑽。

FreeBSD 8.2R-p5

投稿日: Leave a comment

FreeBSD 8.2Rのセキュリティアップデートが12/23に出ていたので、csupして更新作業を実施。

手順は/usr/src/Makefileに書いてあるとおり。KERNCONFは/etc/make.confに書いてあるので、3と4はそれぞれ make buildkernel、make installkernelとするだけでOK。

#  1.  `cd /usr/src'       (or to the directory containing your source tree).
#  2.  `make buildworld'
#  3.  `make buildkernel KERNCONF=YOUR_KERNEL_HERE'     (default is GENERIC).
#  4.  `make installkernel KERNCONF=YOUR_KERNEL_HERE'   (default is GENERIC).
#       [steps 3. & 4. can be combined by using the "kernel" target]
#  5.  `reboot'        (in single user mode: boot -s from the loader prompt).
#  6.  `mergemaster -p'
#  7.  `make installworld'
#  8.  `make delete-old'
#  9.  `mergemaster'                         (you may wish to use -U or -ai).
# 10.  `reboot'
# 11.  `make delete-old-libs' (in case no 3rd party program uses them anymore)

これで、uname -r が 8.2-RELEASE-p5 になった。

LaFonera+をDD-WRT化

投稿日: Leave a comment

使わなくなったFONルータ LaFonera+ を改造。

改造方法は、ここに書いてあるとおり。DD-WRT化、つまりAPやらルータやら好きにいじれるモードに変更。

まずは、必要な材料から。確実に作業するため、シリアルコンソールで制御したかったので、昔買ったUSB-UART変換基板 MFT232RL を引っ張り出してきて、機器内部のUART端子と接続。

  • IO3.3VはFT232RLで生成された3.3Vを使用 (Lafonera+のVddは使わない。)
  • TxDとRxDをお互いつないでクロス接続
  • もちろんGNDも接続

説明書通りTeratermのボーレートを9600bpsに設定して、電源入れてしばらくするとゴニョゴニョメッセージが出てきた。UART接続OK。

ここで、リセットボタンを長押しするとリブートし始める。そのときのメッセージがこんな感じ。

The system is going down NOW !!
Sending SIGTERM to all processes.
Sending SIGKILL to all processes.
Requesting system reboot.
+Ethernet eth0: MAC address 00:18:84:a0:ee:34
IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.254

RedBoot(tm) bootstrap and debug environment [ROMRAM]
OpenWrt certified release, version 1.1 - built 22:32:28, May  7 2007

Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

Board: FON 2201
RAM: 0x80000000-0x81000000, [0x80040290-0x80fe1000] available
FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 2.000 seconds - enter ^C to abort
^C
RedBoot> ^C
RedBoot> ^C

とりあえずRedBootのプロンプトで止めないと話が始まらないので、すかさずCtrl-Cを連打。

続けて、機器のIPアドレスを192.168.1.250(LANと同じサブネットでDHCPで配っていないアドレスで適当に)、TFTPサーバに 192.168.1.8 (いつも使っているVista機) を指定して手順通りにコマンド入力。

RedBoot> ip_address -l 192.168.1.250/24 -h 192.168.1.8
IP: 192.168.1.250/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.8
RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> load -r -v -b 0x80041000 linux.bin
Using default protocol (TFTP)
|
Raw file loaded 0x80041000-0x8066efff, assumed entry at 0x80041000
RedBoot> fis create linux
... Erase from 0xa8030000-0xa865e000: ...................................................................................................
... Program from 0x80041000-0x8066f000 at 0xa8030000: ...................................................................................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> fconfig
Run script at boot: true
Boot script:
.. fis load -b 0x80100000 loader
..  go 0x80100000
Enter script, terminate with empty line
>> fis load -l linux
>> exec
>>
Boot script timeout (1000ms resolution): 2
Use BOOTP for network configuration: false
Gateway IP address: 192.168.1.1
Local IP address: 192.168.1.253
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.1.2
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .

ここでリセット掛けると、デフォルトのIPアドレス 192.168.1.1 で立ち上がるので、コンソールからログインして、ifconfigコマンドでIPアドレスを192.168.1.253 (気が変わって後ろから2つめのアドレスに変更) に設定。それからLAN端子にケーブルをつなぐと、ブラウザからWeb Interface経由でいじれるようになった。

結構電力を吹いているみたいで、AndroidのWiFi Analyzerで見ると最近買ったAPと同じくらいのレベルで見えていた。あと、動作は確認していないけど、40MHzのTurboモードという設定ができるみたいで、Draft N相当のモードになるっぽい。こちらは追々試してみる予定。

無線LAN AP

投稿日: Leave a comment

ビックカメラの株主優待券があったので、無線LANのAPを買ってみた。

NECのWR8700N。IEEE802.11a/g/nに対応した2.4GHz/5GHzデュアルバンド、300Mbps対応のブロードバンドルータ。

もちろん、ひかり電話のルータがあるので、ルータモードではなくアクセスポイントモードに設定。とりあえずSSIDをいつものに変更して、Xperiaからつないでみた。

今まで使っていたひかり電話ルータのAP機能だと、重いWebやYou tubeの動画を見ると無線LANが切れてしまってあんまり使えなかったけど、新しくして通信中に切れることはなくなった。

ただ、相変わらず無線LAN機能をスリープすると復帰後につながらない(つながりにく?)ので、スリープしない設定にして快適になった。

一応、Android側でリンク速度を見てみたら 65Mbps になっていたので、802.11nでちゃんとつながっているみたい。

このAP、ハイパーロングレンジ モデルということもあって家の中では何処でもつながるようになったのはいいのだけど、向かいのパン屋さんの前でもつながっちゃったので、少し出力制限しなきゃダメかな。

そういえば、RV-230SEに挿してAP化していた無線LANカード SC-32SE が要らなくなった。欲しい人は連絡を。

GS116E 入荷、動作もOK

投稿日: 2 Comments

NETGEARのスイッチを購入した。

ノンインテリジェントなスイッチにVLANとかQoS制御やらポートミラーリングやらの機能がついたもので、新居のバックボーンのハブにするつもりで16ポートのものを購入。

早速動作確認ということで、制御ツールをPCに入れてスイッチの状態を見てみた。

サーバを止めるのはちょっと嫌だったので、既存のハブにストレートケーブルでぶら下げただけ。
このスイッチ自体がDHCPでIPを振るようになっていて、制御ツールを立ち上げるとスイッチのIPアドレスが表示される仕組み。んで、パスワードを入れると、ポートごとのリンク速度やVLANの設定をした出来るようになる。

何となく、ブロードバンドルータをいじる感じ。

ただ、ウェブインターフェースじゃなく、専用ツールが必要というのはマイナスポイント。ツールはネットから落とせなさそうだし、CD-ROMなくしたら困りそう。

GS116Eの設定ツールの画面

とりあえず、動作確認OKということで、ユーザー登録してしばし封印。

ruby-trunkコンパイルエラー対策

投稿日: Leave a comment

ruby-trunkのコンパイルが1週間くらい出来なくて悶々としていたけど、昨日色々いじっていてようやく解決した。

コンパイルエラーになっていたのはdbm.soを作る所。そこで_gdbm_versionが見つからないと言われる。

さて、configureではちゃんとgdbm.libの_gdbm_versionを見つけられているのになんでだろうと思っていた。

結論は、ヘッダーの以下の記述が抜けていたのが問題だった。

#if defined(_WIN32) && !defined(GDBM_STATIC)
# if defined(BUILDING_DLL)
#  define GDBM_EXTERN extern __declspec(dllexport)
# else
#  define GDBM_EXTERN extern __declspec(dllimport)
# endif
#else
# define GDBM_EXTERN extern
#endif

これは、gdbm.dllを作るときのヘッダー gdbm.h にはあるけど、rubyのdbm.soを作るときにインクルードするヘッダ(ndbm.h)には含まれないもの。かと言って、両方インクルードするとdatumという構造体がgdbm.hにもndbm.hにも入っているのでエラーでこけてしまう。

というわけで、ndbm.hのtypeded struct {} datum; をコメントアウトして、そこに #include “gdbm.h” を入れたら無事コンパイルが通った。

なんともややこしい。