2026年3月27日金曜日

💎コンビネータ一覧

 

  1. Yコンビネータ (Fixed-point combinator):

    • Yコンビネータは、匿名関数(ラムダ式)を用いて再帰関数を実現するためのコンビネータです。

    • Yコンビネータは、ラムダ計算で再帰を表現するために使用されます。

    • 形式的な定義(λ計算の文法を使用して)は、以下のようになります: Y=λf.(λx.f(xx))(λx.f(xx))

  2. Iコンビネータ (Identity combinator):

    • Iコンビネータは、引数をそのまま返すアイデンティティ関数です。

    • 形式的な定義は: I=λx.x

    • つまり、Iコンビネータに何かを適用すると、その何かがそのまま返されます。

  3. Kコンビネータ: Kxy=x 二つの引数を取り、最初の引数を返します。

  4. Sコンビネータ: Sxyz=xz(yz) 三つの引数を取り、指定された方法でそれらを適用します。

  5. Bコンビネータ (関数合成): Bxyz=x(yz) 三つの引数を取り、中間の関数を最後の引数に適用した結果を、最初の関数に適用します。

  6. Cコンビネータ (引数の順番の入れ替え): Cxyz=xzy

  7. Wコンビネータ: Wxy=xyy 二つの引数を取り、最初の関数を、二つ目の引数に二回適用します。

匿名関数(ラムダ式)を用いて再帰関数を実現することには、いくつかのメリットがあります。以下、その主なメリットと実用例を説明します。

メリット:

  1. 名前のない関数: 匿名関数は名前を持たないため、一時的な計算や関数の適用に使う場合、名前を考える必要がなくなります。これによりコードがスッキリとすることがあります。

  2. コードの局所性: 再帰的な動作を持つ匿名関数を使用することで、その再帰的な動作を局所的なコードの一部として記述できるため、他の部分のコードとの混乱を避けることができます。

  3. 高階関数との組み合わせ: ラムダ計算や関数型プログラミング言語では、関数を別の関数の引数として渡したり、関数から関数を返したりすることが一般的です。このような高階関数と匿名関数を組み合わせることで、非常に柔軟なプログラムの構築が可能となります。


🖊ウルトラ近代、チョー近代。ハリー ハルトゥーニアン と 「近代の超克」

 

「危険」が「危ない」、みたいな観点でみた「近代」の「超克」

ハルトゥーニアンの最初の単行本Toward Restoration; the Growth of Political Consciousness in Tokugawa Japan (1970) は、安定した封建的日本が緊張を見せ始めた時期を扱い、1850年代の開国と1868年の明治維新へとつながっていく。ケネス・パイルは、この本をAmerican Historical Review誌で批評し、多くの歴史家が明治維新を革命ではなく、その社会的影響を予見しなかった人々によって伝統の名の下に行われた変化と見ている、と書いている。パイルは、「このような見方には、ほとんど我慢がならない」と言う。この本は、「明治維新の革命的側面を最小化しようとする異常な努力」を攻撃し、その代わりに、活動家は「1789年のフランス革命家に劣らず、歴史を否定することに熱心だった」と主張した。彼らが信奉した価値観は、名ばかりの伝統的なものだった」。語彙だけが伝統的だったのだ。

https://en.wikipedia.org/wiki/Harry_Harootunian

Things Seen and Unseen: Discourse and Ideology in Tokugawa Nativism (1988)中国中心の伝統に抵抗し、自国の思想を重視する新しい枠組みを開発した緩やかな関連集団である。その思想は、首都や大都市の外にいる集団、特に農民エリートが、日本の伝統に基づき自分たちの正当性を主張するために利用された。賀茂真淵(1697-1769)、本居宣長(1730-1801)、平田篤胤(1776-1843)らである。Samuel H. Yamashitaは、Harvard Journal of Asiatic Studiesに寄稿し、「間違いなく」この本は「国学運動の再解釈に他ならず、西洋と日本の既存の学問とは内容的にも形式的にも乖離した驚くべき本」であると述べている。

