【買い物】パスケース、財布

財布の飛び出ているジッパのせいで背広のズボンがオシャカになった。
財布の角に近い位置にジッパがあるせいで、ズボンの尻ポケットに入れて座っていると、擦れてポケットが破れるのだ。

あと、定期入れを結構長い間使っていて、クリアケース部分が破れてきたので、新調しようと思った。

いざ、近所のスーパーマーケットへ探しにいくと、ロクに置いてない。
隣に100円ショップがあるから、そこで買う人が多いのかもしれんが、100円ショップの財布や定期入れって安いだけで、全く使い物にならんガラクタのようなものしか置いてないから、論外。

定期入れはカードが多く収納できるタイプ、財布は革製か合成皮革で、ズボンの生地にやさしそうなタイプを所望であるが、安物で充分だ。

探しまくったが、カードを収納するクリアケースがついてる定期入れがほぼ皆無。
財布も尻ポケットに入れるから、カード収納能力はむしろ無い方が良い。

しかし、安易に中国で作ってるせいか、「安かろう悪かろう」のものが多いな。
とりあえず、見つけたのがこれ。

アコーディオンパース
カードケース CCT

定期入れのマネークリップが使わんし余計だな。
そして、財布は色がダセえけど、別に色なんざ機能に関係無いからどうでもいいか。

【買い物】フラッシュライト、電池、チャージャー

1.Ultrafire WF-C6 Cree Flashlight (CR123A)
2.Ultrafire 16340 3.6V Batteries (4-pack)×2
3.UltraFire 3.6/3.7V Battery Charger

とりあえずUltraFireブランドで固めてみた。
CR123A互換の再充電可能電池を8本調達したが、電圧が無負荷で3.7Vで、普通のCR123Aは3.0Vなので、Surefire 9Pで使えるかは知らん(笑)

しかし、これは今後の電子タバコのCR123Aを使うモジュールへの移行を考慮した計画であるので、別に充電池がSurefireで使えなかったところで問題は無い。

電池が8本で$12.98で、1本あたり、$1.62で約160円位か…。
PanasonicのCR123Aが1本500円位で、普通、充電池の方が高いのだが、電池が爆発するのが当たり前の中華品質だと、こういう価格でも不思議ではない。

保護回路付きにすりゃ良かったかな。

WordPress アップデート

アップデートしたら、皇紀の表示が西暦になった orz

単に表示部分で表示データひったくって660年足してるだけだが、アップデートにも強い改造法を編み出さねば。

ATCOM IP08

会社でATCOMのIP08の設定をやった。

同僚が設定していて、転送設定ができないとの事で、わしが見る事になった。
BAPsのfirmwareアップデート済みだったが、#を押しても”Transfer”っておねいちゃんの声が聞こえず、DTMFがスルーされてる感じ。

シリアル端末で、
ipkg remove asterisk-1.4.4
ipkg install asterisk-1.4.20

ってasteriskのバージョン上げても変わらず、しまいには、Grandstreamの電話機では繋がらず、ソフトフォンなら繋がるという謎の現象になってしまったので、BAPsのファームウエアは放棄!

ATCOMのDownload centerから、ファームウエアを落っことしてアップデートすると、転送の#押下は認識するようだが、電話がブチ切られる。

asterisk -vvvr でモニタすると、pbx-transferの音声ファイルが開けませんとかいうログが出ていた。

ファイルの位置を調べると、
/persistent/asterisk/sounds
とかにあるみたいで、

/var/lib/asteriskのディレクトリで、
ln -s /persistent/asterisk/sounds .

とシンボリックリンク貼ってやったら動いた。

AsteriskNowは、asteriskを作ったdigiumが作っただけあって、非常に良くできている。

パッケージのビルドさえ完璧であれば、GUIで設定できて、簡単なのだが、そうでない場合は、Linux弄る知識が無いと、とても触れたもんじゃない。ちょっと残念な製品だな。

バリスタ

バリスタと言っても、コーヒーを淹れる訳ではなくて、Variable resistorの略。

会社でソレノイドバルブを動かす回路を作ったが、RBIO-2Uのリレーでカチカチ作動させていると、RBIO-2Uでリセットが掛かる。

