履歴書は絶対手書き?
履歴書の書き方がネタになっている。 一応指導的には、履歴書は手書きとしているが、この記事をみると、 IT系では表計算ソフトで記載してもOKな場合が多い様子。
しかしながら、ワープロ表計算書きでも、プラス評価する企業の比率と、 マイナス評価する企業を比べると、マイナス評価の方が多いんだから、 無難なのは「手書き」ということ。
1日ハードウェア講習をするには?
高専OBの橋本氏と新出氏が、遊びに来た。 福井の電子情報系の技術者の人を対象にした、 ハード寄りの技術講習会を企画したいらしい。 んで、組み込み系で使いやすそうなボードの意見交換が始まった。 私自身、どれがいいのやら…ではあるが、 今後の参考になるので、列記。
- 私のお勧めは、インタフェースおまけのColdFire M52233 のCPUボード。 SilentC搭載で、気軽にプログラムもできそう。 しかし、実際の評価ボードが探しても見つからない…
- 半田付けなんかをしながら、動くものを作るのなら、 AVR-USBマイコンボード AT90USB162
- Gainer
- Arduino(wikipedia)
- AVR-MOD-AT162
追記:
- LUFA (Formerly MyUSB) (2009)推奨:橋本氏
- OAKS16-MINI FullKit推奨:久住氏
NXTでLEDを制御
NXTの外部に自作のモータやセンサーを接続するための実験。
配線
参考記事を元に、 NXTのアナログポートに、抵抗とLEDを接続。
ANA(1)--1KΩ--LED--AGND(2)
NicoSensor基板では、アナログポートを使わないのでラッピングワイヤで、 ANA(1),AGND(2)をユニバーサル基板領域まで延長し、 ジャンプワイヤで配線できるようにICソケット丸ピンを挿しておく。
拡張ブロックの追加
元記事では、『NXTのサイトから、RCXのブロックを使用できるようにする追加ブロックを入れて…』 と書いてあるので、LEGO(R) MindStorms NXT Software Updatesより、 Legacy Block Library(English) [PC用] をダウンロード&解凍。 すると"Legacy_Blocks_EN-US"というフォルダが作られる。
"LEGO MINDSTORMS Education NXT"を起動し、 "ツール"-"ブロックのインポートとエクスポートのウィザード…"を選び、 "インポート"タグの、"次から読み込み:" の"閲覧"ボタンを押し、 先ほどの"Legacy_Blocks_EN-US"フォルダを指定し、"OK"を押す。 すると、"インポートするブロックを選択してください"と表示されるので、 RCXのブロックで使う"Motor*"と"Lamp*"を選ぶ。 (Ctrlキーを押しながら2つを選ぶ) "パレットにブロックを追加"の欄には、"拡張機能"を選び、 "インポート"ボタンを押すと、ランプ*とモータ*が追加される。
このように機能を追加した後であれば、パーツを指定するタブの"拡張機能"を選ぶと、 "Lamp*"が使えるようになる。
LEDを点滅させてみる
実験として、LEDを1秒周期で点滅させてみる。
無限の繰り返し { // プログラムっぽく表現 Lamp*( Port=A, Action=On, Intensity=50% ) ; 待機( コントロール時間, 1秒まで ) ; Lamp*( Port=A, Action=Off ) ; 待機( コントロール時間, 1秒まで ) ; }
ファイルとC言語
C言語のファイル操作において、絶対PATH,相対PATHの理解は重要であり、 Windowsのコマンドプロンプトを開いて、"C:\WINDOWS\system32\IME\CINTLGNT"あたりを 例題に、相対PATHの親ディレクトリ表記を解説。
c: dir dir \WINDOWS dir \WINDOWS\system32 dir \WINDOWS\system32\IME dir \WINDOWS\system32\IME\CINTLGNT cd \WINDOWS\system32\IME dir dir CINTLGNT # これを絶対PATHでは? dir .. dir ..\.. # これを絶対PATHでは? dir ..\..\system # これを絶対PATHでは?
後半は教室に戻り、FILE型とfopen()の説明を行う。
FILE* fp ; fp = fopen( "ファイル名" , "モード" ) ; fclose( fp ) ; # ファイルを開く際のカレントディレクトリは、通常プログラムファイルのディレクトリ # モードには、"r"読み込み , "w"書き込み , "a"追記がある。
Windows と unix では、行末文字の考え方が違う。 unix では "\n" で次の行の左端に移動するが、 Windows では、"\r"(復改) , "\n"(改行) を送らないと、次行左端に移動しない。 このため、WindowsのC言語と、UnixのC言語の互換性を考え、 「テキストモード」では、"\n"と"\r\n" の置き換えをしてくれる。 「バイナリモード」では、置き換えをしない。
2009年7月5日 (第119回)
- 英語の囃子 第14回 吉田三先生、電子情報4年丸山さん
eng090705.mp3
リスト処理の応用
リスト構造への簡単な処理の説明が終わっているので、本日は応用ネタ。
末尾追加
先週説明したリストの生成は、先頭挿入型であったため、データは挿入順序とは逆順にならぶ。 後の説明のキューにも関連するので、末尾追加型の処理も説明する。
struct List { int data ; struct Lint* next ; } ; struct List* top = NULL ; struct List** tail = &top ; int x ; while( scanf( "%d" , &x ) == 1 ) { *tail = cons( x , NULL ) ; tail = &( (*tail)->next ) ; }
スタックとリスト
スタックは、局所変数のデータや関数の帰りアドレスなどの保管で使われるデータ領域で 使われているが、LIFO(Last In First Out)「最後に入れたデータを最初に取り出せる」 データ構造。配列を使って記述すれば、
int stack[ 100 ] ; int sp = 0 ; // 機械語の説明であれば、領域末尾から使うんだけど... void push( int x ) { stack[ sp++ ] = x ; } int pop() { int ans = stack[ --sp ] ; return ans ; } void main() { push( 1 ) , push( 2 ) ; push( 3 ) ; printf( "%d" , pop() ) ; printf( "%d" , pop() ) ; printf( "%d" , pop() ) ; }
しかし配列を使うと、そのサイズ以上のデータを覚えることはできない。そこで、リスト構造のお出まし。
struct List* stack = NULL ; int push( int x ) { stack = cons( x , stack ) ; } int pop() { int ans = stack->data ; // データ0件のときの処理は別途書いてね。 struct List* del = stack ; stack = stack->next ; free( del ) ; return ans ; }
リストと待ち行列
リストとは反対に、FIFO(First In First Out)「最初に入れたデータを最初に取り出せる」タイプの データ構造ま待ち行列(Queue)と呼ばれる。配列を使って記述すれば、
int queue[ 100 ] ; int wp = 0 ; // 書き込み用のポインタ int rp = 0 ; // 読み出し用のポインタ void put( int x ) { queue[ wp ] = x ; // wpが一周してrpに追いついたときの処理は別途書くこと。 if ( ++wp > 100 ) wp = 0 ; } int get() { int ans = queue[ rp ] ; // 同じくデータが0件(wpに追いついた)の処理も別途書くこと。 if ( ++ rp > 100 ) rp = 0 ; return ans ; } void main() { put( 1 ) ; put( 2 ) ; put( 3 ) ; printf( "%d" , get() ) ; printf( "%d" , get() ) ; printf( "%d" , get() ) ; }
このような配列を使った待ち行列では、配列サイズを超えた場合に、すでにデータを読み出して 使われていない部分を再利用するために、ポインタを先頭に戻す。 このデータ構造は、先頭と末尾が巡回してつながっているようなイメージなので、 「リングバッファ」と呼ばれる。
しかしながら、このリングバッファも配列での実装だから、配列サイズの上限は超えられない。 これまたリスト構造が便利なはず。
struct List* queue = NULL ; struct List** tail = &queue ; void put( x ) { (*tail) = cons( x , NULL ) ; tail = &( (*tail)->next ) ; } int get() { int ans = queue->data ; struct List* del = queue ; queue = queue->next ; free( del ) ; return ans ; }
UML-クラス図
オブジェクト指向の話も、仮想関数などの話や演習も一段落で、次のUMLの説明に入る。
UMLは、システムの構造や処理などを図にして表現するための方法で、 共通の書き方として定められている。
UML
UMLは、オブジェクト指向において、それを図示するために OML などの表現方法として 始まって、現在は UML へと発達してきた。詳しくはwikipedia参照。
UMLの表現は、大きく分けて、データ構造などを示す構造図と、処理順序に関連する振る舞い図 からなる。
構造図は、クラスの構造を表わすクラス図、ファイルやライブラリ・モジュールなどを表現するコンポーネント図、ハードウェアやアプリケーションの関係を図にした配置図、 クラスに具体的なオブジェクトを書き込んでしめしたオブジェクト図などからなる。
振る舞い図は、相互作用図(アクティビティ図)、システムに要求される機能をユーザ視点で示したユースケース図、内部の状態の変化を表現した状態遷移図などからなる。
後半は、GUI&仮想関数の課題のレポート作成の時間とした…
ほめて育てる?仲が悪ければ褒めても逆効果!
高専に最初に赴任したときは、卒研の指導でも厳しい質問をとばしていた時期もあるけど、 「褒めて育てる」のも大切だよ…と言われ、時と場所を選ぶようにはなった。 さて、こういう反省のもと、JR福知山線の事故をうけて、JRの改善の取り組みとして、 様々な分析が行われた結果が注目されているらしい。
その1つが、上司と部下の関係がいい場合には、上司が褒めると部下も作業改善に積極的。 しかし、関係が悪い場合には、上司が褒めても部下は作業改善に消極的になるという 報告があったらしい。
# 日頃から良い関係を作っておけ…ということだな…
情報処理技術者試験の2009年度からの新制度
学生さんへの勉強への意欲拡大で、資格試験の積極取得を伝えているが、 情報処理技術者試験の2009年度からの変更にともない、情報収集。 秋の試験願書受付期間も7/13-8/19の期間みたい。
新しい区分になったけど、直感的に分かりやすい資料を探してみた。 これを見ると、基本情報(FE)は、ほとんどそのままの様子。 新しい「ITパスポート試験(IP)」は、情報システムの利用者側の視点での出題で、 初級システムアドミニストレータが、入門的になったものだろうか… 試験問題の例などを見たけど、どうも経営・法律・業務などの業務系関連知識が 要求される知識ネタが多そう。 3年ならば、今までどおり基本情報にチャレンジするのが、無難だと思う。
管理サーバのアップデート(2009/7/1)
今回は、Apache2 や bind9 も対象に含まれていたので、 ちょっとアップデート対象のパッケージも多めだった。 ついでに、緊急連絡システムのサーバでは、使わない サーバ系パッケージが残っていたので、TeXパッケージと共に 削除する。 デスクトップ環境のパッケージも消せばいいんだけど、 将来的な管理移譲に備え、残しておく。