ときどきの雑記帖 RE* (新南口)
2025
2025
ことよろ
ガンダム@テレ玉
恐怖!機動ビグ・ザム
- シン中尉
- 失礼だが、マ・クベ殿は宇宙で戦う兵士の心がわかっておられぬ
- ああいうのはやりづらいんだよな
- ティアンム戦死
- 悲しいけどこれ戦争なのよね
- やらせはせんぞー
次回、「テキサスの攻防」
もちろん、コアブースターの方がリアリティあると思うけど、ビグザムに特攻かける時だけは、やはりガンダムを守るための最初の盾として犠牲覚悟で合体して散っていった展開の方が好きでした
— 万乗 大智 (@jgdjgdjgd) August 9, 2023
作画的には圧倒的に劇場版凄かったけど
テレビ版しかないGファイター2機並んで飛ぶのを見ると胸熱になる😭 pic.twitter.com/frXNIwjj1E
確かにめぐりあい宇宙でのコアブースター+ガンダムでビグ・ザム追撃はちょっと不自然さがあったかな (じつはめぐりあい宇宙でも1カットだけGアーマー状態からのガンダムの腕が見える)
実際のところ、どのくらいの規模でソロモンを攻めて、損害はどれくらい出たんだろうか。 あまり被害が大きいとそのままア・バオア・クーへ行くのも無茶だろうという話になるし。 やっぱりソロモン攻略後、レビル麾下の艦隊が増援として(コンペイトウに)到着。 そこからア・バオア・クーへ向かった先でソーラ・レイ食らった。という流れ?
The IDEON
実は接触篇も結構好きだったりする。 特にラストのナレーションからセーリング・フライへの流れ。
朴念仁や破廉恥(漢字で書く方)という言葉はイデオンで覚えました😄
沿線火災
【火事情報】『架線や信号ケーブル破損』神奈川県横浜市南区南太田2丁目 #京急本線 南太田駅〜井土ヶ谷駅間で沿線火災 運転見合わせ #都営浅草線 #京成押上線 など遅延1月4日 #京急 #火災 : 事件災害速報ニュース https://t.co/uAYmsOxTsj #NHK #横浜市 再開 復旧 時間 羽田空港 代行バス 火事場所 pic.twitter.com/2Cc28jernt
— 災害火災画像速報ニュース2 (@Gt8VUlzRG7buafO) January 3, 2025
今回みたいに鎮火した後もしばらく運転見合わせになるのはさすがに ほとんどなかったと思うけど、最近(ここ数年)沿線火災多くない?
ところで南太田と井土ヶ谷ってどの辺だっけ? となったので路線図で確かめた
横浜-戸部-日ノ出町-黄金町-南太田-井土ヶ谷-弘明寺-上大岡
なるほどこの辺か。 ひとつ上大岡よりとひとつ横浜よりならわかった(知ってた)のに😓
Advent Calendar
R言語 - Qiita Advent Calendar 2024 - Qiita
21日目の「RってSなの。Tじゃだめなの。」は結局 2024年のアメリカ大統領選は共和党の圧勝だったのかを、ggplotでアメリカ地図を作り視覚化してみる #R - Qiita に差し替えられてしまった。残念。
鬼車
新しいバージョンがリリースされてた。
Release Release 6.9.10 · kkos/oniguruma
変更点として挙げられていたのは以下の三つ
- Update Unicode version 16.0
- Add new operator (*SKIP)
- Fixed: ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS not working for ^* pattern (Issue #292)
二番目が気になったんでドキュメントを見てみると…これか。
oniguruma/doc/CALLOUTS.BUILTIN.ja at master · kkos/oniguruma
* SKIP (前進) (*SKIP) 現在のマッチングが失敗して次の検索を開始する位置を、現在位置まで前進させる 現在のマッチングには何の影響も与えない
たしかPerlにもあったやつだよなあこれ。とPerlのドキュメントにあたると
perlre - Perl の正規表現 - perldoc.jp
(*SKIP) (*SKIP:NAME) このゼロ幅のパターンは *PRUNE と似ていますが、実行されている (*SKIP) パターンまでに マッチングしたテキストはこのパターンの どのマッチングの一部にもならないことを示しま す。 これは正規表現エンジンがこの位置まで失敗として「スキップ」して(マッチングに十 分な空間があれば)再びマッチングを試みることを効率的に意味します。
ふむ。 でもこれかなり昔からあったものだったと思うけど(調べない)、 ここに来て鬼車に追加したってのはなにかあったんだろうか? この辺の実装に関する比較表を作りたいところだけどめんd(ry
ちなみにひとつ前のリリースがいつだったかというと
Release Release 6.9.9 · kkos/oniguruma
Oct 14, 2023
一年ちょっと前。そこから6.9.10のリリースまでは それなりにコミットがあった。
Comparing v6.9.9…master · kkos/oniguruma
Excel
前回書いたこれ
=TEXTBEFORE(ADDRESS(1,SEQUENCE(16384/26+1,26,1,1),2),"$")
でAからXFDまで並べることはできた。 それぞれの下の行に対応する番号を入れるのはさて…
年末年始に暇つぶし(潰せるほどの暇があったのかという問題はあるけど)に考えてみた。 こんな感じで行けた。
=LET(_N, 26,
x, SEQUENCE(16384*2/_N+2,_N,1,1),
_O, INT((x-1)/(_N*2)+0.5)*_N,
_R, INT((x-1)/_N),
IF(MOD(_R,2)=0,TEXTBEFORE(ADDRESS(1,x-_O,2),"$"),x-_O))
ただこれだとXFDを超える部分がエラーになって美しくないのでちょっと手当て。
=LET(_N, 26,
x, SEQUENCE(16384*2/_N+2,_N,1,1),
_O, INT((x-1)/(_N*2)+0.5)*_N,
_R, INT((x-1)/_N),
IFS(x-_O>16384, "",
MOD(_R,2)=0, TEXTBEFORE(ADDRESS(1,x-_O,2),"$"),
TRUE, x-_O))
同じ部分式(x-1
やx-_O
)が何度も出てくるのがイマイチだけどまあいいか(投げやり)
あとWRAPROWSを使うとSEQUNCEの引数が少し簡単にできるか
(16406はceil(16384/26)*26
の値)
=LET(_N,26,
x,SEQUENCE(16406*2,1,1,1),
_O,INT((x-1)/(_N*2)+0.5)*_N,
_R,INT((x-1)/_N),
WRAPROWS(
IFS(x-_O>16384,"",
MOD(_R,2)=0, TEXTBEFORE(ADDRESS(1,x-_O,2),"$"),
TRUE,x-_O), _N))
メモ
- 文字列は実質Any問題に対するKotlinのアプローチ 〜TypeScriptのBranded Typesを添えて〜
- 論語とコンピュータ - オープンソースソフトウェア協会
- Spreadsheets 1/3 - Rye Language | Hacker News
AI
- What I’ve Learned from AI-Assisted Programming : r/programming
- What I’ve Learned from AI-Assisted Programming | Average Engineer
Conclusion
- Frequently use AI to develop projects and learn knowledge, architecture, and practices from it.
- Expand your knowledge base from front-end to back-end, to low-level development, and network application development.
- Focus on architecture and design.
- Improve your questioning skills.
Unicon
アイコン(?)もユニコーンだし、言語名も同じかと思ったらUnicorn
ではなくUnicon
で
Unicon, Unified extended Icon, by Clinton Jeffery, Shamim Mohamed, Jafar Al Gharaibeh, Ray Pereda, Robert Parlett, and team.
Icon
にかけての命名?
- Icon (programming language) - Wikipedia
- The Icon Programming Language
- gtownsend/icon: The Icon Programming Language
C++ → Rust
it
Ruby 3.4 の it の落とし穴 #ブロックパラメーター - Qiita
新刊近刊
探索的テストの考え方
「実際にバグのあるソフトウェアがリリースされてしまっていますが、なぜコードレビュー、単体テスト、静的解析、その他の活動で発見されなかったのでしょうか? リリース前にバグを発見する最善策とはどのようなものでしょうか?」
— プログラミングをするパンダ (@Panda_Program) December 31, 2024
『探索的テストの考え方』の概要の一文
いろいろ(謎)余裕がナッシングなので スルーしとくかと思ったけど、 興味が湧いてきてしまった😓
awk
getline
opendir(3)(と関連の関数)がいつごろ入ったものかを調べてみると
man opendir (3): ディレクトリをオープンする
opendir() は SVr4 と 4.3BSD に存在し、 POSIX.1-2001 で規定されている。
SVR4か4.3BSDの頃らしい(どちらが先かとかより詳しい時期は調べない)
opendir - The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition を見てもその歴史等に関しては情報なし。一方
open を見ると
[EISDIR]
The named file is a directory and oflag includes O_WRONLY or O_RDWR.
という記述があり、読み込みのみであればオープンできるものらしい。ただし
read には
[EISDIR]
[XSI] [Option Start] The fildes argument refers to a directory and the implementation does not allow the directory to be read using read() or pread(). The readdir() function should be used instead. [Option End]
とあるので、実質なにができるわけでもない (まあ大昔みたいにディレクトリエントリが読めちゃってもねえ…)
んで検索してみると、古い本(“The Design of the UNIX Operating System”)にあった ディレクトリをreadしているプログラムが動かないんだけど という質問があった
using read() to read the entries of a directory : r/unix
so I have this old book “The Design of the UNIX Operating System” and they do this in the book. however trying to run it on my modern ubuntu does not work…
does anyone know when this stopped working in linux?
using read(2) directly on file of type directory is pretty ancient - hasn’t worked that way in a long time.
それは大昔(ancient)のやり方で、かなり以前にできなくなっているよ。と。そして
Still works on Plan 9!
Plan 9では今でも有効らしい(笑
もう一つ inode - How do I read a directory as a file in Unix? - Stack Overflow によると
In the old days - Version 7, System III, early System V - you could indeed open a directory and read the contents into memory, especially for the old Unix file system with 2-byte inode numbers and a limit of 14 bytes on the file name.
As more exotic file systems became more prevalent, the opendir(), readdir(), closedir() family of function calls had to be used instead because parsing the contents of a directory became increasingly non-trivial.
Finally, in the last decade or so, it has reached the point where on most systems, you cannot read the directory; you can open it (primarily so operations such as fchdir() can work), and you can use the opendir() family of calls to read it.
ファイルシステムが変わったあたりで使えなくなった?
BSDやらはさておき、V7直系の子孫を追いかけると
V7 | 1979年 | 多くのUNIXシステムの祖先となったバージョン。 |
V8 | 1985年 | 4.1cBSDを改造したもの。 |
V9 | 1986年 | 4.3BSD のコードを導入。V8のSTREAMSを強化。内部で使用。 |
V10 | 1989年 | 最後の Research Unix。 |
となっていて、lsのソースの変化を追いかけてみると
v7 ではこうなっているのが
readdir(dir)
char *dir;
{
static struct direct dentry;
register int j;
register struct lbuf *ep;
if ((dirf = fopen(dir, "r")) == NULL) {
printf("%s unreadable\n", dir);
return;
}
tblocks = 0;
for(;;) {
if (fread((char *)&dentry, sizeof(dentry), 1, dirf) != 1)
break;
if (dentry.d_ino==0
|| aflg==0 && dentry.d_name[0]=='.' && (dentry.d_name[1]=='\0'
|| dentry.d_name[1]=='.' && dentry.d_name[2]=='\0'))
continue;
ep = gstat(makename(dir, dentry.d_name), 0);
if (ep==NULL)
continue;
if (ep->lnum != -1)
ep->lnum = dentry.d_ino;
for (j=0; j<DIRSIZ; j++)
ep->ln.lname[j] = dentry.d_name[j];
}
fclose(dirf);
}
v10 ではこうなっていた
getdir(dir, pfp0, pfplast)
char *dir;
struct afile **pfp0, **pfplast;
{
register struct afile *fp;
DIR *dirp;
register struct direct *dp;
int nent = 20;
dirp = opendir(dir);
if (dirp == NULL) {
*pfp0 = *pfplast = NULL;
printf("%s unreadable\n", dir); /* not stderr! */
return;
}
fp = *pfp0 = (struct afile *)malloc(nent * sizeof (struct afile));
*pfplast = *pfp0 + nent;
while (dp = readdir(dirp)) {
if (dp->d_ino == 0)
continue;
if (aflg == 0 && dp->d_name[0]=='.' &&
(dp->d_name[1]==0 || dp->d_name[1]=='.' && dp->d_name[2]==0))
continue;
if (gstat(fp, cat(dir, dp->d_name), 0) == 0)
continue;
fp->fnum = dp->d_ino;
fp->fname = savestr(dp->d_name);
fp++;
if (fp == *pfplast) {
*pfp0 = (struct afile *)realloc((char *)*pfp0,
2 * nent * sizeof (struct afile));
if (*pfp0 == 0) {
dprintf("ls: out of memory\n");
exit(1);
}
fp = *pfp0 + nent;
*pfplast = fp + nent;
nent *= 2;
}
}
closedir(dirp);
*pfplast = fp;
}
opendirを使うようになってますな。 それではと V8 をみると
getdir(dir, pfp0, pfplast)
char *dir;
struct afile **pfp0, **pfplast;
{
register struct afile *fp;
DIR *dirp;
register struct direct *dp;
int nkb, nent = 20;
dirp = opendir(dir);
if (dirp == NULL) {
*pfp0 = *pfplast = NULL;
printf("%s unreadable\n", dir); /* not stderr! */
return (0);
}
fp = *pfp0 = (struct afile *)calloc(nent, sizeof (struct afile));
*pfplast = *pfp0 + nent;
nkb = 0;
while (dp = readdir(dirp)) {
if (dp->d_ino == 0)
continue;
if (aflg == 0 && dp->d_name[0]=='.' && (
#ifdef AFLG
Aflg == 0 ||
#endif
dp->d_name[1]==0 || dp->d_name[1]=='.' && dp->d_name[2]==0))
continue;
if (gstat(fp, cat(dir, dp->d_name), 0, &nkb) == 0)
continue;
fp->fnum = dp->d_ino;
fp->fname = savestr(dp->d_name);
fp++;
if (fp == *pfplast) {
*pfp0 = (struct afile *)realloc((char *)*pfp0,
2 * nent * sizeof (struct afile));
if (*pfp0 == 0) {
dprintf("ls: out of memory\n");
exit(1);
}
fp = *pfp0 + nent;
*pfplast = fp + nent;
nent *= 2;
}
}
closedir(dirp);
*pfplast = fp;
return (nkb);
}
ここですでにreadによる読み込みからreaddirに変わっていた。
V8やV10でopenしたディレクトリからreadするとどうなるかはわからないけど、
気がつかなかったか見落としで
今までそのままになっていたということなのかも>OTAでの getline < "/"
getlineでディレクトリ情報が読めてもawkにとって意味のあるデータが (たぶん)とれるわけでもないから、そんな操作を試したこともなかった という感じか。つかなんでissue立てた人はなんで(どうやって)これに気づいたんだろう?
convert strings to zero
OTAでこんなissueが報告されていた。
awk doesn’t convert strings to zero for $0 · Issue #250 · onetrueawk/awk
$ echo foo bar | nawk '{ print $("2foo") }'
bar
これは$2
となって正しく出力されるのに
$ echo foo | nawk '{ print $("foo") }'
nawk: illegal field $(foo), name "foo "
input record number 1, file
source line number 1
や
$ echo foo | nawk '{ print $("0foo") }'
nawk: illegal field $(0foo), name "0foo "
input record number 1, file
source line number 1
は$0
にならずにエラーになる。ということらしい。
gawkではいずれもエラーにならず動作する
kbk@toybox4:~$ echo foo bar | gawk '{ print $("2foo") }'
bar
kbk@toybox4:~$ echo foo | gawk '{ print $("foo") }'
foo
kbk@toybox4:~$ echo foo | gawk '{ print $("0foo") }'
foo
kbk@toybox4:~$
ちょっとソースを追いかけてみたけど
awk/run.c at master · onetrueawk/awk
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
minrxで動きあり
Add timing shell script in helpers directory. - gawk.git - gawk
- Actually add charset.[ch] files. - gawk.git - gawk
- Update minrx, use charset with it. - gawk.git - gawk
GNU grep
- bug#75197: [Feature Request] Support ‘grep -A’ without number to show al
- bug#75208: Please mention “date %D considered harmful” in manpage
FORTRAN Compiler on IBM 704
2025
そろそろ式の構文解析部分の読解を終わらせたいねえ😓
ということでまとめ的に
参考資料へのリンク
- 704 FORTRAN II - Software Preservation Group
- Assembly listing of transcription - Software Preservation Group
- Index of /pdf/ibm/704
- THE FORTRAN automatic coding system.pdf
- The FORTRAN Automatic Coding System for the IBM 704 EDPM : Programmer’s Reference Manual
- SYSTEMS MANUAL FOR 704 FORTRAN AND 709 FORTRAN
- 4K FORTRAN PROGRAMMER’S REFERENCE MANUAL
- FORTRAN ASSEMBLY PROGRAM(FAP) for the IBM 709.pdf
- fortran-compiler ・ GitHub Topics ・ GitHub
- GitHub - CodethinkLabs/ofc: Open Fortran Compiler
- The Digital Equipment Corporation PDP-7 Computer
- PDP-7 FORTARN II PROGRAMMING MANUAL
- History of FORTRAN and FORTRAN II - Software Preservation Group
- In Search of the Original Fortran Compiler | IEEE Journals & Magazine | IEEE Xplore
- Languages Pre-Fortran - The Craft of Coding
- THE EARLY DEVELOPMENT OF PROGRAMMING LANGUAGES
- Transcription of Smithsonian IBM 704 Fortran II source code. - Software Preservation Group
- Assembly listing of transcription - Software Preservation Group
- A case study in software restoration: IBM 704/709/7090/7094
- The arithmetic translator-compiler of the IBM FORTRAN automatic coding system | Communications of the ACM
- FORTRAN I, II, and 709
- FORTRAN II Hypersource : r/programming
- IBM 704 Software - Sky Visions
- IBM 704 Assembly Addition
- I704 I 704 IBM 704 STARTSCREEN COMPUTER SIMULATION SIMULATOR EMULATOR - YouTube
- GitHub - rhobbie/Sim704: A simulator for the IBM 704 computer
- Simulators - Dusty Decks: Preserving historic software
- Simulators - Dusty Decks: Preserving historic … - McJones
参考資料へのリンクその2
- メモ帳:Fortranのループ変数が I,J,K,L,M,N になった理由 - fortran66のブログ
- 【メモ帳】Fortran で副プログラム引数は FORTRAN II から - fortran66のブログ
- 【メモ帳】雑記 - fortran66のブログ
- 【メモ帳】バッカス講演 - fortran66のブログ
- 【メモ帳】長月の二十日のころ - fortran66のブログ
- LINK切れのメモ帳 - fortran66のブログ
Hugoメモ
結局この連休中も使っているバージョンを上げられなかった
Release v0.140.2 · gohugoio/hugo
319.0
ちょっと前に引っかかりポイントがあったのでメモ
Release v0.139.0 · gohugoio/hugo
This release is mostly about removing code that has been deprecated for a long time. This has been shown as an ERROR in the build log and failed the build for at least the last 6 minor Hugo versions, in most cases much longer.
But this is also a full dependency refresh, and there are also some new stuff. For one, we added a -O flag to hugo server to open up the site in your browser after start. This is now my (@bep) shortcut to start the server:
function h() { hugo server -F -O -N -D }
BPS
「スマホでプログラミング」 懐疑的だったけど認めざるを得ない... https://t.co/X7GCfgaBuz
— yoh (@yohhoy) December 29, 2024
BPSを思い出した😄
が
『BPS バトルプログラマーシラセ』(ビーピーエス バトルプログラマーシラセ)は、独立UHF局を中心に2003年10月から放送されたAIC制作のUHFアニメである。
ぐはっ>2003年10月から放送
まあスマホが影も形もない頃(異論は認める)だからねえ…
size
BYTE←うんうん
— mod_poppo (@mod_poppo) December 30, 2024
WORD←そうだね
DWORD←double wordだね、わかる
QWORD←quad wordだね、わかる
XMMWORD←は?
YMMWORD←おいおい
ZMMWORD←あのなあ…
マジかと思って(疑ってごめんね😄)調べたら確かにそのようで
Assembly Language - Algorithmica
Addressing operator needs to be prefixed with a size specifier for how many bits of data are needed:
- BYTE for 8 bits
- WORD for 16 bits
- DWORD for 32 bits
- QWORD for 64 bits
There is also a more rare TBYTE for 80 bits, and XMMWORD, YMMWORD, and ZMMWORD for 128, 256, and 512 bits respectively.
MSのサイトにXMMWORDとYMMWORDはあった。
X→Y→Zと来て、次があったらどうなるんだろう?
解体キングダム
高さ18m!! 巨大ガンダムを解体せよhttps://t.co/E6vLMFyV0T
— シャア専用ブログ (@Char_Tweet) January 1, 2025
NHK総合 1月8日(水) 午後7:57〜午後8:42
横浜・山下ふ頭で175万人を動員した実物大ガンダムの公開イベント。日本の機械工学&ロボット工学の技術を結集した巨大ロボットのすべてのパーツを傷ひとつけることなく解体できるのか? pic.twitter.com/msblCQRi8h
水曜日のこの時間ということは「解体キングダム」かなと思ったらそうだった
2025
他にもいろいろ出ていたけどとりあえずこれを
Happy New Year! pic.twitter.com/pTkhQ7lxOp
— Math Cafe (@Riazi_Cafe_en) December 31, 2024
実際に計算したこの投稿を見ると
— Brutus Mag (@brutusmag7) January 1, 2025
小数点にカンマを使っている?
まとめ的な記事が以下に
2025を表す式を見て「ラマヌジャンが多すぎる」と困惑している人がいますが、文明の利器を使えば意外と簡単に作れます。
— 佐久間 (@keisankionwykip) January 3, 2025
1. OEIS
数列辞典。2025で検索して上手くいかなければ関連する小さい数(例:45)で検索して一般項や性質を探そう
2. WolframAlpha
近い値になる式を挙げてくれる機能がある
続↓ pic.twitter.com/CMmMmzZZbp
3. コンピュータで総当たり
— 佐久間 (@keisankionwykip) January 3, 2025
・数式の形を固定して使う数字を探索
・使う数字を固定して数式の形を探索
の2パターンある。
これくらいのコードならChatGPTでも書ける。
4. とりあえず素因数分解していくつかの約数の性質を調べる
小さい約数に分解すると性質がWikipediaに載っている可能性が高い
セミコロン
ここでバグを見つけることができれば、あなたは海洋生物学者の 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;
}
$ gcc -Wall hoge.c
hoge.c: In function 'main':
hoge.c:5:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
for (i = 0; i < 5; i++);
^~~
hoge.c:6:5: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
{
^