近代による超克 Overcome by Modernity』(2000年)は、日本が「資本主義の英雄的局面」に突入した1920年代から1930年代の芸術家、批評家、哲学者、詩人、社会科学者を扱っている。彼らは、日本が「近代」を克服しなければならない理由を説明する一方で、そうできない理由を説明するというジレンマに陥っていた。

画像
河上徹太郎

日本が近代化の道を歩み始めたのは、二つの世界大戦の間の数十年間で、資本産業の拡大と都市化が急速に進み、欧米の多くの伝統的な工業社会に匹敵するようになった。ハリー・ハルートゥニアンは、この急激な変化とそれに続く大衆文化の台頭をどのように理解したのか、近代の諸問題を興味深く探求している。本書では、ヨーロッパの知識人たちと同様に、近代を絶え間ない変化の光景ととらえ、支配的な歴史的文化を固定的価値から根こそぎ奪い、幻想と欲望に基づく文化に置き換えた日本の一世代の知識人の仕事を検証している。

https://amzn.to/3QWUVH7

日本の思想家たちが注目したのは、欲望の生産がいかに歴史的文化を実際に脅かしているかということであった。これらの知識人は、西洋、特にアメリカから連想される物質主義や消費主義を「克服」しようとした。彼らは、文化的真正性に根ざし、芸術、記憶、共同体などを通じて日常生活に意味を吹き込むことを目的とした近代を提案した。本書は、柳田国男、戸坂潤、権田保之助、今和次郎らの作品に見られるこれらの思想を、ジンメル、ジークフリード・クラッカウアー、ベンヤミン、バタイユらヨーロッパの作家の主張と関連づけながら紹介する。

また、日本がファシズムと関わりを持ったことや、資本主義や産業界への参入が遅れたことを理由に、歴史家が日本の近代化の経験を奇異に見るべきではないと強調している。著者は、ファシズムの系統はヨーロッパのほぼすべての国に存在し、多くの点で近代化の流れから生じたものであることを論じている。

戦争中だったか、そのことには全く触れない超克

🚫tempファイル作成時の危険性 CWE377の図解 セキュアコーディング

 

画像
この一見すると何の変哲もないコードは、一時ファイルを作成するための安全でない方法に依存しているため、さまざまな攻撃に対して脆弱性があります。 CWE377

ほとんど世にも奇妙な物語、何が安全でないというのか?

中間ファイルには大きく二種類あってそれぞれで驚異が異なる。一つはわかりやすい中間ファイル名から内容を読み込まれてしまうパターン、ランダムにはしてるけど名前の特定や先回りをされてしまうようなファイル名。

一時ファイルを作成するための関数は、単にファイル名を指定するものと、実際にファイルを開くものの2つに分類されます

グループ1:「一意な」ファイル名。一時ファイルの作成プロセスを支援するために設計されたCライブラリおよびWinAPI関数の最初のグループは、新しい一時ファイル用に一意のファイル名を生成し、プログラムがそれを開くことになっています。このグループには、tmpnam()、tempnam()、mktemp()などのCライブラリ関数と、_(アンダースコア)を先頭に持つ同等のC++関数、およびWindows APIのGetTempFileName()関数が含まれています。
この関数群には、選択されるファイル名に関する根本的な競合状態が存在します。これらの関数は、ファイル名が選択された時点で一意であることを保証しますが、選択された後、アプリケーションがファイルを開こうとする前に、他のプロセスや攻撃者が同じ名前のファイルを作成することを防ぐメカニズムはありません。

アプリケーションによって一時ファイルに保存されたデータは、攻撃者によってアクセス、変更、または破損される可能性があります。Unix ベースのシステムでは、攻撃者がファイルを別の重要なファイルへのリンクとして事前に作成した場合、さらに陰湿 な攻撃が可能です。

グループ2:「ユニーク」なファイル。Cライブラリ関数の第2グループは、一意のファイル名を生成するだけでなく、ファイルを開くことによって、一時ファイルに関連するセキュリティ問題のいくつかを解決しようとしています。このグループには、tmpfile() などの C ライブラリ関数と、_ (アンダースコア) を先頭に持つ同等の C++ 関数、および少し行儀の良い C ライブラリ関数 mkstemp() が含まれます。

