新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

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

新人で C の初心者高橋君。Linux のコマンドを理解し、Emacs(Mule) でメールが打てるようになりました。プログラムも配列を VRAM に見立てて線を書いたりしています。

いままで、報告の箇条書きのマークに ー をつかってましたが、ちゃんと - を使うようになりました。今まで混乱するから本人には伝えていなかったのですが、7週間たってようやくそういった細かいことを伝えてもいい時期になりました。それまでは、キャパオバーということで意図的に伝えてなかったのでした。

新人高橋君 日報 7/25(月) 18:12

作業報告します

今日行ったこと
 -"C言語入門書の次に読む本"を409ページ中39-54まで読み進める
 -"明解C言語"を325ページ中41-52まで読み進める

 -1行読んで、1文字目と空白で区切った列を文字列として表示するプログラムの作成

今後のtodo
 -"C言語入門書の次に読む本"を読み進める
 -"明解C言語"を読み進める


 -入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログラムの作成

  -1行読んで、1文字目と空白で区切った列を”数字”として表示するプログラム 
  -1行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  -複数行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  -複数行読んで、最初の計画通り各コマンドを実行するプログラム

  -円を描画するプログラムの作成
 
 -図を回転させるプログラムの作成

社長コメント 7/25(月) 18:34

日々の報告として

問題点:
改善点:

をあげておくと、週の終わりにそれをまとめるだけになります。
例えば今日であれば、

問題点:
 関数内で ++ しても影響しない理由 => 調査が必要
 C言語で配列を関数の引数として渡した時の動き

それとも issue track をいれるかな、、、ソース管理(git)も課題だな、、、


>  -"C言語入門書の次に読む本"を409ページ中39-54まで読み進める
=>えらいね。ちゃんと記号を変え始めた。
こういう応答がコミュニケーションだね。


>   -円を描画するプログラムの作成
>  -図を回転させるプログラムの作成
これは今後の個人的な課題ということでやらないかもしれない。

予定としては
一行読んで実行するプログラム、それの改良
スタック型のプログラム
シリアル通信
ネットワーク
Z80
LCD

ってところか。予定は予定なので変わるかもしれない。

コメント

あれ?金曜日と同じ内容「1行読んで、1文字目と空白で区切った列を文字列として表示するプログラムの作成」でてこずっているのか?意外と、こういう文字列操作は C だと大変なのだろう。

ついに git の導入を考え始めます。あと社長のコメントもすぐにコメントするようになった。相手のかキャパに余裕が出てきたと判断したのか?あるいは業を煮やしたのか?

新人高橋君 日報 7/26(火) 18:42

作業報告します

今日行ったこと
 -"C言語入門書の次に読む本"を409ページ中55-74まで読み進める
 -"明解C言語"を325ページ中53-69まで読み進める

 -1行読んで、1文字目と空白で区切った列を文字列として表示するプログラムの作成
 -1行読んで、1文字目と空白で区切った列を数字として表示するプログラムの作成
 -C言語で配列を関数の引数としたときの動作の調査
  -プログラム中に[]を伴わずに単独で現れた配列名はその配列の先頭要素のポインタとみなされるらしい
   そのため文字列を表示させるプログラムでは動作したようだ

今後のtodo
 -"C言語入門書の次に読む本"を読み進める
 -"明解C言語"を読み進める


 -入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログラムの作成

  -1行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  -複数行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  -複数行読んで、最初の計画通り各コマンドを実行するプログラム

コメント

まだまだ配列で右往左往しています。ポインタの理解はまだまだ先になりそうです。

新人高橋君 日報 7/27(水) 18:04

作業報告します

今日行ったこと
 -"C言語入門書の次に読む本"を409ページ中75-90まで読み進める
 -"明解C言語"を325ページ中70-85まで読み進める

 -1行読んで、1文字目と空白で区切った列を数字として表示するプログラムの作成
 -1行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラムの作成


今後のtodo
 -"C言語入門書の次に読む本"を読み進める
 -"明解C言語"を読み進める


 -入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログラムの作成

  -1行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  -複数行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  -複数行読んで、最初の計画通り各コマンドを実行するプログラム

 -やってみたいプロジェクトの計画

コメント

