新人をバイナリアンに育てる ~ その6 ~

新人で C の初心者高橋君。4週間本を読んで配列を理解しました。バイナリアンになるためについに fopen/fclose を勉強します。
いままで、あまり具体的に指示を出していなかったためプログラムを書くのに四苦八苦していました。ここは、いままでの私の講師の経験を活かし(なぜいままでやらなかったのか、、、、それはここまで、C 言語初心者ははじめてだったから。入社した人は大抵 C 言語かけた)具体的な指示を出すようにします。
さすがに噛み砕いた指示だったらしく、順調にこなしはじめます。やっと ToDo で進捗が出始めました。本人もうれしいことでしょう。

新人:高橋君 日報 7/4(Mon) 17:59

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中182-193まで読み進める
 ー"やさしいC++"を98-109まで読み進める

プログラム関連
 ー実行時に第1引数で与えたファイルをfopen,fcloseするプログラムの作成
 ー実行時に第1,2引数で与えたファイルをfopen,fcloseしてそのときのコメントをつけるプログラムの作成
 ー第1引数で与えたグレイスケールのrawイメージデータを
  第2引数で与えた名前のRGBのrawイメージデータに変換するプログラムの作成
 ー第1引数で与えられたRGBのrawイメージデータを
  第2引数で与えた名前のグレイスケールのrawイメージデータに変換するプログラムの作成

今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"やさしいC++"を読み進める

 ー実行時に第1引数で与えられた72x34のグレースケールのデータに四角を書き加え、
  第2引数で与えられた72x34のグレースケールのデータに”出力”するプログラム作成
 ーシェルプログラムを使い今まで作成したコマンドを組み合わせて実行して、
  与えられた第1引数をgimpでよめるRGBのrawデータでこれに四角を書き加え、
  第2引数をgimpでよめるRGBのrawデータに”書き加え出力”するプログラムの作成

 ー今まで作成したプログラムの改良、具体的には入力に応じて三角形、四角形、円を複数個描画、その後にrawデータで保存するプログラムの作成を行いたい

社長コメント 7/4(Mon) 21:35

少しアイデアが出てきたようです。
実現可能でもなくてよいので、あとアイデアを5個、できれば 10個、もっとできれば
20個考えて書き出してください。
”実現可能でなくてもよい”がポイントです。

コメント

報告時間も 17時50分台になり、落ち着いてきた模様。報告も詳細化され、本人も達成感があることでしょう。「その後にrawデータで保存するプログラムの作成を行いたい」と報告も want が入ってきてモチベーションも上がったようです。
最初からそうすればよかった、、、、
なのに、私は、それ以上を要求しているぞ。だめじゃん。ほめてるけど、ほめてない。道を険しくしすぎ。

新人:高橋君 日報 7/5(Tue) 18:09

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中194-202まで読み進める
 ー"やさしいC++"を110-120まで読み進める

プログラム関連
 ー実行時に第1引数で与えられた72×34のグレイスケールのrawイメージデータに四角形
を書き加え
  第2引数で与えられたファイル名で書き出すプログラムの作成
 
今後行ってみたいプログラムの立案

今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"やさしいC++"を読み進める
 ー"新C言語入門"を読む

 ーシェルプログラムを使い今まで作成したコマンドを組み合わせて実行して、
  与えられた第1引数をgimpでよめるRGBのrawデータでこれに四角を書き加え、
  第2引数をgimpでよめるRGBのrawデータに”書き加え出力”するプログラムの作成


 ー今まで作成したプログラムの改良、具体的には入力に応じて三角形、四角形、円を複数個描画、その後にrawデータで保存するプログラムの作成を行いたい
 ー図を回転させるプログラムの作成
 ー関数電卓の作成
 ーチェス、オセロ、五目並べなど簡単な人工知能プログラム作成
 ー文章から任意の文字列のを数えるプログラムの作成
 ー四角形の適当な情報、座標などを与えられたらその形状、面積を出すプログラムの作成
  ーー難易度から考えてプログラムの改良の後に文字列についてのプログラム作成を行いたいと思う

コメント

道を険しくする社長に必死についてきています。「今後行ってみたいプログラムの立案」してます。えらしなぁ~~。まさかこのあと、私は、それは無理だろ~~とかモチベーション下げること言ってないだろうな。

社長コメント 7/5(Tue) 21:55

ふむふむ。
悪くないんじゃない。
やりたい順(難易度を無視して)は?

コメント

「ふむふむ」とか普段使わない言葉でオブラートに包んでいるね。あと、時間もづらしてメールして、怒らないように(怒っているように見えるらしいよ。早口だから)直接のコミュニケーションは現場に任せている。いろいろ気を使った跡は見える。

新人:高橋君 日報 7/6(Wed) 18:14

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中203-210まで読み進める
 ー"やさしいC++"を121-126まで読み進める
 ー"新C言語入門"を2-22まで読み進める

プログラム関連
 ー今まで作ったプログラムをシェルプログラムを使って
  第1引数で与えられた72×34のRGBのrawデータに四角形を書き加えて
  第2引数で与えられた名前のファイルに書き出すプログラムの作成
 ー四角形を描く関数に不備があったため訂正
 ー操作説明させる関数も同様に不備があったため訂正
 
今後行ってみたいプログラムについての計画

