ときどきの雑記帖 RE* (新南口)
A Fall of Moondust
スレッガーさん
そういえば「なーんてすごいんでしょボク」 ってセリフはめぐりあい宇宙にはなかったか。 井上さんのあの声でこのセリフのイメージもわかないけど😓 (チキチキマシン猛レースのキザトトくんぽい?)
やっぱりTV版とめぐりあい宇宙ではけっこう キャラのイメージ違うよねえ
The IDEON
接触篇で出番のなかったアバデデさまは 思わず「さま」をつけたくなってしまう キャラの一人😄
どんぶり展
美濃焼“どんぶり”の企画展「ラーメンどんぶり展」横尾忠則やLiSAらデザインの丼が東京・六本木に - ファッションプレス
へー、面白そう
pointer
Excel
前回の早見表作成の関数をもう少しいじった。
=LET(_N, 26,
_MC, 16384,
_SL, CEILING(_MC, _N)*2,
_X, SEQUENCE(_SL,1,1,1),
_Y, _X-1,
_O, INT(_Y/(_N*2)+0.5)*_N,
_R, INT(_Y/_N),
_XO, _X-_O,
WRAPROWS(
IFS(_XO>_MC, "",
MOD(_R,2)=0, TEXTBEFORE(ADDRESS(1,_XO,2),"$"),
TRUE, _XO),
_N))
あとは条件付き書式でごにょごにょすれば 元ネタの早見表と同じようなもの(ただしXFDまである)が完成。
この関数、というか計算式をどう求めたかというと 結構泥臭く、まずは手作業でこんな表を作った
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 6 7 8 9 10 11 12 13 14 15 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 21 22 23 24 25
0 0 0 0 0 5 5 5 5 5 5 5 5 5 5 10 10 10 10 10 10 10 10 10 10 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 20 20 20 20 20
この表は簡単のためアルファベット26個のところを5個を一組として、 1行目に通し番号、 2行目にアルファベットに変換する番号とそれに対応する番号の組、 3行目に1行目の値と2行目の値の差を置いたもの
で、この表を作るawkスクリプトを試行錯誤しつつ作成
seq 1 45 | gawk -vN=5 '{v=int((NR-1)/(N*2)+0.5)*N; print $1, $1-v, v}'
1 1 0
2 2 0
3 3 0
4 4 0
5 5 0
6 1 5
7 2 5
8 3 5
9 4 5
10 5 5
11 6 5
12 7 5
13 8 5
14 9 5
15 10 5
16 6 10
17 7 10
18 8 10
19 9 10
20 10 10
21 11 10
22 12 10
23 13 10
24 14 10
25 15 10
26 11 15
27 12 15
28 13 15
29 14 15
30 15 15
31 16 15
32 17 15
33 18 15
34 19 15
35 20 15
36 16 20
37 17 20
38 18 20
39 19 20
40 20 20
41 21 20
42 22 20
43 23 20
44 24 20
45 25 20
あとはExcelでの式に書き換えておしまい。
セミコロン
ここでバグを見つけることができれば、あなたは海洋生物学者の 99% よりも優れた開発者です。 ご覧のとおり、出力は 5 です。
— kenji (@kenjinote) January 4, 2025
ちなみに私にはわからなかった。 https://t.co/oTzUMUcUUR pic.twitter.com/cLlDQgnKNL
5秒では見つけられなかった😓
でもイマドキのコンパイラーなら警告はしてくれるよね
#include <stdio.h> int main() { int i, sum = 0; for (i = 0; i < 5; i++); { sum += i; } printf("sum = %d\n", sum); return 0; }
この件で
この件、CERT C 的には「if/for/whileと同じ行にセミコロンを書くのが悪い」らしいのだが(https://t.co/fj4Lgc9uWg)、これだと例えば
— AoiMoe a.k.aしお兄P (@AoiMoe) January 5, 2025
if (...) ;
にフォーマッタ通して
if (...)
;
になった後に lint 掛けると通ってしまうので、なかなか難しい。 https://t.co/8BkrNgE8d9
これってセミコロンの前にコメント入れないと警告するんじゃなかったっけ? と調べたのだけど
for や while ループのボディは空でも一行を使い、 コメントアウトして、空ボディは意図的で、コードが欠けている訳では ないことを示す。
while (*dest++ = *src++) ; /* VOID */
どうも記憶違いっぽい?
ところで LINT(7) - マクロのパッケージとその約束事 - YOS OPENSONAR に挙げられているメッセージに
125
ANSI C forbids ordered comparisons of pointers to functions
ANSI C は関数へのポインタの順序付けられた比較を禁じます
というのがあって、「順序付けられた比較」ってなんぞ? と悩んでしまった。これは
103945 – No warning for ordered comparison of function pointers ?
$ more jan7f.cc typedef int (*FP)(void); bool f( FP fp1, FP fp2) { return fp1 < fp2; } gcc trunk says nothing: $ /home/dcb/gcc/results/bin/gcc -c -g -O2 -Wall -Wextra -pedantic jan7f.cc $ and clang-13 says something: $ /usr/bin/clang++ -g -O2 -Wall -c jan7f.cc jan7f.cc:6:13: warning: ordered comparison of function pointers ('FP' (aka 'int (*)()') and 'FP') [-Wordered-compare-function-pointers] return fp1 < fp2; ~~~ ^ ~~~ 1 warning generated.
これをみて、ああこのことかと納得。
もうひとつ lint ソースコード検査プログラム によれば
/*EMPTY*/
というlintを黙らせるためのコメントが挙げられているんだけど、 if文に使うってあるんだよねえ。 これをforやwhileで、セミコロンの前に置いた ソースを見た覚えがあるんだけどなあ
根本的にはブロックを取らない if/for/while が悪いし、常にブロックを取るようにした go が正しいわけだが、まあ今更 C/C++ でそれを禁止するのもなあ、というアレはある。
— AoiMoe a.k.aしお兄P (@AoiMoe) January 5, 2025
Perlは4.019の辺りで それまでは単文も置けたのが ブロック必須に変更したんだけど、 さすがにそういうことはそうそうできるもんではないっすね
新刊近刊
世界で一番美しい○○図鑑
こういう本好きだ
世界で一番美しい工具図鑑 | セオドア・グレイ, ニック・マン, 高野倉匡人, 武井摩利 アフィリエイトリンク
で、この著者は同様の図鑑を色々出しているらしい
- 世界で一番美しいエンジン図鑑 | セオドア・グレイ, ニック・マン, 森本 雅之, 武井 摩利 アフィリエイトリンク
- 世界で一番美しい「もの」のしくみ図鑑 | セオドア・グレイ, 前島 正裕, 佐々木 勝浩, ニック・マン, 武井 摩利 アフィリエイトリンク
著者は違うけど少し前にはこんな本も 身近すぎて気づかない、偉大な発明図鑑 | クライブ・ギフォード, 定木大介, ナショナル ジオグラフィック アフィリエイトリンク
機械語がわかる図鑑
機械語がわかる図鑑 | 松浦 健一郎, 司 ゆき |本 | 通販 | Amazon
なんだろうこの本。
awk
OTA
getlineと$(“foo”)の件、修正された。
- getline < directory returns zero · Issue #249 · onetrueawk/awk
- fix issue #249 don’t try to read or write a directory · onetrueawk/awk@ed43b8f
- awk/run.c at ed43b8f6bf63acdacaaf6788e2ba5f0ec202147c · onetrueawk/awk
どう直すのかと思ったのだけど、オープン時に対象がディレクトリかどうかを 確かめるようにしたようだ。 確かに後から読めないのが確定しているのだかからこれでいいわけか。
FILE *openfile(int a, const char *us, bool *pnewflag)
{
const char *s = us;
size_t i;
int m;
FILE *fp = NULL;
struct stat sbuf;
if (*s == '\0')
FATAL("null file name in print or getline");
for (i = 0; i < nfiles; i++)
if (files[i].fname && strcmp(s, files[i].fname) == 0 &&
(a == files[i].mode || (a==APPEND && files[i].mode==GT) ||
a == FFLUSH)) {
if (pnewflag)
*pnewflag = false;
return files[i].fp;
}
if (a == FFLUSH) /* didn't find it, so don't create it! */
return NULL;
for (i = 0; i < nfiles; i++)
if (files[i].fp == NULL)
break;
if (i >= nfiles) {
struct files *nf;
size_t nnf = nfiles + FOPEN_MAX;
nf = (struct files *) realloc(files, nnf * sizeof(*nf));
if (nf == NULL)
FATAL("cannot grow files for %s and %zu files", s, nnf);
memset(&nf[nfiles], 0, FOPEN_MAX * sizeof(*nf));
nfiles = nnf;
files = nf;
}
fflush(stdout); /* force a semblance of order */
/* don't try to read or write a directory */
if (a == LT || a == GT || a == APPEND)
if (stat(s, &sbuf) == 0 && S_ISDIR(sbuf.st_mode))
return NULL;
m = a;
if (a == GT) {
fp = fopen(s, "w");
} else if (a == APPEND) {
fp = fopen(s, "a");
m = GT; /* so can mix > and >> */
} else if (a == '|') { /* output pipe */
fp = popen(s, "w");
} else if (a == LE) { /* input pipe */
fp = popen(s, "r");
} else if (a == LT) { /* getline <file */
fp = strcmp(s, "-") == 0 ? stdin : fopen(s, "r"); /* "-" is stdin */
} else /* can't happen */
FATAL("illegal redirection %d", a);
if (fp != NULL) {
files[i].fname = tostring(s);
files[i].fp = fp;
files[i].mode = m;
if (pnewflag)
*pnewflag = true;
if (fp != stdin && fp != stdout && fp != stderr)
(void) fcntl(fileno(fp), F_SETFD, FD_CLOEXEC);
}
return fp;
}
awk doesn’t convert strings to zero for $0 · Issue #250 · onetrueawk/awk はメッセージを出すチェックを削除したようだ
Fix indirect field specification with non-numeric string eg. $(“foo”). · onetrueawk/awk@f494dca
m = (int) val;
- if (m == 0 && !is_number(s = getsval(x), NULL)) /* suspicion! */
- FATAL("illegal field $(%s), name \"%s\"", s, x->nval);
- /* BUG: can x->nval ever be null??? */
tempfree(x);
gawk
- Issues caused by array elements passed to a function: crash dumps, reads
- fatal: typeof: unknown argument type `Node_param_list’
XML
「くそっ、何回転生しても先にXMLが生まれてしまう!」 https://t.co/yUZqy3p3NT
— Junya Ogino (荻野淳也) (@ogijun) January 6, 2025