ソレノイドバルブの給電を止めた途端にリセットするので、過電流のせいでもないから、共立電子さんにWebフォームで「初期不良っぽいですけど交換して貰えますか?」って問い合わせてしまった。

付属マニュアルをじっくり読んでいて、大容量リレーを駆動させる回路ってのを読んでたら、バリスタを入れないと、リレーのサージによってマイコンが暴走するって書いてあった。

電子工作初心者だから、バリスタを入れないといけないなんて全然知らんかった。

Wikipedia見たら、

直流モーターソレノイドなどといった直流の誘導性負荷は、電源を切った際に自己誘導作用による高圧の逆起電圧を生じる。」

って、ソレノイドバルブの電源を切った途端に発生してるから、まんまこの現象だよ orz

シグナルハンドラ

シグナルハンドラ内では、malloc()やprintf()系が使えず、thread safe な関数しか呼べないので、シグナルハンドラではキューに記録して、メインルーチン内でキューを取り出して処理する形式を考えてみた。

実際に動作させてみると、0.5秒毎にタイマーが起動してキューにシグナル番号が積まれるが、メインルーチンで、0.05秒毎にキューをチェックするので、キューに積まれるシグナル番号は殆ど増える事は無く処理される。

30:30 sigevent:0
30:30 sigevent:0
30:30 sigevent:0
30:30 sigevent:0
30:30 sigevent:0
30:30 sigevent:0
31:31 sigevent:35
31:31 sigevent:0
31:31 sigevent:0
31:31 sigevent:0
31:31 sigevent:0
31:31 sigevent:0
31:31 sigevent:0

実行すると、こんな感じ。

表示しているのは、
キュー先頭(head):キュー末尾(tail) sigevent:シグナル番号
というフォーマットになっている。

しかし、Ctrl-Cを押しっぱなしにすると、メインルーチンでは、usleep()から抜けないので、キューにSIGINTが積まれまくる。

130:130 sigevent:0
131:131 sigevent:35
^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C^C132:42 sigevent:2
133:42 sigevent:2
134:42 sigevent:2
135:43 sigevent:2
136:43 sigevent:2
137:43 sigevent:2
138:43 sigevent:2
139:43 sigevent:2
140:43 sigevent:2
141:43 sigevent:2
142:43 sigevent:2
143:43 sigevent:2
144:44 sigevent:2
145:44 sigevent:35

ちなみにこのキューはオーバーフローすると、古いデータを捨てるようになっている。オーバフローを確認する方法は作ってない(笑)。

Ctrl-Cを離すと、メインルーチンでキューに溜まっているデータをせっせと処理し、キューの先頭のheadの数字と末尾のtailの数字がみるみる接近していくのが見て取れる。

これで、メインルーチンでシグナル割り込みを検知し、malloc()、printf()使いたい放題。
難点は、ちょっとリアルタイム性が悪くなるという点だな。

このプログラムはリアルタイムライブラリを使うので、コンパイル時には -lrt オプションがいる。

【買い物】フルーツグラノラ

20091018_1

業務用スーパーへ行ったら、フルーツグラノラのデザインが一新されていて、いつものデザインを探して、一瞬、品切れかと思った。

印刷代が安そう 🙂
業務用だから、実利が重要であって、虚飾は必要無いから、実に合理的だな。

棚にあるだけ9個全部購入。一応、店員に、「棚にあるだけしか無いのか?」と尋ねると、棚にあるだけとの返答で、今回は1ケースを注文しておいた。

ブログに書いておかないと、忘れてしまいそうだから、書いておく。

待ってくれないsleep

というC言語のプログラムだと、1秒待ってループってな感じだけど、create_timer()とかでタイマー作ってシグナル割り込みがあると、時間に関わらず、シグナルが発生した時点で、sleep()から抜けるんやな。

メイン処理で、sleep()で1秒間隔、タイマーの割り込みで0.5秒間隔でシグナルが発生するとすると、sleep()は必ず-1の戻り値で抜けてしまい、メイン処理は0.5秒間隔でループするんだな。

シグナルが来たら、メイン処理で何かするって組み方だと、sleep()がシグナルで抜けてくれた方がデッドロックが無くて良さそうだ。