今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"新C言語入門"を読む

 行ってみたいプログラムについての細かい仕様の決定


 ー今まで作成したプログラムの改良、具体的には入力に応じて三角形、四角形、円を複数個描画、
  その後にrawデータで保存するプログラムの作成を行いたい
  ー三角形を描画させる関数を作成するための前準備として線分を描画するプログラムの作成
  ーまた円を描画する方法について調べるべき

 ー図を回転させるプログラムの作成
  ーおそらく行列を用いるため確認
  ー変換後の座標の判定方法についても考える必要がある

 ー関数電卓の作成
  ー簡単な電卓のプログラムの作成は行っているため肉付けをしていく方向で
   ーあまりくどくならないようにすべき

 ーチェス、オセロ、五目並べなど簡単な人工知能プログラム作成
 ー文章から任意の文字列を数えるプログラムの作成
 ー四角形の適当な情報、座標などを与えられたらその形状、面積を出すプログラムの作成

コメント

なんかしらないが、成長の跡が見れる。プログラム作成時に細かくブレイクダウンしないといけないというのが伝わったんだね。

新人:高橋君 日報 7/7(Thu) 18:06

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中211-226まで読み進める
 ー"新C言語入門"を24-50まで読み進める

プログラム関連
 ー四角形を描画するプログラムについて説明を追加
 ー線分を描画するプログラムの雛形を作成
  ー縦線、横線、簡単な斜線については描画に成功した
 
今後行ってみたいプログラムについての計画

今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"新C言語入門"を読む


 ー入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログ
ラムの作成
  ー三角形を描画させる関数を作成するための前準備として線分を描画するプログラムの作成
   ー簡単な斜線については成功したので今後はあらゆる点に対応できるようなプログラムの作成に入る
  ーまた円を描画する方法について調べるべき
   ー図を回転させるプログラムを応用できないか確認したい

 ー図を回転させるプログラムの作成
  ー行列計算を用いるため要確認
  ー変換後の座標の判定方法についても考える必要がある

コメント

配列を VRAM に見立てて、縦線、横線、簡単な斜め線(たぶん45度) の線を書いてもらった。なんか進んでいる気がする。まだこの時点でポインタは出てきてないね。先は長い。

新人:高橋君 日報 7/8(Fri) 18:13

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中227-236まで読み進める
 ー"新C言語入門"を198ページ中51-74まで読み進める

プログラム関連
 ー線分を描画するプログラムの作成
  ー拡張させてみたが予想以上にソースが煩雑なため訂正予定

今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"新C言語入門"を読む


 ー入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログ
ラムの作成
  ー三角形を描画させる関数を作成するための前準備として線分を描画するプログラムの作成
   ーあらゆる点の線分を描画するプログラムの作成
  ーまた円を描画する方法について調べるべき
   ー図を回転させるプログラムを応用できないか確認したい

 ー図を回転させるプログラムの作成
  ー行列計算を用いるため要確認
  ー変換後の座標の判定方法についても考える必要がある

コメント

配列を VRAM に見立てての任意の線分描画に挑戦。達成できたのかどうか不明。「拡張させてみたが予想以上にソースが煩雑」。まぁそうなるよね。初めての C みたいな感じだから。よく5週目でここまできたよ。

6週目の目標として三角形、四角形、円を描きたいみたいだ。できるといいね。(できたんだっけ?おぼえてない)

新人をバイナリアンに育てる ~ その5 ~

ここまで新人:高橋君たんたんと本を読んでます。もちろん手も動かしてますが。FORTRAN は経験ありでも C は初めてです。配列で四苦八苦しています。バイナリアンの道はまだはじまったばかりです。

しかし、社長の私は期待しすぎて、ついに4週目の木曜日に決断します。この試練を乗り越えられるのか?

社長の指示 6/30(Thu) 22:01

関数を改良するために
寄り道をします。

int main(int argc, char *argv[])

1) 引数の数を返すプログラムを書く。
例えば
a.out a b c
とすれば、
引数の数は 3ですと表示する。(漢字は使わないほうがよいので次のようになる)
Argument Count:3
と表示する。

[めやす] argc, argv を理解する。特に argc

2) 引数を表示するプログラムを書く。
例えば
a.out a b c
とすれば、

1:a
2:b
3:c

と表示する。
a.out aaa bb cccc
なら
1:aaa
2:bb
3:cccc


[めやす] argc, argv を理解する。特に argv

3) 文字と文字列の理解
再度、"C実践プログラミング"の文字列の部分を読んで、実際に試して理解を深め
る。
特に、今までの
unsigned char data[72][34] あるいは char data[1000];
との違いを”考える”

4) 数字と文字と理解
実行時の第1引数を分解し、文字(文字列ではない)として、さらに数字として表示
する。
例えば
a.out abcdef
とあれば
0:a:<数字>
1:b:<数字>
2:c:<数字>
3:d:<数字>
4:e:<数字>
5:f:<数字><数字> には実際の数字が入る。大文字のA なら 16進数で 0x41 になるはず。

5) 数字の表現と文字の理解
例えば
char c;
とあったときに
c = 48;
c = 0x30;
c = '0';
c = 060;
の違いを理解して、それぞれ表示するプログラムを作る。

6) 実行時の第1引数を与えられたらそれを fopen して fclose するプログラム。
a.out in.bin
としたら、in.bin を fopen して、fclose するプログラム
fopen と fclose 以外は何もしないことに注意。つまりほとんど何もしないプログラ
ム。


6-1) さらに動作の様子を表示するプログラム

fopen 字には fope:in.bin
fclose 時には fclose:in.bin と表示する。