「1文字目と空白で区切った列を数字として表示するプログラム」atoi とかを使うということになるのでしょう。数字とascii 文字と配列の関係に自ら気付いてくれることを願って、あまり、指導していない。いいのか悪いのかは不明。わかった気になってもらっても困るしね。

新人高橋君 日報 7/28(木) 18:05

作業報告します

今日行ったこと
 -"C言語入門書の次に読む本"を409ページ中91-106まで読み進める
 -"明解C言語"を325ページ中88-101まで読み進める

 -1行読んで、1文字目に応じて、異なる関数を呼んで異なる表示をするプログラムの訂正
 -複数行読んで1文字目に応じて異なる関数を呼んで異なる表示をするプログラムの作成

 -やってみたいプロジェクトの計画
  -ある文章を読み、こちらが望む文字列(1つでも複数個でも)の統計情報をそれぞれ得るプログラムの作成をやりたいと思います

今後のtodo
 -"C言語入門書の次に読む本"を読み進める
 -"明解C言語"を読み進める


 -入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログラムの作成
  -複数行読んで、最初の計画通り各コマンドを実行するプログラム

 -やってみたいプロジェクトの計画

社長コメント

>  -やってみたいプロジェクトの計画
>   -ある文章を読み、こちらが望む文字列(1つでも複数個でも)の統計情報をそれぞれ得る
> プログラムの作成をやりたいと思います
もういくつか出してみて。

野心的ななにかがあるのかな?

コメント

「1文字目に応じて、異なる関数を呼んで」case で分岐するプログラムだね。ascii コードは理解し始めた模様。やってみたいプロジェクトに統計情報を得るプログラムとなった。まぁ悪くないよね。自分で先を見据えられるかどうかがポイントだ。しかし、社長の私はダメ出ししている。ダメじゃん。

新人高橋君 日報 7/29(金) 18:17

作業報告します

今日行ったこと
 -"C言語入門書の次に読む本"を409ページ中107-121まで読み進める
 -"明解C言語"を325ページ中102-117まで読み進める

 -Emacs の設定の変更
 -テキストファイルを読んでこちらが入力した文字列の統計情報を得るプログラムの作成

 -週報作成

今後のtodo
 -"C言語入門書の次に読む本"を読み進める
 -"明解C言語"を読み進める


 -入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログラムの作成
  -複数行読んで、最初の計画通り各コマンドを実行するプログラム

コメント

ひといきついて、自分の”やりたい”と言っていたことをしてもらうことにしたんだね。もちーベーションを高めたいという表れだ。入社したてはこんなもんだよね。でも、この悠長さで大丈夫か?2か月たったけどポインタの理解ができてないぞ。

おまけ:社長オブジェクト指向について延々と語る

> Lisp で書いているのだが、Lisp すごいね。
オブジェクト指向の良さは

  1. 情報の隠ぺい
  2. ポリフォリズム

特に、情報の隠ぺいは強力。問題を局所化できるので開発が楽。
Lisp は開発が決して楽ではない。
情報も隠蔽しない傾向にあるから、ノーガードの打ち合いみたいになる。
いろんなことができすぎるので、今の時代のセキュリティには合わない気もする。

C++/Java も含めてオブジェクト指向の抱える問題は、アプリケーション構築時のクラス概念の破綻だ。
だいたいにおいてきれいにいかない。
それは、オブジェクト指向が提供する哲学が、複雑なアプリケーションを網羅しないことを指す気がする。

クラスは継承される毎にたいていメンバー変数が増える。
上位クラスから見ると下位クラスは見えないし(当たり前)
下位クラスからのアクセスを上位クラスは隠蔽する。
下位のクラスは問題を局所化できる。
小さなプログラムなら非常にきれいに書ける。

変数という意味ではオブジェクト指向は、上位クラスから下位クラスに行くにしたがって
細かい条件に応じて、”つけたす”事ができる。これは、下位クラスが、具象化していき
より細かい条件を、細かく満たすことができることを指している。

一方、メソッドについては実は違う。
メソッドはオブジェクト指向では上位クラスが、意味的にはすべてのありとあらゆる
メソッドを用意していて、下位クラスはそれを選択して使うことになる。
よくある、
図形 -> 多角形 -> 三角、四角
は、すべてのありとあらゆる図形的なメソッドを図形が持つことを意味する。
だから、一番上のクラスは万能クラスなのだ。

