ときどきの雑記帖 RE* (新南口)
ワンダバスタイル
自販機
会社に置かれている飲み物の自販機、 SUICA(というか交通系ICカード) が使えるのだけど 数台あるうちの1台が8月に入った辺りから 現金のみに変わっているようだ (自販機そのものは変わっていない)。
そういえば秋葉原辺りにある自販機で SUICA対応のものが (手数料がらみの理由で) 減っているという話を聞いたけど それと同じなんだろうか。
やんごとない
なんか気になる使い方が最近(?)目につくよなあ と思って調べたらこんなページが見つかって
「やんごとない」はもともとの意味が復活しているのか? : 日本語、どうでしょう?
マジで。
glob
とあるメーリングリストのアーカイブを見ていたら 面白い(?)投稿を見つけた。
bug#56888: ’echo message | grep []’ is affected by files in local direct
投稿者曰く、「こんな現象(バグ)に遭遇したんだけど」 という主張なんだけど
Hi:
I use grep to search string in a message like this.
> [root@office tmp]# echo "axyz" | grep [abcd]xyz
> axyz
> [root@office tmp]# echo "cxyz" | grep [abcd]xyz
> cxyz
> [root@office tmp]# echo "bxyz" | grep [abcd]xyz
> bxyz
> [root@office tmp]# echo "dxyz" | grep [abcd]xyz
> dxyz
> [root@office tmp]# echo "oxyz" | grep [abcd]xyz
> [root@office tmp]#
>
but I find something strange ,when I create a file with special name in
current diretory, the command execute failed:
これを、検索対象のディレクトリに
axyz
という名前のファイルを置くと
結果が変わる(おかしくなる)
というもので
> [root@office tmp]# touch axyz
> [root@office tmp]# echo "bxyz" | grep [abcd]xyz
> [root@office tmp]# echo "cxyz" | grep [abcd]xyz
> [root@office tmp]# echo "dxyz" | grep [abcd]xyz
> [root@office tmp]# rm axyz
> rm: remove regular empty file 'axyz'? y
> [root@office tmp]# echo "bxyz" | grep [abcd]xyz
> bxyz
> [root@office tmp]# echo "cxyz" | grep [abcd]xyz
> cxyz
> [root@office tmp]# echo "dxyz" | grep [abcd]xyz
> dxyz
>
I dont know why? Is it a feature or a bug?
いや、それは(ry
grep(に限った話ではないけど)の引数はクォートしとけって話ですね。
さらに
And another problem, when the files number is too big in directory, the grep with bracket execute slow perfermance:
[root@office tmp]# cd greptest/
> [root@office greptest]# ls -l | wc -l #this dir has 50000
> files
> 50001
> [root@office greptest]# time echo "axyz" | grep [abcd]xyz
> axyz
>
> *real 0m0.014s*
> user 0m0.007s
> sys 0m0.008s
> [root@office greptest]# time echo "axyz" | grep [abcd]xyz
> axyz
>
> real 0m0.013s
> user 0m0.003s
> sys 0m0.010s
> [root@office greptest]# time echo "axyz" | grep [abcd]xyz
> axyz
>
> real 0m0.014s
> user 0m0.007s
> sys 0m0.008s
> [root@office greptest]# cd .. # go to upper dir with small number of
> files
> [root@office tmp]# time echo "axyz" | grep [abcd]xyz
> axyz
>
> *real 0m0.003s*
> user 0m0.001s
> sys 0m0.003s
> [root@office tmp]#
ということも言っているのだけどこっちも同じ。
naming conventions
FORTRAN Compiler on PDP-7
突然ですが、今回は704上のFORTRANの話ではなく、 PDP-7上のFORTRANの話。
というものを見つけ、 IBM 704よりはわかりやすいんじゃないかという期待をして読んでみると、 そこに関数の呼び出しについての記述があった。
Function Linkage
A function is always used in an arithmetic expression. It acts like a variable which is equal to the value of the function with the given arguments. When the function name occurs to, the left of the equal sign (in the body of the function) the value of the arithmetic expression to the right of the equal sign is interpreted by the compiler to be the value of the function.
This value is placed in an internal location named RES, and when the return statement is encountered, the address RES returns to the return portion of the CAL Handler. This address is placed in a location called TEMAD (temporary address storage) internal to the object-time system, and the value of the function is then accessed indirectly through this location. Should another function call occur before this address is referenced by the calling program, the compiler generates a code to retrieve the previously calculated function value. Dimensioned variable references are effected through location TEMAD as though they were functions.
そして実際の例として挙げられているものが
For example, the statement
100 A=SIN (B)+C
がどのようになるかというもので
generates the fol lowing object code:
.100, EXTERNAL SIN. CAL SIN. ARF B. LAC I TEMAD ADD C. DACA.
となると。
SIN に対する引数はARF B.
で与えられ、
その戻り値はTEMAD
で示される位置に置かれる
(I
は間接アドレッシングを指定)。
関数の定義部分については
A function definition statement:
FUNCTION FNAME (A,B,I)
generates the following code:
INTER NAL FNAME. FNAME., JMS GTARG JMP .GS A., 0 B., 0 I., 0 .GS,
のようになり、先頭で呼び出している
GTARG
なるサブルーチンによって
実引数をJMP .GS
の後の領域に設定する。
p.54 Function linkage により詳しい例があって その内容は以下の通り。
FACTORIAL CALCULATOR
FUNCTION FACT(N)
FACT=l
DO 10 J=l ,N
10 FACT=FACT*J
RETURN
END
という関数をコンパイルするとこうなると
FACTORIAL CALCULATOR
DECIMA FIODEC
INTERNAL FACT.
FACT., JMS GTARG
JMP .AAA
N., 0 /GTARG PICKS UP ARZ ADDRESS
/AND PLACES IT IN N .
.AAA,
LAC (l
FLO
DAC RES
LFM
LAC (1
DAC J .
.AAB,
.10, LFM
LAC J.
FLO
FMP RES
DAC RES /FLOATING POINT RESULT STORED
LFM /IN RES
LAC J.
ADD (l
DAC J.
CMA
ADD I N.
ADD (l
SMA
JMP .AAB
LAW RES /ADDRESS OF RES IS RETURNED
RETUR
HLT
TEM,
TEM+O/
START
出力されたアセンブリコードにある DECIMAとFIODECの意味は次の通り
DECIMA indicates that all subsequent numbers will be interpreted in decimal radix rather than in octal radix.
FIODEC indicates that all character translations are to FIODEC code; i.e., H-format in format statements.
同様にSUBROUTINEのコンパイル結果は以下の通り
p.56 Subroutine Linkage
FACTORIAL CALCULATOR
SUBROUTINE FACT (N,R)
R=l
DO lOJ=l,N
10 R=R*J
RETURN
END
これがこう
FACTORIAL CALCULATOR
DECIMA FIODEC
INTERNAL FACT.
FACT. , JMS GTARG
JMP .AAA
N. , 0
R. , 0
.AAA
LAC (l
FLO
DAC I R.
LFM
LAC (l
DAC J .
.AAB,
.10,
LFM
LAC J.
FLO
FMP I R.
DAC I R.
LFM
LAC J.
ADD (l
DAC J.
CMA
ADD IN.
ADD (l
SMA
JMP .AAB
RETUR
HLT
TEM,
TEM+O/
START
なるほど見事に(本来の意味での)call by reference すな。
そしてFUNCTIONのコンパイル結果にはあった
戻り値を格納するためのRES
は(当然だけど)
出てこない。
- 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
コンピュータにまつわるマニアックな事象の一覧。「氷山の上にある (世間的に知られている)」2038年問題やSpectre/Meltdownといったものから、氷山の中にあるもの (例: x86 mov命令はチューリング完全である)、誰も知らない深淵にある話題 (例: パンチカード用Unicode)まで。https://t.co/bliyLGbOLx
— 新山祐介 (Yusuke Shinyama) (@mootastic) August 27, 2022
なんか見覚えがあるようなと思ったら 昨年の4月に The Story of Mel で言及していた。
The Cursed Computer Iceberg Meme に興味深いもののリスト(と言ってもいいんじゃない?)がある。
ページ先頭の記述によれば
this is not a hall of shame.
the intent is to awaken you to many of the peculiarities and weirdness of computers.
hopefully, after reading these articles, you will have learned a lot and will embrace chaos.だそう。どんなものがあるのか眺めていると
void *alloca(size_t size);
やThe Infamous Japanese Postal CSV
というものがあり、あーという感じに。
The ‘Story of Mel’ もあるのだけど、これは ハッカーズ大辞典 (Ascii books) にも(翻訳されたものが)収録されている。
とても好きなエピソードだったりする(どういったお話なのかはあえて書かない)ので、 用語集としてはいささか(だいぶ?)古びてしまっているけど 無理かなあ復刊(できれば電書で)>「ハッカーズ大辞典」。
で、改めてみてみると
The abyss
のところには
新山さんも言及していた
unicode on punch cards
のほかにも
- unicode on punch cards
- .fr-016c: fuenf (in your face)
- Coding Machines
- Mario Wolczko’s unix recovery
- WebMIDI permits arbitrary code execution
- “I no longer trust the constants.”
- The Bitter Lesson
- infinite loop inlining bug
- Bedlam3
- Alexander Rhatushnyak broke Kolmogorov complexity and won 8000 euros
- ClueBot NG’s emergency stop button
- The Infamous Japanese Postal CSV
- Orson Welles’ in-band signaling attack
- C64 Safe VSP
- USERSEEUSERDO
- Adrian Thomson’s primordial silicon
- BANCstar
- lost FOCAL
- interpreter Toby Ord’s “Complete Turing Machine”
- GCJ-02
- “The single most useful macro in Praat”
- if your computer bug isn’t a moth jammed in a relay, it’s not a bug. it’s just a sparkling error.
- computers are flattened sand with lightning inside
なんてのが。
The Infamous Japanese Postal CSV
て😓
ところで新山さん、、今見たらフォローワー数がだいぶ増えてますね(すげー)。
developers like dark mode
そうかー(ぉぃ) https://t.co/ErRnBnvoPM
— 眼力 玉壱號 (@objectxplosive) August 27, 2022
くすりと来た😄
qalc
qalc コマンド知らなかった。 pic.twitter.com/yj2lOqShEJ
— mattn (@mattn_jp) August 27, 2022
このへんだろか>qalc
- QALC man page
- Qalculate! - the ultimate desktop calculator
- Qalculate! - the ultimate desktop calculator
「コンピュータが育む数学の展開」(全10巻)に引き続き、姉妹編となります新たなシリーズ「コンピュータと数学の織りなす革新」(全5巻)の刊行を10月より開始します。第1回配本は『数学ソフトウェアの作り方』です。ご注目いただけますと幸いです。 pic.twitter.com/cprvI2lETj
— 共立出版 アリがと蟻 (@1738310) August 30, 2022
なんか面白そうなシリーズだな と思ったので共立出版のサイトで調べてみると 該当の本は 数学ソフトウェアの作り方 - 共立出版 のようだ。
この本の内容
本書は数学ソフトウェアを開発するために知っておいて欲しい事柄を書籍としてまとめたものである。 開発する数学ソフトウェアとしては、独自言語を持ち、またライブラリとしても利用可能で、 C言語やその派生言語などを核として開発されているようなものを想定している。
まず、実際のアプリケーションの実装への対応を念頭に、一歩進んだC言語の解説を行う。 次に、多項式電卓およびグレブナー基底の計算システムを例題として、数学ソフトウェアの核の部分の作成を解説する。 さらに、多くのシステムへの移植性(ポータビリティ)を得るために使われるautomakeなどのツールの使い方や、 yacc,GMP,Boehm GCといった多くの数学ソフトウェアで利用されているツールやライブラリについても触れる。 最後に、Emscriptenを用いたWebAssemblyへの変換など、C言語で制作したソフトウェアのウェブアプリへの移植を解説する。
著者は皆、計算代数システムRisa/Asirなど数学ソフトウェアの開発に現在まで携わってきている。 本書にはその経験が随所にちりばめられており、この上ない解説書となっている。
automake, yacc, GMP, Boehm GC とかなかなか面白そうなものを使いますね。
ついでに目次をみると
第1章 C言語再論
1.1 準備
1.2 なぜC言語
1.3 本書のための実習環境
1.4 2進数,16進数,int の正体
1.5 ファイルはbyteの列
1.6 関数,変数,ポインタ
1.7 整数の計算
1.8 グラフを描く
1.9 構造体とその応用
1.10 C言語によるリスト構造の実現
1.11 再帰降下型パーサーを自作して点をプロットするソフトを作成
1.12 Gitの利用
1.13 例題――復習と第2, 3, 4章への準備
第2章 多項式の処理と例題システム
2.1 多項式の計算機上での表現方法
2.2 多項式環
2.3 項順序
2.4 係数環の演算
2.5 多項式の演算
2.6 例題システム1:多項式電卓
2.7 例題システム2:Buchbergerアルゴリズムの実装
2.8 例題システム3:F4風Buchbergerアルゴリズムの実装
第3章 ツール,ビルドシステム,ライブラリ
3.1 シェル
3.2 make
3.3 Autotools
3.4 yacc (bison)
3.5 多倍長整数演算ライブラリGMP
3.6 ガベージコレクタBoehm GC
第4章 Web プラットフォームへの対応
4.1 仮想マシン
4.2 WSL 2環境のインストール
4.3 CLIからWebプラットフォームへの移植
4.4 多項式電卓のWebアプリ化
4.5 GUIフレームワークの紹介(筆者のGUI遍歴)
買うかどうかはともかく 出たらチェックしておかねば。
ところでツイートにある コンピュータが育む数学の展開 というシリーズにも見覚えがないな と思ったので同じく共立出版の サイトで探してみると、 まだ 計算による最適化入門 - 共立出版 しか出ていないようで。
コンピュータが育む数学の展開 全10巻 - 共立出版 によれば続刊のテーマは
《続刊テーマ》
- 『群論―計算でマスター―』
- 『代数幾何―計算でマスター―』
- 『計算結び目理論』
- 『計算極小曲面論』
- 『関数論と平面幾何学』
- 『フラクタルと計算』
- 『凸多面体と計算』
- 『離散数学と計算』
- 『幾何的手法による数値解析』
ふむ。
Hugoメモ
久しぶりに新しいバージョン。 時間が開いたのは ビルド環境の整備のためだろうか?