ときどきの雑記帖 RE* (新南口)
Garbage Collector
例の番組
については書きません (観てるけどね)
ゴミ収集車
ちょいと用事があって会社を休んだ日が 燃えるごみ収集の日だったのだけど、 回収に使われているクルマが 軽トラックでしかもオープンな荷台でちょいとびっくり。
あれだとそんなに積めない気がするんだけど その分台数が多いとか? (そうすると必要な人数が…)
これの5番かな。
狭い路地などでのごみ収集に活躍しています。
なるほど。
ホームドア
秋葉原asterisk(*)α : JR秋葉原駅総武線ホームにホームドアが設置(2025/04/03)
南武線の方が先に全線設置されるとは思わなかった😄
Excel
Altair BASIC
ちょっと「写経」しつつ眺めてみた。
MID$のルーチン。
MID$: XCHG ;PUT THE TEXT POINTER IN (H, L)
MOV A,H ;GET THE FIRST CHARACTER
CALL PREAM2 ;GET OFFSET OFF STACK AND MAKE
;SURE DOES NOT = 0.
PUSH B ;PUT OFFSET ON TO THE STACK
MVI E,255 ;IF TWO ARG GUY, TRUNCATE,
CPI ")"
JZ MID2 ;[E] SAYS USE ALL CHARS
;IF ONE ARGUMENT THIS IS CORRECT
SYNCHK 44 ;COMMA? MUST DELINEATE 3RD ARG.
CALL GETBYT ;GET ARGUMENT IN [E}
MID2: SYNCHK ")" ;MUST BE FOLLOWED BY )
POP PSW ;GET OFFSET BACK INA
XTHL ;SAVE TEXT POINTER, GET DESC.
LXI B,LEFT2 ;WHERE TO RETURN TO.
PUSH B ;GOES ON STACK
DCR A ;SUB ONE FROM OFFSET
CMP M ;POINTER PAST END OF STR?
MVI B,0 ;ASSUME NULL LENGTH STR
RNC ;YES, JUST USE NULL STR
MOV C,A ;SAVE OFFSET OF CHARACTER POINTER
MOV A,M ;GET PRESENT LEN OF STR
SUB C :SUBTRACT INDEX (2ND ARG)
CMP E ;IS IT TRUNCATION
MOV B,A ;GET CALCED LENGTH IN B
RC ;IF NOT USE PARTIAL STR
MOV B,E ;USE TRUNCATED LENGTH
RET> ;RETURN to LEFT2
GW BASICでもそうだったような記憶があるけど(要確認)
LEFT$と共有している部分があって、
上記のRET(>
は条件アセンブルの終端マーカー(たぶん))で
LEFT2に飛んでくる
LEFT$: CALL PREAM ;TEST THE PARAMETERS
RRA A ;LEFT NEVER CHANGES STRING POINTER
LEFT3: XTHL ;SAVE TEXT POINTER
MOV C,A ;OFFSET NOW IN [C}
LEFT2: PUSH H ;SAVE DESC. FOR FRETMP
MOV A,M ;GET STRING LENGTH
CMP B ;ENTER STRING WANTED?
JC ALLSTR ;IF #CHARS ASKED FOR.GE.LENGTH.YES
MOV A,B ;GET TRUNCATED LENGTH OF STRING
XWD "U1000,"021 ;SKIP OVER MVI USING "LXI D,"
ALLSTR: MVI C,0 ;MAKE OFFSET ZERO
PUSH B ;SAVE OFFSET ON STACK
CALL GETSPA ;GET SPACE FOR NEW STRING
POP B ;GET BACK OFFSET
POP H ;GET BACK DESC POINTER.
PUSH H ;BUT KEEP ON STACK
INX H ;MOVE TO STRING POINTER FIELD
IFN LENGTH=2<
INX H>
MOV B,M ;GET POINTER LOW
INX H ;
MOV H,M ;POINTER HIGH
MOV L,B ;GET LOW IN L
MVI B,0 ;GET READY TO ADD OFFSET TO POINTER
DAD B ;ADD IT
MOV B,H ;GET OFFSET POINTER IN [B,C]
MOV C,L ;
CALL STRA02 ;SAVE INFO IN DSCTMP
MOV L,A ;GET# OF CHARS TO MOVE IN L
CALL MOVSTR ;MOVE THEN IN
POP D ;GET BACK DESC. POINTER
CALL FRETMP ;FREE IT UP.
JMP PUTNEW ;PUT TEMP IN TEMP LIST
ALLSTRにジャンプで来た場合は 「命令の途中」に飛び込む形になるので ジャンプでなく来た場合と実行される命令が変わるという 8ビット機時代にはそれなりに見られたワザがここでも。
最後の方で呼んでいるMOVSTRはこう
MOVSTR: INR L
MOVLP: DER L ;SET CC'S
RZ ;0, NO BYTE TO MOVE
LDAX B ;GET CHAR
STAX D ;SAVE IT
INX B ;MOVE POINTERS
INX D ;
JMP MOVLP ;KEEP DOING IT
Z80ならLDIRとか使うんですかね(遅いけど)
ついでにREMの処理部分。 ここでもDATA文と共有している部分がある
IFN STRING,<
DATA: XWD "O1000,"01 ;"LXI B," TO PICK UP ":" INTO C AND SKIP
":" ;"DATA" TERMINATES ON ":"
;AND 0, ";" ONLY APPLIES IF
;QUOTES HAVE MATCHED UP
IFE LENGTH=2,<ELSE:> ;EXECUTED "ELSE"S ARE SKIPED
;
; NOTE: REM MUST PRESERVE [D,E] BECAUSE OF "GO TO" AND ERROR
;
REM: XWD "O1000,"O16 ;MVI C, THE ONLY TERMINATOR IS 0
XWD "O1000,0 ;NO-OPEARATION
;"DATA" ACTUALLY EXECUTES THIS 0
MVI B,0 ;INSIDE QUOTES THE ONLY TERMINATOR IS ZERO
EXCHQT: MOV A,C ;WHEN A QUOTE IS SEEN THE SECOND
MOV C,B ;TERMINATOR IS TRADED, SO IN "DATA"
MOV B,A ;COLONS INSIDE QUOATATIONS WILL HAVE NO EFFECT
REMER: MOV A,M ;GET THE CHARACTER
ORA A ;ZERO IS ALWAYS A TERMINATOR
RZ
CMP B ;TEST FOR THE OTHER TERMINATOR
RZ
INX M
CPI 34 ;IS IT A QUOTE?
JZ EXCHQT ;IF SO TIME TO TRADE
IFE LENGTH=2,<
;
; WHEN AN "IF" TAKES A FALSE BRANCH IT MUST FIND THE APPROPRIATE "ELSE"
; TO START EXECUTION AT, "DATA" COUNTS THE NUMBER OF "IF"S
; IT SEES SO THAT THE "ELSE" CODE CAN MATCH "ELSE"S WITH
; "IF"S. THE COUNT IS KEPT IN [D]
;
SUI IFTK ;IS IT AN "IF"
JNZ REMER ;IF NOT, CONTINUE ON
CMP B ;SINCE "REM" CAN'T SMASH
;[D,E] WE HAVE TO BE CAREFUL
;SO ONLY IF B DOESN'T EQUAL
;ZERO WE INCREMENT D. (THE "IF" COUNT)
ADC D ;CARRY ON IF [B] NOT ZERO
MOV D,A> ;UPDATE [D]
JMP REMER>
これを読む限りでは
マルチステートメントの区切りの:
で
REM文は終わらないですね。
BASICの方言マップをまとめ中#BASIC pic.twitter.com/4UsHWB1WwI
— bugfire2009 (@bugfire01) April 5, 2025
新刊近刊
セガ 体感ゲームの時代
これはちょっと愉しみなタイトル
人生で残酷なことはドラゴンズに教えられた
人生で残酷なことはドラゴンズに教えられた (小学館新書 489) | 富坂 聰
本屋で見かけた。
4月中旬新刊予約受付中
— 書泉_MATH (@rikoushonotana) April 6, 2025
『数学を生み出す脳』中井智也(岩波科学ライブラリー)
数量の大まかな把握はヒトだけでなく多くの動物にもできるが、ヒトだけが正確に数え上げ計算する能力をもつ。その能力に必要なのが数の言葉だ。数学的思考の起源は言語にあるのだろうか。我々ヒトにとって数学とは何か。… pic.twitter.com/GIKiHlr1fE
awk
gawk
5.3.2がリリースされた
ONLY bug reports should be submitted to the bug-gawk list. All other questions should use the help-gawk@gnu.org mailing list.
そういやそういうメーリングリストもあったっけか。
FORTRAN Compiler on IBM 704
FORTRAN DAY
“Sometime in early April 1957 we felt the system was sufficiently bug-free to distribute to all 704 installations. " - John Backus, THE HISTORY OF FORTRAN I, II, AND III
とあるんだけど、この言葉を書いたのはバッカスじゃないような… (ドキュメント全体はバッカスの名前で出されている)
歌詞
塩沢さん発言に何か沢山リピありがとうございます。ついでにふと思い出したゴーショーグンの話して良いですか?オープニングの話ですが。首藤さんが歌詞作るにあたり「やだよ小さい子供が戦いに憧れるような歌作るの!でもアニメ作るからには売れないと困るし!うーん!」と悩んだ結果「カッコいい→
— 浪花愛 (@nezumigogo) April 5, 2025
けど、敢えて全く意味のない歌詞」にしたという。作曲の方の力もあって名曲に仕上がりましたが、歌詞に意味が無いのはそういうことだそうです。この後の小説もお読みの方はご存知だと思いますが、首藤さんの願いは「それでも生きぬけ!」だと思います。ポケモンの「ミュウツーの逆襲」も観た時思った。
— 浪花愛 (@nezumigogo) April 5, 2025
へー。
sum
【難読クイズ配信中!】@m3_engineering をフォローして最新技術情報を楽しもう
— エムスリー エンジニア公式 (@m3_engineering) February 5, 2025
わざわざこういう問題に出されるということは なにか面白い(?)仕様でもあるんだろうかとドキュメントを見てみると
sum(iterable, /, start=0)
start と iterable の要素を左から右へ合計し、総和を返します。 iterable の要素は通常は数値で、start の値は文字列であってはなりません。
引数にiterableをとるのか(まあ言われてみれば納得)。
でも二番目の/
はなんだろう?
sumのほかにも
class bool(object=False, /)
class complex(number=0, /)
class complex(string, /)
class complex(real=0, imag=0)
eval(source, /, globals=None, locals=None)
などで使われているけど、やっぱり/
の意味が分からん。
で、調べてみるとこういうことらしい
プログラミング FAQ — Python 3.13.2 ドキュメント
関数の引数リストにあるスラッシュ (/) は何を意味しますか?
パラメータ関数の仮引数にあるスラッシュは、それより前にある仮引数は位置専用引数であることを示します。 位置専用引数は、外で使える名前を持たない仮引数です。 位置専用引数を受け付ける関数の呼び出しにおいて、 実引数はその位置だけに基づいて仮引数に対応付けられます。 例えば、 divmod() は位置専用引数を受け付けます。 そのドキュメントは次のようになります:
\>>>help(divmod) Help on built-in function divmod in module builtins: divmod(x, y, /) Return the tuple (x//y, x%y). Invariant: div*y + mod == x.
この引数リストの末尾にスラッシュは、この2つの仮引数が両方とも位置専用引数であることを意味します。 したがって、divmod() をキーワード引数を使って呼び出すとエラーになります:
\>>>divmod(x=3, y=4) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: divmod() takes no keyword arguments
もしもプログラミング言語がコーヒーだったら
If programming languages were coffee: Java would be a corporate chain latte, Python a smooth cold brew, and C++ the espresso that makes you question reality at 2AM. Open to other takes, of course.
— No Starch Press (@nostarch) April 6, 2025
リプライがいくつかついているけど これに一番ウケた
rust isn’t coffee, it’s monster energy drinks. if you see a shy boy with beautiful eyelashes drinking one, you’ve got max 4-6 months before she’s off the market forever.
— akano (@princessakano) April 6, 2025
NHK総合が4月13日の日曜深夜つまり月曜未明、アニメ版ミャクミャク様を一挙放送した上でタローマンを流すという気の狂ったもとい豪快な編成を組んでる。
— 猫もみ (@akky_OD_No7) April 8, 2025
うむ、支払った受信料は正しく使われているようだ。 pic.twitter.com/yYciG3bfWQ