ときどきの雑記帖 RE* (新南口)
Sharpen the saw
ガンダム@テレ玉
宇宙要塞ア・バオア・クー
- 暗号コードベータ・トワ
- あえて言おうカスであると
- あんなの飾りです
- 意外と兄上も甘いようで
- なぜ出てくる
実際のところ、ソーラ・レイの直撃でどのくらいの艦艇が沈んだんだろうか。 劇中のセリフからすると、 第2大隊と第3大隊は無傷と言わないまでもそれほど被害は大きくなさそうな気もするし。
冒頭、デギンのセリフ 「これで和平が」は めぐりあい宇宙だと 「これでギレンは」 だったような(確かめない)
ところでジオングの足りない20%ってどの部分だったんですかね。 一説には「足」じゃないかという話もあるみたいだけど。
で、そのジオング、指をビーム砲にする必要はあったんだろうか? まあ絵面的にその方が…とかだろうけど。 あと有線サイコミュで操作できるのが両腕の2個というのは少ないような (ここでも「足」説が)
次回 脱出
デコポン
そう言えば今シーズンはまだ食べていない
smallest executable ELF
- 100万回のHello, World! - バイナリサイズを削って遊ぼう、112バイトから104バイトへ - コグノスケ
- 100万回のHello, World! - バイナリサイズを削って遊ぼう - コグノスケ
レジスタに0x1を代入するとき、movではなくpushとpopを使う
なぜpush/popで?と思ったがレジスターにmovするときと違って イミディエイトの大きさが変わるのね。 x64(x86も)には68000みたいな moveq命令ないしなあ
Hash table
Undergraduate Upends a 40-Year-Old Data Science Conjecture | Quanta Magazine
- [2111.12800] Tiny Pointers
- [2501.02305] Optimal Bounds for Open Addressing Without Reordering
- Uniform hashing is optimal | Journal of the ACM
後で読む(読めたらいいなあ)
21st Century C++
21st Century C++ – Communications of the ACM
色々面白いものがあるな。
The solution to this problem is to tie the size firmly to the pointer (like in Vector; §3.1). That’s what a span does:
void f(span<int> a) // a span holds a pointer and the number of elements pointed to
{
for (int& x: s) // now we can use a range-for
do_something_with(x);
}
int a[100];
// …
f(a); // type and element count deduced
f({a,1000}); // asking for trouble, but marked syntactically and easily checkable
これとか
BSP4K
BSプレミアム4K、『ウルトラQ』『ウルトラマン』『ウルトラセブン』を一挙放送。4月改変にて - PHILE WEB
BSP4Kは観られないんだよなあ
Sharpen the saw
前回の
ノコギリの刃を研いだらどうですか?
この寓話はノコギリじゃなくてオノだったような。 あとノコギリ(の刃)って砥げるものなの?🤔
のつづき。
ある森の中で一生懸命にノコギリで木を切ろうとしている木こりがいた。 しかし、きこりの持つノコギリの刃は錆びついており、なかなか切れない。 そんな中、一人の男がその木こりを見てこういった。
「ノコギリの刃を研いだらどうですか?そうすれば、もっと早く木が切れると思いますよ」
しかし、木こりはこういった。
「ただでさえ木が切れなくて忙しいのに、刃を研ぐ時間なんてある訳ないだろ」
今回は第七の習慣「刃を研ぐ」をご紹介します。この習慣は自己研鑽の習慣です。 「刃を研ぐ」という表現は、あまり耳にしたことがない言葉だと思います。その所以はイソップ物語からきています。 ある日の朝、旅人は山の中を歩いていました。奥深い森の中、汗を流しながら一生懸命に木を伐っているきこりを見かけました。 そして夕方、同じ道を戻ってみると・・・、朝と同じ場所で、玉の汗をかきながら一生懸命木を伐り続けているきこりがいました。 でも、あんまり作業は進んでいないようでした。旅人は足を止めてよくよく見ると、きこりが使っているノコギリの刃は、 ボロボロでした。そこで、きこりに声をかけました。
旅人:「きこりさん、精がでますなぁ。でもあんまり作業は進んでないみたいですね、一旦手を止めて、ノコギリの刃を研いだらどうですか?」
きこり:「旅人さんよ、なに言ってるんだよ、刃を研ぐ時間なんておいらには無いんだよ、木を伐るのが忙しくてさ・・・。」
「7つの習慣」の第7章の原題が
Sharpen the Saw
なので、
木こりが使っていた道具はノコギリで間違いなさそう。
そしてsharpen
には確かに「(刃物を)砥ぐ」という訳もあるのだけど、
前回から書いているようにノコギリって砥ぐものなのだろうか?
という疑問が
Sharpen the Saw: Exploring Covey’s Final Habit | Art of Manliness
ノコギリの手入れ
樵のジレンマ
んで
二つ目の引用元にイソップ寓話(童話)からとあったので 探してみたのだけど、どうもそれっぽい物が見当たらない (木こりが登場する話はいくつかある)。
それとこの話の「ノコギリ」を「オノ」に置き換えると ネット上でわりと見かける話になり、 これもイソップ寓話からとしているものがちらほらある ということで いくつか言及している記事を見てみたのだけど、 どれも「イソップから」とだけで さらに突っ込んだ情報がないのだった。
- イソップ寓話 - Wikipedia
- ペリー・インデックス - Wikipedia
- Aesop’s Fables - Wikipedia
- Perry Index - Wikipedia
- The Fox and the Woodman - Wikipedia
- 金の斧 - Wikipedia
- The Woodcutter and the Trees - Wikipedia
- 狩人と樵 - Wikipedia
- Sharpening the Axe - Why Preparation Matters | by Rajesh Saxena | Write A Catalyst
- #93. The Wood-Cutter | Academic Alliance
「イソップから」の出所どこ?🤔
the / a
今回調べている途中で知った事実
- sharpen the pencil
- sharpen a pencil
この二つ、訳すとえらい違いになります😄
NESFab
ファミコン(NES)用プログラムのためのプログラミング言語。
NESFab is a new programming language for creating NES games. Designed with 8-bit limitations in mind, the language is more ergonomic to use than C, while also producing faster assembly code. It’s easy to get started with, and has a useful set of libraries for making your first — or hundredth — NES game.
// This small program plays a sound effect.
// Variables:
vars /sound
UU pitch = 1000
// Sends 'pitch' variable to the APU, emitting sound:
fn play_sound()
{$4015}(%100)
{$4008}($FF)
{$400A}(pitch.a)
{$400B}(pitch.b & %111)
mode main()
{PPUCTRL}(%10000000)
while true
pitch *= 1.01
play_sound()
nmi
前に見たのと同じもの?
今日の重箱の隅
- [B! vim] エディタ選びのポイント、ITエンジニア人生を左右するツールのいろは - Software Design 2025年3月号の特集記事を先行公開 | gihyo.jp
- エディタ選びのポイント、ITエンジニア人生を左右するツールのいろは——Software Design 2025年3月号の特集記事を先行公開 | gihyo.jp
読んでみていくつか気になる記述があったので調べてみたのだけど、 明確に間違いというほどのものでもなかった… のだけどせっかくなので確認したもの一覧😄
- Text editor - Wikipedia
- O26 (text editor) - Wikipedia
- ed (テキストエディタ) - Wikipedia
- ex (text editor) - Wikipedia
- Line editor - Wikipedia
- Expensive Typewriter - Wikipedia
- QED (text editor) - Wikipedia
- Emacs - Wikipedia
- vi (text editor) - Wikipedia
- editor for mortals
データ構造
おまけ。 上記の検索中に(今回の話題とは関係ないけど)一緒に見つけたもの。
- Piece table - Wikipedia
- Rope (data structure) - Wikipedia
- テキストエディタで使われがちなデータ構造 Piece Table の概要と実装 - A Memorandum
- Piece Table 【アドベントカレンダー2018 25日目】 | 東京科学大学デジタル創作同好会traP
- Piece Table - pogi-log
- テキストエディタ用バッファの各種データ構造とその評価 (2)
printf
%n
printfの%n https://t.co/Wg783D9rB3 非推奨にされかけたけど許された機能でもあるんすよね https://t.co/jmw5h1aRNk
— yoh (@yohhoy) February 7, 2025
printfファミリ書式指定%nの応用例 - yohhoyの日記
へー>非推奨にされかけた
printf戻り値
ということでprintfの戻り値の話のつづき
v7
v7unix/v7/usr/src/libc/stdio/printf.c
#include <stdio.h>
printf(fmt, args)
char *fmt;
{
_doprnt(fmt, &args, stdout);
return(ferror(stdout)? EOF: 0);
}
v7でもEOFか0を返してますな。
2.11BSD
2.11BSD/src/lib/libc/stdio/printf.c
#include <stdio.h>
printf(fmt, args)
char *fmt;
{
_doprnt(fmt, &args, stdout);
return(ferror(stdout)? EOF: 0);
}
これは前回のと同じ。v7と変わってない。
v7でもそうだけど、書式指定に従って出力内容を組み立てる(のとそれを出力する)のは アセンブリ言語で書かれている
2.11BSD/src/lib/libc/pdp/stdio/doprnt.s
4.3BSD
一気に4.3BSD(Reno)までスキップ
4.3BSD-Reno/src/lib/libc/stdio/printf.c
#include <stdio.h>
printf(fmt, args)
char *fmt;
int args;
{
int len;
len = _doprnt(fmt, &args, stdout);
return(ferror(stdout) ? EOF : len);
}
引数リストがちょっと変わっているだけ。 でも関数の戻り値は省略(= int)のままなんですな。
glibc
参考までにglibc glibc/stdio-common/printf.c at master · lattera/glibc
#include <libioP.h>
#include <stdarg.h>
#include <stdio.h>
#undef printf
/* Write formatted output to stdout from the format string FORMAT. */
/* VARARGS1 */
int
__printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
#undef _IO_printf
ldbl_strong_alias (__printf, printf);
/* This is for libg++. */
ldbl_strong_alias (__printf, _IO_printf);
戻り値の型がintなのは良いとして、それが出力した文字数なのかは vfprintfやさらにその下に潜っていかないとわからない。 が、今回は潜らない
c libraryの歴史?
話は変わるけど、libcというか標準的なライブラリの内容の 変遷のようなものをまとめた人っていないかなあ。いないだろうなあ
それはさておき printf(3) - OpenBSD manual pages の「HISTORY」セクションを見ると
HISTORY
The predecessors ftoa() and itoa() first appeared in Version 1 AT&T UNIX. The function printf() first appeared in Version 2 AT&T UNIX, and fprintf() and sprintf() in Version 7 AT&T UNIX.
V2の時代からprintfはあったらしい。 それじゃあとソースを見てみるとこんなだった
printf(fmt,x1,x2,x3,x4,x5,x6,x7,x8,x9)
char fmt[];
{
extern printn, putchar;
char s[];
auto adx[], x, c;
adx = &x1; /* argument pointer */
loop:
while((c = *fmt++) != '%') {
if(c == '\0')
return;
putchar(c);
}
x = *adx++;
switch (c = *fmt++) {
case 'd': /* decimal */
case 'o': /* octal */
if(x < 0) {
x = -x;
if(x<0) { /* is - infinity */
if(c=='o')
printf("100000");
else
printf("-32768");
goto loop;
}
putchar('-');
}
printn(x, c=='o'?8:10);
goto loop;
case 'c': /* char */
putchar(x);
goto loop;
case 's': /* string */
s = x;
while(c = *s++)
putchar(c);
goto loop;
}
putchar('%');
fmt--;
adx--;
goto loop;
}
漂うpre-K&R感… アセンブリ言語版 V2/lib/printf.s もあったけどC版との関係はよくわからない
- printf - Wikipedia
- What is the origin of the name ‘printf’? - Quora
- history - What was the first programming language to have ‘printf’? - Retrocomputing Stack Exchange
- The origin of sprintf-style string formatting - Stack Overflow
ansi2knr
K&R CとANSI Cの過渡期にあった、__Pマクロとansi2knrコマンドの話 #C++ - Qiita
という記事に
- 「ansi2knr」というコマンド
最初に結論
K&R形式のコンパイラとANSI C準拠のコンパイラの両方でコンパイルできるように、ansi2knrというコマンドが使用されていた そのコマンドの仕様が影響して、戻り値の型の後に改行を含む関数定義が多く書かれるようになったのではないかと想像している
とあるんだけど、これ因果が逆で。 関数の戻り値の型をそう置いたものが多かったからansi2knrがそういう仕様で作られた。 じゃなかろうか。
と思って調べ始めたがprintf以上にわからんな。これ。
- Indian Hill C Style Manual
- Indian Hill C Style and Coding Standards as amended for U of T Zoology UNIX
- コーディングスタイルを考える | C言語 - 組み込みすと
- コーディング スタイルの規則 - Win32 apps | Microsoft Learn
- DCL04-C. ひとつの宣言で2つ以上の変数を宣言しない
- 古のコーディング規約
- C言語でのポインタ変数宣言時の *(アスタリスク)の位置 #C++ - Qiita
- Question regarding asterisk in pointer : r/C_Programming
- c++ - Placement of the asterisk in pointer declarations - Stack Overflow
- Where should I put the asterisk for pointers in C++? Is it int* ptr, int * ptr or int *ptr? - Quora
- In C/C++, why do people declare pointers as ‘int x’ instead of ‘int x’? - Quora
- GitHub - MaJerle/c-code-style: Recommended C code style and coding rules for standard C99 or later
- C Coding Standard
- Writing C (GNU Coding Standards)
- Formatting (GNU Coding Standards)
- Apache Developers’ C Language Style Guide - The Apache HTTP Server Project
- 字下げスタイル - Wikipedia
- indent style
- cstyle.ms.pdf
- Indentation style - Wikipedia
- Contextual Indent | Milan Adamovsky’s Blog
- GNU Coding Standards
- C Style: Standards and Guidelines
- CHAPTER 6 : Layout - C Style: Standards and Guidelines
- indent: Indent and Format C Program Source
- Ubuntu Manpage: indent - 空白の挿入や削除を行い、C 言語プログラムの見栄えを変える。
- indent.git -
- v7unix/v7/usr/src/libc/gen
- V6
ところでこんなスタイルがあったらしい
返り値の型は行頭から 1 タブ空けて書き、そのまま改行する。
FORTRAN Compiler on IBM 704
Z80
Z80には間接CALLが無い
— Kei Moroboshi(諸星圭) (@kmoroboshi) February 8, 2025
CALL (HL)
みたいなのね
そういう気が利いた命令が無いのが
実にZ80らしいのである
ってな
CALL先にJP (HL)置いとけばいいからそれで代用してね、ってことなんでしょうねぇ。:)
— UME-3 (@ume3fmp) February 8, 2025
なるほどそんな手が(知らなかった/思いつかなかった)
Will o’ Lisp
なんか #68の日 らしいので...
— Electrelic (@electrelic) June 8, 2022
自作ボードの中でもっともお世話になったものの一つ、MC68010ボード。
CP/M-68K 動かして、その上に Will o' Lisp を移植したのが私のC言語の基礎になってる。 pic.twitter.com/Q1CJnc9GTl
Will o’ Lisp ってどんなんだっけ?と 調べたら意外なもの(?)が検索にひっかっかった
で、要するに
この本に記載されているものらしい。 って読んだことあるわこの本。 ほかの巻でmakeやAdaもどきのコンパイラーを作っていたような。
国会図書館のほかにもいくつか所蔵しているところがあって、近いところだと 県立川崎図書館 交通アクセス | 神奈川県立の図書館 があった。 そう言えばこの図書館ちょっと前に寄付を求めていたところか
川崎図書館 未来の科学・技術者を応援 寄付金で入門書集め、展示 | 高津区 | タウンニュース
電子辞書
【需要減少】カシオ、電子辞書の新規開発を中止https://t.co/bRcISSVHUb
— ライブドアニュース (@livedoornews) February 14, 2025
近年はスマートフォンの普及に加え、学校でパソコンやタブレット端末を使うことが多く、需要が急激に減っているという。2025年度は新製品を発売しないが、現行モデルについては需要に合わせて生産と販売を続ける。 pic.twitter.com/rAW8yxslUW
まあこうなるかあ…
30th
Today is 30 years since Delphi was launched, in February 14th of 1995. pic.twitter.com/9lIRiwIOB0
— pikuma.com (@pikuma) February 14, 2025
たくさん並んだボタンやタブのデザインに時代を感じますですねえ
黄忠
ちなみにこれは洗濯物をまもる剛侯黄忠 pic.twitter.com/vaaJ49r8we
— 中国史好きの一般諡法書生 (@Sui_TangDaisuki) February 9, 2025