また、クラスが持つ概念もアプリケーションが複雑になるにつれてあやふやになる。
図形程度だと問題は起きない。
しかし、複雑なアプリケーションを考えるとすぐに破たんする。
多重継承とか難しく考えなければならなくなる。
飛行機はタイヤがあるけど車?とか。

だから、オブジェクト指向的には
万能乗り物 -> 飛行機、車
位の階層でしかものを考えられない。
乗り物 -> 陸を走る、空を飛ぶ、海を渡る -> さらに細かいクラス
といった具合にきれいに階層化はならない。

だから、オブジェクト指向的なクラス階層を考えるとアプリケーションは破たんする。

オブジェクト指向がもたらすものはクラス階層ではなく、"ポリフォリズム"につきる。
これだけ。

ポリフォリズムというと難しく聞こえるが、要は API を用意して、それに合致する
個々の処理は、個々に任せるような仕組み。オブジェクト指向
個々=下位のクラスの仮想関数
となる。これはいったい何をしめしているのか?

API を用意して、その中身はブラックボックス化しようとしているに過ぎない。
結局、プログラマのやりたいことは
”問題を局所化”
”局所化された問題を解く"
である。
仮想関数で局所化された問題を解く仕組みが C++/Javaオブジェクト指向だ。
C++ の template は別の意味で問題を局所化する。
C# のデリゲートも別の意味で問題を局所化する。

いずれも API (かそれに類するもの)が決定され、中身を別途書く。
じつはそれってマクロじゃないか?というのが今回の結論。

for(int I = 0 ; I < 100; ++I ) {
なんか処理
}

このなんか処理のところを

  1. subroutine で呼ぶ -> 構造化!!
  2. iter->do_somtihng(); -> オブジェクト指向

何でもいいんじゃないか?
API が規定されてブラックボックス化できれば!!
テンプレートなんてマクロだしね。

lisp のマクロは言語レベルで高度なマクロを提供する。
そのために、ほとんどのケースで、オブジェクト指向もデリゲートもいらない。

ただ関数が呼ばれればよい。必要であれば関数のすげ替えをすれば
個々の対応ができる(仮想関数のようなこともできる)。

その代り、設計に頭をすごく悩ませることになる。慣れてくると加速するような気もする。
いろいろ設計して、結局 common lisp の用意するマクロがつかることがわかる、、、
ということは何度もある。だから、ほとんどのケースで既存のライブラリの使いまわしで
やれてしまう。

C++ は結局、ライブラリの再利用ができない。
Lisp は出来る。マクロという高度な抽象化ができるからだ。
C++ はテンプレートでそれを実現しようとしている。
テンプレートは難しすぎて、結局、だれも理解できないものができる。(Lisp も同じだが、、、、)

セキュリティの問題と難しさで世の中絶対にlisp の時代は来ないけど、
lisp を使えるようになって、マイライブラリが充実してくると、
たぶん、プログラムの構築スピードはとんでもないことになりそう

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

新人で C の初心者高橋君。4週間本を読んで配列を理解し、配列を VRAM に見立てて線を書いたりしています。ラインを書くプログラムは出来たようですが、まだまだ改良点があるようです。

argc や argv の解析は C 初心者には難しいのでごく簡単な字句解析を教えてもらいます。

そして、プログラム構築の方法として step by step で実現する方法を伝授されます。

社長のコメント 7/19(火) 23:26

*プログラムの集約
 ー線分を描画するプログラムの手直し
線分をかくのはもっと集約できると思う。中間的には4パターン、最終的には2パ
ターンかな、、、
傾きが 0~1, 1以上,-1~0,-1以下
これがもっと集約されるかな?

*入力に応じて、、、
>  ー入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保
> 存するプログラムの作成
ある”テキスト”を読んで、そのテキスト内容に応じて描画するプログラムにした
い。
簡単な仕様としては、最初に一文字があってそれがコマンド。そのあと、空白区切り
で引数。
引数は整数。例えば

P 10 10
L 10 10 20 20
B 10 10 20 20
F 10 10 20 20

