ときどきの雑記帖 RE* (新南口)
すべてがFになる
チンアナゴの日
だったらしい。
明大前
明大前駅に“さまざまな自販機”を設置して、どんな商品が売れたのか:水曜日に「へえ」な話(1/4 ページ) - ITmedia ビジネスオンライン
へー。 一度行ってみるかな。
ビジネスケアラー
なる単語をちらほら耳にするようになったのだけど、 「仕事をしながら(家族の)介護をしている人」 を指す意味だとはとれなかったよ……
ビジネスケアラー支援に向けて「企業経営と介護両立支援に関する検討会」を開催します (METI/経済産業省)
新刊近刊
- ソフトウェア工学の基礎 30 (近代科学社Digital) | 吉田 則裕, 槇原 絵里奈 |本 | 通販 | Amazon
- Pythonで学ぶアルゴリズム&改良テクニック | 矢沢 久雄 |本 | 通販 | Amazon
怖いもの見たさ(マテ)で後者はどんなもんだかちょっと気になる。
ルールズ・オブ・プログラミング
(実は半月以上前に)とりあえず読み終わった。 以前書いたように訳注の多さとその基準 (何に訳注をつけ何につけないのか)が 気になった。
- p.31 コード例 s_
- p.47 訳注 ベクター
- p.124 訳注 イディオム
- p.136 訳注 氾濫原
- p.189 二乗複雑性 Quadratic Complexity
- “二乗複雑性” - Google 検索
- quadratic complexity - Google 検索
- p.270~271 遅延バウンド 事前バウンド
- p.292 ベジェ曲線
このほかにも気になった訳注やらがあったと思うけどメモが見つからん😓
で
ルールズ・オブ・プログラミング
— natsutan (@natsutan) September 6, 2023
たしかに、確かに元の英文がおかしいのか翻訳がおかしいのか判断つかない文章だな。 pic.twitter.com/6Thsb3qGAI
この文がある場所も見失ってしまったのだがそれはさておき、 ここで出てくる「可謬姓」、 おそらく原文では fallibility - 英ナビ!辞書 英和辞典 辺りの単語
を使っていると思うんだけど、 もうちょい「砕けた言い回し(表現)」に変えてもいいんじゃないか? という気がした。
ルールズ・オブ・プログラミング
— natsutan (@natsutan) September 6, 2023
ここの謝辞の翻訳だけでも、ちょっと読み辛さあるな・・・
どうしようかな。
最近C++の勉強してないから読みたいんだがhttps://t.co/6rt6UwR1tg
natsutanがどのあたりに「読み辛さ」を感じたのかよくわからんけど、 読点が過剰なことによる(と思われる)読みにくさはあったものの なんじゃこりゃ?という文はそれほどはなかったかなあ。だから
読書感想文「ルールズ・オブ・プログラミング」 - ノートの端の書き残し
原著からして砕けた書き方のようですが、翻訳でもかなりフランクな文体となっています。 個人的には読みやすければ何でも良いのですが、なんか気にする人もいるみたいですね。 (Amazonレビューが文体で評価下げられてて可哀想w)
という感想も出るんだろう。
ところで訳者あとがきの「量」については以前触れたけど、 そのあとがきの最初と最後を見てみると
2020年のことだ。侍が、大量のススキがなびく金色の野山を馬で駆けていく。刀 の一閃で勝負の決着がつく。紅葉が散る中、紅蓮の炎が燃え盛る。時代劇映画の1 シーンと言われても違和感のない数々の情景を、高精細なグラフィックスでリアルタ イムに描き出す―そんなゲームプレイ予告動画を2018年に披露したビデオゲームが、 満を持して発売されたのは、パンデミックが世界を震撼させている最中だった。
どこまでも日本的なそのゲームを最後までプレイし、きわめてドラマティックな終局 を迎えた後には、開発者たちの名前が挙がるクレジットが流れ出す。しかし、その中に、 日本人らしき名前は見当たらないのだ。
時は流れ、2023年3月、サンフランシスコに私はいた。Game Developers Conference (GDC) 2023に、4年ぶりに現地参加するためだ。GDC 2020は参加寸前に 渡航取りやめを余儀なくされ、2022年から米国出張は再開していたものの サンフランシスコ訪問は4年ぶりで、感慨ひとしおだった。パンデミックを経て荒廃した と伝えられた街は、私の目からは、かつてと何ら変わりない活気を帯びてそこにある ように見えた。2019年までは毎年訪れる機会のあった町を離れていた期間が圧縮され、 時が再び動き出したかのようだった。
そして、さらに1つだけ、日本語版独自の読み方に触れておきたい。Chrisと会った 際に、話題にしたことがもう1つある。ルール1の重要性を本書は強調し、以降の ルールでも、コーダーという人間たちにとっての認知的複雑性をいかに減らすか という問題を繰り返し論じる。では、複雑性をやすやすと処理し、かつ人間の傾向を真似 ることもできる、文字通りゲームチェンジャーとしてのAIが野に放たれた時、ソフト ウェアエンジニアという存在は一体どうなってしまうのか。私から話題として挙げた、 そんな今日的懸念に対し、日本語版まえがきではChrisが見解を述べる。その見解に、 あなたは同意するだろうか。それとも、本書は、ある時代のAAAゲーム開発スタジオの 思考パターンを切り取った歴史的資料、あるいはコーダーという滅びゆく 一門の終わりを告げる辞世の句となってしまうのだろうか。1つだけ確かなのは、 本書が、この新しい戦いが幕を開ける際に、学習しておくべき経験の精髄を集約した モデルの1つであるということだ。ルール21が説くように、時には、とにかく果敢に 立ち向かわないといけないこともある。そう、孤独な侍のように。
こんな感じ。こういう文章が気になる人にはオススメできない。たぶん。
それと、感想をハッシュタグ #iknowtherulesjpで投稿してくれ ということも書いてあったりしたので見てみましょう
あー、サンプルで出てくるコード片(C++)のスタイルが気になったけど そこは本の内容とはあまり関係ないからいいや。
strptime
MacOSのstrptimeの件、もうちょい調べてみると
History for stdtime/FreeBSD/strptime.c - apple-oss-distributions/Libc - GitHub にはそれっぽい履歴は見当たらなかったが apple-oss-distributions/Libc の このコミット にすんげー怪しいコードがあった。
+#if __DARWIN_UNIX03
+ if (c == 'Y') {
+ int savei = 0;
+ const char *savebuf = buf;
+ int64_t i64 = 0;
+ int overflow = 0;
+
+ for (len = 0; *buf != 0 && isdigit_l((unsigned char)*buf, loc); buf++) {
+ i64 *= 10;
+ i64 += *buf - '0';
+ if (++len <= 4) {
+ savei = i64;
+ savebuf = buf + 1;
+ }
+ if (i64 > INT_MAX) {
+ overflow++;
+ break;
+ }
+ }
+ /*
+ * Conformance requires %Y to be more then 4
+ * digits. However, there are several cases
+ * where %Y is immediately followed by other
+ * digits values. So we do the conformance
+ * case first (as many digits as possible),
+ * and if we fail, we backup and try just 4
+ * digits for %Y.
+ */
+ if (len > 4 && !overflow) {
+ struct tm savetm = *tm;
+ int saveconv = *convp;
+ const char *saveptr = ptr;
+ char *ret;
+
+ if (i64 < 1900)
+ return 0;
+
+ tm->tm_year = i64 - 1900;
+
+ if (*buf != 0 && isspace_l((unsigned char)*buf, loc))
+ while (*ptr != 0 && !isspace_l((unsigned char)*ptr, loc) && *ptr != '%')
+ ptr++;
+ ret = _strptime0(buf, ptr, tm, convp, loc, tm->tm_year, yday, wday);
+ if (ret) return ret;
+ /* Failed, so try 4-digit year */
+ *tm = savetm;
+ *convp = saveconv;
+ ptr = saveptr;
+ }
+ buf = savebuf;
+ i = savei;
+ } else {
+ len = 2;
+#else /* !__DARWIN_UNIX03 */
len = (c == 'Y') ? 4 : 2;
- for (i = 0; len && *buf != 0 && isdigit((unsigned char)*buf); buf++) {
+#endif /* __DARWIN_UNIX03 */
+ for (i = 0; len && *buf != 0 && isdigit_l((unsigned char)*buf, loc); buf++) {
i *= 10;
i += *buf - '0';
len--;
}
#if
で囲まれている部分なので実際にどうコンパイルされたのかはわからないけど、
これだと先の記事
(macのPHPのstrptimeの挙動がおかしい - mikedaの日記)
にあるような動作になる(と思う)。
%Y%m%d
のように区切りのない入力を考慮し忘れた?
ところでこの条件コンパイル部分のコードは Libc-1353.11.2 · apple-oss-distributions/Libc@3993268 のコミットで削除されているので、 その時期はわからないけど現在のコードには含まれていないっぽい。
assignment
元ボスの講演録。喜多先生と共同研究者(教科書も共同執筆)の岡本雅子先生は「プログラミング初学者がどこで躓くか」を研究しておりその成果がこの教科書に生かされてる。x=x+1とか、記号の読み方が判らないとか。 / “「京大生でもx=x+1が分からない」、喜多教授が明か…” https://t.co/TGrTrnoGa2
— 上原 哲太郎/Tetsu. Uehara (@tetsutalow) November 7, 2023
有料会員限定記事で無料部分しか読んでいないので 記事そのものについてとくに言及することはなく (往々にして有料会員限定部分に重要(肝心)なことがあるのでね)。
[B! プログラミング] 「京大生でもx=x+1が分からない」、喜多教授が明かすPython教育の実態
で、まあいろいろご意見が出ていますが
代入に=を使ったのが全ての元凶。とは言え、日本語も表示できないASCIIコードの選択肢では仕方のない判断だった
正直プログラミングに使うには、文字種類が足らない気がするよね。もっとふさわしい記号が開発されてキーボードに印字される道もあった気がする
ではここでFORTRANが最初に実装されたIBM 704で使われていた文字セットを見てみましょう😄
BCD (character encoding) - Wikipedia
ちなみにASCIIの制定は1963年なのでFORTRAN誕生よりも後😄
そして代入記号に=
が使われるのが主流になった理由はまあいろいろあるわけで
最初に=
を代入として使ったのはFORTRANではないので、FORTRAN悪役説は説得力に欠けるかな。
(それ以前のものに比べて)広く使われたものだったからという見方はあるかもしれないけど、
それ言ったらCの方が影響大な気も。
ところで:=
を最初に代入記号としたのはALGOL(ALGOL 58)らしいのだけど、
なぜ:
と=
の組み合わせにしたのかはちょっと調べた範囲ではわからなかった。
←っぽく見えるのは<-
あたりだよねえ(Rなどで使われてますな)。
=
と組み合わせた<=
だと≦と被る。
ECMA-1
(ECMA-1 - Ecma International)
やASCIIの範囲で組み合わせを考えると、使えるのはあまり多くはなさそう。
あとBASICのLETの件はHOPLでKemenyかKurtzのどちらかが 言及していたと思うけどどうだったかな。
x=x+1というコードで初学者が混乱という話、そういう方程式と読んでるというのは違うんじゃないかなあ。左辺に変数しか来ないことの意味は理解されてる(x=y+1とy=x-1 が同じに見えてることはない)と思うので。どちらかというとhttps://t.co/4fb8vWlIVW を自然なメンタルモデルとして持ってるからでは
— kinaba (@kinaba) November 8, 2023
VBAの「=」が比較演算子と代入で一緒なのがわかりにくいかどうかは置いておいて、一般ピーポー的VBAerと英国紳士的VBAerの記述の違いを披露いたしますw
— りゅうりゅう@VBAer × ココナラPRO認定 (@blacklist_ryu) November 7, 2023
画像1枚目:一般ピーポー的VBAer
画像2枚目:英国紳士的VBAer pic.twitter.com/vRUV34XYEB
😄
無学で申し訳ないが、
— あかの なおき (@akano_naoki) November 9, 2023
* 黎明のある時期には合理性があった
* コモディ化という新たな合理性が生まれた
* 元の合理は消えても後者の合理で残った
という、qwertyキーボード的なものだとしたら、盲目的に受け入れることを成長と呼ぶのには抵抗がある。既得権者の傲慢に思える。<-, := はダメか? https://t.co/Nu5hc5ULmj
ありがとうございます!
— あかの なおき (@akano_naoki) November 9, 2023
ものすごく腑に落ちました!
確かに教育用に特化することを目的としない言語では、そういう意味で「初心者」にご負担を強いてでもここは実現したい、と私でも以後は考えるようになります。言語やルールを設計する際の指針になりました!
= をアサインに使うのが気持ち悪いのなら、Haskellにおいでよ。
— Nobuo Yamashita (@nobsun) November 10, 2023
経験者が「郷に入れば郷に従え」と初心者にわかりづらい表層構文を押し付けるのは傲慢で、プログラミング言語の進化の観点からは停滞でしかない。
— mod_poppo (@mod_poppo) November 9, 2023
プログラミング言語で=が代入に使われるのは、電流の向きと電気の運動の向きが逆になってしまったのと同じような不幸な慣習であるので、文句は言いつつも慣れるしかない vs =が代入なのは一部の言語の選択に過ぎないのだからそうではない言語を使って教育すれば良い
— mod_poppo (@mod_poppo) November 9, 2023
awk
FORTRAN Compiler on IBM 704
This is historically impossible
C言語の++, --の演算子はもともとPDP-11のアドレッシングモードにあったオートインクリメント、オートデクリメントに対応させるためにあったのじゃよ。これはMC68000にも引き継がれている。
— koba (@tetsu_koba) November 10, 2023
*dst++ = *src++;
が一命令として生成される。
この「俗説」(dmr自身が否定している)も消えないっすねえ
Thompson went a step further by inventing the ++ and – operators, which increment or decrement; their prefix or postfix position determines whether the alteration occurs before or after noting the value of the operand. They were not in the earliest versions of B, but appeared along the way. People often guess that they were created to use the auto-increment and auto-decrement address modes provided by the DEC PDP-11 on which C and Unix first became popular. This is historically impossible, since there was no PDP-11 when B was developed.
(The Development of the C Languageから。強調はワタクシによる)
PDP-11にしても68000にしても、あるのは pre-decrementとpost-incrementだけなわけで、 その辺は皆さん(誰)どうお考えなんですかね:think:
MAT
Full BASICなるものがあったんだ…そしてそこには行列演算が定義されてるらしい。初めて知った。
— MURAOKA Taro (@kaoriya) November 10, 2023
実は(?)元々のBASICからあったものだったりする>MAT命令
The original Dartmouth Basic was unusual in having a matrix keyword, MAT.[g] Although not implemented by most later microprocessor derivatives, it is used in this example from the 1968 manual[98] which averages the numbers that are input:
移植先で省かれちゃったんですね (予約語としてだけ生き残っているN-BASICみたいなものもある)。 Full BASICはこのDartmouth Basicの直系の子孫なので そういうのもあると。
parse.y
parse.yよく分からん
— さっきつくった (@make_now_just) November 9, 2023
😄
Swift
いよいよ?
Swift removing ++ and -- operators because they can be confusing because of code like this:
— vx-underground (@vxunderground) November 7, 2023
int i = 5;
i = ++i + i++;
This is the beauty of the C/C++ programming language. You can make the metaphorical gun and metaphorically shoot yourself with it. Also, don't code like this
著作権
プログラムやそのソースコード(の内容)を著作権で保護すべきか (あるいは他の権利・法律で保護すべきは)と言った話は 大昔にあったはずだけど昔のことなのでよく知らない。
- なぜ、ソフトウェアは著作権で保護されているのか?:栗原潔の知財とITの交差点 - ITmedia エンタープライズ
- 「プログラムの著作権」に対する日本と海外の考え方の違い 「法解釈の歴史」と「石橋を叩いて渡る文化」が生み出した“グレーゾーン” - ログミーTech