動作の表示をするだけで、それ以外、何も変わらないことに注意。
難しく考えすぎないこと

7) 実行時に第1,2引数を与えられたらそれを fopen して fclose するプログラム
a.out in.bin out.bin

fopen:in.bin
fclose:in.bin
fopen:out.bin
fclose:out.bin


と表示しながら fopen/fclose するプログラム。
fopen と fclose 以外は何もしないことに注意。つまりほとんど何もしないプログラ
ム。

8) 実行時に第1,2引数を与えられたら
第1引数を 72x34 のグレースケールのデータ(いままでの out.bin)
第2引数を gimp でよめる RGB の raw データに”変換”するプログラム。

cp コマンドに似ている動きをする
例えば
a.out in.bin out-rgb.bin
としたら out-rgb.bin を作るプログラム。できたデータ out-rgb.bin は
in.bin を元にした RGB の raw データとなる。

9) 8) の逆をするプログラム。
第1引数を gimp でよめる RGB の raw データ
第2引数を 72x34 のグレースケールのデータ(いままでの out.bin)
に”変換”するプログラム。

10) 実行時に第1,2引数を与えられたら
第1引数を 72x34 のグレースケールのデータ(いままでの out.bin)
これに四角を書きくわえ(rect 関数で書き加える)
第2引数を 72x34 のグレースケールのデータ(いままでの out.bin)
に”出力”するプログラム。

11) シェルプログラムを使い上記コマンドを組み合わせて実行して
与えられた第1引数を gimp でよめる RGB の raw データ

これに四角を書きくわえ

第2引数を gimp でよめる RGB の raw データに”書き加え出力”するプログラ
ム。

シェルプログラムを使うところに注意。
すべてのプログラム名がa.out だと大変混乱する。工夫が必要。

12) ところどころで、改善点をあげる。

コメント

ついに社長の私、決断。バイナリアンへの道を具体的に指示。C 初心者の高橋君に argc, argv のプログラムを指示します。ポインタの理解もままならないのにこれを乗り越えられるのでしょうか?

新人:高橋君 日報 7/1(Fri) 18:43

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中172-181まで読み進める
 ー"やさしいC++"を81-97まで読み進める

 ー引数の数を返すプログラムの作成
 ー引数を表示するプログラムの作成
 ー第一引数を分解し、文字として、数字として表示するプログラムの作成

今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"やさしいC++"を読み進める
 ー"新C言語入門"を読む
 
 ー実行時に第1引数を与えたらそれをfopen,fcloseするプログラムの作成
 ー実行時に第1引数、第2引数を与えることでグレイスケールデータを操作するプログラムの作成

コメント

どうしたか覚えてないけど、argc, argv を教えたのかもしれない。し、独学せよ!!と突き放したのかもしれない。とにかく、引数の数を返すプログラムは出来た。
この時点で彼は、文字列と文字とアスキーコードと数字が混乱したままプログラムを書いている。
逆にいうと、数学はこの手の文字のコード化の理解に役に立たなかった。
そして、ポインタの理解をするために「新C言語入門」を来週から読むように指示する。
来週は fopen/fclose の理解。

がんばれ、新人:高橋君。

新人をバイナリアンに育てる ~ その4 ~

新人:高橋君、あまりに難しいことを頼んだため飽和中。数学はできるけど、C 言語は配列で四苦八苦している。FORTRAN できるって言ってたじゃん。FORTRAN の配列と C の配列は違うの?と思っても後の祭り。社長の私が導入をミスったのだ。

がんばれ、新人。

新人:高橋君 日報 6/27(Mon) 18:12

作業報告します

今日行ったこと
 ー"linuxコマンドの使い方"を322ページ中133-141まで読み進める
 ー"C実践プログラミング"を136ページ中114-121まで読み進める
 
グラフィック関係
 ーrawイメージデータを読み込んで各グレイスケール値を数え表示するプログラムについて
  仕様を満たしていなかったため訂正、ただしまだ解決していない

今後のtodo
 ー"linuxコマンドの使い方"を151ページまで読み進める
 ー"C実践プログラミング"を133ページまで読み進める

グラフィック関係
 ーrawイメージデータを読み込んで各グレイスケール値の値を読む込むプログラムの作成
 ーOpenCVを使わずに72×34の白黒イメージに四角を書き、rawデータで書き出すプログ ムの作成

コメント

返す返す残念だ。このときのプログラムが残っていない。どう間違えたのかわからない。やはり、簡単に raw イメージデータを扱うことは出来ない模様。ただ、18:12 の報告になり、やや落ち着いた。今後の ToDo がおとなしめになった。期待値としては、”パット”できるとおもっていたけど、そうはいかなかった。反省してます。

週刊社長通信 6/27

■ What's New
最近 tomorrow という曲をリピートして聞いてます。
Tevin Cambell の声が素晴らしい。
ユーチューブにあるのね
http://www.youtube.com/watch?v=WPrHx2sSdDs

■ 読書
ゲーテル・エッシャー・バッハ」再帰が難しいまま、160ページくらい=>完全に止
まった、、、
コネクションマシンをざっとななめ読み
モチベーション入門をななめ読み
あと、C言語の本をななめよみ

コメント

2011 年の6月というと、震災の直後なのか。tomorrow を聞いて頑張ろうと自分自身を鼓舞しているね。涙ぐましい。震災で直接困っていたわけじゃなくて(被害にあった人ごめんなさい)、震災で仕事がなくなって困っていた。
あと、高橋君の教育に迷っているね「モチベーション入門」とか読んでいる。自分に必要ない。コネクションマシンの知識は、、、、今に生きてないな。

