らんだむな記憶

blogというものを体験してみようか!的なー

コピペグラマ

基本ドキュメントなんて読まんから

unsigned short val; // 66535 までの整数値しか扱わない
scanf("%u", &val);

とかでよくスタック破壊をしたものだ。

$ man scanf
SCANF(3) BSD Library Functions Manual SCANF(3)

NAME
fscanf, scanf, sscanf, vfscanf, vscanf, vsscanf -- input format conversion
...
u Matches an optionally signed decimal integer; the next pointer must be a pointer to unsigned int.

なんて意欲的な確認ってどうやってするんだろう・・・。あれれ〜?とか思いつつ cvs commit して大惨事が起きてから知ることになるのでは・・・という。そして次に

unsigned int *val; // 66535 までの整数値しか扱わない
scanf("%u", val);

で速攻で SEGV で詰んでみると。

1. 適当にggる。
2. 良さそうな Qiita を見つける。(Stack Overflow は難しいから読まない)
3. コピって貼り付けてみる。
4. 動かなかったら動くやつを求めて 1.〜3. を繰り返す。
5. 動いたので完成!!

という最強のルーチンで日々を過ごしちゃってるからヤバいね。Qiita 便利すぎ。親切なお兄さんが多いっていうか、かなりの確率でコピペしてとりあえず動くコードが見つかるし、日本語だし。コピペグラマに磨きがかかっちゃったね。でも、そういうコピペグラマは多いんじゃないかな・・・。そう思うと、Qiita も罪深いのだろうか・・・。本だけ渡して「後はお前の仕事だから、考えて作って責任持つこと」ってな古き良き(?)時代のほうが堅いかもしれんなぁ。でも最近は「エラーで動きません!」ってのもよく聞くようになったから、別にいいのかな?そう考えると printf("[error] '%d' is not expected.\n", val); って書くと「エラー」だけで読んで後ろのバッファが丸っと捨てられるので printf("読んでね。ここは %d 行目なんだけど、ここで %d って数値は変なんだ。この後のコードをちょっと眺めてみて?\n", __LINE__, val); って日本語で書くとユーザー?フレンドリーでいいかもしれない。

・・・という時代を言い訳にコピペ生活を TensorFlow や PyTorch でやると全然 matrices の次元が合わなくて詰む。エラーを参考に数字だけ辻褄を合わせてもう一度詰む。そして日が暮れる・・・。根本的なところが理解できないので詰みすぎ・・・orz