ホーム » t-saitoh の投稿 (ページ 165)

作者アーカイブ: t-saitoh

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

こういう会社は避けたい…(07/22)

この記事は、twitter の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。


プログラム応用質問対応(バッファリング)

明日にテストを控え、プログラム応用の質問に学生さんが来室。 色々な説明をしたけど、丁度明日は「OS」のテストもあって、 メモリ階層構造とかが範囲らしい。

質問でバッファリングについて聞かれたので、メモリのキャッシュの話もからめて、 バッファリングってぇのは、スピードの速い所と遅い所の間で、 スピードの調整してくれるようなもの。

例えば、バケツリレーをしていて、手の速い人とドン臭い人が いたら、その間にはバケツが溜まるでしょ。 手の速い人は送り出しの時には、ドン臭い人の前にバケツを貯めて、 その間に別な仕事を並行作業すればいい…。(出力バッファリング)

手の速い人がバケツをもらう時は、ドン臭い人の前で「まだかなまだかな…」 って待つよりは、適当にバケツが溜まるまで別な仕事をして、 一定量バケツが溜まったら、まとめてバケツを送るでしょ….(入力バッファリング)

といった例え話をしながら、説明を行う。

Mac OS X LionとDrobo Dashboard 1.7でトラブル

新しいモノ好きということで、Mac OS X Lion がダウンロードできるようなので、 さっそく試してみた。LaunchPad がまるで iPhone って所は、聞いていたけど、 Magic Mouse がトラックパッドと同じ扱いをするようになり、 1本指でズリズリしたときのスクロールの方向が、 デフォルトで逆方向になってしまった。 この辺は設定で簡単に治ったけど、ハードウェアも少しトラブル。

職場のiMacには、Drobo 社の特殊なRAIDの Drobo S を接続しているけど、 Lion のインストール後も普通に使えていると思っていたら、 読み込み専用になっていた。 ファームウェアなどのトラブルを予想し、Drobo 社のSupport ページに行くと、 ファームウェアの更新はなかったけど、メンテナンスソフトの"Drobo Dashboard"が、 2.0.3に更新がかかっていた。Dashboardは1.7.Xだったので、 更新をかけてみたら、普通に読み書きが出来るようになって、一安心。

創造工学演習の途中成果

明日から前期期末試験が始まるところで、 創造工学演習の演習時間も最後の1回。 プログラム系の作品は、掲載しづらいので、 動くもの系の途中状況をアップします。 1107211008_960x640.JPG1107211008-1_960x640.JPG1107211008-2_960x640.JPG

RT @pckouza_fisc: 平成…(07/20)

  • 07/20 RT @pckouza_fisc: 平成23年8月8日から22日間でコンピュータとネットワークの?基礎研修を実施します http://ow.ly/5IB50 費用はテキスト料の実費?のみです。就職活動中の方や大学生の方は、就職する前に習得しておくと良いと思います… #fnct

この記事は、twitter の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。


リスト処理応用part2

リストを用いたStack,Queueの説明の次に、 リスト途中へのデータ挿入と削除を説明。

リスト途中への挿入削除

リストの途中にデータを挿入するのであれば、以下の処理となる。 配列であれは、途中へのデータ挿入は挿入場所を作るための、 後ろシフトで、O(N)の処理がかかるけど、リストであれば、O(1)となる。

// mallocの使い方の意味も込めて、
// cons()を使わずに書いてみる。
void insert( struct List* prev , int value ) {
// prevは、挿入すべき場所の1つ前とする。
struct List* n = (struct List*)malloc(sizeof(struct List)) ;
if ( n != NULL ) {
n->data = value ;
n->next = prev->next ;
prev->next = n ;
}
}

今日は、テスト直前ということもあり、説明後は早々に自習の時間とした。 んで、説明後の質問で「先頭にデータを入れるときは?」 このプログラムでは、1つ手前のデータのポインタがあることを前提にしているけど、 先頭の場合はこうはいかない。対応の方法としては、List**型を使うか、 「リストの先頭には必ず1個のデータを入れないダミーのList型を置く」 方法もある。こういった、リストが0件とか先頭とか末尾に伴うデータで特別処理を 書くのはプログラムを複雑にするので、先頭・末尾に置くダミー(番兵とと呼ぶ)を使えば特別処理も不要でプログラムをシンプルにできる。んで、番兵は、リスト処理ではよく見られるテクニック….という追加説明を行う。

同様に、途中データの削除も書いてみる。

void remove( struct List*prev ) {
// prevは、削除したい場所の1つ手前とする。
struct List* del = prev->next ;
prev->next = prev->next->next ;
free( del ) ;
}

リストでの集合演算

ここまでに示したように、リストを使えば要素の追加削除が簡単にできるため、 集合のように扱うことができる。

// p = { 1 , 2 , 3 } のつもり...
struct List* p = cons( 1 , cons( 2 , cons( 3 , NULL ) ) ) ;