新人:高橋君 日報 6/28(Tue) 18:02

作業報告します
今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中142-151まで読み進める
 ー"C実践プログラミング"を123-135まで読み進める 
  C実践プログラミングについては大体読み進めることができた

グラフィック関係
 ーrawイメージデータを読み込み各グレイスケール値の数を数え表示するプログラムの作成は終了
 ーOpenCVを使わずに72×34の白黒イメージに四角形を描きrawデータで書き出すプログ ム
  ー四角形を描くための前準備として直線、点を描くプログラムの作成中
   ーそれに伴いポインタの勉強が必要だと思われる
今後のtodo
"Unix/linuxコマンドの使い方","C実践プログラミング"を読む
 OpenCVを使わずに点,直線を描くプログラムの作成
 同じくOpenCVを使わず72×34の白黒イメージに四角形を描きrawデータで書き出すプロ ラムの作成を行う

コメント

4週目にしてついにポインタの話になった。がんばって、raw イメージデータを読み込むプログラムは出来たみたい。
その後の私の指示「ポインタを使わずに、配列で書いてください。」
う~ん。モチベーションを下げてないか?もうちょいやさしくいってあげればよかった。「モチベーション入門」を有効に使っていない。

新人:高橋君 日報 6/29(Wed) 18:03

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中152-161まで読み進める
 ー"やさしいC++"を8-78まで読み進める

グラフィック関係
 ー保存されたrawデータを読み込み各グレイスケール値の数を数えるプログラムを作成した
 ー保存されたrawデータを72×34になるように二次元配列で読み込みそのまま表示する ログラムを作成した

今後のtodo
 ー"Unix/linuxコマンドの使い方"を162-172まで読み進める
 ー"やさしいC++"を79-86まで読み進める
 OpenCVを使わずに72×34の白黒イメージに四角形を書き出しrawデータで保存する

コメント

どんどん、下方修正されていく。かわいそうだ。「やさしいC++」になってしまった。これマンガじゃないか?マンガだけど中は難しい、、、、って前に教育した人が言っていた。

二次元配列にチャレンジ。ポインタは本を読んでから、、、という(私の)判断だね。本人は不満だったろう。

新人:高橋君 日報 6/29(Wed) 18:37

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中162-171まで読み進める
 ー"やさしいC++"を78-80まで読み進める

グラフィック関係
 ー四角形を描写する関数の作成を行った
 ー四角形の内側を塗りつぶす関数の作成を行った
 ーrawイメージデータを読み込む関数の作成を行った
 ー描写された四角形をrawイメージデータとして書きだす関数の作成を行った

今後のtodo
 ー"Unix/linuxコマンドの使い方"を172-181まで読み進める
 ー"やさしいC++"を81-91まで読み進める
 ー作成した関数を改良する

コメント

2次元配列を使って、四角を作るプログラムを書いている。斜めの線はまだ難しいね。表示用のプログラムをこれからつくるのだろう。

「作成した関数を改良する」とある。なんか少しわかってきたのでモチベーションが上がったのかな?

新人をバイナリアンに育てる ~ その3 ~

サブタイトル:そら飛ぶ バイナリアン

新人の高橋君 GNU Development Tools を2週間で読了。どんな本かというと、、、
オーバーシー・パブリッシング - GNU開発ツール
このウェブサイトには目次もある。
http://www.oversea-pub.com/wp/wp-content/uploads/2013/01/gnudevjp_index_1st.pdf
なんで、社長の私がこれ読ませたのかなぞ。よくよく考えたら、正直無理だろう。でも2週間で読み切った。で、ちょっと早く行き過ぎたということで、「C言語プログラミング」(どの本かは今となっては不明)という本を読んでもらうことにした。

技術系の上司の良くあるミス。期待しすぎて、高望みのして、実力以上の事をさせてしまったんだ。こうなると、かじ取りが難しくなる。本人に「ちょっと難しかったね。」といってしまうと「がっかりして」しまう。ごまかしながら、易しい本に変えたのだった(たぶんそういうことだろう)。

まぁそれでも、もらったソースをコンパイルぐらいはできるから OpenCV のソースをコンパイルして、72x34 の画像を作ることには成功した。

中堅社員の日報 6/17(Fri) 18:42

- 昨日の作業の整理
- git の登録
- FrameBuffer 対応
- CMakeLists.txt の更新
- GTK, QT と同じレベルで、FB というのを追加
- cmake オプションで -DWITH_FB=ON とすると、
modules/highgui/src/window_fb.cpp をコンパイルするよう変更
- WITH_FB=ON の場合、デフォルトのダミー APIコンパイルされないよう変更
- ほぼ空の、window_fb.cpp を作成
- cvNamedWindow() に、printf() による呼ばれたことを明示する処理を追加
- cmake & make のやりなおし
- qemu で、自分の作った cvNamedWindow() が呼ばれたことを確認

  • 高橋君の環境で OpenCV を動かす作業のサポート

コメント

OpenCV で FrameBuffer 対応している。ここでやってたのか。今の会社の資産になっている。6年前にはじめてたんだな。一応、高橋君の作業のサポートをやってもらっている。まぁ、やっぱり新人君にはいやってね、じゃ、できないわな。

新人:高橋君 日報 6/20(Mon) 18:35

