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

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

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

やはりこういう地味なものは、地味にしか展開しない。新人、高橋君8月に突入。C言語は初めてで、ポインタの前の配列で苦戦。

新人高橋君 日報 8/1(月) 18:21

作業報告します

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

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

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


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

 -行を読むプログラムをバイナリフォーマットで行うようにする
 -文字列を10進数の数に変換するプログラムの作成する
 -文字列を16進数の数に変換するプログラムの作成

社長コメント

もうちょい詳しく書きましょう。
>   -複数行読んで、最初の計画通り各コマンドを実行するプログラム
s(小文字)
とかいてあったら表示をする
S(大文字) ファイル名
と書いてあったらセーブする
L(大文字) ファイル名
と書いてあったらロードする

ファイル名の処理(とくに一貫性のある処理=美しいプログラム)が難しいかもしれない。

>  -文字列を10進数の数に変換するプログラムの作成する
-> my_atoi ね
>  -文字列を16進数の数に変換するプログラムの作成
-> my_atoi16 ね


コメント

「1文字目に応じて異なる関数を読んで異なる表示をするプログラムの作成」でなかなか先に進まず。
switch/case でも苦戦中。教える方とも我慢比べ。報告を見てもやっぱりわからないので、指導が入ります。

週刊社長通信 8/1

■ What's New
本日、XXXにいってきました。
案件として成立しそうです。
なんかぼちぼち日本語で書いた資料が効いてきている。YYY のウェブとか。
もうちょい日本語のWebを増やすか、、、

先週の金曜日は SSS という会社に行ってきました。
サッカースタジアムを上から俯瞰したいらしい。
これも WEB 経由。

営業いらないじゃん。ウェブを充実させていこう、、、

ZZZの案件=> 「同プロジェクトの経験のない会社への発注はリスクが高い」
だって。そんじゃ最初からコンペするな、、、といいたい。

■ 読書
ゲーテル・エッシャー・バッハ」再帰が難しいまま、160ページくらい=>(再開)
いそがしくて読書してないのか、、、
今日は「生命とは何か」をもって電車に乗りました。

科学の”正しい”知識を増やしていくことは我々の業種にとって重要です。
文学やイデオロギーよりも重要です。
なぜなら、こーしょな文学論やくだらないイデオロギー談義は宇宙の果てでは意味がありませんが、
正しい科学の知識は宇宙の果てでも意味があるから。

■みんながリーナス・トラバースさんになろう。
 =>どうすればなれるか?
 =>3つの柱がある

1. コンピュータプログラミング技術
-> ポインタと再帰がわかること
2. コンピュータ設計技術
3. コミュニケーション能力

とくに最終的に重要になってくるのが設計能力。
これは囲碁が上達する人の原理と同じ。

ものの本によると、囲碁が上達する人は初心者の時からわかるらしい。
なぜその手を打ったか論理的に説明できることが重要らしい。
論理の正誤はこの際問題にならない。

最終的には設計書を書けるようになりましょう!!!
設計書が書ければ一人前です。

どうも、Yさんとかは頭の中に設計書があるみたいね。

                                                                                            • -

スタックマシンをつくりたいのだが、その前に scheme を復活させることにした。
DirectFB でそれなり数のテストを作らなきゃならなくなって、
C のソースをたくさん書くのは嫌なので、scheme にしようと。
まぁみんなを Lisp に巻き込むという事だね。

で今ソースを見たら boost を使っている、、、
だめじゃん。Linux ならいいけど、、、組み込みシステムに使えない。

                                                                                            • -

ということで、プログラマが知らなければならない言語
1. C
2. forth
3. lisp
4. VHDL
5. アセンブラ
6. C++
7. sed
8. awk

というのが私のおすすめ順。Forth がわかれば組み込みシステム技術者になれるでしょう。Lisp を知っていればコンパイラ技術者になれるでしょう。VHDL を知っていればハードウェア関連に強くなれるでしょう。LispVHDL は出会わなくても組み込みシステム技術者になれます。Forth も出会わなくても大丈夫な言語ですが、、、知っているのと知らないのでは大違い。組み込み技術者にとって必須の技術が詰まっている。Lisp も出会わなくても大丈夫と言えば体上部ですが、、、これは知っているのと知らないので大きく人生を変える言語でしょう。Emacsmule を使っている人は普段からlisp を使って自分の環境を拡張してください。

Java を知っていても Python を知っていても Ruby を知っていても、それだけではコンピュータのエキスパートにはなれないでしょう。sedawk は知っていると便利かな。特にawk はちょっとしたコンパイラだからね。

あと、Object 指向は必要な概念ではないね。C++ は便利で好きな言語だけど。Lisp でプログラムを書いていて思ったけど、一切、オブジェクト指向の必要がなくかける。

しかも破綻せずに。C は規模が大きくなると破綻する(ので C++ が必要になる)けど lisp は破綻しない。ただし、だからといって、必要なのは関数型言語でもない。マクロでもない。(マクロは便利だけど)

必要なのはクロージャーとデリゲート。いずれもインタフェースを提供する機構だ。C++ は class でクロージャーを、テンプレートでデリゲートを手に入れた。Lisp は最初から両方持っている。

