ときどきの雑記帖 RE* (新南口)
The Dagger of Kamui
LL
へぇーLLの意味も移り変わるわけね。 https://t.co/s1wPmvrZ4D
— Shiro Kawai (@anohana) August 25, 2023
このイベントでのLL
がこうなったのは結構前だったような…で調べると
History
このイベントは2003年にLL Saturdayとして開始しました。LLはLightweight Languageの略で、 LL Saturdayではスクリプト言語であるPerl, PHP, Python, Rubyについて取り上げました。
2017年には様々な言語を学ぼうという主旨で、Learn Languagesという名称にリニューアルしました。 2020年は新型コロナウイルス感染拡大のため開催を断念しました。
2017年だったらしい。
ところで
このスレッドを要約すると、LLイベントとは、プログラミング言語の作者やコントリビュータや著者に会えて、しかも参加者がせいぜい数十人程度だから声もかけやすく、言語の歴史や未来予想が聞けて、技術書までもらえる参加費無料のイベントです。#ll2023jp #opendevcon https://t.co/khLl7I4I0n
— 法林浩之 (@hourin) August 25, 2023
「参加者がせいぜい数十人程度」というところに時の流れを感じてしまった。
宇都宮LRT
今日開業。 さて、いつ行けるか (「ついで」があると出かけやすいんだけど)。
稲城長沼
先週左肩の赤いスコープドッグを見て、 苦いコーヒーを飲んできたのだけど 音声ガイドを聞きにまた行かねば(笑)
稲城市のスコープドッグ、8月25日よりボトムズの主人公・キリコを演じた郷田ほづみさんのPR音声ガイドをスタート - HOBBY Watchhttps://t.co/OH0F5pmxKk
— geek@akibablog (@akibablog) August 10, 2023
稲城市のスコープドッグ、8月25日よりボトムズの主人公・キリコを演じた郷田ほづみさんのPR音声ガイドをスタート - HOBBY Watch
バニラアドトラック
つい最近、某所1と某所2で見かけたのだけど、 流れている歌が例の「ばーにらばにらばーにらきゅうじん♪」ではなかった。 リニューアル?
元の曲のタイトルが思い出せなくて、モヤモヤしている (NPBの応援のヒッティングマーチでも使われていた曲のような気がするんだけど)。
新刊近刊
MEAP
ManningのMEAPから気になるタイトル。
一番目は最近邦訳が出たGoの本のJava版ですかね。
誤差がわかれば実験データがいきる 技術者と科学者のための不確かさ解析
本書は実験データを取得した人が、そのデータの信頼性を確信をもって報告するのに必要不可欠な誤差解析を、どのような手法を使って考えるか、そのプロセス、原理と応用を豊富な「例題」を通して体系的に学ぶことができる書ですね。 pic.twitter.com/xIyroCb2d0
— 共立出版 アリがと蟻 (@1738310) August 25, 2023
へー、と思って調べると8/25発売の本らしいのだけど、いい値段ではあるな😓
ドミニク・チェン
この人の本はわりと読んでいるのでこれも出たらチェックしとこう。
川俣さんのKindle本
最近になって一冊辺りの単価も値上げされているしどうしようかと思いつつも、 買って読んでみたのだけどいつにもまして後悔したorz
ぐだぐだ書くのも面倒なので省略するけど、 たとえばawkでの例で使われていたスクリプトがこれ。
BEGIN {
var a
print a==null
}
これがa
という変数を宣言して
それが(nullで)初期化されているかどうかを確かめる
awkスクリプトらしい。
…えーと。
他にはC のNULLポインターの説明もなんか怪しいところが (数値リテラルの0は(ポインターが要求されるコンテキストにおいて)常にNULLポインターになるけど、 NULLポインターの実際のビットの並びはいつでもオール0なわけじゃないよね?)。 (参考 C FAQ 5)
ルールズ・オブ・プログラミング
本屋で見かけて、ざっと眺めてみた感じではそう悪くなさそうさったので 買おうかと思ったのだけど、 ふと、そういやそろそろ来年のオライリーカレンダーが配布される時期だから、 それまで待つかと思い直して
ほか2冊を買った。
Programmer Passport: Prolog
なんだろう、この本。
Programmer Passport: Prolog by Bruce Tate @redrapids
— PragmaticProgrammers (@pragprog) August 25, 2023
Constraint-based logic programming is the engine powering some of the most powerful algorithms in the world. #Prolog has the tools you need.https://t.co/uNGounZ5zD
Programmer Passport: Prolog by Bruce Tate によると、去年の3月に出ていたもののようだ。
Kindle版もあった。
powerquery
sun | mon | tue | wed | thu | fri | sat |
---|---|---|---|---|---|---|
7/1 | 7/2 | 7/3 | 7/4 | 7/5 | 7/6 | 7/7 |
10 | 20 | 30 | 10 | 40 | 70 | 50 |
7/8 | 7/9 | 7/10 | 7/11 | 7/12 | 7/13 | 7/14 |
60 | 40 | 20 | 40 | 30 | 30 | 70 |
7/15 | 7/16 | 7/17 | 7/18 | 7/19 | 7/20 | 7/21 |
60 | 20 | 30 | 70 | 10 | 20 | 90 |
7/22 | 7/23 | 7/24 | 7/25 | 7/26 | 7/27 | 7/28 |
40 | 80 | 90 | 80 | 40 | 70 | 40 |
7/29 | 7/30 | 7/31 | ||||
100 | 120 | 30 |
といった形式のデータを
7/1 | 10 |
7/2 | 20 |
7/3 | 30 |
7/4 | 10 |
7/5 | 40 |
7/6 | 70 |
7/7 | 50 |
7/8 | 60 |
7/9 | 40 |
7/10 | 20 |
7/11 | 40 |
7/12 | 30 |
7/13 | 30 |
7/14 | 70 |
7/15 | 60 |
7/16 | 20 |
7/17 | 30 |
7/18 | 70 |
7/19 | 10 |
7/20 | 20 |
7/21 | 90 |
7/22 | 40 |
7/23 | 80 |
7/24 | 90 |
7/25 | 80 |
7/26 | 40 |
7/27 | 70 |
7/28 | 40 |
7/29 | 100 |
7/30 | 120 |
7/31 | 30 |
のようにPowerQueryを使って変換する。 ということにここ数日断続的にトライしていたのだけど
こんな感じで(ほぼ)できた。
let
ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
変更された型 = Table.TransformColumnTypes(ソース,{
{"sun", Int64.Type}, {"mon", Int64.Type}, {"tue", Int64.Type}, {"wed", Int64.Type},
{"thu", Int64.Type}, {"fri", Int64.Type}, {"sat", Int64.Type}}),
転置されたテーブル = Table.Transpose(変更された型),
追加されたインデックス = Table.AddIndexColumn(転置されたテーブル, "インデックス", 0, 1),
並べ替えられた列 = Table.ReorderColumns(追加されたインデックス,{"インデックス",
"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7",
"Column8", "Column9", "Column10"}),
転置されたテーブル1 = Table.Transpose(並べ替えられた列),
昇格されたヘッダー数 = Table.PromoteHeaders(転置されたテーブル1, [PromoteAllScalars=true]),
変更された型1 = Table.TransformColumnTypes(昇格されたヘッダー数,
{{"0", Int64.Type}, {"1", Int64.Type}, {"2", Int64.Type}, {"3", Int64.Type},
{"4", Int64.Type}, {"5", Int64.Type}, {"6", Int64.Type}}),
追加されたインデックス2 = Table.AddIndexColumn(変更された型1, "インデックス", 0, 1),
追加されたカスタム = Table.AddColumn(追加されたインデックス2, "カスタム",
each Number.Mod([インデックス],2)),
追加されたカスタム1 = Table.AddColumn(追加されたカスタム, "カスタム.1",
each Number.Mod(Number.IntegerDivide([インデックス],2),2)),
追加されたカスタム2 = Table.AddColumn(追加されたカスタム1, "カスタム.2",
each Number.IntegerDivide([インデックス],2)),
選択した列のみをピボット解除しました = Table.Unpivot(追加されたカスタム2,
{"0", "1", "2", "3", "4", "5", "6"}, "属性", "値"),
変更された型2 = Table.TransformColumnTypes(選択した列のみをピボット解除しました,{{"属性", type number}}),
追加されたカスタム3 = Table.AddColumn(変更された型2, "カスタム.3", each [属性]+[カスタム.2]*7),
削除された他の列 = Table.SelectColumns(追加されたカスタム3,{"カスタム.3", "値", "カスタム"}),
ピボットされた列 = Table.Pivot(Table.TransformColumnTypes(削除された他の列,
{{"カスタム", type text}}, "ja-JP"),
List.Distinct(Table.TransformColumnTypes(削除された他の列,
{{"カスタム", type text}}, "ja-JP")[カスタム]),
"カスタム", "値")
in
ピボットされた列
もうちょっと(だいぶ?)なんとかできそうだけどとりあえず。
0埋め数値変換
ところでPowerQueryで
655'
のような「数値」を
0655
のような「文字列」に変換するのに
Text.End(Text.Combine({"0", NumberToTexr(655)}), 4)
のようなコードを以前書いていたのだけど、Number.ToText
は第二引数をとることもできて
NumberToTexr(655, "0000")
とすれば"0"
を頭につけて…という手間をかける必要はなかった。
によれば"0000"
の部分は"D4"
でも行けそう。
for
なんとなく続き。
The history of the ALGOL effort — Eindhoven University of Technology research portal という資料にALGOL 60に至るあれこれが書かれているのだけど、
p.10
From 1949 til 1951, Rutishauser developed an algebraic language for an hypothetical computer and two compilers for that language. In this language there was only one cotrol structure: the Für statement. In Figure 1.0 the meaning and use of this statement becomes clear: Für k = 2(1)n: ajnn × aj-11k = ajn,k-1’ means that for all k from 2 til n (with step 1), the value of ajn,k-1 become the value of ajnn multip;ied with the value of aj-11k’
p.16
The for statment is formed accordingly. for i=0(1)N means that to the variable i, the values between 0 and N are assigned iteratively. That is, for every value, the statement following the for statement is executed once.
記号的な表現になっているのでアレな部分はあるけど、 ドイツ語由来かどうかを考えなくても 英語としてそれなりに自然な表現に読み下せるんじゃないですかね。
もちろん時代が下って色々変化したもの、たとえば BASICのFOR文がどうかというのはまた別の問題ではなかろうかと。
ちなみにFigure 1.0に書かれているコード片はこんなの
Für j=1(1)n:
Für i=1:
Für k=1: 「式」
Für k=2(1)n:: 「式」
Für i=2(1)n:
Für k=1: 「式」
Für k=2(1)n:: 「式」
「式」のところは書き写すのが面倒なので気になる向きは元記事を参照しておくんなまし。
Among other contributions, he introduced several basic syntactic features to computer programming, notably the reserved word (keyword) for for a for loop, first as the German für in Superplan, next via its English translation for in ALGOL 58.
ところでついでに見つかった Research highlights at the Department of Computer Science – Department of Computer Science | ETH Zurich にあった
Pascal: a programming language that conquered the world
という表現に(検閲削除)
MATH-MATIC vary thru
FORTRANでは繰り返しにDO
を使っていたけれども、他には?と探してみると
(he history of the ALGOL effortでも名前の出てくる)
MATH-MATIC - Wikipedia
というプログラミング言語では
(2) TYPE-IN ALPHA .
(2A) READ A B C SERVO 4 STORAGE A IF SENTINEL JUMP TO SENTENCE 8 .
(3) READ D F SERVO 5 .
(4) VARY Y 1 (0.1) 3 SENTENCE 5 THRU 6 .
(5) X1 = (7*103*Y*A*SIN ALPHA)3 / (B POW D+C POW E) .
(6) WRITE AND EDIT A Y D E X1 SERVO 6 .
(7) JUMP TO SENTENCE 2A .
(8) CLOSE-INPUT AND REWIND SENTENCE 3 .
(9) CLOSE-OUTPUT SENTENCE 6 .
(10) READ F G H N SERVO 4 STORAGE A IF SENTINEL JUMP TO SENTENCE 20 .
(11) EXECUTE SENTENCE 3 .
(12) X2 = (3 ROOT (E-G)+LOG (D+N)) / (F2.6*EXP H) .
(13) WRITE EDIT F D F X2 SERVO 6 .
(16) JUMP TO SENTENCE 10 .
(20) STOP .
のようにVARY
という単語が使われていた。
これ、COBOLだと VARYING になってるやつですか。
THRUはそのままCOBOLに引き継がれてますね。
return
そう言えばむかーしのCではreturn のカッコが必須だったような記憶が。
この件、こんなのを見つけた。
syntax - Parenthesis surrounding return values in C - Stack Overflow
In the original C specification, parentheses were required around the return value. While modern C compilers and the ANSI C standard do not require them, the presence of parentheses does not affect the return value, and programmers sometimes still include them out of habit, unfamiliarity with the standards, for consistency with a stylistic convention that requires them, or possibly for backward compatibility.
V7のコンパイラーだとどうだったんだろう。
FORTRAN Compiler on IBM 704
ジャンプ先を書き換える
LA4170 PXD ,B 4F13921 set N to acc
*'**'
LA4180 ARS 18 ' 4F13922
STO LAMBDA+8,A STO S(N+2) IN LAMBDA+3(L+2)+2 4F13923
ORS LAMBDA+9,A STO -(N+2) IN LAMBDA+3(L+3) 4F13924
CAL STRSTR 4F13925
SLW LAMBDA+7,A STO SPOP IN LAMBDA+3(L+2)+1 4F13926
CAL ADSPOP 4F13927
ORA FSBITS 4F13928
ORA FNBITS 4F13929
SLW LAMBDA+10,A STO SPOP IN LAMBDA+3(L+3)+1 4F13930
LA4320 TXI **,A,-9 4F13931 CM4100/CM4200/CM4300 3L = 3L + 9
*
この部分、ここ自体が複数の処理から合流してここに来ていたりしていて
*
LA3000 CLS ALPHA-2,C 4F13948
STO LAMBDA,A STO C(ALPHA+A-2) IN LAMBDA+3L 4F13949
CLS NBAR 4F13950
ARS 18 4F13951
SLW ALPHA-1,C STO -N IN ALPHA+A-1 4F13952
SLW LAMBDA+2,A STO S(N) IN LAMBDA+3L+2 4F13953
STO LAMBDA+3,A STO -N IN LAMBDA+3(L+1) 4F13954
TXI LA4170,A,3 4F13955 3L = 3L - 3
や
*'**'
LA2000 CLS ALPHA-1,C 4F13897
STO LAMBDA,A STO C(ALPHA+A-1) IN LAMBDA+3L 4F13898
CLA NBAR 4F13899 set N to acc
TXI LA4180,A,6 4F13900 3L = 3L - 6
がそれ。 これらはある条件に従ってディスパッチされる先なんだけど
続く?
FUN WITH FLAGS
— Programmer Humor (@PR0GRAMMERHUM0R) August 23, 2023
point free style
isAlpha :: Char -> Bool
— mod_poppo (@mod_poppo) August 25, 2023
isAlpha x = x == 'α' || x == 'Α'
ポイントフリー原理主義者のためのisAlpha:
— mod_poppo (@mod_poppo) August 25, 2023
isAlpha = liftA2 (||) (== 'α') (== 'Α')
ポイントフリースタイルよくわからないorz
Mathematical function using Python
Mathematical function using Python pic.twitter.com/urtu4NUV39
— Python Coding (@clcoding) August 25, 2023
面白そうだなこれ。
- google/latexify_py: A library to generate LaTeX expression from Python code.
- Pythonの計算コードをLaTeXの数式にする - Qiita
skill
Apart from coding, what's one job skill you have that you wish you got to use more at work?
— PragmaticProgrammers (@pragprog) August 26, 2023
空白とカンマ
Clojureはコンマを空白扱いにして宗教戦争に終止符を打った https://t.co/A8gVfMkk0X
— Shiro Kawai (@anohana) August 26, 2023
ふと、関数の引数などを区切るのにカンマを使うのもFORTRAN起源?と思ったが、 (少なくとも今は)確かめない。
多次元配列の添え字の区切りのカンマは数学由来?
ギランドゥ
ギランドゥ
— 浅利与一義遠 (@hologon15) May 18, 2020
>西城秀樹
(だから、そうじゃない) pic.twitter.com/fBxtHy9DzX