P が点を打つ
L がライン
B がbox四角を書く
F が四角を塗りつぶす
引数は整数で x0 y0 あるいは x0 y0 x1 y1
あとは自分で必要なコマンドを考える。(<=ここ重要。自分で考えることが重要)

*円を書くについて
>   ーまた円を描画する方法について調べる
>    ー円を描画させるアルゴリズムはあるようなので利用したい
簡単にはサインコサインをつかえばできるね。
あと 1/8 の円を書けばあとは書けるかな。

ということで、
まずは
*プログラムの集約
*入力に応じて、、、
 これを実現するために、
1) 1行読むプログラム(<= それ以外はしない。新たに作る)
2) 1行読んで1文字目を表示するプログラム
3) 1行読んで、1文字目と空白で区切った列を”文字列”として表示するプログラム
4) 1行読んで、1文字目と空白で区切った列を”数字”として表示するプログラム
5) 1行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
 最終形態を考えてプログラムする。
[例] P 10 10
なら
(10, 10) に点を打つ
と英語で表示する。など(ここも仕様の詳細は自分で考える)
6)複数行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログ
ラム
7)複数行読んで、最初の計画通り各コマンドを実行するプログラム

古典的だけど、バッファと空白をうまく使うと、使用メモリ量が減る。
うまく使わないと文字列なのでバグだらけになるのでよく考えましょう。
領域があるかどうかに注意する。

*円を書く
まぁ時間があったら自分でやってください。

社長さらにコメント 7/19(火) 23:32

>  ー線分を描画するプログラムの手直し
今日、私が出したヒントで、方法に気が付いたようです。
よく、すぐに気が付いたと思います。

このように、知識を増やしていけば(=経験を積めば)技術はついていきます。
ソースを読むなどして習得していってください。

もう一つの習得方法は、方法論です。
難しい問題(<=どうしたらよいかアイデアが出ない問題)は
より簡単な問題ならどのように解くかを考えていきます。
難しい問題はいろんなパターン(というか45度で)で線を引くでした。
これをもっと簡単な問題に置き換えてやればいいわけです。
例えば、0-10 まで加算する。10-100まで加算する。1から-10まで加算する。など、
これは2次元が難しいので、1次元に優しくして、さらに、描画を加算にしました。

このように”問題を簡略化して解く”という方法論を手に入れると突破力が付きま
す。

ここまで読んだら(読んでいるか読んでいないか心配なので)、メールの返事として
感想をください。

コメント

哲学的なことを言い過ぎかな?コミュニケーションもメールでしろと。結構敷居が高いかも。今考えたら、ちゃんと顔あわせて話した方がよかったかも。じゃなかったら、別の人が顔あわせるべきだったのかな。社長じきじきだと緊張するよね。
と思ったら、間髪入れずに、ほかの社員に指示している(次のメール参照)。それでも、哲学的なことを言い過ぎかな~~~。もっと具体的に指示は出せないものなのだろうか?具体的すぎると考えなくなってしまうかもしれないなぁ~~~。ここは難しい。

SK くんという別の社員に社長から指示 7/19(火) 23:34

SK へ
>   ー行列計算を用いるため要確認
>   ー変換後の座標の判定方法についても考える必要がある
これを実現するための API を設計してください。
設計して、高橋君に渡してください。
難しい設計をしないように。
特に OpenCV などは参考に”しない”ように。難しすぎるので。
以下に簡単な API を作るかがポイントかな。
(あと、”これを実現するため”というあいまいな仕様をどこまで具体化できる
か、、、も重要)

SK くんの回答

void rotate( double srcX, double srcY, double *dstX, double *dstY, double angle );

でどうでしょうか。

一般的な行列の計算用の API、こんな感じでどうでしょう。
API の名前を名前を matrix_2x2_2x1 などと工夫したいところですが、とりあえず

// ( out_x ) ( a11 a12 )(x)
// =
// ( out_y ) ( a21 a22 )(y)

void
matrix( double a11, double a12, double a21, double a22,
double x, double y, double *out_x, double *out_y )
{
}

新人高橋君 日報 7/20(水)

作業報告します

今日行ったこと
 ー"初めて使うMule/Emacs"を229ページ中52-66ページまで読み進める
 ー"明解C言語"を311ページ中2-22ページまで読み進める

