業務用スーパーへ行ったら、フルーツグラノラのデザインが一新されていて、いつものデザインを探して、一瞬、品切れかと思った。
印刷代が安そう 🙂
業務用だから、実利が重要であって、虚飾は必要無いから、実に合理的だな。
棚にあるだけ9個全部購入。一応、店員に、「棚にあるだけしか無いのか?」と尋ねると、棚にあるだけとの返答で、今回は1ケースを注文しておいた。
ブログに書いておかないと、忘れてしまいそうだから、書いておく。
I know who Iam.
1 2 3 |
while(1){ sleep(1); } |
というC言語のプログラムだと、1秒待ってループってな感じだけど、create_timer()とかでタイマー作ってシグナル割り込みがあると、時間に関わらず、シグナルが発生した時点で、sleep()から抜けるんやな。
メイン処理で、sleep()で1秒間隔、タイマーの割り込みで0.5秒間隔でシグナルが発生するとすると、sleep()は必ず-1の戻り値で抜けてしまい、メイン処理は0.5秒間隔でループするんだな。
シグナルが来たら、メイン処理で何かするって組み方だと、sleep()がシグナルで抜けてくれた方がデッドロックが無くて良さそうだ。
先々週に上側やって、今日は下側の歯石取り。
虫歯も歯周病も細菌が原因で、口内細菌が安定しない幼児期に親から伝染され、一生、虫歯や歯周病の可能性に怯えながら生きていく事になる。
パーフェクトペリオってので治療すれば、歯周病原因菌を撲滅でき、そもそも歯周病にならなくなるから、やってみたい気がするな。
社長にRBIO-2Uを買ってもらった。
USBインターフェースだが、Ubuntu 9.04 Desktopのマシンに繋いだら、USB Serialportとしてサックリ認識。
ターミナルで”PCR01″とかコマンド送るとリレーがカチカチ作動する。
使い方は色々あるが、例えば、パソコンの温度が高い時に、外付けの強力な電動ファンのスイッチを自動で入れるとか、炭酸ガスボンベのソレノイドバルブを開閉するとか応用次第で色々楽しそうな事ができそうだ。
リレー出力10、入力4だが、入力ポートが結構おもしろい。GNDと入力の線を短絡させて、RBIOに”FB0″とコマンドを送ると”0″と返ってきて、開放状態だと、”255″という文字列がシリアルから返ってくる。
これも色々と応用が効くが、出力と入力と合わせて、電動ねずみ取り機とか作れるな(笑)
餌のチーズに触れると、入力で検知して、リレー出力で扉をガシャンと電動で閉じるってな具合。果てしなく無用の長物感がするが、まあパソコンで入力の判断と出力ができるってのが色々応用できて、おもちゃとして面白い。
会社の自分のマシンは、NIC二枚挿しで、一方をネットワークテスト用のローカルネットが切ってある。
そのローカルネットで、motionを動かしているが、こいつは8081番のポートを、Webブラウザで叩いてやると、カメラ画像がモーションJPEGで見る事ができる。
これは、当然、ローカルネットの外では見る事ができないので、自分のマシンのApacheの特定ディレクトリの.htaccess で
RewriteEngine ON
RewriteRule (.*)/ http://$1:8081/ [P]
なんてやって、ローカルマシンの motion のモーションJPEGを外部公開する設定にした。
http://localhost/hoge/camera/172.16.0.12/
とやると、外部から参照可能の自分のマシンのApacheが、
http://172.16.0.12:8081/
を実行して、先のURLのコンテンツを置き換えてくれる。
しかし、これって、camera以下のIPアドレス部分を変えれば、どんなホストにもアクセス可能だから、どうみても穴だよなあ…。
ただ、色々と制約があって、
・DNSは使えない
・閲覧するカメラの数は決まっていない。
・motionの動くマシンのネットワークは決定していない。
という理由から、mod_rewriteを使って、URLに任意のIPアドレスをぶら下げるというインターフェースしか思いつかぬ。
PHPで、proxyモドキを作ってみたが、JPEGの画像が書き換わってるのが分かる程、オーバーヘッドがでかいので、動画データの転送には向いてないから断念した。
なんかいい方法ないかなあ。
PHP でコンフィグレーションファイルを読むのに
parse_ini_file()があるが、書き込む関数が見当たらない。
webで検索しても見つからないので作ってみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
function add_quote($quote_str,$val){ if(is_string($val)){ $val = "${quote_str}${val}${quote_str}"; } return $val; } function parse_array($ini_array,$buf=""){ if(is_array($ini_array)){ foreach($ini_array as $key=>$val){ if(is_array($val)){ foreach($val as $key2=>$val2){ $buf .= "${key}[${$key2}] = " . add_quote('"',$val2) ."\n"; } }else{ $buf .= "${key} = " . add_quote('"',$val) ."\n"; } } } return $buf; } function write_ini_file($filename,$ini_array,$process_sections = false){ if(is_array($ini_array)){ $fp = fopen($filename,"w"); foreach($ini_array as $key=>$val){ $buf = ""; if(is_array($val)){ if($process_sections != false){ $buf .= "[${key}]\n"; } $buf .= parse_array($val); }else{ $buf .= "${key} = " . add_quote('"',$val) ."\n"; } fwrite($fp,$buf); } fclose($fp); } } |
これで一応、parse_ini_file()のサンプルが正常に展開格納できるが、Zend Frameworkにiniファイル書くヤツがあるというのが分かった。
しかし、Zend Framework の Zend_Config_Writer_Ini() と同じ結果だから、手軽に使うならこれでいいや。
また、品薄になってるみたいだな。
マスク無い時に買ったN95をどう使うかが課題だが、置いておいても劣化するので、3年計画位で消費するプランを考えないといけない。
夏場はクソ暑くて着けてられないから、寒くなってきたら、防寒着としてN95マスクでもはめるとするか 🙂