画像
画像
https://amzn.to/3xuJAWP

アプリケーションは一時ファイルを頻繁に必要とするため、CライブラリやWindows(R)APIには一時ファイルを作成するためのさまざまなメカニズムが存在する。これらの関数のほとんどは、様々な攻撃に対して脆弱である。

最後に、mkstemp() は、一時ファイルを作成するための、それなりに安全な方法である。

mkstemp() は、ユーザーによって提供されたファイル名テンプレートと、ランダムに生成された一連の文字を組み合わせて、一意のファイルを作成し、開こうとする。そのようなファイルを作成できない場合は、失敗して-1を返す。これは、ユーザーが明示的にアクセス権を変更しない限り、ファイルが改ざんから保護されることを意味する。しかし、mkstemp() は予測可能なファイル名を使用しているため、攻撃者が使用されるファイル名を予測して事前に作成することで mkstemp() を失敗させると、アプリケーションはサービス拒否攻撃に対して脆弱になる可能性がある。

2026年3月26日木曜日

💎APLとj言語の違い

 応用数学の多く、特に旧来の学問分野を横断する最近のコンピュータ関連分野は、適切なプログラミング言語の欠如に悩まされています。適切なプログラミング言語の記述力と分析力は、その習得に必要な多大な努力に十分見合うものであるというのが、本書の中心的なテーゼである。この論文は、まず言語全体を紹介し、その後の章でいくつかの主要なトピックに適用することで展開されます。

これらの応用分野は、主にその本質的な興味とこれまでに扱われていないことから選ばれていますが、言語の普遍性やその他の側面を示すためにも設計されています。例えば、第2章のマイクロプログラミングは、言語の分割可能性、つまり、完全な言語のほんの一部を使って限定された領域を処理する能力を示している。第6章(ソート)では、比較的複雑で詳細なテーマを短い時間でまとめ上げる能力が示されている。第7章(論理計算)では、言語の形式的な操作性と、理論的な作業におけるその有用性を強調している。

Chapter2はここ

プログラムステートメントとは、指定されたオペランドに対する有限の演算によって、ある量を指定することである。

J言語はAPLとは異なるいくつかの概念を導入しています。ランク、トレイン、フォークは、J言語の中で特に注目すべき特徴の一部です。

  1. ランク:

    • J言語では「ランク」という概念があり、これは多次元配列の各次元に操作をどのように適用するかを制御するためのものです。ランクを明示的に操作することで、配列の特定の次元に関数を適用することができます。

  2. トレインとフォーク:

    • J言語のトレインは、複数の関数や操作を組み合わせて新しい関数を作成する方法の一つです。

    • 3つの関数が連なるトレインを「フォーク」と呼びます。これは中央の関数が、左右の関数の結果を引数として受け取り、その結果を返すものです。例えば、`+ % #`は合計 (`+`) 除算 (`%`) アイテムの数 (`#`) のフォークであり、平均を計算します。


🎡三次元のスピログラフは可能か?

 3D版があった、カッコいい


画像
https://fingerpich.github.io/sinus-studio/?EEEE5298V177V10V0ZZVEE0V178V10V1ZZVEE0V148V10V1ZZZVE0V1V1V5000V5000V0ZZ
画像
これはちょっと酔う
画像
D3のスピログラフ、かわいらしい
画像
しくみでわかる系
画像
http://bl.ocks.org/nbremer/d7071c6a5a7206701015
画像
https://jsfiddle.net/dwahlin/DZtwD/


画像1
画像2

本家にもあるが、なんかちょっとコワイし、違うきがする

画像3

codepenだがこれはなんか近い、色もいいな

画像4

冒頭引用したサンプルを移植してみたが、非常に遅い

画像5

codepenのほうがかっこよかったので、スライダーと組み合わせてみた。遊んでみてください

ENJOY