プログラム関連
 ー線分を描画するプログラムの手直し
 ー線分を描画するプログラムの手直し
 ー1行読むプログラムの作成

今後のtodo
 ー"初めて使うMule/Emacs"を読む
 ー"明解C言語"を読む


 ー入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログ
ラムの作成

  ー1行読んで1文字目を表示するプログラム 
  ー1行読んで、1文字目と空白で区切った列を”文字列”として表示するプログラム 
  ー1行読んで、1文字目と空白で区切った列を”数字”として表示するプログラム 
  ー1行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  ー複数行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  ー複数行読んで、最初の計画通り各コマンドを実行するプログラム

  ー円を描画するプログラムの作成
 
 ー図を回転させるプログラムの作成

コメント

具体性が増してきた。さすがに「1行読んで1文字目を出すプログラム」はクリアした。でも、これを本人がどうとらえるかが重要。「初心者だからこうしている」ととらえないでプログラムを作るときは「常にこれくらい易しいのから始める」ととらえてくれてるのがよい。
SK 君の提案難しいけど、ちゃんとこなせるのだろうか?

社長のコメント 7/22(金) 14:22

> void
> matrix( double a11, double a12, double a21, double a22,
> double x, double y, double *out_x, double *out_y ) { }
out_x と out_y をグローバル変数にして、ポインタを使わないようにしますか。

いっそのこと、全部、グローバル変数にするかね、、、、

> 3) 1行読んで、1文字目と空白で区切った列を”文字列”として表示するプ
> ログラム

1行読んで
1文字目+改行を出力
更に各、空白で区切った”語”を1行ずつ”文字列”として表示する
プログラム

コメント

やっぱり、ポインタが鬼門か。ポインタを回避するためにグローバル変数にしようとしている(私が)。ちゃんと説明してあげろよ!?なのか。しかも金曜日の 14:22 にこんなこと言われて対応できるのか?ピ~~~ンチ。
あと、3) のプログラムできてなかったのか?より詳細に説明している。進捗はどうなっているんだ?

新人高橋君 日報 7/22(金)

作業報告します

今日行ったこと
 ー"C言語入門書の次に読む本"を409ページ中2-38まで読み進める
 ー"明解C言語"を325ページ中22-40まで読み進める

 ー線分を描画するプログラムの簡単な手直し
 ー1行読んで、1文字目と空白で区切った列を文字列として表示するプログラムの作成

今後のtodo
 ー"C言語入門書の次に読む本"を読み進める
 ー"明解C言語"を読み進める


 ー入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログラムの作成

  ー1行読んで、1文字目と空白で区切った列を”数字”として表示するプログラム 
  ー1行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  ー複数行読んで、1文字目に応じて、異なる関数を読んで、異なる表示をするプログラム
  ー複数行読んで、最初の計画通り各コマンドを実行するプログラム

  ー円を描画するプログラムの作成
 
 ー図を回転させるプログラムの作成

コメント

結局、ポインタの理解まで行かなかった(のだと思う)。まぁ、金曜日の 14:30 位に言われてすぐには対応できないでしょう。そして、rotate とか matrix とか関数名を言われてもすぐにプログラミングは出来ません。
がんばれ!!

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

新人で C の初心者高橋君。4週間本を読んで配列を理解し、社長からコメントをもらいます。


新人「ー拡張させてみたが予想以上にソースが煩雑なため訂正予定」
社長「重要なことは”煩雑”であることを一歩引いて感じることができるかどうかだね。
あと、無駄な処理をしていないかとか、、、、
この経験が重なると、美的感覚が(プログラミング上の美的感覚)が養われてくる。
これらのことを感じるためには、”動いた”を終着駅にしないことだね。」

こんな”哲学的”なこと言ったってわかるわけないじゃん。そもそも、今の自分でも理解が難しい。この数年後「神の数式」を見て、「美的」ということがいかに空疎な事かを知ることになります。数式やプログラムが「美しい」なんてのは妄想でしかないと今は思っています。

新高橋君:日報 7/11(Mon)

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中237-247まで読み進める
 ー"新C言語入門"を198ページ中75-98まで読み進める
 今週の計画の詳細をまとめる

プログラム関連
 ー線分を描画するプログラムの作成
  ー第四象限内の線分を描画するところまで終了
 
