自宅で監視カメラを動かしてみた
今度の週末は、家族旅行の予定。 だけど、子どもがその間、最近病院に連れて行った婆ちゃん猫を 心配している。
そこで、使っていなかったWebカメラで、急遽、監視カメラを動かしてみた。 奥さんからは、解像度低いじゃんとツッコミを受けるが、 もともとのWebカメラの性能だと思うし…
余りにも他愛もないコードだけど、 この手のお遊びプログラムは、 学生さんに「こんなこと簡単にできるよ」と見せることも多いので、 PHPコードに改良&コメント付けをしておく。

監視カメラを動かすまで
fswebcamが一番簡単に使えそうだったので…
(( fswebcamをインストール)) $ sudo aptitude install fswebcam
fswebcamの出力をそのまま画像形式で返すプログラム。
(( webcam.php )) <?php // 画像形式、キャッシュさせない header( "Content-Type: image/jpg" ) ; header( "Cache-Control: no-store, no-cache, must-revalidate" ); // 連続読み出し用にファイルロック $flock = fopen( "/var/www-support/.webcam.lock" , (file_exists( "/var/www-support/.webcam.lock" ) ? "rb+" : "wb+" )) ; if ( flock( $flock , LOCK_EX ) ) { system( "/usr/bin/fswebcam -q -d /dev/video1" ." -p YUYV" // 画像形式 ." -D 0" // delay ." -S 3" // skip frame ." -r 320x240" // 解像度 //." -r 640x480" ." --title \"tsaitoh.net's webcam\"" ." --jpeg 75 -" ) ; fclose( $flock ) ; } ?>
webcam.php の出力画像を、連続で読み出すように、 JavaScriptで設定を書き加える。 <meta http-equiv=”refresh” content=”5″> みたいな方法だと、reload の度に画像がちらつくので、JavaScriptで reload させることになった。
(( index.php )) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="width=320,height=320,initial-scale=1"/> <title>自宅監視カメラ</title> <script type="text/javascript"> <!-- var count = 0 ; function reload() { count = (count + 1) % 100 ; // 画像を更新(キャッシュ画像を使わないように番号付) var img = document.getElementById( "image" ) ; img.src = "webcam.php?"+String(count) ; img.id = "image" ; // 動きの少ない相手用に確認表示 var txt = document.getElementById( "text" ) ; txt.innerText = "自宅監視カメラ: "+String( count ) ; } // --> </script> </head> <body> <p align="center"> <img id="image" src="webcam.php" onload="reload()" /> <div id="text"></div> </p>
創造工学の導入実験でPerlと正規表現
4年の前期実験では、2週分を創造工学でのシステム作りの導入とするための、 基礎実験を行っている。クラスを3グループに分け、私の担当は初回にPHPによる、 Webプログラミングの説明。これにより簡単な掲示板やアンケートを作ってもらった。
2回目の今日は、1日実験でPerlと正規表現の実験を行った。 最初に、超単純英語によるBot作りをネタに、Perlの基本文法と、正規表現を体験してもらう。 理解度が速い人向けに、後半はメールデータを題材にしながら、 Jcode.pmを用いた文字コード変換、headerのmime_decodeを説明し、 このメールデータの中から、From,Toの部分を抽出するプログラムを作ってもらう。
#!/usr/bin/perl # 超基本英語によるBot while( <> ) { $line = $_ ; if ( $line =~ /like/ ) { if ( $line =~ /^(.*)\s+like(|s)\s+(.*)\.$/ ) { print "$1 は $3 が好きです。\n" ; } } }
#!/usr/bin/perl # メールデータの文字コード変換 use Jcode ; my $head = 1 ; while( <> ) { $line = $_ ; if ( $head ) { print Jcode->new( $line )->mime_decode->utf8 ; if ( $line =~ /^$/ ) { $head = 0 ; } } else { print Jcode->new( $line )->utf8 ; } }
Perlを初めて使ってもらうので、 暗黙変数$_とのマッチングや、 「式 if ( 条件 ) ;」といった Perl らしい節操のない書き方は、説明を避けた。
OB特別講演
プログラミングに興味を持ってもらうためにも、 情報系の企業の方の知識で語ってもらう特別講演にて、 OBの中西さんに来てもらい話していただきました。

話の途中で、学生さんの実態を確認したくなって、途中で色々とアンケートっぽく 挙手形式で聞いてみた。 インターネット花盛りで情報系なんだし、インターネットビジネスの入口をどこまで体験しているか ということで、Google検索使ってる?GMail使ってる?Mixi使ってる?Twitter使ってる? GREE使ってる?モバゲー使ってる? 的に聞いてみた。 ただ、結果としては、予想外にネットを使っていないことが解った。 GMail当たりは使っている人も3割程度だったけど、Google検索・Gmail以外のGoogleサービス 使ってる?と聞いても、反応は薄かった。 Twitter,Mixi,GREE,モバゲーと聞いてみたけど、かぶっている利用者ばかりで、 2割を切っていたかなぁ… ヘビーに活用しているひとは使ってるけど、それ以外の人が多すぎるってことか。
ということで、4年の創造工学でアイデア出しとかしても、ネタに窮するのは、 やっぱり電子情報工学科といいながら学生さん自身がインターネットを深く活用していないというのが 根本だと感じたなぁ…
# ヘビーにネット依存されるのも困るんだけどね…2極化?
高専プロコンの講評結果
先日、5チームの応募の中らか、全国高専プロコンの予選に、自由部門1チーム通過、 競技部門1チーム参戦の結果が来ていたが、その書類審査の講評が送付されてきた。
興味深いのは、思考過程を『旅』と捉え、マインドマップのネットワーク共有型エディタの作品の 講評がどういった結果か、興味があった。 思考過程を旅ととらえる部分が趣旨よりはずれていると見られたかどうかであるが、 講評を見ると、「面白い着眼点」とみているひとと「趣旨はずれ」とみなしている人と、 両意見であった。でも予選を通過できなかったのは、どちらかというと「具体性」だったようだ。 もう少し、プロトコルやらデータの管理方法を明言すべきであったようだ。
これに比べ、応募資料的には不安であった、砂で遊ぼうのチームは予選通過となった。 やはり「オリジナルのハードウェア」を含む作品は、「独自性」が高いと評価されやすい傾向がある。 一方で、ソフトウェア単体で動くアイデアの物は、「既存」と判断されやすい。 以前から、創造工学で取り組んでいるのだが「もっとハードに絡むもの」を増やさないとダメだな…
課題レポート採点
今日は寮の日直ということで、 その間にプログラミング応用と情報構造論の課題レポートの採点。
プログラミング応用のレポートは、がんばって書いている人もいるけど、 すでにテスト生点でそれなりの点数が取れた人は、 ちょっと手抜きの様子。 成績は、max(テスト生点,テスト*60%+レポート40%)という計算方法なので、 レポートの加点を入れても、成績が上がらない人がほとんど。 まあ、プログラムがそれなりに書ければ、こんなものかな…. レポートの説明で、変数表とか処理の説明してくれているけど、 どちらかというとイメージ図を交えたりといった説明が欲しかった。 といっても、簡単な課題だし説明を丁寧にといっても、 変数表ぐらいしか丁寧に書けないか….
LEDメッセンジャーを行き先表示板に
自宅で試作していたLEDメッセンジャーのプログラムを職場の行き先表示板にしてみました。PICNICのカタカナ表示よりは便利になりました。 PICNIC版と同じように、携帯からメッセージを書き込めるようにしたし、 表示でもスクロール機能があるので、256byteまでのメッセージであれば、 分かりやすく表示できます。
創造工学演習・ガイダンス+アイデア検討
例年通り、何らかのコンテスト参加を目標に、ソフトウェアシステム構築に挑んでもらう。 高専プログラムコンテストや、その他のコンテストなどの事例を紹介しながら、 授業後半は、アイディアを考えてもらい、最終的にアイデア検討資料ということで、 1人1枚のレポート「マインドマップ形式or自由書式」にて記述。
- 高専プログラミングコンテスト
- 課題部門:旅とコンピュータ
- 自由部門
- 競技部門:「水瓶の恵み-緑と水のネットワーク-」
- 募集要項・部門のご案内 一式(PDF)
- ふくいソフトウェアコンペティション
- ETロボコン2010
- 歯みがきロボットコンテスト
- 防災マップコンテスト
六角形フィールドの取り扱い演習
高専プロコンの競技部門は、蜂の巣状の空間の陣取り合戦みたいなルールなので、 来週の演習(実験)では、このフィールドの取り扱いに慣れてもらうネタに、 取り組んでもらう予定。 ということで、案内資料に書かれているヒントを元に、 六角形フィールドを2次元配列に格納し、そのデータを表示するサンプルプログラムを 書いてみた。
演習(実験)時間には、このプログラムをベースに簡単な5目並べや、 適当に配置したコマで、閉じた空間をつくっているか判定するプログラムに 改良してもらう予定。実際に参加する人は、閉じた空間の面積を数える所まで、 直すことができないと難しいかな…
情報処理技術者試験の2009年度からの新制度
学生さんへの勉強への意欲拡大で、資格試験の積極取得を伝えているが、 情報処理技術者試験の2009年度からの変更にともない、情報収集。 秋の試験願書受付期間も7/13-8/19の期間みたい。
新しい区分になったけど、直感的に分かりやすい資料を探してみた。 これを見ると、基本情報(FE)は、ほとんどそのままの様子。 新しい「ITパスポート試験(IP)」は、情報システムの利用者側の視点での出題で、 初級システムアドミニストレータが、入門的になったものだろうか… 試験問題の例などを見たけど、どうも経営・法律・業務などの業務系関連知識が 要求される知識ネタが多そう。 3年ならば、今までどおり基本情報にチャレンジするのが、無難だと思う。
高専プロコン予選通過、競技部門のみ
高専プロコンの予選結果が発表となった。 残念ながら、今年度は競技部門だけとなった。 審査員の講評を見ると、
- … 自由と課題の中身が似通ってきています。 これは課題部門が幅広い解釈ができるため…
- … 世の中にある話題の中から適当なものを見つけてきたような作品が多く、 若者らしい斬新なアイデアが少なかったことが残念です。
と書かれている。実際、応募資料を作る時も、 自由/課題の選択はアイディアが出てからの後付け。 アイディアについても、指導教員の知っているネタ説明を元に、 考え出したりしていれば、ご指摘のとおり…としかならない。 逆の見方をすれば、資料さえあと少し頑張れば、予選通過をしてもおかしくなかったとも言える。