作業報告します。
今日行ったこと
 unix/linuxコマンドの使い方322ページ中 55-63ページまで読み進める。
 知識にあるコマンドがあるため問題なく進んでいる。
 C実践プログラミングを404ページ中39-57ページまで読み進める。
 こちらは配列に入ったため少し慎重に行うべき。
 OpenCV関連
  -72×34の白黒イメージに四角形を描くところまでは進むことができた。
今後行うべきこと
 unix/linuxコマンドの使い方64ページ以降を読み進める。
 C実践プログラミングを58ページ以降をプログラムを行いながら読み進める。
 OpenCV関連
 -72×34の白黒イメージを45度傾ける。
  -その後白黒のrawデータでセーブを行う。
  -普通のプログラムで白黒のrawデータを読み込んで白と黒の数を数えるプログラムを作成する。
  -普通のプログラムで72×34の白黒イメージに書いた四角形を書き、rawデータで書き出す。
  -普通のプログラムで72×34の白黒イメージに書いた四角形を書き、45度傾けてrawデータで書き出す。

コメント

どうやら「C実践プログラミング」を読んでいるようだ。

これ、難しいでしょ。C 初心者には。下方修正したけど、やっぱり難しいことになっている。それでも、一日 P20 くらい読んでいる。このペースだとまぁ、読んでいるだけだな。「配列に入ったため少し慎重に行うべき」というのが新人ぽくって良い。最初の GNU Development Tools はなんだったのだ。完全に見誤っている。

同時に「unix/linuxコマンド」も読んでいる。ちょっと詰め込みすぎかもしれない。

週刊社長通信 6/20

■ 読書
ゲーテル・エッシャー・バッハ」再帰が難しいまま、160ページくらい
最新コンパイラ構成技法の読み返しとプログラミング
生存解析を Lisp で書いている途中

命令レベル並列実行処理(プロセッサ・アーキテクチャコンパイラ)スーパースカラのプロセッサを作ってみたくなった
関連して Interface のCPUの動作原理とアセンブラの基礎知識を読む

社長通信<技術編> 6/20

みんながリーナス・トラバースさんになろう。=>どうすらばなれるか考えよう

GLSL について調査した。
http://http.developer.nvidia.com/Cg/arbvp1.html
vertex 用の Low Level Shader 言語(ほぼアセンブラ)。ジャンプ命令すらない。
文法通りに作ればよさそう。レジスタ(変数)は無限に使える。
したがって、
 まず文法の木を作る=>一直線の木。複雑な木構造にならない。
 生存解析をする
 カラーリングする
 レジスタの割り当て

をすれば、Low Level Shader 言語用のアセンブラに落とせそうだ。
構文解析は本質ではないので、人間が文法の木を作ってコンパイラに渡す。
つまり lisp で書く。(書いている途中)

アセンブラに落としたら今度はそれが動く vertex 用のプロセッサが必要。
これは
 Lisp でシミュレーション
VHDL で簡単なプロセッサを書く
 VHDL で複雑なプロセッサを書く

できればスーパースカラーに対応したプロセッサを書きたい。
積和演算をするので、スーパスカラーいらないかも。

スーパースカラー=>アウトオブオーダーなプロセッサ
ついでにレジスタを動的に割り当てるかレジスタウィンドウにするかしたい。

コメント

とりあえず、社長の私が何を読んでいるか、何をしているか伝えなきゃと思って、読んでいる本を伝えている。「命令レベル並列実行処理」はいい本だった。今でも使う。そして、今の仕事に役立っている。あと、Lispコンパイラ作ってるのね。この作業が結局いまの polyphony につながったのだ。「ゲーテル・エッシャー・バッハ」はそういえば挫折したんだっけ。

新人:高橋君 日報 6/22(Tue) 18:25

作業報告します。
今日行ったこと
 unix/linuxコマンドの使い方322ページ中64-96ページまで読み進める。
 使ったことがあるコマンドがあるため問題なく進んでいる。
 C実践プログラミングを404ページ中58-60ページまで読み進める。
 配列文字列で思った以上に手間取った。
 OpenCV関連
  72×34の白黒イメージを45度傾けるプログラムを作成していたが終了させることはで
きなかった。アフィン変換をするところに原因があると思われる。

今後行うべきこと
 unix/linuxコマンドの使い方95ページ以降を読み進める。
 C実践プログラミングを61ページ以降をプログラムを行いながら読み進める。
 OpenCV関連
 -72×34の白黒イメージを45度傾ける。
  -その後白黒のrawデータでセーブを行う。
  -普通のプログラムで白黒のrawデータを読み込んで白と黒の数を数えるプログラムを作成する。
  -普通のプログラムで72×34の白黒イメージに書いた四角形を書き、rawデータで書き
出す。
  -普通のプログラムで72×34の白黒イメージに書いた四角形を書き、45度傾けてrawデ
ータで書き出す。

コメント

配列の文字列でつまずいてますよ~~。数学ができるので、アフィン変換って何?とか教えなくて済むのは楽。ただ、OpenCV で 45度傾けるのはできない。 unix/linux コマンド。このままいくと、終わるのは1カ月後だ。
あと、18:25 にメール書いている。18:00 越えが常態化しているようだ。こうしてブラックになるのか?ちなみに、今のうちの会社は 19:00 には人がいない、ブラックではない(かといってホワイトでもないな)グレーな会社です。

新人:高橋君 日報 6/23(Wed) 18:35