実際に、集合積のプログラムを以下に示す。 以下のプログラムでは、p1の各要素が、p2 に含まれていれば、 ans に要素を追加していく。

// 分かりやすく書くための補助関数
int find( struct List* p , int value ) {
for( ; p != NULL ; p = p->next ) {
if ( p->data == value )
return 1 ;
}
return 0 ;
}
// 集合積を求める
struct List* prod( struct List* p1 , struct List* p2 ) {
struct List* ans = NULL ;
for( ; p1 != NULL ; p1 = p1->next ) {
if ( find( p2 , p1->data ) )
ans = cons( p1->data , ans ) ;
}
return ans ;
}

これまた、説明後にて、『 "if ( find( … ) != 0 ) {…" と書くべきでは?』 との質問。ということで、C言語の条件式は、0=false,0以外=true なので、 "if ( find(…) ) { … " で十分と解説する。

標準入力・標準出力・リダイレクト・パイプ

通常、プログラムを動かすと、scanf()の入力はキーボード、printf()の出力は画面となっている。 しかしunixなどでは、入出力の対象がキーボードか画面かファイルかプログラム入出力といった区別なくファイル(FILE)を使って読み書きができるようになっている。

標準入力は、通常の起動ではキーボードに割り当てられているが、 起動時に入力リダイレクトなどを使うと、ファイルから読み込むこともできる。 標準出力は、通常は画面に出力されるようになっているが、 起動時に出力リダイレクトなどを使うと、ファイルに書きこむこともできる。 標準入力や標準出力を使ってプログラムを書いておけば、 fopenなどを使わずに簡単でかつ、後で処理対象の入力元(あるいは出力先)を 切り替えることが簡単にできるようになる。

例題として、以下のように標準入力のデータを大文字に変換して 標準出力に出力するプログラムを作る。

// このプログラムをupper.cで
// 保存し、コンパイル結果を upper.exe とする
#include <stdio.h>
void main() {
int c ;
while( (c = getchar()) != EOF ) {
if ( c >= 'a' && c <= 'z' )
c = c-'a' + 'A' ;
putchar( c ) ;
}
}

入力リダイレクトや出力リダイレクトを用いた作業例を以下に示す。

Z:> upper.exe
This is a pen.
THIS IS A PEN.
That is a pencil.
THAT IS A PENCIL.
^Z  ←入力データがこれで終わり(unixなら^D)
Z:> upper.exe < upper.c  ←入力リダイレクト
#INCLUDE <STDIN.H>
:
Z:> upper.exe > out.txt  ←出力リダイレクト
This is a pen.
That is a pencil.
^Z  ←入力データがこれで終わり(unixなら^D)
Z:> type out.txt
THIS IS A PEN.
THAT IS A PENCIL.

入出力のリダイレクトでは、標準入出力をファイルからに変更できたが、 パイプを使えば、別のプログラムの出力を標準入力として利用したり、 プログラムの標準出力を別のプログラムの入力とすることもできる。

簡単な例として、echo コマンドは、引数をそのまま標準出力に出力する。 これを先のupper.exe と使うと、以下のようにできる。

Z:> echo "This is a pen."
This is a pen.
Z:> echo "This is a pen." | upper.exe
THIS IS A PEN.

上記の例は、以下の入力リダイレクト出力リダイレクトとほぼ同じである。 中間ファイルを使わない点でパイプの方が単純…

Z:> echo "This is a pen." > temp.out
Z:> upper.exe < temp.out

Microsoft Small Basic …(07/15)

  • 07/14 Microsoft Small Basic だってさ。http://www.forest.impress.co.jp/docs/new… Turtleオブジェクト等も準備されているので、初心者にタートルグラフィックとか… #fnct
  • 07/14 昨日、軽くトラブって思い出したので、管理しているサーバ群のアップデート中。 #fnct

この記事は、twitter の @TohruSaitohに掲載した #fnct タグ付き記事を、まとめたものです。


福井はやっぱり狭いっす

今日は、自分自身が高専学生の時のクラスメイトから、 とあるサイトが見えないという技術相談をうける。 でも、その質問は以前、別ネタでパソコン通信時代の知り合いから 質問された内容だった。

クラスメイトの下調べが丁寧だったので、 それなりに原因は分かった。 んで、その見えないサイトの運営は、 これまた電子情報OBの知り合いだった。

ということで、パソ通時代の知り合いと久々にFacebookで、 chatしながら説明してたんだけど、 「ミカカ怖い」とか言いながらchatしてたのが、Webベースに変わったとはいえ、 なんだかすごく懐かしい気分になった1日でした。

来年度は認証評価とJABEE…

来年度は認証評価の中間審査(予定)と、JABEEの審査が重なる。 んで、認証評価の準備の委員なので、ちょいと準備…
色々と書類を書くためのデータや、その分析などをしなければならない。

システム

最新の投稿(電子情報)

アーカイブ

カテゴリー