ときどきの雑記帖 RE* (新南口)
迷い猫オーバーラン
パニーニ
8/22で「パニーニ」じゃん。 ということでいつものお店に買いに行ったら… 値上がりしていいたでござる (320円→330円)。
まあお値段据え置きで小さくなるよりは…
ブレードランナー:ファイナル・カット
放送を知ったのが当日の午前中(出勤済み)だったので 録画もできなかったでござるよorz
ブレードランナー:ファイナル・カット版がNHK・BSプレミアムで “人間とは何か”がテーマの傑作SF 映像美も魅力 - MANTANWEB(まんたんウェブ)
招き猫
これは売られてる招き猫 pic.twitter.com/RJG2yymB0c
— Sierra@ioアカウント作った (@s_voltec) August 20, 2023
ふつー(謎)、左手を挙げている招き猫は「人を招く」 ものだと思うんだけど、この招き猫は金運を招いて(招財)ますな。
金と人、どちらも招きたいから両手挙げ…だと「お手上げ」という説が好き😄
招き猫 右手上げが金運、左手上げが千客万来、では両手上げは? | マネーポストWEB
右手上げは“金招き”、左手上げは“人招き”といわれています。一方で両手上げは、お金も人も両方招いてくれますが、 欲張りすぎてお手上げになる“お手上げポーズ”と呼ぶ人もいます
両手を上げた招き猫の意味は?かわいい両手上げ招き猫おすすめ4選も | 伝統工芸品ならBECOS
なんか動作がおかしい(iOS版)。
web版でも相変わらず 保存したものがきちんと表示されない (空白のエントリとして表示され、中身がわからない) 場合があるという症状が続いているのだけど、 今度はiOS版で、 表示したときに 空白のエントリがあるとリストがそこで終了していると判定されて 該当の空白エントリとその後にあるエントリが参照できないという。
エラー報告ってどこに出せばいいんだっけ?
ひぐらしのなく頃に
むかーし、練馬区だったか杉並区に生息している場所(地域)が あると聞いた覚えがあるなあ。詳細は覚えてないんだけど。
その後、集まったヒグラシスポット情報】
- 護国寺
- 六義園
- 新宿御苑周辺
- 杉並区の神田川沿い(柏の宮公園など)
- 井の頭公園
- 小石川後楽園
- 学習院大学 目白キャンパス
- 国立科学博物館附属 自然教育園
あ、杉並区ありますね (井の頭公園は「23区内」じゃない気がするけどそこはまあ)、
23区内なら等々力渓谷にいっぱいいる
高輪4丁目〜御殿山辺りでは結構聴ける。御殿山庭園等の緑が多いからかな
小平市でならこないだ聞いた
意外にあるもんだなあ。 とは言えふらっと夕方に聴きに出かけられるようなところはなさげ。
Excel
VBAを置き換えるようなもの(組み込まれ方)ではない?>Python
Excelの中でPythonが使えるようになる件、NDAじゃなくなった!
— 伊藤潔人@8月24日までKindle夏のセールで拙著3冊が50%OFFになって〼 (@kiyotoi) August 22, 2023
Announcing Python in Excel: Combining the power of Python and the flexibility of Excel. https://t.co/PtaFF83bvN
- Announcing Python in Excel
- Announcing Python in Excel: Combining the power of Python and the flexibility of Excel. : r/programming
- 「Excel」にPythonを統合、データ分析と可視化のスムーズなワークフローを実現 | マイナビニュース
- Microsoft、「Python in Excel」を発表 ~Windows向けベータ版でテスト開始 - 窓の杜
xyzzy
またこの現象が起きたのでメモ。
xyzzy で事故2件: バッファタブが消え、katex.l のバイトコンパイルが出来なくなった。: nouse
復帰手順
- .xyzzy.historyを削除
- xyzzyのメニュー 表示(V)からツールバー(Q)→バッファを選択
新刊近刊
Empire of the Sum
書籍「Empire of the Sum: The Rise and Reign of the Pocket Calculator」
— ゆきまさかずよし (@Kyukimasa) August 22, 2023
(“太陽の帝国”じゃなくてSUMなのがかなりいい)https://t.co/T5lNerkVl0
Natureの書評、世界初のポケット関数電卓HP-35の逸話の紹介で
「冷戦時の戦略爆撃機の航法アルゴリズムが使われており」一瞬なんのことかと思ったが
へー、面白そうな。
これか。
本のタイトルは「太陽の帝国(Empire of the Sun)」にひっかけたものだと思うけど どういう意味でだろう?
浜村渚の数学ノート
まだ続いていたんだ。 たぶん4巻くらいまでしか読んでない。
メモ
- Sorting in Emacs - Susam Pal
- Patrick Weaver
- Exploring the internals of Linux v0.01 - seiya.me
- Breaking java.lang.String – Wouter Coekaerts
Ruby Parser progress report
Ruby Parser progress report - Speaker Deck
References
- Yuichiro Kaneko “The future vision of Ruby Parser”, 2023
- Llama LALR parser generator
- Chinawat Isradisaikul and Andrew C. Myers. “Finding Counterexamples from Parsing Conflicts”, 2015
- Menhir Reference Manual (version 20230608) “5.2 Parameterizing rules”
- Joel Denny “PSLR(1): Pseudo-Scannerless Minimal LR(1) for the Deterministic Parsing of Composite Languages”, 2010
- Joel E. Denny “The IELR(1) algorithm for generating minimal LR(1) parser tables for non-LR(1) grammars with conflict resolution”, 2010
系統的プログラミング
で、必要なページを確認したうえで複写を依頼。 判型がA5なので、見開きA4で以来をしたのだけど A4 一枚あたり25円。
例のはてブのコメントの内容に該当するのはこの辺か。 ちょっとニュアンスが違う気もする。 少し長くなるけどうまく切り取れないので
p.34
7 順序的な表記法とプログラミング言語
ある種の機械語でアルゴリズムをコーディングするのは、複雑な仕事であるが、 うまく機械化が可能である。機械語のコーディングを自動化する道具は、 きわめて望ましい。とくに、プログラミングで基本的で頻繁に出てくる概念すべてを ふくみ、これらの概念をはっきりとかつ自然に表現でき、計算機で無駄なく能率的に 処理できるような言語が有用である。そのような ― 機械ならびに人間向きの ― 言語を設計するのは、特定の応用分野や使用できる計算機に応じて考慮される。 数値解析学は、その主題からみてそのような言語の設計が約束されていた。 というのは、伝統的で形式的な数学の表記法が広範囲に取り入れられているからである。 この考え方は、1952年にH. Rutishauserが、研究して定式化したが、 1957年以後になってはじめて広く知られ使われはじめた。すなわち、 その年にIBMがFORTRANというプログラミング言語を発表し、プログラムを 自動的に機械コードに翻訳するコンパイラ(FORmula TRANslator)を公開した。 ここに、理論的におもしろく実際的に役立つ言語が使用できるようになった。 しかし明らかにFORTRANの形は、IBMで作った 特定の型の計算機向きであった。したがって、その言語は、その構成から見ても 定義からみても、改良の余地があった。
1958年に、H. Rutishauserの基本的な考え方が、国際的な専門家のグループ によって採用され、1つのプログラミング言語の定義にまとめられた。これは、 ALGOL(ALGOrithmic Languageの略)とよばれたが、後に科学技術計算に広く 使われたALGOL 60の前身である。ALGOL 60は、13人の科学者からなる国際的な グループによって1960年に定義され、P. Naurによって報告書として編纂された。!
for文について。
11 配列データ構造
p.97
Sを繰り返される文、Vをスカラ変数(制御変数(control variable)といわれる)、 さらにa, bをVと同じ型の式とするとき、
for V:=a to b do S
は、2つの文
V:=x; S
を、aからbまでの区間の個々の値xに対して繰り返すことを表す。
FORTRAN Compiler on IBM 704
javascript
時刻の取り扱いは面倒なことの一つですが
— きくちゃん (@kikuchan98) August 22, 2023
なるほどね〜💩 pic.twitter.com/n3Vf75ZJb9
— gpascal (@pascaljp) August 22, 2023
https://t.co/g2R1UPXVAR
— 𝒯𝒶𝓉𝓈𝓊ℴ 𝒮ℯ𝓀𝒾𝓃ℯ (@tsekine) August 22, 2023
日本語のavailableFormatsの中にyyyy/mm/ddはあってもyyyy-mm-ddは無いので、前者は locale にマッチした解釈、後者は ISO8601 にフォールバックした感じですかね。
Date()は賢いですね〜😁
💩を解剖してくれた方がいた。感謝。 pic.twitter.com/v6kpuARAT1
— かみゅ (@kamyu_25) August 22, 2023
こちらが仕様です!ISO8601形式以外は実装依存とのことなのでお気をつけください。https://t.co/5xZBwNIby9 pic.twitter.com/ovL6CfgQHj
— gpascal (@pascaljp) August 22, 2023
他のプログラミング言語(のライブラリ)だと どうなっているんだろうか。
while
for文の名前の由来はともかくとして、最初に学んだとき、なんでforとかwhileとか高々ループの制御構造のためだけにこんなに種類があるんやろと思いませんでしたか。
— Yuta SAWA (@sawawww) August 13, 2023
僕は未だにCはforかwhileのどっちかだけでいいやろと思っています。foreachのある言語は別として。
そんなあなたにOberon(not Oberon-2。ループ文はwhileしかない)。
にも、whileだけでどうとかいう話があったような気がするんだけど さてどこにあるやら。
これ、p.103にあった。
3. リッチーのホワイル言語
v ← 0
#変数vの値を0にする(クリア文)
v1 ← v2
#変数v2の値を変数v1にコピーする(コピー文)
v++
#変数vの値を1増やす
loop v do S1; ...; Sn end
#変数vの値の回数だけ、文S1, ..., Snを繰り返して実行する
#途中でvの値が変わるかもしれないが、最初のvの値の回数だけ繰り返す
while v>0 do S1; ...; Sn end
#変数vの値が0より大きい間、文S1, ..., Snを繰り返して実行する
これだけしか要素のないプログラミング言語。 これでどのようにプログラムを書くのかは是非 竹内先生の本を読んでいただきたく。
他にもこのプログラミング言語に関する記事がないか検索したのだけど、 リッチーの名前を入れた時点でCが優先してひっかかってしまい 見つけることができなかった。
他の本でもこのプログラミング言語についての記述を 見た覚えがあるんだけど思い出せん…
legacy-cc
ということで(謎) 大昔のCコンパイラー GitHub - mortdeus/legacy-cc: The earliest versions of the very first c compiler known to exist in the wild written by the late legend himself dmr. のコードを眺めているのだけど、なかなかに興味深い。
たとえばc00.cをみると
init(s, t)
char s[]; {
extern lookup, symbuf, namsiz;
char symbuf[], sp[];
int np[], i;
i = namsiz;
sp = symbuf;
while(i--)
if ((*sp++ = *s++)=='\0') --s;
np = lookup();
*np++ = 1;
*np = t;
}
配列として宣言しているのに
それに対してポインター操作をしている
(s
, sp
, np
)。
関数の開きガッコに位置もちょっと変わってますな。
あと
main(argc, argv)
int argv[]; {
mainの引数argv
の型がchar **
ではなく
intの配列になっている。
もうひとつc01.cからも。
build(op) {
extern cp[], error, block, opdope[], maprel[], chklval;
extern chkw, cvtab, lintyp, dcalc;
auto p1[], t1, d1, p2[], t2, d2, p3[], t3, d3, t;
auto d, dope, lr, cvn;
char cvtab[];
if (op==4) { /* [] */
build(40); /* + */
op = 36;
}
dope = opdope[op];
if ((dope&01)!=0) {
p2 = *--cp;
t2 = p2[1];
d2 = p2[2];
}
p1 = *--cp;
t1 = p1[1];
d1 = p1[2];
ここでも配列型の変数に対してポインター操作をしているし、 配列型の変数に新しい値を代入している。
cval
getcc()
{
extern cval, ncpw;
auto c, cc;
char cp[];
cval = 0;
cp = &cval;
cc = 0;
while((c=mapch('\'')) >= 0)
if(cc++ < ncpw)
*cp++ = c;
if(cc>ncpw)
error("Long character constant");
return(21);
}
int型変数cval
のアドレスを取得して
そこにcharの大きさで書き込むとか。
そう言えばむかーしのCではreturn のカッコが必須だったような記憶が。