ホーム » 2004 (ページ 10)
年別アーカイブ: 2004
テスト参加者6名
今まで12名程度の授業参加者であったが、実際にテストになったら、 受験者6名。なんか拍子抜け。 学生さんに聞くと、昨年落した単位のテスト時間が重なっているため らしい。1人については申告があったため、時間をずらしてテストを実施。
最後の課題やテストも含めて、学生さんには面倒臭い講義だったのか? アンケート結果にどうでるか…だな…といっても今から採点。
台風18号
台風一過の今朝、学校に行くと、 学生駐車場近くのグラウンド横の木が、3本ほどなぎ倒されている。 環境都市の近くでは、百葉箱がころがっている。 思ったより被害は出ているもんだ….
パイプ・リダイレクトの話しと、ファイルの課題
今日は、実験が日程を消化しているので、前半をプログラム応用の授業、 後半をレポート遅れの対処時間とする。
高久先生のOSの授業で、パイプ・リダイレクトの話しが済んでいる様なので、 今年は資料配布と簡単な説明。CGI でもパイプの概念が使われている事例を紹介。
ファイル関連の演習として、以下のテーマを示す。
- ファイルから『名前と点数データ3個で1人分データ』を読み込み、 点数データの合計を求め、ファイルに結果を保存。
- ファイルからfgets,fputs等を使い、1行データを読み込み、 英文字は小文字に直して出力。
- ただし、ファイルのopen,closeは、fopenでもリダイレクトでも可とする。
演習で手が止まっている学生の話しを聞いていると、 ファイルという概念抜きで、 『名前と点数データの入力』でさえ理解できていない学生が多い。 『昨年度の授業で何やってたんや!』 と叫びたくなる。
プログラムコンテスト応募資料の提出
プログラムコンテストの本選に向け、パンフレット資料の締め切りが近付く。 例年はどの提出資料も『締め切り速達!』を連発しているが、 今回だけは、余裕をもって提出ができたかな….
学生さんに『提出資料をメールで…』と伝えておいた時に限って、 自宅サーバのルータ死亡。 運良く朝一番に学生さんがつかまって助かったぜ。
高水準入出力関数
C言語の入出力関数の説明として、1文字系、1行系の説明を行う。
- getchar(),putchar(),fgetc(),fputchar()
- gets(),puts(),fgets(),fputs()
- stdin,stdout,stderr
- 入出力バッファと高水準入出力関数
- バッファオーバーフロー
fopen,fcloseの説明が夏休み前なので、復習の意味で説明。
/* fscanf,fprint説明 */ FILE* fp ; fp = fopen( "abc.txt" , "rt" ) ; if ( fp != NULL ) { int x ; while( fscanf( "%d" , &x ) == 1 ) printf( "%d" , x ) ; fclose( fp ) ; }
1文字入出力の説明。char型 'a' であることの明記と、 EOF(End Of File)の説明。EOFの入力方法の説明がまだ。
このプログラムの説明で、"This"と入力しても、"TThHiIsS"と 表示されない点を述べ、入出力のバッファリングが機能している点を明言。
/* getchar,putchar説明 */ int c ; while( (c = getchar()) != EOF ) { if ( 'a' <= c && c <= 'z' ) putchar( c - 'a' + 'A' ) ; else putchar( c ) ; }
入力用と出力用の2系統のファイルポインタを使う例で、fgetsの説明。
/* fgets説明 */ FILE* fp_in ; FILE* fp_out ; fp_in = fopen( "in.txt" , "rt" ) ; if ( fp_in != NULL ) { if ( (fp_out = fopen( "out.txt" , "wt" )) != NULL ) { char buff[ 100 ] ; while( fgets( buff , 100 , fp_in ) != NULL ) fputs( buff , fp_out ) ; fclose( fp_out ) ; } fclose( fp_in ) ; }
安全な入力
行入力の説明で、getsは使うな!と明言したので、 その理由として、バッファオーバーランを説明し、その安全対策を説明する。
/* 危険なコード */ char s[100] ; scanf( "%s" , s ) ; /* 安全な入力 */ char s[ 100 ] ; int x ; char buff[ 100 ] ; while( fgets( buff , 100 , stdin ) != NULL ) { if ( sscanf( buff , "%s %d" , s , &x ) == 2 ) { : } }
標準入出力
前のコード中の、stdin の説明として、 標準入力(stdin)、標準出力(stdout)、標準エラー出力(stderr) を説明する。
リストによる集合演算
夏休み開け最初でかつ、テスト前最後の授業なので、 集合演算に関係するネタで復習を行いながら説明。
最初に、リスト構造の説明をするが、単純な復習では面白くないので、 他の教科書で多い typedef によるリスト宣言の説明を行う。
リストで集合演算
可変データ長であり、挿入削除が容易なので、リスト構造が集合情報 を扱うのに向いているといった説明の後、積集合のプログラムを示す。 テストなら和集合、差集合といったネタも豊富とだけ言っておく。
/* find,consは復習の時点で示しておいた */ struct List*cap( struct List*p , struct list*q ) { struct List* ans = NULL ; for( ; p != NULL ; p = p->next ) { if ( find( q , p->data ) ) ans = cons( p->data , ans ) ; } return ans ; }
構造体と配列で集合演算
リストを扱っていても、まだまだ構造体の理解も怪しい。 データ件数と配列による構造体で、集合を扱う事例を説明。 配列演算とリスト演算の対比を狙う。
struct Set { int size ; int array[ 10 ] ; } ; struct Set p = { 4 , { 1 , 2 , 3 , 4 } } ; struct Set q = { 5 , { 2 , 4 , 6 , 8 , 10 } } ; struct Set a ; cap( &a , &p , &q ) ; for( i = 0 ; i < a.size ; i++ ) printf( "%d\n" , a.array[ i ] ) ; /* この処理に見合うcap() を作れ! */ ------------------------------------ void cap( struct Set* ans , struct Set* p , struct Set* q ) { int i , j ; ans->size = 0 ; for( i = 0 ; i < p->size ; i++ ) { for( j = 0 ; j < q->size ; j++ ) { if ( p->array[ i ] == q->array[ j ] ) break ; if ( j < q->size ) { ans->array[ ans->size ] = p->array[ i ] ; ans->size++ ; } } }
ビット演算を使った集合処理
テストの範囲外というネタで、ビット演算が集合処理に使えることを説明。 要素に含まれれば対応ビットが1という説明をする。
/* A9876543210 */ int p = 0x1E ; /* 00000011110, p={1,2,3,4} */ int q = 0x554 ;/* 10101010100, q={2,4,6,8,10} */ for( i = 0 ; i < 11 ; i++ ) { if ( (p & q) & (1≪i) ) printf( "%d\n" , i ) ; /* 2,4が表示される */ }
第1回卒業研究中間発表
卒業研究の中間発表会を、高久研、青山研、斉藤研の3グループで実施。 最初の発表だし、肝心な話しが抜けている人も多かったかも。
斉藤研の2グループは、昨日の卒研指導で以下の点を伝えておいたので、 最初の発表としては、満足のいく結果であった。
でも細かに見ると、まだまだ注意すべき点はあるんだけどね。
- 論文・レポートは、新聞の文章構成と同じで 先頭部を読めば全容が判るような構成 にすること
- 論文では、
- 目的・まえがき で目的や全体像を述べること。
- 概要 で、自分が卒研で利用する、すでに確立されている技術などの説明をすること。
- その後に、それを使って自分達オリジナルでやったことを説明すること。
- 全体像を理解させるために、システム構成図等を入れること。 構成図では、各機能ブロック毎に「何が入力で何が出力か」を明記すること。
- 説明が、後方参照にならない様にすること。 このために必要に応じて「まえがき」で簡単に説明したあとで、 もう一度詳しく述べるという手法をとること。
でも、自分達のとる手法が、どういった利点・欠点があるから…という 比較対象まで述べた発表には、なっていないなぁ…
画像処理グループへの意見
- 卒研テーマが漠然として広範囲のテーマになっているのでは?
- 全画素を計算対象とせずに間引きデータを使うべきでは?
- 処理の複雑さに応じた処理の簡略化は?
機械制御部グループへの意見
- レーザポインタをカラスに当てるのは動物虐待?
- サーボモータが、小型のものでニュートラル位置などの精度が無い! 精度の良い製品に変更すべき。
- PWMの説明での用語が適切でない。
レポート課題の説明
他のOOP言語の事例
シラバスの達成状況を見ると、 他の「オブジェクト指向言語の事例」の講義が不十分であると思われる。 講義前半にて、Java,Smalltalk-80,CLOS(Flavor),等の事例を紹介。
- Simula,Smalltalk*,(元祖系) FN *はガベージコレクタを実装している言語 /FN
- Object Pascal,(Delphi),Modula-3,Eiffel*,(Pascal系)
- C++,Objective-C,C#*,Java*,(C++系)
- CLOS*,Flavor*,(Lisp系)
- Python*,Ruby*,PHP*,(Perl*?),(Script系)
レポート課題の説明
昨年度は自分の特別研究をUML表現のテーマとしたが、特研テーマによっては書き辛かった様子。 今年は、参考図書・WWWから UML 表現の事例を調査し、その事例に自分で想定した 追加仕様を与え、その結果の UML をレポートとすることにした。
卒研指導
中間発表の指導を行う。論文形式や記載するうえでの注意点を説明。
画像処理の事例の説明
動体検出のための色の変化の検出までは、夏休み中に完成しているけど、 次のステップでは、色の変化部周辺の「固体識別」の必要がある。 そこで、個人的に実験的に作っている顔画像抽出のプログラムを例にとり、 各画素の色相・彩度と、基準色の色相・彩度の誤差量で、 『同じ色の塊』の判別ができることを説明する。
グループウェア phpGroupWare + PostgreSQL
同じくセンター関連の仕事でグループウェアの必要性から、 XOOPS と同様の phpGroupWare を試す。 XOOPS がオブジェクト指向で拡張性が高く作られているが、 拡張するほどメンテナンスする労力も使いたくない場合もあるので、 標準で機能が豊富な phpGroupWare を使う。
phpGroupWare は、以前から考慮していたけど、 日本語化の問題で止めていた。XOOPS を試している中、 Google で phpGroupWare + debian + 日本語 で引くと、 *.deb を配付している人を発見。
手順通り の作業でひとまず使えるようになる。最初に入れていた phpgroupware/stable の設定の影響で一手間かかったけど、なんとか。 WWWメール(IMAP) や Calendar の完成度が高い。
同様に自宅でも phpgwjp のインストールを行うが、 WWW メールの設定がうまくいかない。 ガッコと自宅は php4,apache,postgres等は、同じはずなのだが….
≪apt-lineの追加≫ deb http://www.popcom.jp/debian stable unofficial ≪パッケージのインストール≫ # apt-get update # apt-get install php4-imap php4-pgsql phpgwjp # apt-get install phpgwjp-addressbook phpgwjp-bookmarks phpgwjp-calendar phpgwjp-chat phpgwjp-chora phpgwjp-comic phpgwjp-developer-tools phpgwjp-dj phpgwjp-eldaptir phpgwjp-email phpgwjp-etemplate phpgwjp-felamimail phpgwjp-filemanager phpgwjp-folders phpgwjp-forum phpgwjp-ftp phpgwjp-fudforum phpgwjp-headlines phpgwjp-hr phpgwjp-img phpgwjp-infolog phpgwjp-manual phpgwjp-messenger phpgwjp-news-admin phpgwjp-nntp phpgwjp-notes phpgwjp-phonelog phpgwjp-phpbrain phpgwjp-phpsysinfo phpgwjp-polls phpgwjp-projects phpgwjp-qmailldap phpgwjp-registration phpgwjp-sitemgr phpgwjp-skel phpgwjp-soap phpgwjp-stocks phpgwjp-todo phpgwjp-tts phpgwjp-wiki phpgwjp-xmlrpc ≪phpgwjpを再インストール時にデータベースが悪影響する場合≫ # su postgres $ psql template1 template1# drop database phpgroupware;