作業報告します。
今日行ったこと
 unix/linuxコマンドの使い方322ページ中97-110ページまで読み進める。
  シェル系統の知識はあまりないため慎重に読み進めたい。
 C実践プログラミングを404ページ中61-74ページまで読み進める。 
 OpenCV関連
  白黒イメージに四角形書き45度傾けるプログラムを作成した。
  またrawデータのセーブを行った。
今後行うべきこと
 unix/linuxコマンドの使い方111ページ以降を読み進める。
 C実践プログラミングを75ページ以降をプログラムを行いながら読み進める。
 OpenCV関連
  -普通のプログラムで白黒のrawデータを読み込んで白と黒の数を数えるプログラムを作成する。
  -普通のプログラムで72×34の白黒イメージに書いた四角形を書き、rawデータで書き
出す。
  -普通のプログラムで72×34の白黒イメージに書いた四角形を書き、45度傾けてrawデ
ータで書き出す

コメント

バイナリアンにするために unix のコマンドを使いこなせないとね。やっと 1/3 だ。「シェル系統の知識はあまりない」になりはじめた。最初の「使ったことがあるコマンドがあるため問題なく進んでいる」とどう違うのだ?

社長の指示 6/22(Wed) 22:40

よくよく考えたら、
”四角形を書き”
”45度に傾ける”
というプログラムを作るには、直線を書くプログラムを必要とするので後回しにします。

ということで以下のように変更

 グラフィック関係
  - OpenCVを使わず、グレイスケールのrawイメージデータを読み込んで
   各グレイスケール値の数を数え、表示するプログラムを作成する。
  - (OpenCV は使わずに) グレイスケールのrawイメージデータを読み込んで
Gimp が読めるカラーの rawイメージデータに変換しファイルにセーブする。

コメント

何を思ったか(おぼえてない)、突然、方向修正。OpenCV やっぱり新人には難しいということなんだろうね。どんどん、下方修正されている。ちょっとかわいそう。うちのような小さな会社にはこの手のノウハウはないんだよね。

新人:高橋君 日報 6/23(Thu) 19:38

作業報告します
今日行ったこと
 linuxコマンドの使い方111ページから120まで読み終わる。
  シェル系のため慎重に行いたい。
 C実践プログラミング75ページから93まで読み終わる。
  知識にほとんどないものがあるため、慎重に行いたい。
グラフィック関係
  ほとんど進展はなし。
今後行うべきこと
 linuxコマンドの使い方、C実践プログラミングをそれぞれ読み進める。
 OpenCVを使わずにrawイメージデータを読み込んで各グレイスケール値の数を数え、表
示するプログラムの作成を行う。
 同じくrawイメージデータを読み込みGimpが読めるカラーのrawイメージデータに変換しセーブする。

コメント

やっぱり、詰め込み過ぎで飽和した。OpenCV や raw データの扱いは早すぎたのだ。しかも 19:38 に報告でもうブラック企業。一方、C実践プログラミング は P75-P93 。どの辺だ?どうやら「5章の後半から 配列、修飾子および数値の使用」「6章 条件文と制御文」の前半くらいみたいだ。やはり配列は難しい。そして、8進数、16進数表現は難しい。

新人:高橋君 日報 6/24(Fri) 17:59

作業報告します
今日行ったこと
 linuxコマンドの使い方を322ページ中121-132ページまで読み進める。
 C実践プログラミングを404ページ中94-113まで読み進める。
 どちらも読みこぼしがないようにしたい。
グラフィック関係
 Opencvを使わずグレイスケールのrawイメージデータを読み込んで各グレイスケール値の数を数え表示するプログラムを作成した。
 Opencvを使わずグレイスケールのrawイメージデータwp読み込み、Gimpが読めるカラーのrawイメージデータに変換しセーブを行った。
今後行うべきこと
 linuxコマンドの使い方、C実践プログラミングをそれぞれ慎重に読み進める。
 普通のプログラムで72×34の白黒イメージに四角形を作成、rawデータで書き出す。
普通のプログラムで72×34の白黒イメージに書いた四角形を作成、45度傾けてrawデータで書き出す。

コメント

ブラック企業脱出。17:59 にメールがきている。「どちらも読みこぼしがないようにしたい。」とかなり弱気。やっぱり、最初に難しいのをさせ過ぎると自信を失うんだな。今頃になって反省。

とはいえ、なぜか復活して、各グレイスケールの値の数を数え表示するプログラムが出来上がっている。これもう今となってはどこにもない。取っておけばよかった。

このころすでに git を使っていると思うけど、まだ、高橋君は使えてないみたい。

新人をバイナリアンに育てる ~ その2 ~

サブタイトル:そら飛ぶ バイナリアン

このブログは 2011 年に新人教育をしたメールの断片から書きこおこしている。もう6年も前の話であることに注意。新人君(高橋くん - 仮名 - )は理工学系大卒のピカピカの新人。数学は得意で球の体積を積分で簡単に出せる。結構優秀。そして、学部では FORTRAN を学んでプログラミングもしたことがあるので、結構、できると信じて疑っていない。

そこで、GNU Development Tools という某所の自費出版本をよませて(それ以外の仕事はなし。勉強が仕事)自習させてみた。その記録である。

よくわからないけど、サブタイトルもつけてみた。どっかの出版社の人、本にしてください。:-)

新人くん日報:6/15 17:52

今日行ったこと
 移行作業を終了させる。
 GNU Development Tools第7章動的リンクを読み終える。
 内容については完全に把握していないので読み直しが必要。