今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"新C言語入門"を読む


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

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

コメント

C 言語の習得はやはり難しい。とにかく回数。と思い、複数の本の配列までをやってもらうことにしていた。線の描画は、第四象限内までできたらしい。え!こんなペース?と思う人もいるかもしれない。でも、実際はこれくらいがが妥当なのだ。

社長通信 7/11(Mon)

みんながリーナス・トラバースさんになろう。
 =>どうすればなれるか?
 =>科学的アプローチが必要


脱線しつつ、、、直接スレッデッドコードを勉強。(LOL で読んだはずなのだが、、、、)
http://jp.rubyist.net/magazine/?0008-YarvManiacs
がわかりやすい。

スタックマシンの本を読むことにする。
あと、IA64 の本も読むことにする。=>レジスタウィンドウを使っているから。

GLSL について調査したことを一杯忘れたので、やり直し、、、
スーパースカラー=>アウトオブオーダーなプロセッサ
ついでにレジスタを動的に割り当てるかレジスタウィンドウにするかしたい。

コメント

社長が率先して技術的なことを頑張っているなというメッセージ

新人じゃない人の日報

  • Fill Rect の、性能評価テスト

fps を計って表示するようにした
HW 使った場合 -> 580 FPS 前後
HW 未使用 -> 60 FPS 前後

コメント

おーさすが。Fill Rect (DirectFB のアクセラレータとして実装)、HW 使うと相当速くなる。当たり前だけどちょっとうれしい。

新進高橋君:日報 7/12(Tue)

作業報告します

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

プログラム関連
 ー線分を描画するプログラムの作成
  ー第四象限内の線分を描画させた
  ーfloatを使用しないで線分を描画させた
   ー少々汚いため軽く手直しが必要
  ー実行時の引数で線分を描画するように改良

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


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

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

コメント

前日までは線分描画に float を使っていたらしい。この辺が、数学とプログラミングの違いかな。float つかったら遅くなるからね。

新進高橋君:日報 7/13(Wed)

作業報告します

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

プログラム関連
 ー線分を描画するプログラムの作成
  ー引数の数に対応したヘルプの作成
  ー点が指定された範囲を越えた場合の処理の関数の作成
  ーあらゆる線分を描画するプログラムの作成
   ただし手直しすべき部分があるかもしれない

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


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

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

コメント

ついに線分描画で全方向の描画ができるようになった。if を使ったのか case を使ったのか、、、、いずれにせよ場合分けが出来たということ。「ただし手直しすべき部分があるかもしれない」が何なのかは不明。

新進高橋君:日報 7/14(Thu)

作業報告します

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

プログラム関連
 ー線分を描画するプログラムの手直し
 ー三角形を描画するプログラムの作成
  ー複数個描画させる仕組みについて考える必要がある

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


 ー入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログ
ラムの作成
  ーまた円を描画する方法について調べる
   ー円を描画させるアルゴリズムはあるようなので利用したい

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

コメント

線分を組み合わせて三角形を作るプログラムにチャレンジ。Logo とかだと簡単にできそうな気がするが、、、

新進高橋君:日報 7/15(Fri)

作業報告します

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

プログラム関連
 ー三角形を描画するプログラムの手直し
 ー円を描画するプログラム
  ー見たアルゴリズムには欠点があるらしいので別の方法を模索中

今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"新C言語入門"を読む
 ー"C実践プログラミング"の読んでいない部分を読み進める

 ー入力に応じて三角形、四角形、円を複数個描画その後にrawデータで保存するプログ
ラムの作成
  ーまた円を描画する方法について調べる
   ー円を描画させるアルゴリズムはあるようなので利用したい
  ー線分を描画するプログラムの訂正
   ー関数が多すぎて逆に分かりにくくなってる問題
   ー線分を描画させる関数について冗長性がありすぎる問題
    ーエラー判定も若干冗長性がある

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

C実践プログラミングを今週の休日中借ります

コメント

三角形の次はなぜか円。四角形が簡単すぎるから?「関数が多すぎて逆に分かりにくくなってる問題」があるらしい。どんな問題なのだ?土日の間に勉強するらしい。えらいぞ。

新人をバイナリアンに育てる ~ その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 を使っていると思うけど、まだ、高橋君は使えてないみたい。