巷の流行に惑わされないようにしましょう。
惑わされそうなキーワード:オブジェクト指向、関数型、マクロ、Railsクロージャー、デリゲート
(ん?今必要って言ったばかりジャン、、、、)

■追伸
dc というプログラムをインストールして使えるようにしておいてください。dc は一種の電卓です。

http://www.gnu.org/s/bc/
bc の中に dc があるらしい。
ソースをダウンロードしてコンパイルしてインストールしてください。
出来るかな?

コメント

いまにして思えば、やはり文学的な心は必要。重要。いろんなことへの感受性の解像度が低いと結局、正しい知識を得ても運用できない。

偉そうに Forth っていっているけど、Forth 今でもかけないし、、、

なぜか dc をコンパイルせよと言っている。謎。

新人高橋君 日報 8/2(火) 18:18

作業報告します

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

 -複数行読んで、各コマンドを実行するプログラムの作成
  -表示、セーブ、ロードそれぞれを動作させるところまで

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


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

 -行を読むプログラムをバイナリフォーマットで行うようにする

 -文字列を10進数の数に変換するプログラムmy_atoiの作成
 -文字列を16進数の数に変換するプログラムmy_atoi16の作成

コメント

ちゃくちゃくとバイナリアンへの道を進んでいます。s(表示) と S(セーブ) と L(ロード) がコマンド。「行を読むプログラムをバイナリフォーマットで行うようにする」は何を意味しているのか今となってはわからない。

社長の指示

>  -文字列を10進数の数に変換するプログラムmy_atoiの作成
>  -文字列を16進数の数に変換するプログラムmy_atoi16の作成
1st version はただの16進数のみを解読
例: 123
ABC
abc
AbC
xyz -> error

2nd version はただの16進数と 0x をつけた 16進数を解読する
例: 0x123
0xABC
DEF
Def
def
0xDEF
XYZ -> error

>  -行を読むプログラムをバイナリフォーマットで行うようにする
バイナリになると
一行ではなく一文字ずつあるいはまとまって読むようになる。
まずは
P ... (10, 10) に点を打つ
L ... (15, 15, 20, 20) に線を書く
s ... show する
この3つをサポートする。

任意の場所に点を打てるようにするにはどうしたらよいか?

* ヒント
関数の戻り値をうまく使う

determine -> dispatch_xxxxxx
xxxxxx は graphic とか file とか show とか

doit = dispatch_graphic(....);
で、もし実行したら 1 が返る、実行していないなら 0 とすると
if ( doit == 1 ) {
continue; // <- continue は何かを調べておいてください。
}
とすればよい。その後
doit = dispatch_xxxxxx
if ( doit == 1 ) {
....
...
...

とすればスマートになる。

コメント

何事も step by step。一文字読むプログラムでも難しい。そして、continue が何かを教えている。社著の私は最終的にはバイナリを読むということをさせたいらしい。

新人高橋君 日報 8/3(水) 18:12

作業報告します

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

 -DCのインストー
  -挑戦中、コンパイルがうまくいかない

 -複数行読んで、各コマンドを実行するプログラムの改良

 -文字列を10進数の数に変換するプログラム my_atoi の作成
 -文字列を16進数の数に変換するプログラム my_atoi16 の作成
  -ただの16進数を解読するところまで

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


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

 -文字列を16進数の数に変換するプログラムmy_atoi16の作成
  -ただの16進数と0xをつけた16進数を解読するようにする

 -行を読むプログラムをバイナリフォーマットで行うようにする

社長コメント

報告をもう少し細かくしてください。(読む側にわかるように)

>  -複数行読んで、各コマンドを実行するプログラムの改良
どんな改良をしたのかをわかるようにしましょう。

コメント

dc のコンパイルはオーバワークだったらしい。ちょっと先を急ぎ過ぎた。my_atoi16 はある程度できたみたい。だんだんと社長の私も要求が増え始めた。まぁ読む側にわかるように、、、という意識は難しいよね。

新人高橋君 日報 8/4(木) 18:14

作業報告します

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

 -文字列を16進数の数に変換するプログラムmy_atoi16の作成
  -0xが先頭についていた場合のことも含めて作成
  -テストプログラムの作成

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


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

 -行を読むプログラムをバイナリフォーマットで行うようにする
  -バイナリファイルを読み込み、
   Pを読み込むと(10, 10)に点を打ち、Lを読み込むと(15, 15, 20, 20)に線を描き
   sを読み込むと表示させるプログラムの作成

コメント

だんだんとバイナリを扱う感じになってきた。my_atoi16 で 0x がついたものに対応した。よしよしって感じかね。一歩一歩進んでいるという感じ。

新人高橋君 日報 8/5(金) 18:28

作業報告します

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

 -バイナリファイルを読み込みコマンドに応じた図形を描画するプログラムの作成
  -Pを読み込むと(10, 10)に点を打ち、Lを読み込むと(15, 15, 20, 20)に線を描き
   sを読み込むと表示させるところまで

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

 -バイナリファイルを読み込みコマンドに応じた図形を描画するプログラムの作成
  -バイナリファイルの作成
  -コマンドに応じた図形を描画するプログラムの作成

コメント

ん?ついにちょっと作業がアクセラレートされた?来週に期待しちゃうね。(10, 10) への点うちと(15, 15) - (20, 20) への線はできたらしい。いままで三角形とか書いてたからそこは難しくないでしょう。