今後やるべきこと
 GNU Development Tools を読み終える。
 FreeBSDを導入する。

コメント(現在の私の)

Ubuntu を導入した翌週に無謀にも FreeBSD をインストールさせている。これじゃ、なんの学習効果もないんじゃないかな。と今頃反省。

実務経験7~8年の人の日報

  • 画像認識

- 顔認識のサンプルプログラムの、API レベルでやってることを把握
OpenCV は haar 分類器というものを持っており、
xml で与えられるパターン情報を元に、画像のパターン認識を行うことが出来る
パターンにヒットした箇所は座標で得られ、
テストでは座標をもとに赤い丸を書いている
テストに用いた顔の認識パターンは、正面を向いたもの、である

- エッジ検出のテストの修正
エッジ検出のテストでは、matrix を使って rotate していたが、必要無いことが分かった。`
利用するカメラの性質により、画像の左上を座標の起点とするか、左下を起点とするか分かれる
どちらを起点にするかは、取得した画像データ IplImage の持つ origin メンバにより取得出来るで、
もし origin が IPL_ORIGIN_BL ( 左下起点 ) の場合、cvFlip() という API
上下の反転が可能であることがわかったため、テストを修正した

- OpenCV 2.2 と OpenCV 1.0 の違いをより明確に調査(特に、H/W アクセラレーションについて)
H/W アクセラレーション、正確には GPU の利用機能は、2.2 から導入された
対応する GPU は NDIVIA 製のもののみで、cuda ライブラリが必要となる
GPU を使うライブラリは、既存のソフトウェアで計算する API と別モノになっている
( DirectFB のように、API は一つで、API の中でソフトウェアを使うかハードウェアを使うか
処理が分岐するような設計にはなっていない)
GPU を使った HogDescriptor という画像検出器が、CPU による検出に比べ桁違いに高速らしい
リファレンスマニュアル:
http://opencv.jp/opencv-2svn/cpp/index.html
http://opencv.jp/opencv-2svn/cpp/gpu._gpu-based_functionality.html

ChangeLog:
http://opencv.jp/opencv2-x-tips/changelog_from_21

- IplImage 構造体の中身の調査
image_data, image_size をもとに、raw データをファイルに保存するテストを作った

コメント

さすがに実務経験のある人の日報はちゃんとしている。このあと、彼はちゃんと arm 上に OpenCV のクロスコンパイルを達成する。このころは、日報を書かせてたんだな。いまは週報になっている。グレードダウンだ。

社長から高橋君への指示 6/15(Wed) 22:50

次の事を達成してください。

72x34 の白黒画像イメージに四角を書く
PNG でセーブ

  • OpenCV で次のプログラムを作る

72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
PNG でセーブ

  • OpenCV で次のプログラムを作る

72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
白黒のraw データでセーブ(すでに実現しているのでそれをそのまま流用)

  • 普通のプログラムで

白黒の raw データを読み込む
白の数と黒の数を数えて表示する。

  • 普通のプログラムで

72x34 の白黒画像イメージに書いた四角を書く
raw データで書き出す

  • 普通のプログラムで

72x34 の白黒画像イメージに書いた四角を書く
45度傾ける
raw データで書き出す

今月中にすべてこれができたら大したもの。

コメント

かなり無茶ぶり。高橋くんピ~ンチ。ちゃんと OpenCV つくれるのか?FORTRAN しかしらないんだぞ。社長かなり無理なことを言っています。これに高橋君どうこたえる?しかも、OpenCV の次の作業が不明瞭だ。

新人:高橋くん日報:6/16(Thu) 18:16

今日行ったこと
 GNU Development Tools を読み終わる。
 ただし、理解がまだまだ浅いと思われるのでこのまま2周目に移行。
 VMware上でFreeBSDを導入した。
 ただし設定が終わり切っていないため明日以降も行う予定。
これから行うべきこと
 GNU Development Tools を読みつづける。
 FreeBSDの設定。
 OpenCVのインストール及びプログラム作成。

コメント

この日だけ 18:16 の報告になっている。実は 18:00 に帰るためには 17:30 には仕事を終了して、日報をかいて 17:50 に日報をメールして帰るように指示していた。ブラックでない会社。まぁ小さい会社、いいことばかりじゃないけどね。ここは私の方針で継続して働ける環境を作っている。(もちろんデスマーチもありました。それで会社がピンチになったことも)。この日はきっと本を読み切るためにちょっと遅くなったんだね。

GNU Development Tools 読み終わった!!1週間ちょっと?おー誰かが指示したのかな?このままで終わらせずに2周目に突入。まだ、よんだだけだからね。でも、新人だけに、出来る気になっている。

実務経験7~8年の人の日報

- 移植用 todo の更新
- qemu for ARM の環境をサーバ に作る
- arm 向け OpenCV 1.0.0 の build
- arm 向けに、グレースケール変換のテストをコンパイル
- qemu-arm 上でグレースケール変換のテスト
-> ok
- arm 向け OpenCV 2.2.0 の build
-> ok. 手順書を書いた
- arm 向けに、グレースケール変換のテストをコンパイル( 2.2.0 )
- qemu-arm 上でグレースケール変換のテスト( 2.2.0 )
-> ok
- qemu-arm 上でエッジ検出変換のテスト( 2.2.0 )
-> ok
- ARM のボードに、OpenCV 2.2.0 のライブラリをコピー
- ARM のボード上でエッジ検出変換のテスト
-> ok

高橋くんへ

マトリックスを使った回転をしているプログラムを添付します。

コメント

指示した OpenCV の構築が出来ている。さすが、実務経験7~8年。そして、その結果が高橋君にわたされる。どうする、いきなり OpenCV のソースを渡された新人。どーなるんだ。(おぼえてない)

新人:高橋くん日報:6/17(Fri) 18:12

今日行ったこと
 C言語プログラミングを3章 スタイルまで読み終える。
 opencvのインストールを済ませ、使える状態にした。 

 opencvについて
  72×34の画像出力には成功、この後は四角形領域の作成に入る。
これから行うべきこと
 opencvのプログラムを作成する。
 C言語プログラミング、linuxの使い方などに目を通しておく。

コメント

あれ?今日も 18:12 報告。ブラック企業になり始めている(苦笑)。C言語プログラミングを読ませている。今考えると順番が逆だ。なんで、先にGNU Development Tools 読ませているんだろう?わかるわけないじゃん。FORTRAN しかやったことないのに。スパルタ教育だな。

おーそれでも OpenCV でなんかプログラミングしている。ここまではお遊戯な感じだけど、新卒ならこんなもんじゃないのかな。上出来上出来。とこれが2周目。まだまだ続くよ。メールの残骸が残っている限り。
このペースだといつまでたってもブログが終わらない気がするけど。

新人をバイナリアンに育てる ~ その1~

以前新人教育をしたメールの文章をブログに書き起こす。

登場人物は 高橋(仮名)くん。まずやったこと。

例の自費出版本の GNU Development Tools を読ませた。

6/8 17:59 日報

GNU Development Tools 第4章コンパイルについて読み終わる。
同じくGNU Develpoment Tools 第5章 アセンブルについて実行コードの逆アセンブルまで読み終わる。
4章、5章ともに今現在読み取ることができない点はなし。

コメント

そんなことはないだろう。この時点で、新人くん大きく勘違い。がんばれ。でも、まだスキルが足りなくて4章、5章なんて理解できないぞ。理解できないことを理解できないのが新人たるゆえんか。

6/9 17:52 日報

GNU Development Tools 第5章アセンブルを読み終わる。
同じくGNU Development Tools 第6章静的リンクを_startシンボルによる致命的エラーま
で読み終わる。
アセンブラについては若干解析が不十分だと思われる。
また、静的リンクについてはリンクが異常終了するため少々難航するかと思われる。

コメント

その後何が起こるか正確には思い出せないけど、まぁしかたがない。というか、その技量を上の人が見極めるのはどれだけ大変かが後でわかった。ついつい期待しちゃうんだよね。だって本人の報告から「アセンブラについては若干解析が不十分」ってあるから、裏を返せば、ちょっとがんばって解析すると、アセンブラとかできちゃう?とおもっちゃう。

私の回答

エラー内容を精査してXXXさんと一緒に解決してください。

社長通信

社長技術通信 6/13

みんながリーナス・トラバースさんになろう。
=> そのためには、A面B面を作らない
=> 具体的には、自分探しをしない(夢や憧れを追わない)

GLSL について調査した。
http://http.developer.nvidia.com/Cg/arbvp1.html
vp1 => vertex 用の Low Level Shader 言語(アセンブラ?)
文法通り作ればよさそう。
あとはスタックを作るのと、テンポラリレジスタのセーブ・ロード
Sparc のように in register をtemp register 8をout register 8とすればよさそ
う?
Result 用のレジスタも必要かも。

コメント

当時、社長通信とか言ってみんなに発信していた。いまも技術通信に変わってやり続けている。この何とか通信10年以上、社員に向けて毎週発信しているんだよね。継続は力なり。

6/13 17:55

GNU Development Tools 第6章静的リンクまで読み終わる。
完全に理解したわけではないので今後読み直しが必要。
今後の予定としてはGNU Development Tools を読み進めつつ、Ubuntsuの導入などを行う
予定。

コメント

これだけ読むとすごい進捗。2~3年かかることを3日で達成している。新人すごい。

6/14 17:57

今日行ったこと
実機にUbuntuのインストールを行う。
それに伴い環境設定及び移行作業を始める。
今後行うべきこと
移行作業を終了させ、GNU Development Toolsを読み進める。

コメント

おーついに Ubuntu 導入。がんばれ新人。きっと実践は本とは違うぞ。

おまけ

画像認識の作業、 todo を細かくしました:

  • 画像認識

- OpenCV の調査
ビデオ入力してエッジ検出するテストがどう動くかは、API のレベルで把握した
- 顔認識のサンプルプログラムの、API レベルでやってることを把握
- ( 道路標識などの)パターン認識のテストを書く。API レベルで、やってることを把握。
- 2.2 と 1.0 の違いをより明確に調査(特に、H/W アクセラレーションについ

コメント

当時実作業に充てていた人間が OpenCV の作業をしてくれていた。画像認識を ARM でできるようにしていたんだね。

risc-v を試してみる(途中)

まずは toolchain のインストール
github.com


git submodule update --init --recursive

llvm でえらく時間がかかっているんですけど。
あとは


export RISCV=/path/to/install/riscv/toolchain
$ ./build.sh

でできるらしい。
その後、

github.com

ここのを使えばバーチャルな環境ができる、、、はず。
よくみると toolchain のなかに tests は含まれていた。なので、toolchain だけでいいはず。
llvm の clone がおそい。