ときどきの雑記帖 RE* (新南口)
さぼりたい
fluent c
ひところよりは値段が下がってきてはいるけど 中身を確認できないもんかなあ と、紀伊國屋書店と丸善の 洋書のオンラインストアで確認すると どちらでも「海外店舗からの取り寄せ」 となっていて以下略。
まあ店頭にあってもそこで買うかは微妙だしなあ (1000円、2000円と差があればねえ)。
地獄への道は善意で舗装されている
- The Road To Tech Debt Is Paved With Good Intentions: Lessons Learned In Open Source : programming
- Joys Of Apex: The Road To Tech Debt Is Paved With Good Intentions
paved with以下に「もしや」 と感じるものがあったので調べてみたら やはりそうだったぽい。
the road to hell is paved with good intentions - ウィクショナリー日本語版
(直訳:地獄までの道は善意で敷きつめられている)途中途中で良かれと思ってやったことでも、 全体を見据えていないと、結果物事を台無しにするものであるという警句。
The road to hell is paved with good intentions - Wikipedia
gawk
以前、gawkに追加される(であろう)csv読み込みに関して
gawkのCSV対応の話で
ん、改行を含むフィールドの扱いはどうなるんだろう?
と以前に書いていたのだけど 久しぶりにリポジトリ gawk.git - gawk を覗いてみたら最近手が入っていた模様
- Fix for set_RS() in CSV mode.
- CSV input, string CRs.
- Add initial csvscan() routine.
- Update split() for CSV data.
- Start revamp of CSV handling.
- Improve CSV record handling.
- Fix logic in an example in the manual.
- Modifications for gawk 5.3
- funky.awk example mawk back to nawk
FSF is dying
フリーソフトウェア財団 (FSF)は死につつある。FSFは以下の目標を達成できていない:
— 新山祐介 (Yusuke Shinyama) (@mootastic) April 12, 2023
- フリーソフトウェアの哲学を広めること
- copyleftライセンスを普及させること
- 健全なフリーソフトウェア運動を推進すること
改善のためには組織改革や、FSFとGNUの分離などが必要。https://t.co/RnuutgI6kQ
ネタ元はHNかなあと思って検索してみると redditにもあった。 結構盛り上がっているなあ。
- The Free Software Foundation is dying
- The Free Software Foundation is dying | Hacker News
- The Free Software Foundation is dying : r/programming
元記事はじめ、内容はこれから読む。
FORTRAN Compiler on IBM 704
前回見ていたコード辺に
LA0041 SLT 1 4F13840
TXI L43130,B,1 UNARY... -(N+2) TO -(N+1) 4F13841
TXI L13130,B,1 BINARY... -(N+2) TO - (N+1) 4F13842
というものがあったけど、
SLT 1
の実行結果によって後続の2命令のいずれかに
制御が移るというもので
より具体的には
http://bitsavers.org/pdf/mit/computer_center/Coding_for_the_MIT-IBM_704_Computer_Oct57.pdf
p.134
The Sense Lights
There are four lights (numbered from left to right by the digits 1 to 4) on the operator’s console which can be turned on and off, or tested, by means of the following instructions:
1) SLN n: Sense Light On n = 1,2,3,4
2) SLF : Sense L:tghts Off
3) SLT n: Sense Light Test n = 1,2,3,4
- The instructions, SLN n, turns on the sense light numbered n.
- The instruction, SLF, turns off all of the sense lights.
- The instruction, SLT n, turns off the sense light numbered n and skips one instruction if it was on.
SLT n: Sense light off and Sense light n on ⇒C(ILC)+2 → C(ILC).
The sense lights can be used as a visible means to convey information to the operator about the state of the program. The MIT Post-Mortem Program usees a sense light as follows: By using certain sense switches an operator can stop the post-mortem program and insert manual post-mortem requests into the MQ register· which the program will then, execute. If, however, the operator inserts an illegal request the program will detect this illegality and return to the original stopping point with a sense light on.
Example: The following example·considers the four sense lights to be a four digit binary counter (with the convention ·that a sense light being on denotes a 1). The example is a subroutine which increases the contents of this counter by 1 each time it is entered.
704のハードウェア(ライト(light))の状態に関連するもののようだ。 通常のメモリ上に置かれた変数ではなく こういったものを使っていた(活用していた)のだねえ。
引用元のドキュメントにはこんな サンプルプログラムもあった。
COUNTR SLT 4
TRA FOUR
SLT 3
TRA THREE
SLT 2
TRA TWO
SLT 1
TRA ONE
TRA 1,4
ONE SLN 1
TRA 1,4
TWO SLN 2
TRA 1,4
THREE SLN 3
TRA 1,4
FOUR SLN 4
TRA 1,4
さて、FORTRAN IIのソースコードで lightに関する命令をどのくらいに使っているのか 調べてみると これが結構あってちょっと驚いた。
grep -e '^.\{7\}SL[FNT]'
LT SLN 1 NO, CODE IS 10, TURN ON SENSE LIGHT
SLT 1 APPEARS TO BE DATA, BUT WHAT WAS CODE
ADDS SLT 1 APPEARS TO BE PROGRAM, WHAT WAS CODE
SLN 1
ADD20 SLT 1
SLN 0
SLN 2 RETURN4
ADD24 SLT 2
SLN 1 TURN ON SENSE LIGHT 1 F6S00320
SLT 1 SL1-ON IF PROGRAM TO BE RE-TRIED. F1SPE100
SLT 3 ON IF END CARD ERROR FOUND BY BATCH MONITOR F1SPE150
SLN 0 TURN OFF LIGHTS F1BM0060
ADD71 SLN 1 SL1-ON IF AT LEAST 1 SOURCE STATMENT ON TP 2 F1BM0370
SPROER SLN 3 SL3-ON IF TAPE CANNOT BE READ OR END CARD F1BM0850
ADD90 SLT 1 IS THERE A PROBLEM TO BE COMPILED F1BM0900
NEXTIN SLT 1 F1ME0100
SLF 4F13459
MS210 SLN 1 TURN , LITE ON. 4F13570
SLN 1 TURN = OR ) LITE ON. 4F13674
MS335 SLN 2 TURN FUNCTION LITE ON. 4F13706
SLT 2 IS THIS A FUNCTION NAME 4F13751
SLN 2 YES - TURN F LITE BACK ON 4F13753
SLT 2 4F13809
SLN 2 4F13811
SLT 2 + OR - SIGN 4F13829
LA0041 SLT 1 4F13840
LA0050 SLT 1 4F13847
SLT 2 ** 4F13856
LA0015 SLT 2 * OR / 4F13863
SLN 1 4F13874
SLN 1 4F13896
SLN 1 4F13904
SLN 1 4F13947
PM0000 SLF TURN OFF ALL SENSE LITES 4F14378
PM0240 SLN 3 TURN * LITE ON 4F14401
SLT 3 * SIGN... IS * LITE ON 4F14413
PM0640 SLT 3 / SIGN... IS * LITE ON 4F14438
SLN 3 TURN * LITE ON 4F14448
SLF TURN OFF ALL SENSE LITES 4F14951
SLN 1 FLO PT 4F14960
MC0310 SLT 1 SYMJ (S(I)) IS A FIX PT VARIABLE 4F14971
MC0340 SLT 1 SYMJ(S(I)) IS A FLO PT VARIABLE 4F14974
SLN 1 RESTORE FLO PT LITE 4F14976
CP0000 SLF TURN OFF ALL SENSE LITES 4F15004
CP0310 SLN 1 OP1 (S(I)) 29 = 0 OR OP1 (S(I)) 30 = 1, SO 4F15035
SLN 2 OP1 (S(I)) 31 = 1, SO SET STQ LITE 4F15038
SLT 4 OP1 (S(I)) 32 = 1, SO SET FLPTSW 4F15043
CP0420 SLN 4 OP1 (S(I)) 32 = 0, SO SET FXPTSW 4F15046
SLT 4 4F15071
SLN 4 FIX PT. RESTORE FXPTSW 4F15073
SLT 4 4F15089
SLN 4 FIX PT. RESTORE FXPTSW 4F15091
SLN 3 TURN LITE 3 ON 4F15098
SLT 3 OP1 (S(I)) 34 = 1, SO TURN LITE 3 OFF 4F15101
SLT 3 4F15106
SLN 3 ELI (S(II) TO ACC 4F15108
CP1200 SLT 3 OPJ (S(I)) = / 4F15115
SLT 4 PREDECESSOR IN ACC 4F15117
SLN 4 FIX PT. RESTORE FXPTSW 4F15119
CP1330 SLT 4 PREDECESSOR IN MQ 4F15126
SLN 4 FIX PT. RESTORE FXPTSW 4F15128
CP1720 SLT 3 OPJ(S(I))=* 4F15158
CP1840 SLN 3 TURN LATE 3 ON 4F15169
SLT 4 4F15171
SLN 4 FIX PT. RESTORE FXPTSW 4F15173
SLT 1 4F15580
SLT 2 4F15590
SLT 4 4F15613
SLT 2 4F15616
ES0870 SLT 2 FX PT ON LEFT, FLO PT ON RIGHT 4F15628
ES0300 SLT 4 4F15665
ES0320 SLT 2 FLO PT ON LEFT, FX PT ON RIGHT 4F15667
SLT 4 4F15705
ES1360 SLT 4 4F15708
ES1380 SLT 2 4F15710
ES1530 SLT 2 4F15729
SLF 4F13459
MS210 SLN 1 TURN , LITE ON. 4F13570
SLN 1 TURN = OR ) LITE ON. 4F13674
MS335 SLN 2 TURN FUNCTION LITE ON. 4F13706
SLT 2 IS THIS A FUNCTION NAME 4F13751
SLN 2 YES - TURN F LITE BACK ON 4F13753
SLT 2 4F13809
SLN 2 4F13811
SLT 2 + OR - SIGN 4F13829
LA0041 SLT 1 4F13840
LA0050 SLT 1 4F13847
SLT 2 ** 4F13856
LA0015 SLT 2 * OR / 4F13863
SLN 1 4F13074
SLN 1 4F13896
SLN 1 4F13904
SLN 1 4F13947
PM0000 SLF TURN OFF ALL SENSE LITES 4F14378
PM0240 SLN 3 TURN * LITE ON 4F14401
SLT 3 * SIGN... IS * LITE ON 4F14413
PM0640 SLT 3 / SIGN... IS * LITE ON 4F14438
SLN 3 TORN * LITE ON 4F14448
SLF TURN OFF ALL SENSE LITES 4F14951
SLN 1 FLO PT 4F14960
MC0310 SLT 1 SYMJ (S(I)) IS A FIX PT VARIABLE 4F14971
MC0340 SLT 1 SYMJ(S(I)) IS A FLO PT VARIABLE 4F14974
SLN 1 RESTORE FLO PT LITE 4F14976
CP0000 SLF TURN OFF ALL SENSE LITES 4F15004
CP0310 SLN 1 OP1 (S(I)) 29 = 0 OR OP1 (S(I)) 30 = 1, SO 4F15035
SLN 2 OP1 (S(I)) 31 = 1, SO SET STQ LITE 4F15038
SLT 4 OP1 (S(I)) 32 = 1, SO SET FLPTSW 4F15043
CP0420 SLN 4 OP1 (S(II) 32 = 0, SO SET FXPTSW 4F15046
SLT 4 4F15071
SLN 4 FIX PT. RESTORE FXPTSW 4F15073
SLT 4 4F15089
SLN 4 FIX PT. RESTORE FXPTSW 4F15091
SLN 3 TURN LITE 3 ON 4F15098
SLT 3 OP1 (S(I)) 34 = 1, SO TURN LITE 3 OFF 4F15101
SLT 3 4F15106
SLN 3 EL1 (S(I)) TO ACC 4F15108
CP1200 SLT 3 OPJ (S(I)) = / 4F15115
SLT 4 PREDECESSOR IN ACC 4F15117
SLN 4 FIX PT. RESTORE FXPTSW 4F15119
CP1330 SLT 4 PREDECESSOR IN MQ 4F15126
SLN 4 FIX PT. RESTORE FXPTSW 4F15128
CP1720 SLT 3 OPJ(S(I))=* 4F15158
CP1840 SLN 3 TURN LATE 3 ON 4F15169
SLT 4 4F15171
SLN 4 FIX PT. RESTORE FXPTSW 4F15173
SLT 1 4F15580
SLT 2 4F15590
SLT 4 4F15613
SLT 2 4F15616
ES0870 SLT 2 FX PT ON LEFT, FLO PT ON RIGHT 4F15628
ES0300 SLT 4 4F15665
ES0320 SLT 2 FLO PT ON LEFT, FX PT ON RIGHT 4F15667
SLT 4 4F15705
ES1360 SLT 4 4F15708
ES1380 SLT 2 4F15710
ES1530 SLT 2 4F15729
SLT8141 TURN OFF SENSE LIGHT 1
SLN 1
先に引用した命令の説明だと
SLNやSLTのあとには1から4までの数値を指定するように書かれているけど、
この検索結果には
SLN 0
というのもあるなあ。
なんだろうこれ。
それと
SLT8141 TURN OFF SENSE LIGHT 1
というのもよくわからん。
OCRの誤認識かと思ってPDFを見てみたが
SLT8141
で間違いないようだった。
GETSUM CLA
STO DRMSUM HAVE ACTUAL DRUM CHECK SUM
RDR 4
LDA D307 HAVE COMPUTED CHECK SUM FROM
CPY D307 PERMANENT LOCATION
RDR 4
LDA D313 HAVE DRUM SELECT AND
CPY D313 INITIAL DRUM ADDRESS
SLT8141 TURN OFF SENSE LIGHT 1
NOP
CLA PREFX1
SUB MEM4K
TNZ LX
PSE8141 TURN ON SENSE LIGHT 1, MEMORY IS 4K
PSE8141
なんてのもあった。
8141
を
ソースコードから探してみたけど
特に何も見つからず。
1 1
a=1 b=2; a=$b b=$a; echo "$a $b" の動作がシェル依存で、大多数のPOSIXシェルが2 2だが、Bourne シェルは1 1でFreeBSD shとNetBSD shでは2 1となる問題、POSIXをいくら眺めてもどう解釈すればわからなかったけど、Martijn Dekkerさんのポストをきっかけに(オフトプ気味だが)議論が始まって面白い。
— Koichi Nakashima (@ko1nksm) April 7, 2023
2 2
と
2 1
はどういう解釈(と動作)なのかの想像がつくけど
1 1はどういう「からくり」でこうなるんだろう?
あー、登場順に線形リストの「頭」に繋いでいき、 処理もリストの先頭から辿って その結果登場順とは「逆」になるということかな?
必殺
【必殺仕置人Tシャツ!】書籍『必殺シリーズ異聞』(高鳥都著)の発売と、『必殺仕置人』50周年を記念してTシャツと書籍のセットを期間限定で販売いたします! 糸見溪南先生の題字をあしらった2タイプのTシャツは、単体での販売も行ないます。この機会をお見逃しなく! https://t.co/AvUlP3KaUy
— 立東舎 (@rittorsha) April 11, 2023
mid$
#BASIC)これ、バグだったんだ...?(PC88でもMSXでも)こういう物だとずっと思ってたのに。
— 1re1 (@1re1) April 10, 2023
12345 を 2 文字目から置換えるので
11234 が意図値。
しかし2番目は、A$自身を参照しているので何か違う。
昔これに散々悩まされた記憶。
ふと見るとこういうページが、えー!https://t.co/caDOt04HiD pic.twitter.com/NxxkC06v1s
領域が重なっているときに 後ろから転送するか 前から転送するか という話? (間違えると…)
各機種版BASICでの情報を寄せて下さった皆様へ。この場になりますが、感謝申し上げます。
— 1re1 (@1re1) April 12, 2023
意外も意外。予想以上に二分と言っていいくらい分かれましたね。https://t.co/v4zjrnssOJ