ホーム » スタッフ » 斉藤徹 » 講義録 » 創造工学演習 (ページ 2)

創造工学演習」カテゴリーアーカイブ

2021年2月
 123456
78910111213
14151617181920
21222324252627
28  

最新の投稿(電子情報)

アーカイブ

カテゴリー

SQLとPHP

SQLとPHPのプログラムの練習。

SQLの基礎

簡単にSQLの文法を勉強したあと、自分で簡単なデータベースを作り検索してみる。 Windowsのエディタで、SQLの命令を入力し、 ブラウザの実験環境のSQLの入力フォームの所にコピー&ペーストで実験する。

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" />
</head>
<body>
<h1>SQLの実験</h1>
<form method="GET" action="sample.php">
<input type="text" name="A" />
<input type="submit" value="QUERY" />
</form>
<?php
   // SQLのデータベースファイル
   $DBFILE = "説明で聞いたファイルの場所を記載/名前.db" ;
   // フォームの値をもらう
   $a = $_REQUEST[ "A" ] ;
   // データベースを開く
   $db = new SQLite3( "$DBFILE" ) ;
   // 実行したいSQL
   $sql = "select * from S where 業者番号='$a' ;" ;
   // SQL実行
   if ( ($query = $db->query( $sql )) !== FALSE ) {
      // SQL実行に成功
      print "<pre>" ;
      print '$a'." = $a\n" ;
      // 1件づつ全部読み込み
      while( ($res=$query->fetchArray(SQLITE3_ASSOC)) !== FALSE ) {
         // 1行分のデータの配列の全要素の繰り返し
         //  $res[0],$res[1],...
         foreach( $res as $key => $value ) {
            print "$key=$value " ;
         }
         print "\n" ;
      }
      print "</pre>" ;
   }
?>
</body>
</html>

アイデアをまとめる方法

4EIの創造工学演習で、今日はアイデア出し。 といっても、発散しがちなアイデアを形にするのは難しい。 一般的な手法を以下にまとめる。

一般的には、アイデアを発散させ、その後一旦アイデアを評価して絞込む。 そしてそのアイデアをより良いものに変えていく。 参考 SlideShareより

KJ法

KJ法: テーマに関するアイデアをカードに書き出し、ある程度出揃ったら似たアイデアを集めてタイトルをつける。 さらに似たものを集めてタイトルをつけ、アイデアをまとめていく。

マインドマップ

マインドマップとは、 最初に掲げたテーマを中心に、発想したキーワードを周囲に書き並べる。さらに、その発想キーワードの周りにさらなる発想、問題点、利点などを キーワード的に書き並べ、ある程度発散してきたら、関連するものを結びつけていく。

マインドマップは、専用のエディタなどもあるので、そういうツールを使うのもあり。

自宅で監視カメラを動かしてみた

今度の週末は、家族旅行の予定。 だけど、子どもがその間、最近病院に連れて行った婆ちゃん猫を 心配している。

そこで、使っていなかったWebカメラで、急遽、監視カメラを動かしてみた。 奥さんからは、解像度低いじゃんとツッコミを受けるが、 もともとのWebカメラの性能だと思うし…

余りにも他愛もないコードだけど、 この手のお遊びプログラムは、 学生さんに「こんなこと簡単にできるよ」と見せることも多いので、 PHPコードに改良&コメント付けをしておく。

1307120855_320x240.jpeg

監視カメラを動かすまで

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>

4EI-創造工学演習成果発表会

様々なプログラミングコンテスト参加を目標に、数人のグループで作品づくり。

1208091126_960x720.JPG

創造工学の導入実験で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の中西さんに来てもらい話していただきました。

1010281029_320x240.jpg

話の途中で、学生さんの実態を確認したくなって、途中で色々とアンケートっぽく 挙手形式で聞いてみた。 インターネット花盛りで情報系なんだし、インターネットビジネスの入口をどこまで体験しているか ということで、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までのメッセージであれば、 分かりやすく表示できます。

1006041745_320x240.jpg

創造工学演習・ガイダンス+アイデア検討

例年通り、何らかのコンテスト参加を目標に、ソフトウェアシステム構築に挑んでもらう。 高専プログラムコンテストや、その他のコンテストなどの事例を紹介しながら、 授業後半は、アイディアを考えてもらい、最終的にアイデア検討資料ということで、 1人1枚のレポート「マインドマップ形式or自由書式」にて記述。

六角形フィールドの取り扱い演習

高専プロコンの競技部門は、蜂の巣状の空間の陣取り合戦みたいなルールなので、 来週の演習(実験)では、このフィールドの取り扱いに慣れてもらうネタに、 取り組んでもらう予定。 ということで、案内資料に書かれているヒントを元に、 六角形フィールドを2次元配列に格納し、そのデータを表示するサンプルプログラムを 書いてみた。

演習(実験)時間には、このプログラムをベースに簡単な5目並べや、 適当に配置したコマで、閉じた空間をつくっているか判定するプログラムに 改良してもらう予定。実際に参加する人は、閉じた空間の面積を数える所まで、 直すことができないと難しいかな…