<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>inzkyk.xyz</title>
    <link>https://inzkyk.xyz/</link>
    <description>Recent content on inzkyk.xyz</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <lastBuildDate>Sun, 02 Nov 2025 00:00:00 +0900</lastBuildDate>
    <atom:link href="https://inzkyk.xyz/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/</guid>
      <description>翻訳について これは Darij Grinberg 著 An introduction to graph theory の翻訳です。英語版は CC0 1.0 Universal ライセンスで公開されています。 この翻訳は CC0 1.0 Universal ライセンスの許諾に基づいて公開されます。 PDF 版について この翻訳の PDF 版を BOOTH で販売しています。 謝辞 英語版の著者 Darij Grinberg 氏に感謝します。</description>
    </item>
    <item>
      <title>はじめに - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/introduction/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/introduction/</guid>
      <description>現代のコンピューターハードウェアは非常に高速であり、基本的に開発者はパフォーマンスを気にしなくて構わない、と考える人は多い。実際、Douglas Crockford は本書への執筆依頼を次の理由で断った: もし私が一つの章を書くとすれば、それは「アンチパフォーマンス」の章となるだろう: パフォーマンスを向上させるために費やされる労力は多くが無駄になる。あなたが求めるのはそんな文章ではないと思う。 Donald Knuth も同様の意見を 30 年前に表明している:</description>
    </item>
    <item>
      <title>前書き - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foreword/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foreword/</guid>
      <description>読者へ: 本書を読み始める前に、1996 年の様子を想像してみてほしい。本書の第一版はこの年に出版された。1996 年のことを覚えているだろうか？ あなたは生まれていただろうか？ インターネットの基礎が築かれたのがどれだけ昔のことであるかを人々は忘れてしまうものだ。 1996 年といえば、NSFNET がちょうど運用を停止し、インターネットの商用フェーズが始まりかけていたころである。世界初の検索エンジン (Alta Vista ── 覚えているだろうか？) のデモが公開されたのもちょうどこのころだった。コンテンツ配信ネットワークは存在しなかった ── Akamai の創業は 2 年後の 1998 年であり、この年に Google も正式に誕生した。クラウドは地平線のかなたに見える靄もやでしかなかった。「家庭用ブロードバンド」や「消費者向け無線デバイス」といったものは存在せず、私たちはダイヤルアップのモデムを使っていた ── 56 K モデムが新発明だった。その前にあった無線パケット通信はダイヤルアップより低速で、ビール用冷蔵庫ぐらいのサイズがあり、モバイルで使おうと思えばトラックか少なくともジープが必要だった。</description>
    </item>
    <item>
      <title>ようこそ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/welcome/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/welcome/</guid>
      <description>Julia 1.5.4 ドキュメント Julia 1.5.4 のドキュメントにようこそ。 一つ前のリリースからの変更点についてはリリースノートを参照してください。 情報 このドキュメントの英語版は PDF フォーマットでも公開されています: julia-1.5.4.pdf Julia の紹介 伝統的に科学計算は最上のパフォーマンスを要求してきましたが、一方でドメインエキスパートの大部分が日常的な計算で使う言語は低速な動的言語に移行してきました。一部の応用分野で動的言語が好まれるのはもっともなことであり、動的言語が将来使われなくなることはないだろうと私たちは考えています。幸いにも、現代的な言語設計とコンパイラ技術を使えば動的言語が迫られる柔軟性と性能のトレードオフをおおむね解消でき、プロトタイプに使える生産性と性能が重視されるアプリケーションで実際に使える実行速度を兼ね備えた単一環境の作成が可能になります。プログラミング言語 Julia が担うのがこの役割です: Julia は柔軟な動的言語であり、科学計算および数値計算に適していて、古くからある静的型付けの言語に迫る性能を持ちます。</description>
    </item>
    <item>
      <title>1. はじめに - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/introduction/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/introduction/</guid>
      <description>『テクニカルライティング One』では明快な技術文書を書く技術を学びます。 対象読者 読者には最低限の英語のライティング能力が求められますが、凄腕のライターでなくともこのコースは受けられます。 もしあなたがテクニカルライティングの訓練を受けたことがないなら、このコースはあなたに最適です。もしテクニカルライティングの訓練を受けたことがあるなら、このコースで効率的に復習できます。 学習の目的 このコースではテクニカルライティングの基礎を学びます。この講座を修了すれば、次の事項が習得できるでしょう:</description>
    </item>
    <item>
      <title>1. はじめに - テクニカルライティング Two (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/two/introduction/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/two/introduction/</guid>
      <description>『テクニカルライティング Two』は読者の技術的コミュニケーションスキルを向上させることを目標とします。 対象読者 このコースの対象読者は『テクニカルライティング One』を読み終わり、さらなるテクニカルライティングの訓練を欲している貪欲な読者です。テクニカルライティングの訓練を全く受けたことがないのなら、この講座を受講する前に『テクニカルライティング One』を終わらせることを推奨します。 学習目標 このコースはテクニカルライティングにおける中級レベルのトピックに焦点を当てます。この講座を修了すれば、次の事項が習得できるでしょう:</description>
    </item>
    <item>
      <title>6.1 基礎関数 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/basic_functions/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/basic_functions/</guid>
      <description>6.1 基礎関数 基礎関数ライブラリは Lua でコアとなる関数を提供します。もしこのライブラリをアプリケーションに含めない場合には、機能の一部を自分で実装する必要がないかを慎重に確認する必要があります。 assert (v [, message]) 引数 v が偽値 (nil または false) ならエラーを送出し、そうでないなら全ての引数をそのまま返します。エラーが起きた場合には message がエラーオブジェクトとなります。message が与えられないときはデフォルト値 &#34;assertion failed!&#34; が使われます。 collectgarbage ([opt [, arg]]) この関数はガベージコレクタへの一般的なインターフェースです。第一引数 opt に応じて異なる処理が行われます:</description>
    </item>
    <item>
      <title>はじめに - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_1_overview/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_1_overview/</guid>
      <description>私が長年にわたって担当しているコンピューターグラフィックスの講義では、レイトレーシングを扱うことが多い。レイトレーシングでは全てのコードを自分で書く必要があるが、外部 API を使わずにクールな画像を生成できるからだ。その講義ために作ったノートをここに書籍としてまとめることにした。この本の目的はクールなプログラムをなるべく簡潔に読者へ示すことである。出来上がるのは機能全部載せのレイトレーサーとはいかないが、映画でレイトレーシングが使われる主な理由の一つである間接光がサポートされる。この本のステップ通りに実装していけば、レイトレーサーのアーキテクチャは簡単に拡張できるものになる。レイトレーシングにさらに興味が湧いた場合にも勉強に役立つだろう。</description>
    </item>
    <item>
      <title>はじめに - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_1_overview/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_1_overview/</guid>
      <description>『週末レイトレーシング 第一週』では簡単な総当たりパストレーサーを実装した。この巻ではテクスチャ・ボリューム (例えばフォグ)・長方形・インスタンス・ライトを実装し、さらに BVH を使った様々なオブジェクトを追加する。最後まで読めば「本物の」レイトレーサーが手に入るだろう。 レイトレーシングに関わるたいていの人は「大部分の最適化はコードを複雑にするだけで、実行はたいして速くならない」という経験則を信じている (私もだ)。この小さな本では、設計に関する判断が必要になったときには最も単純なアプローチを選ぶことにする。より洗練されたアプローチに関する書籍やリンクについては https://in1weekend.blogspot.com/ を参照してほしい。ただし時期尚早な最適化をしないようによく注意する必要がある。実行時間プロファイルの上位に表れないなら、全ての機能を実装するまで最適化すべきではない！</description>
    </item>
    <item>
      <title>はじめに - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_1_overview/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_1_overview/</guid>
      <description>『週末レイトレーシング 第一週』と『週末レイトレーシング 第二週』で、あなたは「本物の」レイトレーサーを作成した。 この巻はレイトレーシングに関連するキャリアに興味を持っている読者を想定し、非常に本格的なレイトレーサーを作成するために必要な数学について解説する。最後まで読み切れば、映画やプロダクトデザインで使われる本物の商用レイトレーサーをいじって遊べるようになるだろう。この短いシリーズで触れられないトピックはたくさんある。モンテカルロレンダリングを行うプログラムを書く方法はいくつもあるが、ここで説明するのは一つだけだ。ライトに向かってレイを多く飛ばす方法を取る代わりにシャドウレイは考えず、双方向パストレーシング・メトロポリス法・フォトンマッピングにも触れていない。ただ私はこういった手法を研究する分野で使われる言葉を使って話をする。この本はそういった言葉に深く触れるための本であり、初めて触れる人でも読めるように書かれている。他の文献で勉強するための概念・数学の知識・専門用語の使い方を学ぶことができるだろう。</description>
    </item>
    <item>
      <title>週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/</guid>
      <description>はじめに 私が長年にわたって担当しているコンピューターグラフィックスの講義では、レイトレーシングを扱うことが多い。レイトレーシングでは全てのコードを自分で書く必要があるが、外部 API を使わずにクールな画像を生成できるからだ。その講義ために作ったノートをここに書籍としてまとめることにした。この本の目的はクールなプログラムをなるべく簡潔に読者へ示すことである。出来上がるのは機能全部載せのレイトレーサーとはいかないが、映画でレイトレーシングが使われる主な理由の一つである間接光がサポートされる。この本のステップ通りに実装していけば、レイトレーサーのアーキテクチャは簡単に拡張できるものになる。レイトレーシングにさらに興味が湧いた場合にも勉強に役立つだろう。</description>
    </item>
    <item>
      <title>第二版への前書き - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/preface/</link>
      <pubDate>Thu, 12 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/preface/</guid>
      <description>本書の驚くほどの成功により、具体例や練習問題を追加することとなった。さらに詳しい説明が必要だと判明した部分の加筆も行った。 教師と学生 ──そして批評家── から受け取った多くの価値ある指摘および手紙に感謝する。</description>
    </item>
    <item>
      <title>§1 有理数 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_1_rational_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_1_rational_numbers/</guid>
      <description>正または負の整数 p と q に対して、その比 r = p/q を有理数 (rational number) と呼ぶ。このとき p と q に公約数が存在するなら両方を公約数で割ることで、p と q が公約数を持たないと仮定できる。さらに次の等式が成り立つので、q が正だとも仮定できる: \[ \begin{aligned} \frac{p}{-q} &amp; = \frac{-p}{q}, \quad \frac{-p}{-q} &amp; = \frac{p}{q} \end{aligned} \] こうして定義される有理数に、p = 0 とした「有理数 0」を追加する。以降はこの有理数について考える。 読者は有理数に関する基本的な算術規則を知っているものとする。次の例はそういった基本的な知識しか必要としない。</description>
    </item>
    <item>
      <title>前書き - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/preface/</link>
      <pubDate>Thu, 09 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/preface/</guid>
      <description>第三版への前書き この版に大きな変更はない。一番大きく変更したのは §80–§82 で、この部分は S・ポラード氏からの提案をもとに書き直した。 前の版では三角関数の起源に関する説明が全く不十分だった。§158 と補遺 Ⅲ でこの改善を試みた。また補遺 Ⅳ も追加した。 興味深いので記しておくと、私が目にしなければならない批評の性格は大きく変化した。私は 15 年前の学生に対して細心の注意を払い、彼らの細かい所作にまで拘泥していたのだが、現在のトリニティの学者にとって私は有名になり過ぎた。言うまでもなく私はそういった批評を非常に喜ばしく思うし、この本が書かれた目的を多少でも達成できたことの何よりの証拠だと感じている。</description>
    </item>
    <item>
      <title>このサイトについて</title>
      <link>https://inzkyk.xyz/post/about/</link>
      <pubDate>Wed, 05 Sep 2018 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/post/about/</guid>
      <description>作者: inzkyk プライバシーポリシー このサイトではアクセス解析に Google Analytics を、広告に Google Adsense を利用しています。あなたの行動は Cookie を使ってトラッキングされ、匿名化された情報が収集されます。無効化する方法など、詳しくは Google のプライバシーポリシー および GOOGLE のサービスを使用するサイトやアプリから収集した情報の GOOGLE による使用 を参照してください。 Amazon アソシエイトについて Amazon のアソシエイトとして、このサイトの運営者は適格販売により収入を得ています。 あなたがこのサイトにある Amazon へのリンクをクリックした後に Amazon で商品を購入すると、このサイトの運営者は購入金額の一定量を紹介料として Amazon から獲得します。</description>
    </item>
    <item>
      <title>Chrome のネットワークスタック - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/network-stack-in-chrome/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/network-stack-in-chrome/</guid>
      <description>Google Chrome の歴史と中心的な設計指針 Google Chrome は 2008 年 9 月に Windows プラットフォーム向けのベータバージョンとして初めてリリースされた。Chrome を支える Google 製コード ── Chromium プロジェクトとして知られるもの ── も緩い BSD ライセンスで利用可能とされた。Google による一連の行動は、人々に驚きを持って受け止められた: ブラウザ戦争の再来か？ Google は本当に優れたブラウザを開発できるのか？ あまりにも優れていたので、自分の考えを変えざるを得なかった...</description>
    </item>
    <item>
      <title>はじめに - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/preface/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/preface/</guid>
      <description>Computer Networks: A Systems Approach の第五版が出版されて約 10 年になる。この間に多くのことが変わったが、最も注目すべきはクラウドとスマートフォンアプリの登場と爆発的な成長だろう。これは様々な面で、我々が 1996 年に本書の第一版を出版したころにインターネットが経験した、ウェブの登場による劇的な変化を思い起こさせる。 第六版はこういった時流に合わせたものであるものの、その北極星に「システム的アプローチ」があることは変わらない。大まかに言って、この新しい版における更新と改善には次の 4 点がある:</description>
    </item>
    <item>
      <title>Julia 1.5 リリースノート - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/news/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/news/</guid>
      <description>Julia 1.5 で変更された点をまとめたリリースノートです。</description>
    </item>
    <item>
      <title>2. 最低限の文法 - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/just_enough_grammar/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/just_enough_grammar/</guid>
      <description>この章では講座の他の部分を理解するために必要な最低限の文法を説明します。もし文法をある程度理解しているなら、次の 3. 単語 に進んで構いません。文法に自信がなければ、この章を読み進めてください。 ここでは分かりやすいように説明を単純にしています。文法というトピックは実際にはこの章にあるよりずっと複雑です。 品詞 (part of speech) の数と種類について、文法学者の意見は一致しません。このコースに登場する分の品詞を次の表に示します:</description>
    </item>
    <item>
      <title>2. 推敲 - テクニカルライティング Two (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/two/self_editing/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/two/self_editing/</guid>
      <description>ドキュメントの初稿が書けたところを想像してください。どうすれば原稿をより良くできるでしょうか？ ほとんどの場合、公開される最終的なドキュメントへ向かう作業は反復的に行われます。真っ白なページから初稿を作るのが最も手間がかかる部分ですが、その後にも文書を手直しする時間を十分に確保しておくことを忘れないでください。 この章で紹介する推敲のテクニックを使えば、あなたの原稿は読者が必要とする情報をより明確に伝えられるようになります。いずれかのテクニックを一つ使うか、全て使うかは自由です。あなたに合ったやり方を見つけ、それを執筆ルーチンの一部とすることが重要です。</description>
    </item>
    <item>
      <title>6.2 コルーチン制御 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/coroutine_manipulation/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/coroutine_manipulation/</guid>
      <description>6.2 コルーチン制御 このライブラリに含まれるのはコルーチンを制御する操作であり、操作は全て coroutine テーブルの中に定義されます。コルーチンの概要は § 2.6 を参照してください。 coroutine.close (co) コルーチン co をクローズします。つまり残っているクローズ予約変数を全てクローズし、コルーチンを dead 状態にします。引数として渡されるコルーチンは dead または suspended 状態である必要があります。変数のクローズでエラーが起きたときは false とエラーオブジェクトを返し、エラーが起きなければ true を返します。</description>
    </item>
    <item>
      <title>モーションブラー - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_2_motion_blur/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_2_motion_blur/</guid>
      <description>レンダリングにレイトレーシングを選択したということは、実行時間よりも画像の質を優先したということである。これまでのぼやけた反射や焦点ぼけではピクセルごとに複数のサンプルが必要だった。レイトレーシングで嬉しいのが、ほとんど全てのエフェクトが総当たりで解決できる点である。モーションブラー (motion blur) はそんなエフェクトの分かりやすい例と言える。現実のカメラは有限の時間に渡ってシャッターを開いたままにするので、その間にカメラや被写体が移動する可能性がある。カメラが撮影する画像はシャッターが開いている間にカメラのセンサーに届く像の平均値である。 時空間レイトレーシング入門 カメラからレイを放つときにシャッターが開いている瞬間をランダムに選び、その瞬間におけるレイを放つことでモーションブラーを近似できる。シーン内のオブジェクトがレイの考えている瞬間における位置にあれば、レイをたくさん放つことで現実のカメラが撮影するであろう平均値を計算可能になる。ランダムなレイトレーシングが単純になることが多いのはこれが基本的な理由である。</description>
    </item>
    <item>
      <title>画像の出力 - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_2_output_an_image/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_2_output_an_image/</guid>
      <description>PPM フォーマット レンダラを書き始めると、すぐに画像を確認する手段が必要になる。一番簡単なのはファイルに書き出してしまうことだ。ただ画像フォーマットがたくさんあってどれも複雑なのが問題となる。私はいつもプレーンテキストの PPM ファイルから始めることにしている。Wikipedia にこのフォーマットの分かりやすい説明がある: 図 1.1: PPM フォーマットの説明 PPM フォーマットを出力する簡単な C++ コードを書こう: #include &amp;lt;iostream&amp;gt; int main() { const int image_width = 256; const int image_height = 256; std::cout &amp;lt;&amp;lt; &amp;#34;P3\n&amp;#34; &amp;lt;&amp;lt; image_width &amp;lt;&amp;lt; &amp;#39; &amp;#39; &amp;lt;&amp;lt; image_height &amp;lt;&amp;lt; &amp;#34;\n255\n&amp;#34;; for (int j = image_height-1; j &amp;gt;= 0; --j) { for (int i = 0; i &amp;lt; image_width; ++i) { auto r = double(i) / (image_width-1); auto g = double(j) / (image_height-1); auto b = 0.25; int ir = static_cast&amp;lt;int&amp;gt;(255.999 * r); int ig = static_cast&amp;lt;int&amp;gt;(255.999 * g); int ib = static_cast&amp;lt;int&amp;gt;(255.999 * b); std::cout &amp;lt;&amp;lt; ir &amp;lt;&amp;lt; &amp;#39; &amp;#39; &amp;lt;&amp;lt; ig &amp;lt;&amp;lt; &amp;#39; &amp;#39; &amp;lt;&amp;lt; ib &amp;lt;&amp;lt; &amp;#39;\n&amp;#39;; } } } リスト 1.1 [main.cc] 簡単な PPM ファイルを出力するプログラム このコードに関して注意すべき点がある:</description>
    </item>
    <item>
      <title>簡単なモンテカルロプログラム - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_2_simple_monte_carlo/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_2_simple_monte_carlo/</guid>
      <description>モンテカルロ法 (Monte Carlo Method, MC) を使う最も簡単なプログラムから始めよう。モンテカルロ法を使うと真の値の統計的な近似値を計算でき、近似値は実行時間を長くすればそれだけ正確になる。誤差はあるが時間をかければ正確になる値を簡単なプログラムで求められるという基本的な特性が MC の全てである。グラフィックスのように極限まで正確な値が必要とされない分野においてモンテカルロ法は特に有用となる。 円周率の計算 例として \pi の近似値を計算してみよう。古典的な方法としてビュフォンの針を使うものがあるが、ここに示す方法はその変種と言える。正方形に内接する円を考える:</description>
    </item>
    <item>
      <title>週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/</guid>
      <description>はじめに 『週末レイトレーシング 第一週』では簡単な総当たりパストレーサーを実装した。この巻ではテクスチャ・ボリューム (例えばフォグ)・長方形・インスタンス・ライトを実装し、さらに BVH を使った様々なオブジェクトを追加する。最後まで読めば「本物の」レイトレーサーが手に入るだろう。 レイトレーシングに関わるたいていの人は「大部分の最適化はコードを複雑にするだけで、実行はたいして速くならない」という経験則を信じている (私もだ)。この小さな本では、設計に関する判断が必要になったときには最も単純なアプローチを選ぶことにする。より洗練されたアプローチに関する書籍やリンクについては https://in1weekend.blogspot.com/ を参照してほしい。ただし時期尚早な最適化をしないようによく注意する必要がある。実行時間プロファイルの上位に表れないなら、全ての機能を実装するまで最適化すべきではない！</description>
    </item>
    <item>
      <title>プロローグ - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/prologue/</link>
      <pubDate>Thu, 12 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/prologue/</guid>
      <description>微積分ができる馬鹿の数を考えるにつけ、他の馬鹿には微積分の習得が難しいとか長い時間がかかるなどと考えられているのが不思議でならない。 微積分には非常に簡単な部分もあるし、途方もなく難しい部分もある。高等数学の教科書を執筆する馬鹿 ──たいていは賢い馬鹿── というのは、微積分の簡単な部分がどれだけ簡単かをわざわざ説明したりはしない。それどころか最も難しい言葉を使って微積分を説明することで、著者の類まれなる頭の良さで読者を感服させようとしているようにさえ思える。</description>
    </item>
    <item>
      <title>§2 数直線上の点を使った有理数の表現 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_2_rational_points/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_2_rational_points/</guid>
      <description>数学的な解析の様々な場面において、幾何学的な図を使うと議論が分かりやすくなる。 ただし幾何学的な図を使ったとしても、解析にその図が必要なわけでは決してない。図は図に過ぎず、説明を分かりやすくするためだけに使われる。そのため、初等幾何学の概念を使った論理的な議論は必ずしも必要とならない。図が真実からどれほど離れていたとしても、図の意味することをお互いに理解できれば、それで問題ない。 直線 (straight line)・直線の線分 (segment)・線分の長さ (length) の意味を読者は知っているものとする。両方向に無限に伸びる直線 \Lambda と適当な長さを持つ線分 A_{0}A_{1} を取る。A_{0} を原点 (origin) あるいは点 0、A_{1} を点 1 と呼び、この二つの点がそれぞれ数 0 と 1 を表すとみなす。</description>
    </item>
    <item>
      <title>第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/</guid>
      <description>§1 有理数 正または負の整数 p と q に対して、その比 r = p/q を有理数 (rational number) と呼ぶ。このとき p と q に公約数が存在するなら両方を公約数で割ることで、p と q が公約数を持たないと仮定できる。さらに次の等式が成り立つので、q が正だとも仮定できる: \[ \begin{aligned} \frac{p}{-q} &amp; = \frac{-p}{q}, \quad \frac{-p}{-q} &amp; = \frac{p}{q} \end{aligned} \] こうして定義される有理数に、p = 0 とした「有理数 0」を追加する。以降はこの有理数について考える。 読者は有理数に関する基本的な算術規則を知っているものとする。次の例はそういった基本的な知識しか必要としない。</description>
    </item>
    <item>
      <title>SocialCalc と EtherCalc - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/socialcalc-and-ethercalc/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/socialcalc-and-ethercalc/</guid>
      <description>EtherCalc はオンラインスプレッドシートシステムである。複数のユーザーによる共同編集に最適化されており、ブラウザ内のスプレッドシートエンジンとして SocialCalc を使っている。Dan Bricklin (スプレッドシートの考案者) によって設計された SocialCalc は、エンタープライズユーザー向けの様々なソーシャルコラボレーションツールから構成される Socialtext プラットフォームの一部である。 Socialtext チームにとって、パフォーマンスは 2006 年に始まった SocialCalc 開発の主目標だった。この開発からは「JavaScript で行われるクライアントサイドの計算は、Perl で行われるサーバーサイドの計算より一桁低速であるものの、AJAX に必要なラウンドトリップで生じるネットワークレイテンシと比べれば高速」という教訓が得られた。</description>
    </item>
    <item>
      <title>第 1 章 基礎 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foundation/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foundation/</guid>
      <description>私はシステムを作らなければならない。さもなくば、私は他人のシステムに隷属するだろう。私は筋道立てて考えることも何かと比較することもしない: 私の仕事は創造である。 ── ウィリアム・ブレイク</description>
    </item>
    <item>
      <title>Julia を始める - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/getting-started/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/getting-started/</guid>
      <description>Julia を始める Julia のインストールは簡単です。コンパイル済みのバイナリを使う方法と、ソースからコンパイルする方法があります。https://julialang.org/downloads/ の指示に従って、Julia をダウンロード・インストールしてください。 Julia を試す最も簡単な方法は対話セッション (read-eval-print loop, REPL) です。Julia の実行形式ファイルをダブルクリックするか、コマンドラインで julia を実行すると、REPL が起動します: $ julia _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type &amp;#34;?&amp;#34; for help, &amp;#34;]?&amp;#34; for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.5.4 (2021-03-11) _/ |\__&amp;#39;_|_|_|\__&amp;#39;_| | xxNOxx|__/ | julia&amp;gt; 1 + 2 3 julia&amp;gt; ans 3 対話セッションを終了するには CTRL-D (Control キーまたは ^ キーと d キーの同時押し) を入力するか、exit() と入力してからエンターキーを押します。</description>
    </item>
    <item>
      <title>3. 大規模なドキュメントの構成 - テクニカルライティング Two (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/two/organizing_large_docs/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/two/organizing_large_docs/</guid>
      <description>収集した多くの情報を一つのドキュメントやウェブサイトとしてまとめるにはどうすればよいでしょうか？ 言い換えると、現在手にしている取っ散らかったドキュメントあるいはウェブサイトの断片を再構成して、読者が親しみやすく役に立つものとするにはどうすればよいでしょうか？ 試す価値のある戦略を示します: 一つの大きなドキュメントを書くのか、複数のドキュメントを書くのかを選択する。 ドキュメントを整理する。 ナビゲーションを追加する。 情報を少しずつ読者に示す。 いつ大きなドキュメントを書くべきか 収集した情報は一つの長いドキュメントにすることも、互いに関連した短いドキュメントの集合にすることもできます。短いドキュメントの集合はよくウェブサイトや wiki といった構造化されたフォーマットで公開されます。</description>
    </item>
    <item>
      <title>3. 単語 - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/words/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/words/</guid>
      <description>我々が行った大規模なドキュメントの研究により、世界で最も優れた文は主に単語からなることが判明しました。 新しい単語や聞きなれない単語を定義する 執筆と推敲を行うときは、一部あるいは全ての対象読者にとって聞きなれない用語が使われていないかを意識してください。そのような用語がもしあれば、次のいずれかを使って対処します: その用語がそれまでに定義されていれば、以前の分かりやすい説明にリンクを張る (車輪の再発明はしない)。</description>
    </item>
    <item>
      <title>6.3 モジュール - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/modules/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/modules/</guid>
      <description>6.3 モジュール モジュールライブラリは Lua でモジュールを読み込むための基礎的な機能を提供します。このライブラリは require という関数をグローバル環境に直接公開し、その他の値を全て package というテーブルに公開します。 require (modname) 指定されたモジュールを読み込みます。この関数はまず package.loaded テーブルを見て modname が読み込まれているかどうかを確認します。もし読み込まれていれば、require は package.loaded[modname] にある値を返します (読み込みが行われなかったことは二番目の返り値が存在しないことから分かります)。そうでなければ、モジュールのローダーの検索が行われます。</description>
    </item>
    <item>
      <title>vec3 クラス - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_3_vec3_class/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_3_vec3_class/</guid>
      <description>どんなグラフィックスプログラムにも幾何学的なベクトルと色を表すためのクラスが (ときには複数) ある。多くのシステムでは 4D のベクトル (幾何学であれば三次元座標と同次座標、色であれば RGB と透明度を表すアルファ値) が使われるが、今の私たちには三つの座標で十分だ。さらに同じ vec3 クラスを使って色・位置・方向・オフセットといった情報を表すことにする。こうすると「位置に色を足す」のような馬鹿げた操作が可能になってしまうという理由でこのやり方を好まない人もいる。この意見はもっともだが、私たちはこれから「コードが少なくなる」方の選択肢を (まるっきり間違っていない限り) 取るものとする。この上で vec3 には point3 と color という二つの型エイリアスを定義しておく。この二つの型は vec3 の別名に過ぎないので、例えば point3 を受け取る関数に color を渡しても警告は起きない。しかしそれでもコードの意図や使い方を表現するのに役立つ。</description>
    </item>
    <item>
      <title>一次元モンテカルロ積分 - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_3_one_demensional_mc/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_3_one_demensional_mc/</guid>
      <description>積分は突き詰めれば面積や体積の計算だから、第二節の内容は積分を使って最高に理解しにくく表現できる。しかしときには、積分を使って問題を定式化するのが最も自然で見通しが良くなる場合もある。レンダリングではそうなることが多い。 x^{2} の積分 古典的な積分を考えよう: \[ I = \int_{0}^{2} x^2 \, dx \] 情報科学っぽい記法を使うと \[ I = \text{area}( x^2, 0, 2 ) \] となる。これは次のように変形できる: \[ I = 2 \cdot \text{average}(x^2, 0, 2) \] ここからモンテカルロ法を使った次のアプローチが分かる。直接積分を計算して求まる正確な値は I = 8/3 であり、この近似値が計算される。 #include &amp;#34;rtweekend.h&amp;#34; #include &amp;lt;iostream&amp;gt; #include &amp;lt;iomanip&amp;gt; #include &amp;lt;math.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; int main() { int N = 1000000; auto sum = 0.0; for (int i = 0; i &amp;lt; N; i++) { auto x = random_double(0,2); sum += x*x; } std::cout &amp;lt;&amp;lt; std::fixed &amp;lt;&amp;lt; std::setprecision(12); std::cout &amp;lt;&amp;lt; &amp;#34;I = &amp;#34; &amp;lt;&amp;lt; 2 * sum/N &amp;lt;&amp;lt; &amp;#39;\n&amp;#39;; } リスト 3.4 [integrate_x_sq.cc] x^{2} の積分 この方法は解析的に積分できない \log \sin x のような関数の積分にも利用できる。グラフィックスでは値を求めることはできるが陽に書くことができない関数、あるいは確率的にしか値を計算できない関数がよく登場する。これまでの二巻で実装した ray_color() 関数がそうである ──任意のレイに対するこの関数の値を表す式は存在しないが、任意のレイに対する値を確率的に近似することはできる。</description>
    </item>
    <item>
      <title>球上の点を使ったモンテカルロ積分 - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_4_mc_integration_on_sphere/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_4_mc_integration_on_sphere/</guid>
      <description>私たちのレイトレーサーには方向をランダムに選ぶ処理があり、方向は単位球上の点として表される。前節で説明したモンテカルロ積分をここでも利用できるが、そのためには二次元の PDF が必要になる。 全ての方向に関する次の関数の積分を求めたいとする1: \[ \int \cos^2 \theta \] モンテカルロ積分では \cos^{2} \theta / p(\text{direction}) をサンプルすることになる。この式における p(\text{direction}) について考えよう。極座標で \text{direction} を表すと (\theta, \phi) を使った p の式が手に入るが、どんな表現であれ PDF は全体に渡る積分が 1 で、その値 p(\text{direction}) は方向 \text{direction} がサンプルされる相対確率を表さなければならない。</description>
    </item>
    <item>
      <title>週末レイトレーシング 余生 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/</guid>
      <description>はじめに 『週末レイトレーシング 第一週』と『週末レイトレーシング 第二週』で、あなたは「本物の」レイトレーサーを作成した。 この巻はレイトレーシングに関連するキャリアに興味を持っている読者を想定し、非常に本格的なレイトレーサーを作成するために必要な数学について解説する。最後まで読み切れば、映画やプロダクトデザインで使われる本物の商用レイトレーサーをいじって遊べるようになるだろう。この短いシリーズで触れられないトピックはたくさんある。モンテカルロレンダリングを行うプログラムを書く方法はいくつもあるが、ここで説明するのは一つだけだ。ライトに向かってレイを多く飛ばす方法を取る代わりにシャドウレイは考えず、双方向パストレーシング・メトロポリス法・フォトンマッピングにも触れていない。ただ私はこういった手法を研究する分野で使われる言葉を使って話をする。この本はそういった言葉に深く触れるための本であり、初めて触れる人でも読めるように書かれている。他の文献で勉強するための概念・数学の知識・専門用語の使い方を学ぶことができるだろう。</description>
    </item>
    <item>
      <title>包含立体階層 - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_3_bounding_volume_hierarchy/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_3_bounding_volume_hierarchy/</guid>
      <description>この節で説明するのは私たちが作っているレイトレーサーの中で格段に難しく入り組んだ部分である。これを実装すればコードの実行が速くなるのでここで取り上げる。さらにここで hittable をリファクタリングしておけば、後で長方形と直方体を簡単に追加できるようになる。 レイとオブジェクトの衝突判定はレイトレーサーの実行時間におけるボトルネックの一つであり、実行時間はオブジェクトの数に対して線形に増加する。しかしレンダリングでは同じモデルに対する探索が繰り返されるので、二分探索の考え方を応用すれば探索を対数時間にできるに違いない。モデルに放たれるレイの数は数百万ときには数億に達するから、モデルのソートのような処理でレイとの衝突判定の処理時間を劣線形1にできれば非常に大きな高速化となる。モデルのソートには大きく分けて二つの方法がある。一つは空間を分割するもので、もう一つはオブジェクトを分割するものである。後者の方がずっと簡単に実装でき、たいていのモデルに対しては前者と同程度に高速となる。</description>
    </item>
    <item>
      <title>I. 記号への恐怖心を克服する - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/1_to_deliver_you_from_the_preliminary_terrors/</link>
      <pubDate>Fri, 13 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/1_to_deliver_you_from_the_preliminary_terrors/</guid>
      <description>記号への恐怖心は多くの高校生を微積分から遠ざけ、勉強を始める気さえ失わせている。しかし微積分で重要な二つの記号の意味を ──普段通りの言葉で── 説明すれば、その恐怖を完全に打ち払える。 その恐るべき記号は次の二つである: \text{(1)} d: これは「小さな...の部分」を意味する。 例えば dx は「小さな x の部分」を意味し、du は「小さな u の部分」を意味する。数学者は「...の小要素」という表現の方が行儀が良いと考えるが、どちらを使っても構わない。こういった「小さな...の部分」 (あるいは「...の小要素」) が無限に小さいとみなせることを後で見る。</description>
    </item>
    <item>
      <title>第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/</guid>
      <description>§20 関数という考え方 連続実変数 x と y が A_{0}P = x および B_{0}Q = y として幾何学的に表されるとする。A_{0},\ B_{0} は固定されており、それぞれ直線 \Lambda,\ \Mu 上にある。ここで P と Q が好き勝手に動けるわけではなく、二つの点の間に何らかの関係性があって、それが x と y の間の関係として表せるとする。つまり P と x が分かっていれば Q と y も分かる関係、例えば y = x や y = 2x、あるいは y = \frac{1}{2}x や y = x^{2} + 1 があるとする。このとき x の値が y の値を決定する。x と y の間の関係は x を使った y の明示的な式でなくてもよく、与えられた P から Q を得るための幾何学的な作図手順でも構わない。</description>
    </item>
    <item>
      <title>§3 無理数 (その 1) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_3_irrational_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_3_irrational_numbers/</guid>
      <description>分母が 1,2,3, \ldots である有理数に対応する数直線上の点全てに印を付けるところを想像すれば、有理点を使って数直線上に好きなだけ細かく印を付けられることを納得できるだろう。これを正確に表現すれば「\Lambda 上に任意の線分 BC を取ると、BC 上に好きなだけ多くの有理点を見つけられる」となる。 例えば BC が線分 A_{1}A_{2} の中に含まれるとする。正の整数 k を \[ k · BC \gt 1 \qquad \text{(1)} \] が成り立つように選び1、それから A_{1}A_{2} を k 分割すれば、その分割点のうち少なくとも一つは BC 内部にあり、さらにそれは B でも C でもない (これを P とする)。もしこうならないなら A_{1}A_{2} を k 分割した部分を BC が完全に含むが、これは仮定 \text(1) と矛盾する。よって少なくとも一つの有理点 P が B と C の間にある。しかしもしそうならば B と P の間にも有理点 Q があり、以下同様に議論できる。つまり上述の通り、有理点を好きなだけ多く見つけられる。この事実を「BC は無限に多くの (infinitely many) 有理点を含む」と表現する。</description>
    </item>
    <item>
      <title>Ninja - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/ninja/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/ninja/</guid>
      <description>Ninja は Make に似たビルドシステムである。ユーザーは入力として、ソース (例えば C++ のソースコード) をターゲット (例えばライブラリファイルや実行可能ファイル) に変換するためのコマンドを記述する。Ninja は記述されたコマンドを使って、ターゲットを最新の状態に更新する。他の多くのビルドシステムと異なり、Ninja はパフォーマンスを主要な設計目標としている。 私は Google Chrome に取り組んでいるときに Ninja を開発した。Ninja は Chrome のビルドを高速化できないかを探るための実験として始まったのである。実際に Chrome のビルドで使えなければならないので、Ninja にはスピードの他にもう一つ主要な設計目標があった: Ninja は他の大規模なビルドシステムに簡単に組み込めなければならない。</description>
    </item>
    <item>
      <title>問題: ネットワークの構築 - 第 1 章 基礎 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foundation/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foundation/problem/</guid>
      <description>コンピューターネットワークを構築したいとしよう。そのネットワークは地球規模に成長する可能性があり、サポートすべきアプリケーションは通話会議、ビデオ・オン・デマンド、電子商取引、分散コンピューティング、電子図書館など多岐にわたるとする。ネットワークの構成要素として採用できる利用可能な技術はどれだろうか？ その構成要素を効率的な通信サービスへと統合するにはどういったソフトウェアアーキテクチャを設計すべきだろうか？ この質問に答えられるようになることは本書の最も重要な目標である ── 本書では利用可能な構成要素を説明し、それらの構成要素がネットワークをゼロから作るときにどのように利用できるかを示していく。</description>
    </item>
    <item>
      <title>変数 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/variables/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/variables/</guid>
      <description>変数 Julia において、変数 (variable) とは値に関連付いた (束縛された) 名前のことです。計算結果などの値を後で使うために保存したい場合に変数が利用できます。変数の使用例を示します: # 変数 x に値 10 を代入する julia&amp;gt; x = 10 10 # x の値を使って計算をする julia&amp;gt; x + 1 11 # もう一度 x に値を代入する julia&amp;gt; x = 1 + 1 2 # 文字列のように型の異なる値も代入できる julia&amp;gt; x = &amp;#34;Hello World!&amp;#34; &amp;#34;Hello World!&amp;#34; Julia は非常に柔軟な変数の命名規則を持ちます。変数の名前では大文字と小文字が区別され、変数の名前は意味論的な意味を持ちません (つまり、Julia は変数の名前に応じて処理を切り替えることはありません):</description>
    </item>
    <item>
      <title>4. 図の活用 - テクニカルライティング Two (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/two/illustrating/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/two/illustrating/</guid>
      <description>先生から長い章を読んでくる宿題を出されたときの気持ちを覚えていますか？ 教科書の言われたページをパラパラとめくって、どうかあれがありますようにと願ったのではないでしょうか ...「やった、図だ！」 図を見るのは文章を読むよりずっと気が楽です。実は技術的な内容の文章を読む大人の大部分も小さな子供と変わりません ──大人だって、文章ではなく絵が出てこないかと期待しているのです。 図 1. 優れた図は文章にはできない方法で読者を惹き付ける1。 Sung and Mayer (2012) によると、良いものであれ悪いものであれ画像が含まれるドキュメントを読者はより好きになりますが、読者の学習に役立つのはその画像が有益なときだけです。この章では本当の意味で &#34;百聞&#34; の価値がある図を作るコツをいくつか紹介します。</description>
    </item>
    <item>
      <title>4. 能動態と受動態 - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/active_voice/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/active_voice/</guid>
      <description>テクニカルライティングではほぼ全ての文を能動態で書くべきです。この章では次の事項を学びます: 能動態と受動態を見分ける。 通常は能動態の方が分かりやすいので、受動態を能動態に変換する。 まずは、ボールを転がすために、次の動画を見てください1: 単純な文における能動態と受動態の判別 能動態の文では行為者 (actor) が受動者 (target) に行為を行います。つまり、受動態の文は次の形をしています:</description>
    </item>
    <item>
      <title>6.4 文字列操作 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/string_manipulation/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/string_manipulation/</guid>
      <description>6.4 文字列操作 このライブラリは部分文字列の検索・抽出やパターンマッチングといった文字列操作のための一般的な関数を提供します。Lua で文字列にアクセスするときのインデックスは最初の文字が 1 です (C のように 0 ではありません)。負のインデックスも使うことができ、文字列の最後から始まって後ろ向きに進んだ位置として解釈されます。例えば文字列の最後の文字にはインデックス -1 でアクセスできます。 文字列ライブラリの関数は全て string というテーブルの中に提供されます。また文字列ライブラリは文字列型のメタテーブルの __index フィールドに string テーブルを設定するので、文字列ライブラリの関数はオブジェクト指向のスタイルで呼び出すことができます。例えば string.byte(s,i) は s:byte(i) とできます。</description>
    </item>
    <item>
      <title>ソリッドテクスチャ - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_4_solid_texture/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_4_solid_texture/</guid>
      <description>グラフィックスにおける「テクスチャ」は物体表面の色を何らかの規則に従ってプロシージャルに生成する関数を表す。この規則には画像を合成するコードや既存の画像のルックアップが関係し、両方が含まれる場合もある。この節ではまずこれまでのプログラムに含まれる全ての色をテクスチャに変更する。定数の RGB 色とテクスチャを異なるクラスで管理するプログラムも多いので、別の方法を取っても構わない。ただ任意の色をテクスチャとして扱えるのは美しいので、私はこのアーキテクチャを大いに気に入っている。</description>
    </item>
    <item>
      <title>レイ・簡単なカメラ・背景 - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_4_ray_camera_background/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_4_ray_camera_background/</guid>
      <description>レイを表すクラス どんなレイトレーサーにもレイを表すクラスとそのレイの色を計算する処理が存在する。レイを関数 \mathbf{P}(t) = \mathbf{A} + t \mathbf{b} と考えよう。\mathbf{P} は三次元空間に存在する直線上の点を表し、\mathbf{A} がレイの原点を、\mathbf{b} がレイの方向を意味する。レイのパラメータ t は実数 (double) であり、t を変えると \mathbf{P}(t) は三次元空間内の直線上を移動する。負の t も考えに入れれば直線上の全ての点が表され、t が正のとき P は \mathbf{A} の前方部分だけを移動する。この前方部分からなる半直線がレイである。</description>
    </item>
    <item>
      <title>光の散乱 - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_5_light_scattering/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_5_light_scattering/</guid>
      <description>この節ではプログラムを書かずに、次節で行うライティング処理の大きな変更に向けて用語や概念を説明する。 アルベド これまでに作ったプログラムは物体表面やボリュームでレイを散乱させていた。これは光と物体表面の間の相互作用を説明するのによく使われるモデルであり、確率を使って自然に実装できる。これまでのプログラムにはライトが吸収されるかどうかを判断する確率がある: 光が散乱する確率: A 光が吸収される確率: 1 - A この A をアルベド (albedo) と呼ぶ (albedo はラテン語で「白さ」を意味する)。アルベドは分野によっては正確な定義を持つ専門用語だが、どの場合でも何らかの反射率 (reflectance) を表している。アルベド (反射率) は光の色と入射方向によって変化する: 第一巻でガラスを実装したときには、シュリックの近似を使って反射率を計算した。</description>
    </item>
    <item>
      <title>II. 微小量の次元 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/2_on_differrent_degrees_of_smallness/</link>
      <pubDate>Fri, 13 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/2_on_differrent_degrees_of_smallness/</guid>
      <description>これから微積分では、小さな量 (微小量) であって小ささの次元が違うものを扱う必要がある。 また小さな量をあまりにも小さいという理由で無視できるのはどんな状況かも理解する必要がある。全ては相対的な小ささにかかっている。 一般的な規則を示す前に、身近な例を考えよう。一時間は 60 分であり、一日は 24 時間、一週間は 7 日である。よって一日は 1440 分で、一週間は 10080 分となる。 明らかに、一週間全体と比較した一分は非常に小さい。そもそも私たちの先祖は一時間と比べたときにこの時間が非常に小さいということで、一時間の小さな部分 (具体的には六十分の一) を「分 (minute)」と呼んだのだった1。彼らは時間をもっと小さく分ける必要が生じたとき一分をさらに 60 個に分け、それをエリザベス女王の時代には「第二の分 (second minute)」と呼んだ (つまりこの時間の単位は二次の小ささを持つ)。この二次の小ささを持つ時間の長さを現在の私たちは「秒 (second)」と呼んでいる2。しかしそう呼ばれている理由を知っている人は少ない。</description>
    </item>
    <item>
      <title>第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/</guid>
      <description>§34 平面上の直線に沿った変位 ここまでの二つの章で考えてきた「実数」は、様々な視点から捉えることができる。実数を幾何学的な意味を持たない純粋な数と捉えることもできるし、幾何学的な意味を持たせるにしてもその方法は少なくとも三つある。まず実数を長さの表現、つまり第一章で考えた基準直線 \Lambda に沿った長さ A_{0}P とみなす方法がある。次に実数を点の別名、つまり A_{0} からの距離が x である点 P を表すとみなす方法がある。そして実数を \Lambda 上における変位の表現つまり位置の変化量とみなす方法がある。ここでは最後の考え方についてさらに考える。</description>
    </item>
    <item>
      <title>§4 無理数 (その 2) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_4_class_of_rational_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_4_class_of_rational_numbers/</guid>
      <description>有理数の幾何学的な表現を使ったここまでの議論から、新しい種類の数を追加して「数」の概念を拡張するのが望ましいことが分かった。 幾何学の言葉を使わずとも同じ結論を得ることはできる。代数における中心的な問題の一つは方程式の求解であり、例えば \[ x^{2} = 1,\quad x^{2} = 2 \] などの方程式を扱う。最初の方程式は二つの有理根 1 と -1 を持つが、私たちの数の概念が有理数に制限されるとすれば、二つ目の方程式には根が存在しないとしか言えなくなる。x^{3}=2,\ x^{4} = 7 といった方程式も同様に解を持たなくなる。こういった方程式が解を持つことに証明が必要だと考えるなら、それだけで数の概念の拡張が望ましいと分かる。</description>
    </item>
    <item>
      <title>pugixml - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/pugixml/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/pugixml/</guid>
      <description>はじめに XML は標準化されたマークアップ言語であり、階層的に構造化されたドキュメントを人間が読めるテキストベースのフォーマットに符号化する規則を定める。XML は広く利用され、非常に短い単純なドキュメント (例えば SOAP クエリ) から数ギガバイトのドキュメント (例えば OpenStreetMap)、そしてデータ間に複雑な関係があるドキュメント (例えば COLLADA) まで様々なドキュメントが XML によって表される。XML を処理するとき、通常ユーザーはドキュメントを表すテキストを何らかの内部表現に変換する「XML パーサー」と呼ばれる特別なライブラリを利用する。XML はパースのパフォーマンスと複雑性、そして人間にとっての可読性のバランスを取ったフォーマットである ── そのため、高速な XML パーサーがあればアプリケーションのデータモデルを記述するフォーマットとして XML がより好ましくなる。</description>
    </item>
    <item>
      <title>1.1 アプリケーション - 第 1 章 基礎 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foundation/applications/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foundation/applications/</guid>
      <description>多くの人はインターネットをそのアプリケーションを通して知る: いくつか例を挙げるだけでも、ワールドワイドウェブ、メール、ソーシャルメディア、音楽や映像のストリーミング、ビデオ会議、インスタントメッセージ、ファイル共有がある。言い方を変えれば、インターネットと関わるとき我々の多くはネットワークのユーザーとなる。インターネットのユーザーはインターネットと何らかの形で関わる人々の中で最も大きなグループを構成するものの、他にも重要なグループがいくつかある。</description>
    </item>
    <item>
      <title>整数と浮動小数点数 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/integers-and-floating-point-numbers/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/integers-and-floating-point-numbers/</guid>
      <description>整数と浮動小数点数 整数と浮動小数点数は算術と計算における基礎単位です。こういった値の組み込みの表現は数値プリミティブ (numeric primitive) と呼ばれ、コードにおける整数と浮動小数点数の即値としての表現は数値リテラル (numeric literal) と呼ばれます。例えば 1 は整数リテラルであり、1.0 は浮動小数点数リテラルです。そしてこれらの値をオブジェクトとしてメモリ上にバイナリで表現したものが数値プリミティブです。 Julia は様々なプリミティブ数値型 (primitive numeric type) を提供し、算術演算・ビット演算・標準的な数学関数は全てのプリミティブ数値型に対して定義されます。プリミティブ数値型は現代的なコンピューターがネイティブにサポートする数値型および数値演算に直接対応するので、Julia は計算資源を最大限に活用できます。加えて Julia は任意精度算術をソフトウェアでサポートします。任意精度算術とはハードウェアのネイティブ表現では効率的に表現できない数値に対する演算を処理する方式であり、精度の代わりに性能が犠牲になります。</description>
    </item>
    <item>
      <title>5. サンプルコードの作成 - テクニカルライティング Two (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/two/creating_sample_code/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/two/creating_sample_code/</guid>
      <description>良いサンプルコードが最良のドキュメントであることも少なくありません。全ての段落とリストが透き通る水のように明快だとしても、プログラマーは良いサンプルコードを期待します。結局、文章とコードは異なる言語であり、読者が最後に望むのはコードです。そしてコードを文章だけで説明するのは、イタリア語の詩を英語で解説するようなものです。 良いサンプルコードは正確かつ簡潔であり、素早く理解でき、最低限の副作用を持ち、簡単に再利用できます。</description>
    </item>
    <item>
      <title>5. 明快な文 - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/clear_sentence/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/clear_sentence/</guid>
      <description>コメディのライターは最も面白い文章を追い求め、ホラーのライターは最も恐ろしい文章を追い求め、テクニカルライターは最も明快な文章を追い求めます。テクニカルライティングでは他のどんな規則よりも明快さが優先されます。この章では文を素晴らしく明快にするための方法をいくつか紹介します。 強い動詞を使う 多くのテクニカルライターは動詞こそが文の中で最も重要な部分だと信じています。正しい動詞を選びさえすれば、文の他の部分は自然に出来上がるということです。しかし残念なことに、少数の弱々しい動詞だけを使いまわすライターも中にはいます。これはまるで、しけたクラッカーとしおれたレタスで来客を連日もてなすようなものです。正しい動詞の選択には少し余計な時間がかかりますが、上手く選択できれば洗練された結果が得られます。</description>
    </item>
    <item>
      <title>6.5 UTF-8 サポート - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/utf8_support/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/utf8_support/</guid>
      <description>6.5 UTF-8 サポート このライブラリは基本的な UTF-8 エンコーディングのサポートを提供します。全ての関数は utf8 テーブルに公開されます。このライブラリに含まれる Unicode のサポートはエンコーディング処理だけであり、文字種の識別といった文字の意味が必要となる操作は対象外です。 特に断っていない限り、パラメータにバイト位置を取る全ての関数はその位置がバイトシーケンスの始まりまたは対象文字列の長さに 1 を加えた値であることを仮定します。また文字列ライブラリと同様、負のインデックスは文字列の最後から数えます。</description>
    </item>
    <item>
      <title>パーリンノイズ - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_5_perlin_noise/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_5_perlin_noise/</guid>
      <description>クールな見た目のソリッドテクスチャはパーリンノイズ (Perlin noise) の一種を使って作られることが多い。考案者のケン・パーリン (Ken Perlin) の名前が付いたこのノイズを使ったテクスチャは、次のホワイトノイズのようにはならない: 図 2.8: ホワイトノイズ パーリンノイズによって計算されるテクスチャは、次のぼかしたホワイトノイズに似ている: 図 2.9: ぼかしたホワイトノイズ パーリンノイズで重要なのが、反復できることである。パーリンノイズは三次元の点を入力として受け取り、乱数らしき値を返す。同じ入力に対する出力はいつでも同じであり、近い点に対しては近い値が出力される。さらにパーリンノイズに関してもう一つ重要なのが、単純で高速なことだ。そのためこのノイズはハックとして実装されることが多い。ここでは Andrew Kensler の説明に沿ってインクリメンタルに実装していく。</description>
    </item>
    <item>
      <title>球のレンダリング - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_5_rendering_a_sphere/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_5_rendering_a_sphere/</guid>
      <description>レイトレーサーにオブジェクトを追加しよう。球とレイの交差判定は非常に簡単に行えるので、レイトレーサーに最初に追加されるオブジェクトは球であることが多い。 レイと球の衝突判定 原点中心で半径が R の球は x^{2} + y^{2} + z^{2} = R^{2} と表されることを思い出そう。つまり点 (x, y, z) がこの球上にあるなら x^{2} + y^{2} + z^{2} = R^{2} が成立する。もし点 (x, y, z) が球の内側にあるならx^{2} + y^{2} + z^{2} \lt R^{2} が成り立ち、点 (x, y, z) が球の外側にあるなら x^{2} + y^{2} + z^{2} &gt; R^{2} が成り立つ。</description>
    </item>
    <item>
      <title>重点サンプリング付きマテリアル - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_6_importance_sampling_materials/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_6_importance_sampling_materials/</guid>
      <description>ここからいくつかの節を使って、画像のノイズを減らすためにレイを光源に向かって多く放つようプログラムを改変する。光源へ多くレイを放つときの PDF を p_{\text{light}}(\text{direction}) として、s(\text{direction}) が大きい部分へ多くレイを放つときの PDF を p_{\text{surface}}(\text{direction}) とする。PDF に関して便利なのが、複数の PDF の線形和を取って確率密度を混ぜることで別の PDF を作れることだ。例えば一番簡単な線形和 \[ p(\text{direction}) = \frac{1}{2}\cdotp p_{\text{light}}(\text{direction}) + \frac{1}{2}\cdot p_{\text{surface}}(\text{direction}) \] は PDF である。重みが正で積分が 1 である限り、複数 PDF を組み合わせてできる関数は PDF となる。PDF はどんなものでも構わないことを思い出そう: 任意の PDF を使ったモンテカルロ積分は真の値に収束する。よって問題は s(\text{direction}) \cdot \text{color}(\text{direction}) が大きい部分の PDF を大きくする方法である。拡散表面では、これは \text{color}(\text{direction}) が高い部分を推定する問題となる。</description>
    </item>
    <item>
      <title>III. 相対的な増加速度 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/3_on_relative_growings/</link>
      <pubDate>Fri, 13 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/3_on_relative_growings/</guid>
      <description>微積分では増加する数値とその増加の速さをひたすら考え続けることになる。数値には定数 (constant) と変数 (variable) の二つがある。変わらないとみなされる数値を定数と呼び、a,\ b,\ c といったアルファベットの最初の文字を使って表す。これに対して増加する (数学者の言葉を使えば「変動する」) とみなされる数値を変数と呼び、x,\ y,\ z,\ u,\ v,\ w といったアルファベットの最後にある文字を使って表す。変数は t で表されることもある。</description>
    </item>
    <item>
      <title>第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/</guid>
      <description>§50 正整数関数 第二章では実変数 x の関数という概念についてたくさんの例を使って議論したが、説明に使った関数の間で大きく異なる重要な特徴が一つあった: 全ての x に対して定義される関数もあれば、有理数に対してだけ定義される関数もあり、さらに整数に対してだけ定義される関数もあった。 例えば次の関数が考えられる: (i) x (ii) \sqrt{x} (iii) x の分母 (iv) 分母と分子の積の平方根 (v) x の最大素因数 (vi) x の最大素因数と \sqrt{x} の積 (vii) x 番目の素数 (viii) ダートムーア刑務所の囚人 x の背の高さ (インチ)</description>
    </item>
    <item>
      <title>§5 無理数 (その 3) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_5_existence_of_rational_number/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_5_existence_of_rational_number/</guid>
      <description>前節では正の有理数を二つのクラス L と R に分割した。このとき (i) R の全ての要素は L のどんな要素よりもより大きく、(ii) L の要素と R の要素の組であって差が好きなだけ小さいものを取ることができ、(iii) L は最大要素を持たず、R は最小要素を持たない。直線の常識的な性質や初等幾何と初等代数からの要請といったものを考えると、\bm{L} の全ての要素よりも大きく \bm{R} の全ての要素よりも小さい数 \bm{x}、および \bm{L} に対応する点と \bm{R} に対応する点を分ける \bm{\Lambda} 上の点 \bm{P} の存在が必要となる。</description>
    </item>
    <item>
      <title>MemShrink - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/memshrink/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/memshrink/</guid>
      <description>はじめに Firefox は長い間「メモリを使いすぎる」と批判されてきた。その正確さは時とともに変化してきたものの、この批判から Firefox が逃れることはなかった。ここ数年では新しい Firefox のバージョンがリリースされるたびに、懐疑的なユーザーから「メモリリークは直ったのか？」という声が聞かれた。長いベータサイクルを経てリリーススケジュールを何度が逃した後 2011 年 3 月 に Firefox 4 がリリースされたときも同様だった。Firefox 4 は動画の再生や JavaScript のパフォーマンス、グラフィックスアクセラレーションといった領域で大きな進歩を遂げたものの、残念ながらメモリ使用量は大きく増加した。</description>
    </item>
    <item>
      <title>1.2 要件 - 第 1 章 基礎 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foundation/requirements/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foundation/requirements/</guid>
      <description>我々は野心的な目標を設定した: 何もない状態からコンピューターネットワークを構築する方法の理解を本書は目指す。この目標に向けて本書が取るアプローチは、第一原理から始めて、実際にネットワークを構築しようとしたときに自然に発生する疑問を考えていくというものである。各ステップでは様々な設計上の選択肢を説明するために現代のプロトコルを利用するものの、そういった既製品を福音とはみなさない。そうではなく、既存のネットワークがそのような形で設計されている理由を我々は質問して (そして答えて) いく。現在のネットワークの様子だけを理解していく方法は魅力的に思えるものの、技術が発展し新しいアプリケーションが発明されると共にネットワークは常に変化しているので、内部にある概念を認識しておくことが重要となる。基礎的なアイデアを理解すれば、どんな新しいプロトコルに直面したときでも比較的簡単に概要を掴めるようになる、というのが著者らの経験である。</description>
    </item>
    <item>
      <title>数学演算と初等関数 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/mathematical-operations/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/mathematical-operations/</guid>
      <description>数学演算と初等関数 Julia は全ての初等算術とビット演算を全てのプリミティブ数値型に対して提供します。加えて多くの標準的な数学関数の効率的でポータブルな実装も提供します。 算術演算子 次の算術演算子は全てのプリミティブ数値型でサポートされます: 式 名前 説明 +x 単項プラス x をそのまま返す (恒等演算)。 -x 単項マイナス 加算逆元を返す。 x + y 二項プラス 加算の結果を返す。 x - y 二項マイナス 減算の結果を返す。 x * y 乗算 乗算の結果を返す。 x / y 除算 除算の結果を返す。 x ÷ y 整数除算 x / y を整数に切り捨てた値を返す。 x \ y 逆除算 y / x を返す。 x ^ y べき乗 x の y 乗を返す。 x % y 剰余 rem(x,y) を返す。 Bool 型の否定もあります:</description>
    </item>
    <item>
      <title>6. まとめ - テクニカルライティング Two (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/two/summary/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/two/summary/</guid>
      <description>『テクニカルライティング Two』ではテクニカルライティングに関する次の中級者向けの事項を説明しました: スタイルガイドを採用する。 読者のように考える。 ドキュメントを (自分に向かって) 声に出して読む。 原稿を書き終えたら時間をおいて読み直す。 優れたピア編集者を見つける。 ドキュメントのアウトラインを作る。もしくは自由に書いてから構成を考える。 ドキュメントの目的と前提知識を述べる。 タスクの言葉を使った見出しを選ぶ。 (適切なら) 情報を段階的に示す。 図を作る前にキャプションを書く。 一つの図に含まれる情報量を制限する。 図を見て理解すべきことをキャプションに書いたり、図に視覚的な手掛かりを書き入れることで、読者の注意を重要な部分に向かわせる。 理解しやすい簡潔なサンプルコードを書く。 コメントは短くする。ただし、短さよりは明確さを優先する。 明らかのコードにはコメントを付けない。 コメントはコードの直感的でない部分に集中させる。 望ましい例だけではなく望ましくない例も示す。 様々な複雑さを持ったサンプルコードを示す。 何度も推敲するのを習慣とする。 異なるユーザーのカテゴリに対する異なるドキュメントを提供する。 読者が知っていることと説明していることを比較し、違いを説明する。 チュートリアルでは、概念の説明を例で補強する。 チュートリアルでは、読者が遭遇する可能性のある問題を記しておく。 時間が許す限り、テクニカルライティングの追加リソースにも目を通してみてください。</description>
    </item>
    <item>
      <title>6. 短い文 - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/short_sentence/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/short_sentence/</guid>
      <description>通常ソフトウェアエンジニアは実装するコードの行数を最小化しようとします。その理由は次の通りです: 一般的に短いコードは長いコードより読みやすい。 一般的に短いコードは長いコードより保守しやすい。 コードが一行増えるごとに間違いが起こり得る場所が増える。 実は、テクニカルライティングでも同じ規則が成り立ちます: 短いドキュメントは長いドキュメントより速く読める。 一般的に短いドキュメントは長いドキュメントより保守しやすい。</description>
    </item>
    <item>
      <title>6.6 テーブル操作 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/table_manipulation/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/table_manipulation/</guid>
      <description>6.6 テーブル操作 このライブラリはテーブルの操作のための一般的な関数を提供します。全ての関数は table テーブルの中に公開されます。 テーブルの長さを使う操作では長さ演算子に関する注意事項 (§ 3.4.7) がそのまま当てはまります。そういった関数は引数のテーブルが持つ数値でないキーを無視します。 table.concat (list [, sep [, i [, j]]]) 全てのバリューが文字列または数値であるテーブルを受け取り、文字列 list[i] .. sep .. list[i+1] ... sep .. list[j] を返します。デフォルトでは sep は空文字列で、i, j はそれぞれ 1, #list です。i が j より大きい場合は空文字列が返ります。</description>
    </item>
    <item>
      <title>ランダムな方向の生成 - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_7_generating_random_directions/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_7_generating_random_directions/</guid>
      <description>まず何らかの分布に沿った方向 (単位球上の点) をランダムに生成する方法を見つけよう。簡単のため z 軸を法線方向として、\theta を法線から測った角度とする。軸を回転させる方法は次節で説明する。考える分布は z 軸周りの回転に関して対称な分布だけとする。このとき p(\text{direction}) = f(\theta) が成り立つ。大学レベルの微積分を学んだことがあるなら、球座標で dA = \sin(\theta) \cdot d\theta \cdot d\phi が成り立つことを知っているだろう。もし学んだことがないなら、この等式を受け入れた上で次に進んでほしい。将来大学で微積分の講義を取れば理解できる。</description>
    </item>
    <item>
      <title>画像のテクスチャマッピング - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_6_image_texture_mapping/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_6_image_texture_mapping/</guid>
      <description>前節ではレイとオブジェクトの交点 \textbf{P} を使ってソリッドテクスチャ (大理石模様) を作成した。\textbf{P} から計算される二次元の座標 (u, v) を使えば、ファイルから読み込んだ画像をオブジェクトの表面に表示させることができる。 計算した (u, v) を使う直接的な方法は u と v を整数 i と j に丸めて画像の (i, j) にあるピクセルを読むというものだが、こうすると画像の解像度を変えるたびにコードを変える必要があるので使いにくい。そこで画像のピクセル座標ではなくテクスチャ座標を使うというグラフィックスにおいて必ず使われる慣習の一つを採用する。テクスチャ座標は画像内のピクセルの位置を割合で表す。例えば N_{x} \times N_{y} の画像の (i, j) ピクセルを表すテクスチャ座標 (u, v) は \[ u = \frac{i}{N_{x} - 1}, \quad v = \frac{j}{N_{y} - 1} \] となる。</description>
    </item>
    <item>
      <title>法線と複数オブジェクト - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_6_surface_normal_and_multiple_objects/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_6_surface_normal_and_multiple_objects/</guid>
      <description>法線を使ったシェーディング まずシェーディングのために法線を計算しよう。法線とは物体とレイの交点を通って物体表面と垂直なベクトルのことを言う。法線に関して決めておくべき設計事項が二つある。一つ目は法線を単位長とするかどうかである。単位長にしておけばシェーディングが楽になるので、法線は単位長と定める。ただしコードでこれを明示的に確認することはしない。これによって軽微なバグが生まれる可能性もあるので、これは (他の様々な設計判断と同じく) 個人的な好みだと思ってほしい。さて球の場合には、外向きの法線は交点 p から中心 c を引いたベクトル p - c と同じ向きを持つ。球を地球だと考えれば、これは地球の中心からあなたへのベクトルが真上を向くことを意味する。</description>
    </item>
    <item>
      <title>IV. x のべきの微分 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/4_simplest_cases/</link>
      <pubDate>Mon, 16 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/4_simplest_cases/</guid>
      <description>それでは代数で登場する簡単な式を第一原理を使って微分する方法を見ていこう。 \text{(1)} 簡単な式 y = x^{2} から始める。微積分で重要な概念は増加量 (数学者が呼ぶところの変動) だったことを思い出そう。y と x^{2} が等しいとすれば、x が増加すると x^{2} も増加し、x^{2} が増加するなら y も増加することは明らかである。さて x の増加量と y の増加量の間の比を求めたい。言い換えると、私たちに課せられているのは dy と dx の比、つまり \dfrac{dy}{dx} の計算である。</description>
    </item>
    <item>
      <title>第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/</guid>
      <description>§89 x → ∞ の極限 連続実変数の関数に話を戻そう。これからは一価関数だけに話を限定し1、考える関数を \phi(x) とする。x が基準直線 \Lambda 上の全ての点に対応する値を順に取るとして、考える点が固定された点から右に向かって止まることなく移動する様子を考える。このような状況を「x が無限大に向かう」あるいは「x が \infty に向かう」と言い、x \to \infty と表す。前章で議論した「n が \infty に向かうとき」との唯一の違いは、x が \infty に向かうときに全ての値を取る点にある。つまり x が \infty に向かうとき、x として考える値には \Lambda 上で最初の点から右にある全ての点が対応する。これに対して n が \infty に向かうときは対応する点が飛び飛びだった。この事実を「x は連続的に (continuously) \infty に向かう」と表現する。</description>
    </item>
    <item>
      <title>§6 無理数 (その 4) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_6_definition_of_section_of_ratinal_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_6_definition_of_section_of_ratinal_numbers/</guid>
      <description>§4 では正の有理数 x を二つのクラスに分割する具体的な方法を説明し、x^{2} \lt 2 を満たすクラスと x^{2} \gt 2 を満たすクラスを考えた。この分割方法を、考えている数の切断 (section) と呼ぶ。二つのクラスの要素を特徴付ける不等式が x^{3} \lt 2 と x^{3} \gt 2、あるいは x^{4} \lt 7 と x^{4} \gt 7 である場合にも切断を同じように構成できる。こういった正の有理数の「切断」の構築に関するごく自然な法則を示そう。 P と Q をとある性質とし、ある正の有理数が両方を同時に満たすことはなく、全ての正の有理数はどちらかを必ず満たすとする。さらに P を満たす全ての数は Q を満たすどんな数よりも小さいと仮定する。例えば P が「x^{2} \lt 2」という性質で Q が「x^{2} \gt 2」という性質かもしれない。このとき P を満たす数の集まりを下クラス (lower class) あるいは左手クラス (left-hand class) L と呼び、Q を満たす数の集まりを上クラス (upper class) あるいは右手クラス (right-hand class) R と呼ぶ。通常はどちらのクラスも存在するが、一方が要素を持たず、もう片方に全ての有理数が属することも特殊ケースとしてあり得る。例えば P (あるいは Q) を「有理数である」や「正である」とすると明らかにこの状況になる。しかし今は、二つのクラスの要素が存在するとして話を進める。このとき §4 で示したように、L の要素と R の要素の組でその差が好きなだけ小さいものを見つけられる。</description>
    </item>
    <item>
      <title>LE-DAnCE - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/le-dance/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/le-dance/</guid>
      <description>はじめに 分散リアルタイム組み込みシステム (distributed, real-time and embedded system, DRE システム) はエンタープライズ向け分散システムの特徴とリソース制約の厳しいリアルタイム/組み込みシステムの特徴を併せ持つ重要なアプリケーションの種別である。具体的には、DRE システムのアプリケーションは巨大な領域に分散される点でエンタープライズ向け分散システムとの共通点がある。さらに、リアルタイム/組み込みシステムのアプリケーションと同様に、DRE システムのアプリケーションはミッションクリティカルであり、安全性、信頼性、クオリティオブサービス (QoS) に関して厳しい要件を持つ。</description>
    </item>
    <item>
      <title>1.3 アーキテクチャ - 第 1 章 基礎 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foundation/architecture/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foundation/architecture/</guid>
      <description>前節ではネットワーク設計でまず欠かせない要件をいくつか見た ── コンピューターネットワークは一般的で、費用対効果に優れ、公平で、ロバストな接続を多数のコンピューターに提供しなければならない。さらに厄介なことに、ネットワークは常に変化する。ネットワークを支える下位の技術の変化、およびアプリケーションプログラムからの要請の変化を取り込みながらネットワークは進化しなければならない。加えて、ネットワークは様々なレベルのスキルを持つ人間によって簡単に管理できなければならない。こういった要件を満たすネットワークの設計は簡単な仕事ではない。</description>
    </item>
    <item>
      <title>複素数と有理数 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/complex-and-rational-numbers/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/complex-and-rational-numbers/</guid>
      <description>複素数と有理数 Julia には複素数と有理数を表す型の定義が含まれ、これらの型に対する標準的な数学演算と初等関数もサポートされます。プリミティブ数値型であれ複合型であれ、組み込みの数値型には型の変換と昇格が定義され、どのように型を混ぜた演算であっても期待通りに動作します。 複素数 グローバル定数 im は複素数 i (-1 の平方根の主値) に束縛されます (数学者が使う i や工学者が使う j をこのグローバル定数に使う案は、添え字を表す変数と区別できなくなるということで採用されませんでした)。Julia では数値リテラルと識別子に続けて書くと数値リテラルが係数とみなされるので、この束縛さえあれば複素数に対する簡単な記法が手に入ります。数学で使われる伝統的な記法に似た記法です: julia&amp;gt; 1+2im 1 + 2im 複素数に対しては標準的な算術演算が全て可能です: julia&amp;gt; (1 + 2im)*(2 - 3im) 8 + 1im julia&amp;gt; (1 + 2im)/(1 - 2im) -0.6 + 0.8im julia&amp;gt; (1 + 2im) + (1 - 2im) 2 + 0im julia&amp;gt; (-3 + 2im) - (5 - 1im) -8 + 3im julia&amp;gt; (-1 + 2im)^2 -3 - 4im julia&amp;gt; (-1 + 2im)^2.5 2.729624464784009 - 6.9606644595719im julia&amp;gt; (-1 + 2im)^(1 + 1im) -0.27910381075826657 + 0.08708053414102428im julia&amp;gt; 3(2 - 5im) 6 - 15im julia&amp;gt; 3(2 - 5im)^2 -63 - 60im julia&amp;gt; 3(2 - 5im)^-1.0 0.20689655172413796 + 0.5172413793103449im 型の昇格システムにより、オペランドの型を混ぜたとしても正しい演算が自動的に行われます:</description>
    </item>
    <item>
      <title>7. リストとテーブル - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/lists_and_tables/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/lists_and_tables/</guid>
      <description>優れたリストは技術的な混沌に秩序をもたらします。技術文書の読者は一般的に言ってリストが大好きなので、散文をリストにする機会を常に探るようにしましょう。 正しい種類のリストを選ぶ テクニカルライティングでは次の種類のリストが主に使われます: 箇条書き (bulleted list) 番号付きリスト (numbered list) 埋め込みリスト (embedded list) 箇条書きは要素に順序がないときに、番号付きリストは要素に順序があるときに使ってください。言い換えると: 箇条書きの要素を並べ替えてもリストの意味は変わりません。 番号付きリストの要素を並べ替えるとリストの意味が変わります。 例えば、次のリストでは要素を並べ替えてもリストの意味が変わらないので、箇条書きを使っています:</description>
    </item>
    <item>
      <title>6.7 数学関数 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/mathematical_functions/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/mathematical_functions/</guid>
      <description>6.7 数学関数 このライブラリは基礎的な数学関数を提供します。全ての関数と定数は math テーブルに公開されます。integer/float と印の付いた関数は整数の引数に対して整数を返し、整数以外の引数に対して浮動小数点数を返します。切り捨て関数 math.ceil, math.floor, math.modf は計算結果が整数の範囲に収まるなら整数を返し、収まらないなら浮動小数点数を返します。 math.abs (x) interger/float x と -x の大きい方を返します。 math.acos (x) x のアークコサインを返します。x の単位はラジアンです。</description>
    </item>
    <item>
      <title>アンチエイリアシング - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_7_antialiasing/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_7_antialiasing/</guid>
      <description>現実のカメラで撮った写真では、物体の周りがギザギザに見えることはない。これは物体の縁のピクセルにおいて前景と背景が混ざるためだ。各ピクセルに複数のサンプルを放って平均値を計算すれば、これと同じ効果を得られる。なお、この本ではランダムサンプリングの層化 (stratification) は実装しない。これは議論を呼ぶ設計だが、私が書くレイトレーサーではいつもこうしている。層化が欠かせないレイトレーサーもあるが、いま私たちが書いている一般的なパストレーサーでは層化で得られるものは少なく、ただコードが汚くなってしまう。また後で機能を足せるようにカメラを抽象化するクラスもここで作成する。</description>
    </item>
    <item>
      <title>正規直交基底 - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_8_orthonormal_bases/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_8_orthonormal_bases/</guid>
      <description>前節では z 軸を基準にランダムな方向を生成する方法を導出した。次は物体表面の法線を基準に同じことを行いたい。 相対座標 互いに直交する三つの単位ベクトルの集合を正規直交基底 (orthonormal basis) と呼ぶ。例えばデカルト座標系の x, y, z 軸方向の単位ベクトルからなる集合は ONB である。私はよく忘れてしまうのだが、現実世界における物体の位置と傾きを決めるには、基準となる ONB がどこかに必要となる。同様に仮想空間にある物体の位置と傾きを記述するには ONB をどこかに配置しなければならない。写真とはカメラから見たシーンの相対的な位置と傾きを写したものであり、カメラとシーンが同じ座標系で表されている限りどんな座標系でも問題はない。</description>
    </item>
    <item>
      <title>長方形とライト - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_7_rectangle_and_light/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_7_rectangle_and_light/</guid>
      <description>ライティングはレイトレーサーの重要な要素である。初期の単純なレイトレーサーは点光源や平行光源といった抽象化された光源を使っていた。現代的なアプローチではもっと物理ベースのライトが使われるようになっており、光源は位置と大きさを持つ。この現代的な光源を実装するには、任意の通常のオブジェクトがシーン内に光を放てるよう設計を変更する必要がある。 発光マテリアル まず光源となる発光マテリアルを作ろう。material に emitted() 関数を追加する必要がある (代わりに hit_record に変数 emitted を追加してもよい ──設計が少し変わるだけだ)。背景と同じくこの関数はレイの色を計算するだけで、反射レイは計算しない。発光する拡散マテリアルは非常に簡単に書ける:</description>
    </item>
    <item>
      <title>V. 定数の微分 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/5_waht_to_do_with_constants/</link>
      <pubDate>Mon, 16 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/5_waht_to_do_with_constants/</guid>
      <description>ここまでは等式中の x の増加を考え、x が増やされた結果として y も値を変えて増加するものとしてきた。普通は x を私たちが変えられる量だとして、x の変動という原因によって y の変動という結果が起こると考える。つまり y の値が x の値に依存しているみなす。x も y も変数ではあるが、私たちが値を変えられるのは x だけであり、y は “従属” 変数である。前章では独立に起こる x の変動によって引き起こされる y の変動の比率を求める規則を導いた。</description>
    </item>
    <item>
      <title>第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/</guid>
      <description>§110 導関数 (その 1) 曲線に自然に関連付けられる性質の議論に戻る。最も重要で明白な性質は、前章で見た、曲線の見た目がつながっているかどうかという性質である。この性質は連続関数の定義で表される。 直線・円・円錐曲線といった初等幾何学で登場する普通の曲線には他にもたくさんの一般的な性質がある。その中でおそらく最も単純で最も注目に値するのは、曲線の各点で有限の方向が定まる、言い換えると、曲線上の各点で接線が引けることである。読者も知っての通り、初等幾何学では曲線上の点 P における接線が「点 Q が点 P に向かって近づくときの、弦 PQ の&#34;極限&#34;」として定義される。この「極限」の存在するという仮定が意味することを考えよう。</description>
    </item>
    <item>
      <title>§7 無理数 (その 5) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_7_positive_real_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_7_positive_real_numbers/</guid>
      <description>前節の最後で示した最初の二つのケースでは、切断が正の有理数 a に対応する。最初のケースでは a = l で、もう一つでは a = r となる。逆に正の有理数 a がある切断に対応するのも明らかなので、その切断を \alpha と表記する1。例えば P と Q がそれぞれ \[ x \leq a,\quad x \gt a \] という不等式、あるいは x \lt a と x \geq a という不等式で表されるケースがこれにあたる。最初のケースでは a が L の最大要素となり、二つ目のケースでは a が R の最小要素となる。実は正の有理数に対応する切断はこの二つしかない。そこで曖昧さをなくすために、一つを選んでおく: 私たちは考えている数字が上クラスに属するケースを選ぶ。言い換えると、以降は L が最大要素を持たない切断だけを考えることにする。</description>
    </item>
    <item>
      <title>Infinispan - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/infinispan/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/infinispan/</guid>
      <description>はじめに Infinispan1 はオープンソースのデータグリッドプラットフォームであり、インメモリの分散型 NoSQL キーバリューストアを提供する。ソフトウェア技術者が Infinispan のようなデータグリッドを利用するときは、パフォーマンスを改善するための分散インメモリキャッシュとしてリレーショナルデータベースといった高価で低速なストアの前段に配置されるか、そうでなければリレーショナルデータベースを置き換える分散型 NoSQL データストアとして利用される場合が多い。いずれの場合でも、ソフトウェアアーキテクチャにデータグリッドの追加を検討する主な目的はパフォーマンスである。高速かつ低レイテンシなアクセスへの需要は近年高まっている。</description>
    </item>
    <item>
      <title>1.4 ソフトウェア - 第 1 章 基礎 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foundation/software/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foundation/software/</guid>
      <description>ネットワークアーキテクチャとプロトコル仕様は欠かすことのできない要素である。しかし、設計図だけではインターネットの驚異的な成功を十分に説明できない。インターネットに接続されるコンピューターの個数は (正確な値を求めるのは難しいものの) 三十年以上にわたって指数的に増加してきた。インターネットのユーザー数は 2018 年末時点で 41 億人 (世界人口の約半分) と推計されている。 何がインターネットの成功を説明するだろうか？ もちろん成功に寄与した要因は数多く存在する (優れたアーキテクチャもその一つだ) が、インターネットの爆発的な成功を可能にした要因の一つに、インターネットの機能のかなりの部分が汎用コンピューターで実行されるソフトウェアによって提供される事実がある。この事実がなぜ重要かと言えば、新しい機能を「ちょっとしたプログラミングの問題」を解くことで簡単に追加できるようになるからである。結果として、新しいアプリケーションやサービスがとてつもないペースで生まれていった。</description>
    </item>
    <item>
      <title>文字列 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/strings/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/strings/</guid>
      <description>文字列 文字列は文字の有限列です。もちろん、本当の問題は文字とは何かを考え始めたときに姿を現します。英語話者にとっての「文字」とは A, B, C, ... といったアルファベットと数字およびいくつかの記号であり、こういった文字は ASCII 規格によって 0 から 127 の整数への対応関係が標準化されています。しかし当然、英語でない言語で使われる文字も多くあります。例えばアクセントなどを改変した ASCII 文字の変種、あるいはキリル文字やギリシャ文字といった英語の親戚にあたる言語の文字があり、さらに ASCII とも英語とも関係のないアラブ語・中国語・ヘブライ語・ヒンディー語・日本語・韓国語の文字も存在します。Unicode 規格は「文字とは何か」という複雑な問題に真正面から取り組むものであり、この問題を解決する決定的な規格として多くの人々に受け入れられています。必要に応じて、この複雑な問題を完全に無視してこの世には ASCII 文字しか存在しないとしてプログラムを書くか、ASCII でないテキストを処理するときに遭遇する可能性のある全ての文字とエンコーディングに対応したプログラムを書くかを選択してください。</description>
    </item>
    <item>
      <title>8. 段落 - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/paragraphs/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/paragraphs/</guid>
      <description>この章では、文章中の段落を互いに強く結びついたものにするためのガイドラインを示します。まず格言を一つ: トピックの様々な部分の間の依存関係を解きほぐし、一つの論理的な流れに沿ってその部分を提示して読者にあなたの意見を理解させること、執筆とはこれに尽きる。 優れた書き出しを書く 書き出しの一文はどんな段落においても一番重要な文です。時間のない読者は最初の文だけを読んで他の文を飛ばすことがあるので、執筆の労力は書き出しの文に集中させるべきです。</description>
    </item>
    <item>
      <title>6.8 入出力機能 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/io_facilities/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/io_facilities/</guid>
      <description>6.8 入出力機能 I/O ライブラリはファイル操作を二つのスタイルで提供します。一つ目のスタイルは暗黙のファイルハンドルを使うものです。デフォルトの入出力ファイルを設定するための関数が提供され、全ての入出力操作はこのデフォルトファイルを使って行われます。もう一つのスタイルは明示的なファイルハンドルを使うものです。 暗黙なファイルハンドルを使う全ての操作は io テーブルを通して提供されます。明示的なファイルハンドルを使う全ての操作は io.open が返すファイルハンドラのメソッドとして提供されます。</description>
    </item>
    <item>
      <title>インスタンス - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_8_instances/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_8_instances/</guid>
      <description>普通コーネルボックスには二つの立方体があって、どちらも壁に対して角度が付いている。まず六個の長方形を使って辺が軸に平行な直方体を作ろう。 class box: public hittable { public: box() {} box(const point3&amp;amp; p0, const point3&amp;amp; p1, shared_ptr&amp;lt;material&amp;gt; ptr); virtual bool hit(const ray&amp;amp; r, double t0, double t1, hit_record&amp;amp; rec) const; virtual bool bounding_box(double t0, double t1, aabb&amp;amp; output_box) const { output_box = aabb(box_min, box_max); return true; } public: point3 box_min; point3 box_max; hittable_list sides; }; box::box(const point3&amp;amp; p0, const point3&amp;amp; p1, shared_ptr&amp;lt;material&amp;gt; ptr) { box_min = p0; box_max = p1; sides.add(make_shared&amp;lt;xy_rect&amp;gt;(p0.x(), p1.x(), p0.y(), p1.y(), p1.z(), ptr)); sides.add(make_shared&amp;lt;xy_rect&amp;gt;(p0.x(), p1.x(), p0.y(), p1.y(), p0.z(), ptr)); sides.add(make_shared&amp;lt;xz_rect&amp;gt;(p0.x(), p1.x(), p0.z(), p1.z(), p1.y(), ptr)); sides.add(make_shared&amp;lt;xz_rect&amp;gt;(p0.x(), p1.x(), p0.z(), p1.z(), p0.y(), ptr)); sides.add(make_shared&amp;lt;yz_rect&amp;gt;(p0.y(), p1.y(), p0.z(), p1.z(), p1.x(), ptr)); sides.add(make_shared&amp;lt;yz_rect&amp;gt;(p0.y(), p1.y(), p0.z(), p1.z(), p0.x(), ptr)); } bool box::hit(const ray&amp;amp; r, double t0, double t1, hit_record&amp;amp; rec) const { return sides.hit(r, t0, t1, rec); } リスト 2.58 [box.h] box クラス 続いてシーンに二つの直方体を追加する。まだ角度は付いていない。 objects.add(make_shared&amp;lt;box&amp;gt;(point3(130, 0, 65), point3(295, 165, 230), white)); objects.add(make_shared&amp;lt;box&amp;gt;(point3(265, 0, 295), point3(430, 330, 460), white)); リスト 2.59 [main.cc] box をシーンに追加する 次の画像が得られる: 図 2.24: 二つの直方体を追加したコーネルボックス さらに立方体を回転させれば真のコーネルボックスとなる。レイトレーシングではオブジェクトの回転や移動を実装するのにインスタンス (instance) という考え方を使うことが多い。インスタンスとはある幾何形状を移動あるいは回転させて得られる幾何形状のことである。レイトレーシングでは物体の移動がレイの移動で済むので、インスタンスの取り扱いが非常に簡単になる。例えば下図のピンクの四角を x 軸正方向に 2 だけ移動したインスタンスと黒いレイの衝突を判定したいとする。このとき実際に移動させた黒い四角を使うこともできるし、x 軸正方向に -2 だけ移動させたピンク色のレイを使うこともできる。レイトレーシングで使うのは後者である。</description>
    </item>
    <item>
      <title>拡散マテリアル - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_8_diffuse_material/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_8_diffuse_material/</guid>
      <description>複数のオブジェクトと各ピクセルに対する複数のレイがサポートできたので、これで現実的な見た目のマテリアルを作る準備が整った。まず拡散マテリアル (diffuse material) から始める (拡散マテリアルは非光沢マテリアル (matte material) とも呼ばれる)。ジオメトリとマテリアルの実装に関して、両者を分離する方法と両者を結び付ける方法がある。分離すると一つのマテリアルを複数のジオメトリに割り当てる使い方 (およびその逆) が可能になるが、結び付けるとプロシージャルなオブジェクトが扱いやすくなる。私たちは (他の多くのレンダラと同様) ジオメトリとマテリアルを分離する方法を使うが、その制限は意識しておくべきだ。</description>
    </item>
    <item>
      <title>直接的なライトのサンプリング - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_9_sampling_lights_directly/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_9_sampling_lights_directly/</guid>
      <description>ほぼ一様に方向をサンプルする方法の問題は、ライトが存在する方向と他の重要でない方向が同程度にしかサンプルされないことである。シャドウレイを使って直接光の計算を特別扱いすることもできるが、ここではライトのある方向へ多くレイを放つようにする。ここで実装するアーキテクチャは後で任意の方向へレイを多く送れるようにするのに使われる。 ライトに向かうランダムな方向を選ぶのは非常に簡単で、ライト上の点をランダムに選び、その点に向かう方向を選べばよい。ただモンテカルロ積分を行うには、その方向の PDF p(\text{direction}) を知る必要がある。PDF はいくつだろうか？</description>
    </item>
    <item>
      <title>VI. 和・差・積・商の微分 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/6_sums_differences_products_and_quotients/</link>
      <pubDate>Wed, 01 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/6_sums_differences_products_and_quotients/</guid>
      <description>ここまでで x^{2} + c や ax^{4} といった簡単な代数関数を微分する方法を学んだ。次に取り組むのは二つ以上の関数の和を微分する方法である。 例えば \[ y = (x^{2}+c) + (ax^{4}+b) \] のとき、\dfrac{dy}{dx} はどうなるだろうか？ この新しい種類の問題にどう取り掛かるべきだろうか？ この問題は非常に簡単である: それぞれの関数を個別に微分すれば答が得られる。つまり \[ \dfrac{dy}{dx} = 2x + 4ax^{3} \ \cdots \ \textbf{\small (答)} \] となる。 この正しさを少しでも疑問に思うなら、より一般的な場合を第一原理から計算しなけらばならない。その方法をここに示す。</description>
    </item>
    <item>
      <title>第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/</guid>
      <description>§147 高階の平均値の定理 (テイラーの定理) §125 で証明したように、f(x) が区間 [a, b] で導関数 f&#39;(x) を持つとき、a \lt \xi \lt b を満たす \xi で \[ f(b) - f(a) = (b - a) f&#39;(\xi) \] が成り立つ。同じことを言い換えると、f(x) が [a, a + h] で導関数を持つなら、とある \theta_{1}\ (0 \lt \theta_{1} \lt 1) で \[ f(a + h) - f(a) = hf&#39;(a + \theta_{1} h) \qquad \text{(1)} \] が成り立つ。この定理の証明では関数 \[ f(b) - f(x) - \frac{b - x}{b - a} \{f(b) - f(a)\} \] を考えた。この関数は x = a と x = b で 0 となる。 f(x) が [a, b] で二次導関数 f&#39;&#39;(x) を持つと仮定する。これにより一次導関数 f&#39;(x) の連続性も仮定される。関数 \[ f(b) - f(x) - (b - x) f&#39;(x) - \left(\frac{b - x}{b - a}\right)^{2} \{f(b) - f(a) - (b - a)f&#39;(a)\} \] を考えると、この関数も x = a と x = b で 0 になる。この関数の導関数は \[ \frac{2(b - x)}{(b - a)^{2}} \{f(b) - f(a) - (b - a) f&#39;(a) - \dfrac{1}{2}(b - a)^{2}f&#39;&#39;(x)\} \] であり、これは a と b の間にある x\ (a と b は除く) で 0 になる (§121)。つまり a と b の間のとある \xi で次の等式が成り立つ: \[ f(b) = f(a) + (b - a)f&#39;(a) + \dfrac{1}{2}(b - a)^{2}f&#39;&#39;(\xi) \] \theta_{2}\ (0 \lt \theta_{2} \lt 1) を使えば \xi = a + \theta_{2}(b - a) という形で表すこともできる。</description>
    </item>
    <item>
      <title>§8 実数 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_8_real_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_8_real_numbers/</guid>
      <description>前節では正の有理数の切断に話を限定し、この切断を仮に「正の実数」と呼んだ。最終的な定義を述べるには、これまでの定義を少し変える必要がある。ここからは切断、すなわち二つのクラスへの分割を、正の有理数だけではなく 0 を含めた全ての有理数に対して考えることにする。このとき §6–§7 で正の有理数の切断について行った議論は、「正の」という言葉を適切に省略すればもう一度行える。そして次のように実数を定義する: 有理数の切断であって両方のクラスが要素を持ち下のクラスが最大要素を持たないものを、実数 (real number) あるいは単に数 (number) と呼ぶ。 有理数に対応しない実数を無理数 (irrational number) と呼ぶ。 もし実数が有理数に対応するなら、その実数に対しても有理数 (rational number) という言葉を使うことにする。</description>
    </item>
    <item>
      <title>Talos - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/talos/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/talos/</guid>
      <description>Mozilla で私たちが最初に作成した自動化システムは Talos と呼ばれるパフォーマンステストフレームワークだった。Talos の所有者が変更される中で開発初期の仮定や設計判断は多くが正当な理由を持たなくなったにもかかわらず、Talos は 2007 年に誕生してから大きな変更を受けることなく着実なメンテナンスだけを受け続けた。 2011 年の夏、私たちは Talos で計測される様々な数値に含まれるノイズや変動にようやく目を向け、システムを改善するために小規模な変更ができないかを考え始めた。これがパンドラの箱を開けることになるとは思ってもいなかった。</description>
    </item>
    <item>
      <title>1.5 パフォーマンス - 第 1 章 基礎 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foundation/performance/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foundation/performance/</guid>
      <description>ここまでの議論は主にネットワークの機能に関する側面を考えてきた。しかし、あらゆるコンピューターシステムと同じように、コンピューターネットワークには効率の良い動作も求められる。これはネットワークを通じて分散される計算の有用性が計算で使われるデータのネットワークを通じた転送効率に大きく左右されることがよくあるためである。「まず正しくせよ。それから速くせよ」というプログラミングの古い格言は今も正しいものの、ネットワークでは「パフォーマンスのための設計」が必要になる場合が多い。そのためネットワークのパフォーマンスに影響する様々な要因を理解しておくことが重要となる。</description>
    </item>
    <item>
      <title>関数 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/functions/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/functions/</guid>
      <description>関数 Julia において、関数 (function) とは引数の値からなるタプルを返り値に対応させるオブジェクトです。Julia の関数はプログラムのグローバルな状態を変更したり、グローバルな状態に影響を受けることがあるので、純粋ではありません。Julia における関数定義の基本的な構文は次の通りです: julia&amp;gt; function f(x,y) x + y end f (generic function with 1 method) この関数は二つの引数 x と y を受け取り、最後に評価された式の値、つまり x + y を返します。 Julia にはもう一つ、関数を定義するためのより簡潔な構文があります。上に示した伝統的な関数宣言は、次のコンパクトな &#34;代入形式&#34; (assignment form) の宣言と等価です:</description>
    </item>
    <item>
      <title>9. 対象読者 - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/audience/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/audience/</guid>
      <description>このコースを作成した私たちは、読者であるあなたが数式を見て気分を害することはないだろうと考えています。というわけで、この章は数式から始まります: 良いドキュメント = 読者がタスクを行うために必要な知識とスキル — 読者が現在持つ知識とスキル 言い換えれば、あなたの書くドキュメントは読者が必要としていてまだ知らない情報を提供するべきだということです。この考えに基づき、この章では次の事項を説明します: 対象読者を決める。 対象読者が学ぶ必要があることを見定める。 ドキュメントを対象読者に合わせて書く。 次のビデオを見れば分かるように、対象読者を見誤ると何も伝わりません:</description>
    </item>
    <item>
      <title>6.9 OS 機能 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/os_facilities/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/os_facilities/</guid>
      <description>6.9 OS 機能 このライブラリは os テーブルに実装されます。 os.clock () プログラムが使用した総 CPU 時間の近似を返します (単位は秒)。返り値は ISO C 関数 clock が返す値を利用して計算されます。 os.date ([format [, time]]) 日付と時刻を含んだ文字列またはテーブルを返します。返り値は与えられた文字列 format に従って成形されます。 引数 time が与えられた場合には、この値が成形されて返ります (time として渡すことができる値の説明は os.time にあります)。time が与えられなければ date は現在時刻を成形します。</description>
    </item>
    <item>
      <title>ボリュームレンダリング - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_9_volumes/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_9_volumes/</guid>
      <description>レイトレーサーにぜひ追加したいのがフォグ (煙・霧) だ。これはボリューム (volume) あるいは関与媒質 (participating media) とも呼ばれる。またオブジェクト内部の濃い霧として表面下散乱 (subsuraface scattering) も追加しておきたい。こういった概念は物体の表面と大きく異なる代物なので、普通に実装するとソフトウェアのアーキテクチャがうんと複雑になる。しかしここでは、ボリュームをランダムな表面とみなすテクニックが使える。つまり煙が存在する領域を確率的に衝突する表面を持った物体で置き換えるのである。どういうことかはコードを見ればより理解できるだろう。</description>
    </item>
    <item>
      <title>金属マテリアル - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_9_metal_material/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_9_metal_material/</guid>
      <description>マテリアルを表す抽象クラス 異なるオブジェクトに異なるマテリアルを持たせようとすると、設計の変更が必要になる。一つの選択肢として、たくさんのパラメータを持つ一般的なマテリアルを用意して、マテリアルの種類に応じて使わないパラメータには 0 を設定する方法がある。これは悪くないアプローチだが、他にもマテリアルの振る舞いをカプセル化する抽象マテリアルクラスを作るという方法もある。私は後者の方法を気に入っている。今書いているプログラムでは、マテリアルは次の二つの処理を行う:</description>
    </item>
    <item>
      <title>混合密度 - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_10_sampling_lights_directly/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_10_sampling_lights_directly/</guid>
      <description>\cos \theta となる PDF とライトをサンプルする PDF の両方が手に入った。次はこの二つを組み合わせた PDF が作りたい。 ライティングと反射の平均 確率論では複数の密度関数を混ぜて混合密度 (mixture density) を作るテクニックがよく使われる。例えば二つの密度関数の平均を取れば混合密度となる: \[ p_{\text{mixture}}(\text{direction}) = \frac{1}{2} p_{\text{reflection}}(\text{direction}) + \frac{1}{2} p_{\text{light}}(\text{direction}) \] これを実装する方法を考える。非常に重要な細かい問題があるので、実装は意外なほど難しくなる。まずランダムな方向の選択は簡単に行える: if (random_double() &amp;lt; 0.5) pdf_reflection に従って方向を選択する else pdf_light に従って方向を選択する p_{\text{mixture}} の計算にはさらに慎重な議論が必要になる。上のコードが選択する方向が両方の PDF から得られる可能性もあるので、p_{\text{reflection}} と p_{\text{light}} の両方を計算しなければならない。例えば p_{\text{reflection}} を使って生成した方向がライトを向いている可能性がある。</description>
    </item>
    <item>
      <title>VII. 微分の反復 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/7_successive_differentiation/</link>
      <pubDate>Thu, 02 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/7_successive_differentiation/</guid>
      <description>関数に対して微分の操作を複数回行ったときに何が起こるかを見よう。具体例として y = x^{5} を考えると、 \[ \begin{alignedat}{6} &amp;{\footnotesize \text{一回微分した結果}} &amp;&amp; = 5x^{4} &amp;&amp; \\ &amp;{\footnotesize \text{二回微分した結果}} &amp;&amp; = 5 \times 4x^{3} &amp;&amp; = 20x^{3} \\ &amp;{\footnotesize \text{三回微分した結果}} &amp;&amp; = 5 \times 4 \times 3x^{2} &amp;&amp; = 60x^{2} \\ &amp;{\footnotesize \text{四回微分した結果}} &amp;&amp; = 5 \times 4 \times 3 \times 2x &amp;&amp; = 120x \\ &amp;{\footnotesize \text{五回微分した結果}} &amp;&amp; = 5 \times 4 \times 3 \times 2 \times 1 &amp;&amp; = 120 \\ &amp;{\footnotesize \text{六回微分した結果}} &amp;&amp; &amp;&amp; = 0 \end{alignedat} \] となる。 一部の著者によって使われる前に説明した記法がここで非常に便利になる。x の関数を f(x) と表す記法である。f(\text{...}) は「...の関数」を意味するが、具体的な形を表さない。つまり y = f(x) とあれば y が x の関数であることが分かるが、その関数は x かもしれないし、x^{2} かもしれない。あるいは ax^{n},\ \cos x といったもっと複雑な関数である可能性もある。</description>
    </item>
    <item>
      <title>第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/</guid>
      <description>§165 級数の表記 第四章で無限級数の収束・発散・振動の意味を説明した。そのとき定義を確認するために示した例は幾何級数 \[ 1 + x + x^{2} + \cdots \] から派生した級数およびこれに近い級数が中心だった。本章ではこの話題をさらに体系的に掘り下げ、解析学で最もよく登場する種類の級数の収束を判定するのに利用できる定理を証明する。 これからは \[ u_{m} + u_{m+1} + \cdots + u_{n} = \sum_{m}^{n} \phi(\nu) \] と表記し、無限級数 u_{0} + u_{1} + u_{2} + \cdots を \sum\limits_{0}^{\infty} u_{n} あるいは単に \sum u_{n} と書く1。 §166 正項級数 級数の項が全て正の実数だと仮定すると収束の議論が比較的簡単になる2。まずはこの条件を満たす級数を考えるが、その理由は扱いが簡単なためだけではなく、負あるいは複素数の項を含む級数の収束の議論が正の項だけからなる級数の収束の議論に帰着できる場合が多いためでもある。 級数の収束と発散を議論するときには、有限個の項を無視しても構わない。そのため級数に含まれる負あるいは複素数の項が有限個なら、そういった項を除いた残りの部分にこれから説明する正項級数に対する定理を適用できる。</description>
    </item>
    <item>
      <title>§9 実数の大きさの関係 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_9_magnitude_between_real_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_9_magnitude_between_real_numbers/</guid>
      <description>数の概念を拡張して次に当然行うべきは、対応する等号・不等号・加算・乗算といった概念の拡張である。こういった概念を新しい数に適用する方法、そして拡張された概念が通常の代数法則を満たすことを示す必要がある。この証明がなくては、一般的な実数を §1 の有理数と同じように扱えない。しかし全てを詳細に示すには多くの紙面が必要になるので、ここでは詳細な議論の進め方を大まかに示すに留める。 実数は \alpha,\ \beta,\ \gamma,\ \ldots といったギリシャ文字で表し、対応する下のクラスと上のクラスに属する有理数をそれぞれ a と A、b と B、c と C と言ったアルファベットで表す。クラス自身は (a),\ (A) などで表す。</description>
    </item>
    <item>
      <title>Zotonic - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/zotonic/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/zotonic/</guid>
      <description>Zotonic の紹介 Zotonic はフルスタックウェブ開発のためのオープンソースフレームワークであり、フロントエンドの機能とバックエンドの機能を両方持つ。Zotonic は少量のコア機能から構成され、軽量でありつつも拡張可能なコンテンツ管理システム (CMS) が最上部に実装されている。Zotonic の主目標は最初からスケールするパフォーマンスに優れたウェブサイトの作成を簡単にすることである。 Zotonic の機能や特徴は Django, Drupal, Ruby on Rails, WordPress といった他のウェブ開発フレームワークと共通する部分が多い。競争相手に対する優位性を Zotonic に与えているのは言語である: Zotonic は Erlang で書かれている。この言語 ── 元々は電話交換機のために開発された ── のおかげで、Zotonic の高い障害耐性と優れたパフォーマンスは可能になっている。</description>
    </item>
    <item>
      <title>視点: 機能速度 - 第 1 章 基礎 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/foundation/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/foundation/trend/</guid>
      <description>本章ではコンピューターネットワークにおける代表的な利害関係者 ── ネットワーク設計者、アプリケーション開発者、エンドユーザー、ネットワーク運用者 ── を紹介し、ネットワークの設計・構築方法を形作る技術的要件を説明する足掛かりとした。ここまでの説明では全ての設計判断が純粋に技術的だと仮定してきたものの、当然それは正しくない。市場圧力、政策、倫理的懸案事項など、ネットワークの設計・構築に影響を与える要因は他にも数多く存在する。</description>
    </item>
    <item>
      <title>はじめに - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/preface/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/preface/</guid>
      <description>カルマンフィルタとベイズフィルタ センサーにはノイズがつきものだ。世界にあふれるデータやイベントを私たちは計測・追跡したいのだが、センサーから完璧な情報が取得できるとは期待できない。例えば私の車に搭載されている GPS は高度を報告するが、同じ道路の同じ場所を通ったとしても報告される高度は少し異なる。また私が持っているキッチンスケールの上に同じものを二度載せると、目盛りは異なる値を指す。 すぐに解決できる簡単なケースもある。もしキッチンスケールが多少異なる値を指すなら、追加で何度か測定して平均を取ればいい。あるいはもっと正確なキッチンスケールと取り換えることもできる。しかしセンサーに含まれるノイズが非常に大きかったり、データの収集が困難な環境だったりしたら？ 例えば低高度を飛行する航空機の動きを追跡したいとき、ドローンを自動操縦したいとき、あるいは農業用トラクターが畑全体に種をまくことを保証したいときは、どうすればよいだろうか？ 私が取り組んだことのあるコンピュータービジョン関係の課題で画像に含まれる動くオブジェクトを追跡する必要があったとき、コンピュータービジョンのアルゴリズムが出力する結果はノイズが非常に大きく、信頼性も低かった。</description>
    </item>
    <item>
      <title>制御構造 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/control-flow/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/control-flow/</guid>
      <description>制御構造 Julia は様々な制御構造構文を提供します: 複合式: begin と ; 条件評価: if-elseif-else と ?: (三項演算子) 短絡評価: &amp;&amp;, || と連鎖された比較 反復評価 (ループ): while と for 例外処理: try-catch, error, throw タスク (コルーチン): yieldto 最初の五つの制御構造は普通の高水準プログラミング言語で見られるものですが、タスクはそうではないでしょう: タスクはローカルでない制御構造を提供し、タスクを使うと計算を一時的に差し止めて別の計算に移る処理が可能になります。これは強力な構文であり、Julia では例外処理と協調的マルチタスクの両方がタスクを使って実装されています。日常的なプログラミングでタスクを直接使うことはないと思いますが、一部の問題はタスクを使うと非常に簡単に解決できます。</description>
    </item>
    <item>
      <title>10. ドキュメント - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/documents/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/documents/</guid>
      <description>あなたは文が書けるようになり、段落も書けるようになりました。しかし、たくさんの段落を一つの筋の通ったドキュメントにまとめるにはどうすればよいのでしょうか？ ドキュメントの目的を述べる 良いドキュメントはその目的 (スコープ) を定めることから始まります。例を示します: This document describes the overall design of Project Frambus. (このドキュメントは Frambus プロジェクトの全体的な設計を説明する。) 良いドキュメントは加えて目的でないことも定めます。目的でないこととはつまり、対象読者がドキュメントに期待する可能性のあるもののそのドキュメントが触れないトピックです。例を示します:</description>
    </item>
    <item>
      <title>6.10 デバッグ機能 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/debug_library/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/debug_library/</guid>
      <description>6.10 デバッグ機能 このライブラリは Lua プログラムへのデバッグインターフェース (§ 4.7) に関連する機能を提供します。このライブラリの利用は注意深く行うべきです。いくつかの関数は Lua コードに関する基礎的な仮定を破っています (関数が持つローカルな変数には外部からアクセスできないこと、ユーザーデータのメタテーブルは Lua コードから変更できないこと、Lua プログラムはクラッシュしないことなど)。そのためデバッグライブラリを使うとセキュアなコードがセキュアでなくなる可能性があります。加えていくつかの関数は実行が低速です。</description>
    </item>
    <item>
      <title>レイトレーサーのアーキテクチャについて - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_11_some_architectural_decisions/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_11_some_architectural_decisions/</guid>
      <description>この節ではコードを書かない。現在の私たちは交差点に立っていて、アーキテクチャに関する決断を下さなければならない。混合密度を使ったアプローチを取ると、レイトレーシングでよく使われるシャドウレイが使えなくなる。一方で光源に限らずドアの下の明るい隙間や窓といった明るくなると思われる場所を自由にサンプルできるので、私はこのアプローチを気に入っている。しかし多くのレイトレーサーは処理を分け、ライトに向かう一つ以上の終端レイ (シャドウレイ) と物体表面の反射分布に従う一つのレイを生成する。シャドウレイを選択して収束の速さのためにシーンの柔軟性を犠牲にすることもできた。これは個人的な好みである。</description>
    </item>
    <item>
      <title>新しい機能を全て使ったシーン - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_10_a_acesne_testing_all_new_features/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_10_a_acesne_testing_all_new_features/</guid>
      <description>全ての機能を一つのシーンにまとめよう。さらに全体に広がる薄い霧と表面下反射 (クリアコート層) を持つ青い球も追加する (表面下反射は直接実装していないが、拡散マテリアルを誘電体マテリアルで包んだものが表面下反射を起こすマテリアルに等しい)。このレンダラの最大の制限はシャドウレイがないことだが、これと引き換えに集光模様と表面下散乱が手に入っている。これは諸刃の剣の設計判断だ。 hittable_list final_scene() { hittable_list boxes1; auto ground = make_shared&amp;lt;lambertian&amp;gt;(make_shared&amp;lt;solid_color&amp;gt;(0.48, 0.83, 0.53)); const int boxes_per_side = 20; for (int i = 0; i &amp;lt; boxes_per_side; i++) { for (int j = 0; j &amp;lt; boxes_per_side; j++) { auto w = 100.0; auto x0 = -1000.0 + i*w; auto z0 = -1000.0 + j*w; auto y0 = 0.0; auto x1 = x0 + w; auto y1 = random_double(1,101); auto z1 = z0 + w; boxes1.add(make_shared&amp;lt;box&amp;gt;(point3(x0,y0,z0), point3(x1,y1,z1), ground)); } } hittable_list objects; objects.add(make_shared&amp;lt;bvh_node&amp;gt;(boxes1, 0, 1)); auto light = make_shared&amp;lt;diffuse_light&amp;gt;(make_shared&amp;lt;solid_color&amp;gt;(7, 7, 7)); objects.add(make_shared&amp;lt;xz_rect&amp;gt;(123, 423, 147, 412, 554, light)); auto center1 = point3(400, 400, 200); auto center2 = center1 + vec3(30,0,0); auto moving_sphere_material = make_shared&amp;lt;lambertian&amp;gt;(make_shared&amp;lt;solid_color&amp;gt;(0.7, 0.3, 0.1)); objects.add(make_shared&amp;lt;moving_sphere&amp;gt;( center1, center2, 0, 1, 50, moving_sphere_material)); objects.add(make_shared&amp;lt;sphere&amp;gt;( point3(260, 150, 45), 50, make_shared&amp;lt;dielectric&amp;gt;(1.5))); objects.add(make_shared&amp;lt;sphere&amp;gt;( point3(0, 150, 145), 50, make_shared&amp;lt;metal&amp;gt;(color(0.8, 0.8, 0.9), 10.0))); auto boundary = make_shared&amp;lt;sphere&amp;gt;( point3(360,150,145), 70, make_shared&amp;lt;dielectric&amp;gt;(1.5)); objects.add(boundary); objects.add(make_shared&amp;lt;constant_medium&amp;gt;( boundary, 0.2, make_shared&amp;lt;solid_color&amp;gt;(0.2, 0.4, 0.9))); boundary = make_shared&amp;lt;sphere&amp;gt;( point3(0, 0, 0), 5000, make_shared&amp;lt;dielectric&amp;gt;(1.5)); objects.add(make_shared&amp;lt;constant_medium&amp;gt;( boundary, .0001, make_shared&amp;lt;solid_color&amp;gt;(1,1,1))); auto emat = make_shared&amp;lt;lambertian&amp;gt;( make_shared&amp;lt;image_texture&amp;gt;(&amp;#34;earthmap.jpg&amp;#34;)); objects.add(make_shared&amp;lt;sphere&amp;gt;(point3(400,200,400), 100, emat)); auto pertext = make_shared&amp;lt;noise_texture&amp;gt;(0.1); objects.add(make_shared&amp;lt;sphere&amp;gt;( point3(220,280,300), 80, make_shared&amp;lt;lambertian&amp;gt;(pertext))); hittable_list boxes2; auto white = make_shared&amp;lt;lambertian&amp;gt;(make_shared&amp;lt;solid_color&amp;gt;(.73, .73, .73)); int ns = 1000; for (int j = 0; j &amp;lt; ns; j++) { boxes2.add(make_shared&amp;lt;sphere&amp;gt;(point3::random(0,165), 10, white)); } objects.add(make_shared&amp;lt;translate&amp;gt;( make_shared&amp;lt;rotate_y&amp;gt;( make_shared&amp;lt;bvh_node&amp;gt;(boxes2, 0.0, 1.0), 15), vec3(-100,270,395) ) ); return objects; } リスト 2.69 [main.cc] 最後のシーン 1 ピクセルごとに 10{,}000 レイを放てば次の画像が得られる:</description>
    </item>
    <item>
      <title>誘電体マテリアル - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_10_dielectrics_material/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_10_dielectrics_material/</guid>
      <description>水・ガラス・ダイアモンドといった透明な材質を誘電体 (dielectric) と呼ぶ。こういった物体に衝突したレイは反射レイと屈折レイ (透過レイ) に分かれる。このレイトレーサーでは衝突ごとに反射と屈折をランダムに選び、反射レイと屈折レイのどちらか一方だけを散乱レイとして生成するものとする。 屈折 屈折レイのデバッグは本当に難しい。次の画像はこの本のために実際に書いたプログラムで得られたものだ。二つのガラス球が配置されたシーンをレンダリングしているのだが、これは正しいだろうか？</description>
    </item>
    <item>
      <title>VIII. 時が進むとき - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/8_when_time_varies/</link>
      <pubDate>Thu, 02 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/8_when_time_varies/</guid>
      <description>微積分において最も重要な問題の一つが、時間を独立変数として時間が変化するに応じて変化する値を考える問題である。時が進むと大きくなる値もあれば、小さくなる値もある。例えば列車が出発地点から進んだ距離は時が進むと大きくなるし、木は年月を経て大きくなる。さて次の問題を考えよう: とある植物は現在 12 インチで、一か月後には 14 インチになる。別の木は現在 12 フィートで、一年後に 14 フィートになる。成長の速度が速いのはどちらだろうか？</description>
    </item>
    <item>
      <title>第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/</guid>
      <description>§196 対数関数 これまでの章で考えた本質的に異なる関数の数というのはそれほど多くない。ここまでに登場した普通の用途で最も重要な関数をあげれば、多項式・有理関数・陽な代数関数・陰な代数関数・三角関数・三角関数の逆関数となる。 しかし数学で重要な関数がこれで全て揃ったとはとても言えない。数学的な知識の範囲は、新しい関数のクラスを一つずつ解析の対象に加えること段階的に拡張されてきた。新しい関数が対象に加わる一般的な理由は、そのとき数学者の注意を引いていた問題がそれまでに知られていた関数では解けないように思えるためである。この考え方は無理数や複素数を最初に導入した議論とよく似ている。こういった数はとある代数方程式がそれまでに認識されていた数では解けなかったために定義されていた。新しい関数を最も数多く生み出している問題の一つが積分であり、次のようにして新しい関数が導入される: とある関数 f(x) の積分をこれまでに知られた関数を使って計算する試みがなされるも、全て失敗する。失敗が何度も繰り返されるにつれ、積分が解けない可能性が現実性を帯びてくる。ときには解けないことが証明されることもあるが、一般的に言ってそういった命題の厳密な証明はもっと後になってから表れる。普通は数学者が十分に納得した段階でその積分は解けないものだとみなし、新しい関数 F(x) をその性質 F&#39;(x) = f(x) で定義してしまう。数学者はこの定義からはじめて F(x) の様々な性質を調べ、その結果として F(x) には既知の関数を有限回組み合わせた関数が持たない性質を持っていることが判明し、最初の積分の問題がどうやっても解けないという仮定が正当化される。この本にもこういった関数は現れている。第六章では次の等式を使って関数 \log x を定義した: \[ \log x = \int \frac{dx}{x} \]</description>
    </item>
    <item>
      <title>§10 実数に対する代数演算 (その 1) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_10_addtion_and_subtraction_with_real_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_10_addtion_and_subtraction_with_real_numbers/</guid>
      <description>続いて、加算などの初等的な代数演算を実数に対して一般的に定義する。 加算: 二つの数 \alpha と \beta の和の定義では、全ての和 c = a + b から得られる (c) と全ての和 C = A + B から得られる (C) という二つのクラスを考える。明らかに c \lt C が常に成り立つ。 ここでも、c にも C にも属さない有理数は最大でも一つである。もしそのような二つの有理数 r,\ s が存在して s の方が大きかったとすると、r と s の両方は任意の c より大きく任意の C より小さい。よって C - c が s - r より大きくなる。一方で \[ C - c = (A - a) + (B - b) \] であり、a,\ b,\ A,\ B は A - a と B - b が好きなだけ小さくなるように取れる。これは明らかに仮定と矛盾する。</description>
    </item>
    <item>
      <title>モバイルネットワーク - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/mobile-network/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/mobile-network/</guid>
      <description>はじめに 過去数年の間に、モバイルセルラーネットワークのパフォーマンスは大きく向上した。その一方でレイテンシの改善は鈍化しつつあるために、多くのモバイルアプリケーションは向上したパフォーマンスの恩恵を完全には得られていない。 レイテンシの問題は長い間モバイルネットワークに付いて回ってきた。近年進歩はあったものの、モバイルネットワークにおけるレイテンシの削減は速度の向上ほどには劇的でない。この格差の結果として、ネットワークトランザクションのパフォーマンスを制限する要因はスループットではなくレイテンシである場合が最も多い。</description>
    </item>
    <item>
      <title>第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/</guid>
      <description>あまりにも遠くを見てはいけない。一度に扱えるのは運命を紡ぐ鎖の一つのリンクだけだ。 ── ウィンストン・チャーチル</description>
    </item>
    <item>
      <title>変数のスコープ - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/variables-and-scoping/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/variables-and-scoping/</guid>
      <description>変数のスコープ ある変数のスコープ (scope) とは、その変数を参照できるコード領域のことです。変数のスコープがあると変数名の衝突を防ぐことができます。スコープの概念に難しいところはありません: 二つの関数が x という引数を持っていたとしても、その二つの x が同じものを指すことがないのはスコープのおかげです。同様に、異なるコードブロックに含まれる同名の変数が異なるものを指す場面は多く存在します。同名の変数が同じものを指す (あるいは指さない) のはいつかを決めるのがスコープ規則であり、この章ではスコープ規則を詳しく見ていきます。</description>
    </item>
    <item>
      <title>11. 約物 - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/punctuation/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/punctuation/</guid>
      <description>この章では約物やくもの (punctuation mark) について簡単に復習します。この章は飛ばしても構いません。 コンマ プログラミング言語は約物に関して厳密な規則を課します。一方英語では、コンマに関する規則は比較的適当です。一つの指針として、読者が文を読んだときに自然に間を置くであろう場所にコンマを置いてください。音楽用語が分かるなら、ピリオドが全休符でコンマは二分休符あるいは四分休符だと考えてください。つまりコンマはピリオドよりも短い間を生みます。例えば次の文を声に出して読むと、just の後に小さな間が生まれるでしょう:</description>
    </item>
    <item>
      <title>PDF の管理方法の整理 - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_12_cleaning_up_pdf_management/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_12_cleaning_up_pdf_management/</guid>
      <description>今の ray_color() 関数には二つの PDF がハードコードされている: ライトの形状が関係する p0() 法線と物体表面の種類が関係する p1() p0() についてはライト (および多くサンプルしたい hittable) に関する情報を ray_color() 関数に渡し、p1() については material に PDF を尋ねるようにできる。さらに鏡面ベクトルの存在は hit 関数か material クラスが答えるようにする。 拡散反射と鏡面反射 ぜひ表現できるようにしておきたいマテリアルの一つが、ニスを塗った木材のような部分的には理想的な鏡面反射をして部分的には拡散反射をするマテリアルである。マテリアルで鏡面反射レイと拡散反射レイの二つを同時に生成するレンダラもある。ただ私は場合分けが好きではないので、マテリアルで反射と拡散をランダムに選ぶようにする。このアプローチでは PDF を慎重に計算しなければならず、さらに拡散と鏡面に応じて ray_color() の処理を切り替える必要がある。幸い拡散の場合には pdf_value() を呼べば PDF を計算できるので、特別な処理はいらない。</description>
    </item>
    <item>
      <title>カメラの移動 - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_11_positionable_camera/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_11_positionable_camera/</guid>
      <description>誘電体と並んでカメラもデバッグが難しい。私はカメラを実装するとき必ずインクリメンタルに進めることにしている。まずは視野角 (field of view, fov) を実装しよう。私たちがレンダリングしている画像は正方形でないから、視野角は垂直または水平方向の角度で指定できる。私は必ず垂直方向の角度で指定する。それから視野角は弧度法で表し、コンストラクタでラジアンに変換する ──この辺は好みの問題だ。 カメラの視野 これまでのプログラムでは、原点にあるカメラから放たれるレイは平面 z = -1 上の点に向かっていた。レイが向かう点が z = -2 のような他の平面上にあったとしても、平面までの距離と平面の高さの比が一定であればレイは変化しない。この平面の高さは下図の h である:</description>
    </item>
    <item>
      <title>謝辞 - 週末レイトレーシング 第二週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_11_acknowledgements/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_2/2_11_acknowledgements/</guid>
      <description>初稿 Dave Hart Jean Buckley ウェブリリース Berna Kabadayı Lorenzo Mancini Lori Whippler Hollasch Ronald Wotzlaw 訂正・改善 Aaryaman Vasishta Andrew Kensler Apoorva Joshi Aras Pranckevičius Becker Ben Kerl Benjamin Summerton Bennett Hardwick Dan Drummond David Chambers David Hart Eric Haines Fabio Sancinetti Filipe Scur Frank He Gerrit Wessendorf Grue Debry Ingo Wald Jason Stone Jean Buckley Joey Cho Lorenzo Mancini Marcus Ottosson Matthew Heimlich Nakata Daisuke Paul Melis Phil Cristensen Ronald Wotzlaw Shaun P. Lee Tatsuya Ogawa Thiago Ize Vahan Sosoyan ZeHao Chen ツール 図の作成に利用した Limnu のチームに感謝する。 このシリーズ1は Morgan McGuire による素晴らしい無料ライブラリ Markdeep を使って執筆された。ブラウザからソースを閲覧すれば、どのように書かれたかを確認できる。 訳注: 英語版のこと。[return]</description>
    </item>
    <item>
      <title>IX. 微分のテクニック - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/9_introducing_a_useful_dodge/</link>
      <pubDate>Sat, 04 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/9_introducing_a_useful_dodge/</guid>
      <description>微分すべき式が複雑すぎて直接には扱えない場合がある。例えば初学者にとって \[ y = (x^{2}+a^{2})^{\frac{3}{2}} \] は上手く扱えない式である。 この式を簡単に微分するテクニックを紹介しよう。x^{2} + a^{2} の部分を適当な記号 (例えば u) で表すと、上述の式は \[ y = u^{\frac{3}{2}} \] となる。この式なら簡単に微分できる: \[ \frac{dy}{du} = \frac{3}{2} u^{\frac{1}{2}} \] 続いて新しい式 \[ u = x^{2} + a^{2} \] を考えよう。これを x に関して微分すると \[ \frac{du}{dx} = 2x \] となる。ここまでくれば、後は \[ \frac{dy}{dx} = \frac{dy}{du} \times \frac{du}{dx} \] を使った簡単な計算によって元の微分が完了する: \[ \begin{aligned} \frac{dy}{dx} &amp;= \frac{3}{2} u^{\frac{1}{2}} \times 2x \\ &amp;= \frac{3}{2} (x^{2} + a^{2})^{\frac{1}{2}} \times 2x \\ &amp;= 3x(x^{2} + a^{2})^{\frac{1}{2}} \end{aligned} \]</description>
    </item>
    <item>
      <title>第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/</guid>
      <description>§217 複素数の関数 (その 1) 第三章では複素変数 \[ z = x + iy \] を定義し1、多項式 P(z) などの z を使った式のクラスの簡単な性質を考察した。こういった式を z の関数とみなすのが自然であり、実際多項式 P(z) と Q(z) に対する P(z)/Q(z) は「有理関数」と説明されていた。しかし z の関数の一般的な定義は与えていない。 複素変数 z の関数を実変数 x の関数と同様に定義すればいいと思うかもしれない。つまり Z が z の関数であることを、z と Z の間に関係が存在して、全てまたは一部の z に対応する Z が一つまたは複数存在することとして定義するのである。しかし詳しく考察すると、この定義からは何も得られないことが分かる。というのも、z が与えられるとき x と y も与えられ、その逆も成り立つ: z に値を割り当てるとは、x と y の組に値を割り当てるのと等しい。つまりこの定義における &#34;z の関数&#34; は 二つの実変数 \bm{x} と \bm{y} に関する複素関数 \[ f(x, y) + ig(x, y) \] と同じになる。例えば \[ x - iy,\quad xy,\quad |z| = \sqrt{x^{2} + y^{2}},\quad \arg z = \arctan \frac{y}{x} \] はどれも &#34;z の関数&#34; となる。この定義に何も問題はないものの、新しい概念を全く定義しておらず、不毛と言える。よって &#34;複素変数 z の関数&#34; という言葉をもっと制限された意味で使うのが望ましい。つまりこの言葉は二つの実変数 x,\ y の複素関数からなる一般的なクラスではなく、その一部である特別なクラスを表し、そのクラスに含まれる式は何らかの制限を受けるべきである。しかしこの関数の選び方あるいは特別なクラスに選ばれた関数が持つ性質を説明しようとすると、本書の範囲を超えてしまう。そのため一般的な定義は与えずに、直接的に定義される特殊な関数だけをこれから考えることにする。</description>
    </item>
    <item>
      <title>§11 実数に対する代数演算 (その 2) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_11_multiplication_and_division_with_real_numbers/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_11_multiplication_and_division_with_real_numbers/</guid>
      <description>乗算: 乗算では最初に (0 を含んだ) 正の数だけを考え、§4–§7 で扱った正の有理数からなる切断に戻ると簡単になる。(c) を (ab)、(C) を (AB) とすれば加算と本質的に同じ道をたどれる。議論が唯一異なるのが、最大でも一つの例外を除いた全ての有理数が c または C に属することを示す部分である。a,\ A,\ b,\ B を C - c が好きなだけ小さくなるように選べることを示すこの部分では、次の等式を使う: \[ C - c = AB - ab = (A - a)B + a(B - b) \] そして負の数を定義に含めるために、正の数 \alpha と \beta に対して次のように定義する: \[ (-\alpha)\beta = -\alpha\beta,\quad \alpha(-\beta) = -\alpha\beta,\quad (-\alpha)(-\beta) = \alpha\beta \]</description>
    </item>
    <item>
      <title>Warp - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/warp/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/warp/</guid>
      <description>Warp は純粋関数型プログラミング言語 Haskell で書かれた高パフォーマンス HTTP サーバーライブラリである。ウェブアプリケーションフレームワーク Yesod と HTTP サーバー mighty は両方とも Warp を利用する。私たちが行ったスループットベンチマークによると、mighty は nginx に相当するパフォーマンスを提供する。本章では Warp のアーキテクチャを概観し、そのパフォーマンスを達成するために必要だったことを説明する。Warp は Linux, 様々な BSD, Mac OS, Windows といった多くのプラットフォームで動作するものの、説明を簡単にするため、ここからは Linux で実行される Warp を想定して話を進める。</description>
    </item>
    <item>
      <title>問題: ネットワークへの接続 - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/problem/</guid>
      <description>第 1 章では、ネットワークがノードを相互接続するリンクから構成されることを見た。ノードを相互接続するときに直面する基礎的な問題の一つは「どのように二つのノードを接続するか」である。また内部の複雑性を公開せずにネットワークを表す「雲」の抽象化も前章で紹介した。ホストを「雲」に接続するという似た問題も解決しなければならない。これは、全てのISP (internet service provider, インターネットサービスプロバイダ) が新しい顧客をネットワークに接続するときに実際に抱える課題である。</description>
    </item>
    <item>
      <title>型 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/types/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/types/</guid>
      <description>型 伝統的に、プログラミング言語の型システムは大きく異なる二つの派閥に分類されます: プログラムに含まれる全ての式に対する型が実行に先立って計算できなければならない静的型システム (static type system) と、実行時に実際の値がプログラムによって計算されるまで型については何も分からない動的型システム (dynamic type system) です。オブジェクト指向を使うとコンパイル時に値の型が正確には決まらないコードを書けるようになるので、静的型付け言語にいくらかの柔軟性がもたらされます。異なる型に対して操作を行うコードが書ける機能を多相性 (polymorphism) と呼びます。古典的な動的型付け言語のコードは全て多相的です: 実行時に型を明示的に確認するときとオブジェクトが演算をサポートしていないときを除けば、任意の値の型は一切制限を受けません。</description>
    </item>
    <item>
      <title>12. Markdown - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/markdown/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/markdown/</guid>
      <description>Markdownマークダウン は軽量マークアップ言語であり、多くのプロの技術者によって技術文書の作成・編集に使われています。Markdown を使えば vi や Emacs といったプレーンテキストエディタで文書を執筆でき、そのときヘッダー・太字・箇条書きといった要素を作成するための特殊記法が利用できます。Markdown でフォーマットされた簡単な技術文書の例を次に示します: ## bash and ksh **bash** closely resembles an older shell named **ksh**. The key *practical* difference between the two shells is as follows: \* More people know bash than ksh, so it is easier to get help for bash problems than ksh problems. このテキストをレンダリングすると次のようになります:</description>
    </item>
    <item>
      <title>これから - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_13_the_rest_of_your_life/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_13_the_rest_of_your_life/</guid>
      <description>この本の目的は物理ベースレンダラで使われるサンプリング手法を実装しながら、そこで使われる数学を一歩ずつ丁寧に説明することだった。ここまで読めたのなら、これまでとは違うたくさんの道を試すことができるだろう。 モンテカルロ法をさらに学びたいなら、メトロポリス法のようなパス空間ベースの手法や双方向パストレーシングを調べるとよい。確率空間は立体角ではなくパス空間に関するものになり、パスは高次元空間における高次元点となる。恐れることはない ──オブジェクトが数字を並べて表現できるとき、数学者は可能な配列全体を空間と呼び、一つの配列を点と呼ぶ。これは数式を見せびらかすためだけにあるのではない。こういった明解な抽象化が理解できれば、コードもまた明快になる。分かりやすい抽象化がプログラミングの全てである！</description>
    </item>
    <item>
      <title>焦点ぼけ - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_12_defocus_blur/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_12_defocus_blur/</guid>
      <description>最後に焦点ぼけ (defocus blur) を実装する。普通はこれを被写体深度差 (depth of field) と呼ぶので、「焦点ぼけ」という言葉は友達とだけ使うようにしよう。 現実のカメラで焦点ぼけが生じるのは、光を集めるために (ピンホールではなく) 大きな穴を使っているためである。この穴をそのまま使うと全ての像がぼやけるが、この穴にレンズを設置すれば特定の距離にある平面上の物体にフォーカスを合わせることができる。言い換えると、この距離にある点から放たれレンズを通る任意のレイは画像センサー上の一点に集まる。</description>
    </item>
    <item>
      <title>X. 微分の幾何学的な意味 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/10_geometrical_meaning_of_fifferentiation/</link>
      <pubDate>Sat, 04 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/10_geometrical_meaning_of_fifferentiation/</guid>
      <description>微分係数の持つ幾何学的な意味を考えると、有用な事実が明らかになる。 まず、x^{2},\ \sqrt{x},\ ax + b といった x の関数は曲線としてプロットできる。この曲線を描く方法は今の学生なら誰でも知っている。 図 7 OX と OY を軸としてプロットしたとある曲線の一部が 図 7 の PQR として表されている。この曲線上の適当な点 Q を取り、Q の横座標と縦座標をそれぞれ x と y とする。この状況では x が変化すると y も変化する。x を小さな値 dx だけ右に移動させれば y も動くが、その変化は上方向であり、大きさは dy という小さな値として表せる (今考えている図中の曲線は x と共に上昇する曲線なためである)。このとき dy と dx の比は二点 Q と T の間における曲線の傾きに近い値だとみなせる。ただ図からも分かるように、実際には Q から T の間で曲線は様々な傾きを持つ。しかし、もし Q と T が非常に近くて曲線の Q から T の部分が事実上直線とみなせるのであれば、比 \dfrac{dy}{dx} は曲線 QT の (唯一の) 傾きに等しいと言うことができる。この部分のどちらの端で作られる直線 QT も曲線とは QT でのみ交わるから、QT が無限に小さいとき直線 QT と曲線の交点は事実上一つだけとなる。すなわちこの直線は曲線の接線 (tangent) である。</description>
    </item>
    <item>
      <title>補遺一 全ての多項式が根を持つことの証明 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/proof_that_every_equation_has_a_root/</link>
      <pubDate>Mon, 02 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/proof_that_every_equation_has_a_root/</guid>
      <description>実数または複素数を係数とする z の多項式 \[ Z = P(z) = \alpha_{0} z^{n} + \alpha_{1} z^{n-1} + \cdots + \alpha_{n} \] を考える。z および Z の値はそれぞれ平面上に表せるから、二つの平面をそれぞれ z 平面および Z 平面と呼ぶ。z が z 平面における閉曲線 \gamma をたどるとき、Z は Z 平面における閉曲線 \Gamma をたどることが分かる。まずは \Gamma が原点を通らないと仮定する。 図 A 図 B 任意の Z は無限個の \arg Z を持ち、それらは 2\pi の倍数だけ離れている。さらに Z が \Gamma 上を動くとき、全ての \arg Z は連続的に変化する1。よって最初の Z に対応する偏角を一つ選び、Z が \Gamma に沿って動くときに連続的に変化する偏角の値を追うことで、\Gamma 上の全ての点に対する特定の \arg Z を選択できる。ここからの議論では &#34;Z の偏角&#34; という言葉および記号 \arg Z をこうして選択した Z の偏角に対して使うことにする。つまり \arg Z は Z の実部 X と虚部 Y の連続な一価関数を表す。</description>
    </item>
    <item>
      <title>§12 実数 \(\sqrt{2}\) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_12_square_root_of_two/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_12_square_root_of_two/</guid>
      <description>前に §4–§5 で個別に考えた無理数に戻ろう。そこでは不等式 x^{2} \lt 2 と x^{2} \gt 2 を使って切断を構築した。この切断はもともと正の有理数だけからなっていたが、後に (§8 で) 全ての有理数からなる切断に置き換えた。こうして定義される切断あるいは実数は \sqrt{2} と表記される。 \sqrt{2} とそれ自身の積として構築されるクラスは、(i) 二乗が 2 より小さい正の有理数 a,\ a&#39; に対する (aa&#39;)、および (ii) 二乗が 2 より大きい正の有理数 A,\ A&#39; に対する (AA&#39;) からなる。これらのクラスは 2 以外の全ての正の有理数を含むので、 \[ (\sqrt{2})^{2} = \sqrt{2}\sqrt{2} = 2 \]</description>
    </item>
    <item>
      <title>khmer - オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/khmer/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/khmer/</guid>
      <description>はじめに バイオインフォマティクスとビッグデータ バイオインフォマティクスの分野は、主に遺伝情報とタンパク質情報の解析と関連付けを通して、地球上の生命が持つ分子メカニクスの理解を促進するツールと解析結果の提供を目指す。ゲノム配列と発現遺伝配列の両方を含む利用可能な遺伝情報は近年ますます増えているので、これまでより効率的で、特定的で、感度が高い解析の重要性も高まっている。 DNA シーケンスでは、化学的および工学的なプロセスが DNA と RNA に含まれる情報を「デジタル化」する。その情報はヌクレオチドごとにアルファベット一文字で記録され、ヌクレオチド鎖は最終的にアルファベットの配列となる。この配列には様々な解析が実行され、どのような要素を構成するか、あるいは他のシーケンスデータとどのように関連するかが調べられる。DNA シーケンスで得られるデータは生物学的進化や発達の研究、遺伝学、そして最近では医学といった分野の基礎となっている。</description>
    </item>
    <item>
      <title>2.1 テクノロジの概観 - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/perspective/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/perspective/</guid>
      <description>本章の最初で示した問題を見ていく前に、「リンク」について肩慣らしをしておいた方がいいだろう。本章には幅広いリンクテクノロジが登場する。リンクが多様な理由の一つが、デバイスをネットワークに接続しようとするユーザーの環境が多様なことだ。 一方の端ではグローバルネットワークを構築するネットワークオペレーターが冷蔵庫サイズのルーター同士をつなぐ数百あるいは数千キロにまたがるリンクを利用し、もう一方の端では典型的なユーザーが自身のコンピューターを既存のインターネットにつなぐ手段としてリンクを利用する。ユーザーが使うリンクはコーヒーショップの無線 Wi-Fi かもしれないし、オフィスあるいは大学内のイーサネットリンクかもしれない。スマートフォンでセルラーネットワークに接続するケースもあれば、ISP が提供する光ファイバーリンクを利用するケースも近年ますます増えている。それ以外の多く人は銅製の電線またはケーブルを利用するだろう。一見こういったリンクには共通点がなさそうに見えるものの、上位のプロトコルスタックにとって有用で信頼性の高い接続を提供するための戦略は幸い共通している。</description>
    </item>
    <item>
      <title>メソッド - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/methods/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/methods/</guid>
      <description>メソッド 関数の章で説明したように、関数とは引数のタプルを返り値に関連付ける (あるいは適切な返り値がなければ例外を送出する) オブジェクトです。概念としては同じ関数や演算であっても、実装が引数の型によって大きく異なることは少なくありません。例えば二つの整数を足す演算と二つの浮動小数点数を足す演算は全くの別物であり、さらに整数と浮動小数点数を足す演算はこのどちらとも異なります。しかし実装は異なるものの、こういった演算は「加算」という単一の一般的な概念で括られます。これに対応して、Julia でこれらの処理は + 関数という単一のオブジェクトで表されます。</description>
    </item>
    <item>
      <title>13. まとめ - テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/summary/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/summary/</guid>
      <description>『テクニカルライティング One』ではテクニカルライティングに関する次の基礎的な事項を説明しました: 用語を一貫して使う。 曖昧な代名詞を避ける。 受動態ではなく能動態を使う。 意味が曖昧な動詞を避け、意味が明確な動詞を使う。 一つの文では一つのことを述べる。 可能なら長い文はリストに書き換える。 必要ない単語を削除する。 順序が重要なときは番号付きリストを使い、順序が関係ないときは箇条書きを使う。 リストを並列に保つ。 番号付きリストの要素は命令形の動詞で始める。 リストや表は適切に紹介してから示す。 段落の中心的な主張を述べる効果的な書き出しを書く。 一つの段落では一つのトピックを述べる。 読者が学ぶ必要があることを見定める。 文書を読者に向ける。 文書の要点を最初にまとめる。 時間が許す限り、テクニカルライティングの追加リソースにも目を通してみてください。</description>
    </item>
    <item>
      <title>次は？ - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_13_whats_next/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_13_whats_next/</guid>
      <description>最後のシーン この本のカバーにある画像を生成しよう ──ランダムな球をたくさん配置する: hittable_list random_scene() { hittable_list world; auto ground_material = make_shared&amp;lt;lambertian&amp;gt;(color(0.5, 0.5, 0.5)); world.add(make_shared&amp;lt;sphere&amp;gt;(point3(0,-1000,0), 1000, ground_material)); for (int a = -11; a &amp;lt; 11; a++) { for (int b = -11; b &amp;lt; 11; b++) { auto choose_mat = random_double(); point3 center(a + 0.9*random_double(), 0.2, b + 0.9*random_double()); if ((center - vec3(4, 0.2, 0)).length() &amp;gt; 0.9) { shared_ptr&amp;lt;material&amp;gt; sphere_material; if (choose_mat &amp;lt; 0.8) { // diffuse auto albedo = color::random() * color::random(); sphere_material = make_shared&amp;lt;lambertian&amp;gt;(albedo); world.add(make_shared&amp;lt;sphere&amp;gt;(center, 0.2, sphere_material)); } else if (choose_mat &amp;lt; 0.95) { // metal auto albedo = color::random(0.5, 1); auto fuzz = random_double(0, 0.5); sphere_material = make_shared&amp;lt;metal&amp;gt;(albedo, fuzz); world.add(make_shared&amp;lt;sphere&amp;gt;(center, 0.2, sphere_material)); } else { // glass sphere_material = make_shared&amp;lt;dielectric&amp;gt;(1.5); world.add(make_shared&amp;lt;sphere&amp;gt;(center, 0.2, sphere_material)); } } } } auto material1 = make_shared&amp;lt;dielectric&amp;gt;(1.5); world.add(make_shared&amp;lt;sphere&amp;gt;(point3(0, 1, 0), 1.0, material1)); auto material2 = make_shared&amp;lt;lambertian&amp;gt;(color(0.4, 0.2, 0.1)); world.add(make_shared&amp;lt;sphere&amp;gt;(point3(-4, 1, 0), 1.0, material2)); auto material3 = make_shared&amp;lt;metal&amp;gt;(color(0.7, 0.6, 0.5), 0.0); world.add(make_shared&amp;lt;sphere&amp;gt;(point3(4, 1, 0), 1.0, material3)); return world; } int main() { ... auto world = random_scene(); point3 lookfrom(13,2,3); point3 lookat(0,0,0); vec3 vup(0,1,0); auto dist_to_focus = 10.0; auto aperture = 0.1; camera cam(lookfrom, lookat, vup, 20, aspect_ratio, aperture, dist_to_focus); ... } リスト 1.67 [main.cc] 最後のシーン 次の画像が得られる: 図 1.39: 最後のシーン ガラス球に影が落ちておらず浮いて見えることに気が付いたかもしれない。これはバグではない ──ガラス球を日常生活で目にすることはあまりないと思うが、実際に見ると変な感じがする。特に曇りの日に見ると、本当に浮かんで見える。ガラス球と大きな球に挟まれる点に達したレイは上にあるガラス球に遮られることなく空に到達できるので、ガラス球の下に影はできない。</description>
    </item>
    <item>
      <title>謝辞 - 週末レイトレーシング 第一週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_14_acknowledgements/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_1/1_14_acknowledgements/</guid>
      <description>初稿 Dave Hart Jean Buckley ウェブリリース Berna Kabadayı Lorenzo Mancini Lori Whippler Hollasch Ronald Wotzlaw 訂正・改善 Aaryaman Vasishta Andrew Kensler Apoorva Joshi Aras Pranckevičius Becker Ben Kerl Benjamin Summerton Bennett Hardwick Dan Drummond David Chambers David Hart Eric Haines Fabio Sancinetti Filipe Scur Frank He Gerrit Wessendorf Grue Debry Ingo Wald Jason Stone Jean Buckley Joey Cho Lorenzo Mancini Marcus Ottosson Matthew Heimlich Nakata Daisuke Paul Melis Phil Cristensen Ronald Wotzlaw Shaun P. Lee Tatsuya Ogawa Thiago Ize Vahan Sosoyan ZeHao Chen ツール 図の作成に利用した Limnu のチームに感謝する。 このシリーズ1は Morgan McGuire による素晴らしい無料ライブラリ Markdeep を使って執筆された。ブラウザからソースを閲覧すれば、どのように書かれたかを確認できる。 訳注: 英語版のこと。[return]</description>
    </item>
    <item>
      <title>謝辞 - 週末レイトレーシング 第三週 (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_14_acknowledgements/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/week_3/3_14_acknowledgements/</guid>
      <description>初稿 Dave Hart Jean Buckley ウェブリリース Berna Kabadayı Lorenzo Mancini Lori Whippler Hollasch Ronald Wotzlaw 訂正・改善 Aaryaman Vasishta Andrew Kensler Apoorva Joshi Aras Pranckevičius Becker Ben Kerl Benjamin Summerton Bennett Hardwick Dan Drummond David Chambers David Hart Eric Haines Fabio Sancinetti Filipe Scur Frank He Gerrit Wessendorf Grue Debry Ingo Wald Jason Stone Jean Buckley Joey Cho Lorenzo Mancini Marcus Ottosson Matthew Heimlich Nakata Daisuke Paul Melis Phil Cristensen Ronald Wotzlaw Shaun P. Lee Tatsuya Ogawa Thiago Ize Vahan Sosoyan ZeHao Chen ツール 図の作成に利用した Limnu のチームに感謝する。 このシリーズ1は Morgan McGuire による素晴らしい無料ライブラリ Markdeep を使って執筆された。ブラウザからソースを閲覧すれば、どのように書かれたかを確認できる。 訳注: 英語版のこと。[return]</description>
    </item>
    <item>
      <title>XI. 極大値と極小値 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/11_maxima_and_minima/</link>
      <pubDate>Sun, 05 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/11_maxima_and_minima/</guid>
      <description>微分という手続きの重要な応用の一つが、微分対象の関数が極大または極小となる条件の導出である。工学の問題ではコストを最小化する条件や効率を最大化する条件を知りたい場合が多いので、関数が極大または極小となる条件の導出方法は大きな価値を持つ。 最初は次の具体的な例から始めよう: \[ y = x^{2} - 4x + 7 \] いくつかの x の値に対応する y の値を求めれば、この方程式が表す曲線に極小値が存在することが分かる: \[ \begin{array}{c|cccccc} x &amp; 0 &amp; 1 &amp; 2 &amp; 3 &amp; 4 &amp; 5 \\ \hline y &amp; 7 &amp; 4 &amp; 3 &amp; 4 &amp; 7 &amp; 12 \\ \end{array} \]</description>
    </item>
    <item>
      <title>補遺二 二重極限問題について - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/note_on_double_limit_problems/</link>
      <pubDate>Mon, 02 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/note_on_double_limit_problems/</guid>
      <description>第九章と第十章で何度か、初学者を必ず困惑させる種類の問題に遭遇した。実は一般的な形のこの問題は非常に難しく、高等数学の中でも最大級に興味深く重要な問題である。 特殊な場合を考えよう。§213 では -1 \lt x \leq 1 に対する \[ \log(1 + x) = x - \dfrac{1}{2}x^{2} + \dfrac{1}{3}x^{3} - \cdots \] を証明し、そのときには等式 \[ \frac{1}{1 + t} = 1 - t + t^{2} - \cdots \] の 0 から x まで積分を考えた。つまり最初の等式の証明により、等式 \[ \int_{0}^{x} \frac{dt}{1 + t} = \int_{0}^{x} dt - \int_{0}^{x} t\, dt + \int_{0}^{x} t^{2}\, dt - \cdots \] が示された。これを言い換えると、無限級数 \bm{1 - t + t^{2} - \cdots} の和の \bm{0} から \bm{x} までの積分は、各項の \bm{0} から \bm{x} までの積分の和に等しいと証明されたことになる。この事実をさらに言い換えると、0 から \infty までの和を取る操作と 0 から x まで積分する操作は、(-1)^{n}t^{n} に適用されるときには可換である、つまりこの関数に対して二つの操作が適用される順序は意味を持たないことが示されている。</description>
    </item>
    <item>
      <title>§13 二次の不尽根数 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_13_quadratic_surds/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_13_quadratic_surds/</guid>
      <description>有理数の二乗でない正の有理数 a に対して、±\sqrt{a} の形をした実数を純粋な二次の不尽根数 (pure quadratic surd) と呼ぶ。有理数 a と純粋な二次の不尽根数 \sqrt{b} に対して、a ± \sqrt{b} の形をした数を混ざった二次の不尽根数 (mixed quadratic surd) と呼ぶことがある。 二つの実数 a ± \sqrt{b} は次の二次方程式の根である: \[ x^{2} - 2ax + a^{2} - b = 0 \] 逆に p, q が有理数で p^{2} - q \gt 0 なら、二次方程式 x^{2} + 2px + q = 0 は二つの二次の不尽根数 -p ± \sqrt{p^{2} - q} を根に持つ。</description>
    </item>
    <item>
      <title>2.2 符号化 - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/encoding/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/encoding/</guid>
      <description>ノードとリンクをネットワークの有用な構成要素にするための最初のステップは、ノード同士を接続してリンクを通じたビット転送を可能にする方法を理解することである。前節でも触れたように、信号は物理媒体を伝播する。そのため行うべきタスクは、送信側のノードが送信したバイナリデータをリンクが伝達できる信号に符号化し、受信側のノードでその信号を元のバイナリデータに復号する処理である。変調の詳細は無視することにして、「high」と「low」の二つの信号がリンクで利用できると仮定する。実際には、これら二つの信号は銅線ベースの回線における二つの異なる電圧、光ファイバー回線における二つの異なるパワーレベル、あるいは無線伝送における二つの異なる振幅などに対応する。 図 23. 信号発生装置の間を信号が移動し、ネットワークアダプターの間でビットがやり取りされる。 本章で議論する処理の多くはネットワークアダプター (network adaptor) で行われる。ネットワークアダプターはノードとリンクを接続するハードウェアであり、ノードから渡されたビットを信号に符号化して送信し、受信した信号をビットに復号してノードに渡す実際の処理を行う。つまり図 23 に示すように、二つの信号発生装置をつなぐリンクで信号が伝達され、それによってネットワークアダプター間でビットがやり取りされる。</description>
    </item>
    <item>
      <title>コンストラクタ - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/constructors/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/constructors/</guid>
      <description>コンストラクタ コンストラクタ (constructor) は新しいオブジェクト ──具体的には複合型のインスタンス── を構築する関数のことです1。Julia では型オブジェクトがコンストラクタ関数として機能します: 型オブジェクトに引数のタプルを適用すると、自身の新しいインスタンスを返す関数として働きます。コンストラクタは複合型を紹介したときにも少し説明しました。簡単な使い方は次の通りです: julia&amp;gt; struct Foo bar baz end julia&amp;gt; foo = Foo(1, 2) Foo(1, 2) julia&amp;gt; foo.bar 1 julia&amp;gt; foo.baz 2 多くの型ではフィールドの値を指定して新しいオブジェクトを作成できればそれで十分です。しかし一部の型では、合成オブジェクトの作成でそれ以上の処理が必要になります。例えば引数の検査や変形によって不変条件を強制する必要があるかもしれません。また再帰的なデータ構造、特に自己参照的なものは、一度にオブジェクトを構築できず、最初に不完全な形で作成してからプログラムによる書き換えで完全に構築するので、オブジェクトの構築を個別のステップとして定義する必要があります。またフィールドの数より少ないパラメータあるいはフィールドと型の異なるパラメータを使ってオブジェクトを構築できると便利な場合もあります。Julia のオブジェクト構築システムはこういったケースに対応でき、その他にも機能を持ちます。</description>
    </item>
    <item>
      <title>XII. 曲線の曲がり具合 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/12_curvature_of_curves/</link>
      <pubDate>Tue, 07 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/12_curvature_of_curves/</guid>
      <description>微分の反復の話に戻ろう。微分を二回以上行う理由は何だろうか？ 変化する量が位置と時間なら、位置を時間で二回微分すると加速度が得られることは知っている。また関数を曲線として幾何学的に表現した場合には、\dfrac{dy}{dx} は曲線の傾きを意味する。では \dfrac{d^{2} y}{dx^{2}} の幾何学的な意味は何だろうか？ この値は (単位量の x あたりの) 傾きの変化率であり、一言で言えば、曲線の曲がり具合を表す。 図 31 図 32 まず 図 31 のように傾きが一定の直線を考える。この場合 \dfrac{dy}{dx} は定数であり、\dfrac{d\left(\dfrac{dy}{dx}\right)}{dx} = \dfrac{d^{2}y}{dx^{2}} は 0 となる。</description>
    </item>
    <item>
      <title>補遺三 三角関数の理論 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/theory_of_circular_functions/</link>
      <pubDate>Mon, 02 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/theory_of_circular_functions/</guid>
      <description>理解を含めるための練習問題として、三角関数の理論を次の式から構築してみよう1: \[ y = y(x) = \arctan x = \displaystyle\int_{0}^{x} \frac{dt}{1 + t^{2}} \qquad \text{(1)} \quad \text{Df.} \] 等式 \text{(1)} は全ての実数 x に対応する y をただ一つ定める。y は連続で狭義単調増加だから、連続で狭義単調増加な逆関数 x = x(y) が存在する。この逆関数を次のように書く: \[ x = x(y) = \tan y \qquad \text{(2)} \quad \text{Df.} \] \pi を等式 \[ \frac{1}{2}\pi = \displaystyle\int_{0}^{\infty} \frac{dt}{1 + t^{2}} \qquad \text{(3)} \quad \text{Df.} \] で定義すると、関数 \tan y は -\frac{1}{2}\pi \lt y \lt \frac{1}{2}\pi で定義される。 さらに \[ \cos y = \dfrac{1}{\sqrt{1 + x^{2}}},\quad \sin y = \dfrac{x}{\sqrt{1 + x^{2}}} \qquad \text{(4)} \quad \text{Df.} \] と定める。平方根は正の値とする。y が -\frac{1}{2}\pi および \frac{1}{2}\pi のときの \cos y と \sin y の値を関数がその y で連続となるように定義し、最後に [-\frac{1}{2}\pi, \frac{1}{2}\pi] の外側における \cos y と \sin y を \[ \begin{alignedat}{2} \tan(y + \pi) &amp; = &amp; &amp; \tan y,\\ \cos(y + \pi) &amp; = -&amp; &amp; \cos y, \quad \\ \sin(y + \pi) &amp; = -&amp; &amp; \sin y \end{alignedat} \qquad \text{(5)} \] で定義する。</description>
    </item>
    <item>
      <title>§14 二次の不尽根数に関する諸定理 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_14_similarity_of_quadratic_surds/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_14_similarity_of_quadratic_surds/</guid>
      <description>二つの純粋な二次の不尽根数が同じ不尽根数の有理数倍として表せるなら、二つは相似 (similar) であると言う。そうでないなら非相似 (dissimiar) と言う。例えば \[ \sqrt{8} = 2\sqrt{2},\quad \sqrt{\frac{25}{2}} = \frac{5}{2}\sqrt{2} \] だから、二つの純粋な不尽根数 \sqrt{8} と \sqrt{\frac{25}{2}} は相似だと分かる。一方 M と N が共通約数を持たない整数であって両方とも完全平方数でないなら、\sqrt{M} と \sqrt{N} は非相似である。証明は次の通り。もし相似なら \[ \sqrt{M} = \frac{p}{q}\sqrt{\frac{t}{u}},\quad \sqrt{N} = \frac{r}{s}\sqrt{\frac{t}{u}} \] となる。ここで p,q,r,s,t,u は全て整数である。 このとき \sqrt{MN} は有理数であり、さらに 例 2.3 より整数となる。よってある整数 P^{2} があって MN=P^{2} となる。P の因数を a,\ b,\ c,\ \ldots とすれば \[ MN = a^{2\alpha} b^{2\beta} c^{2\gamma}\ \ldots \] と表せる (\alpha,\ \beta,\ \gamma,\ \ldots は正の整数)。このとき MN は a^{2\alpha} で割り切れ、次のどれかが成り立つ: (i) M が a^{2\alpha} で割り切れる (ii) N が a^{2\alpha} で割り切れる (iii) M と N の両方が a で割り切れる。M と N は共通因数を持たないので、最後のケースはあり得ない。この議論は全ての因数 a^{2\alpha},\ b^{2\beta},\ c^{2\gamma},\ \ldots に対して行えるので、M はこの因数のいくつかで割り切れ、N はそれ以外の因数で割り切れる。よって \[ M = P_{1}^{2},\quad N = P_{2}^{2} \] となる。ここで P_{1}^{2} は a^{2\alpha},\ b^{2\beta},\ c^{2\gamma},\ \ldots のいずれかの積で、P_{2}^{2} はそれ以外の積である。したがって M と N は両方とも完全平方数となるが、これは仮定と矛盾する。</description>
    </item>
    <item>
      <title>2.3 フレーム化 - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/framing/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/framing/</guid>
      <description>前節ではビット列をポイントツーポイントリンク越しに ── アダプターからアダプターへと ── 転送する方法を見た。続いて図 26 のようなシナリオを考えよう。第 1 章で説明したように、本書では議論をパケット交換ネットワークに集中させる。パケット交換ネットワークでノード同士が交換するのは単なるビット列ではなくデータのブロックである。このブロックは今考えているレベルではフレーム (frame) と呼ばれ、ノード同士でフレームをやり取りできるようにしているのはネットワークアダプターである。ノード A がノード B にフレームを転送したいと思ったとき、ノード A はメモリ上に存在するフレームの転送を自身のネットワークアダプターに要求する。この要求の結果としてフレームを表すビット列がリンク越しに送信される。その後ノード B のネットワークアダプターはリンクから到着したビット列を収集して B のメモリに格納する。フレームが正確にどのビットから構成されるか ── つまり、フレームがどこで始まってどこで終わるのか ── を認識することがネットワークアダプターにおける主要な課題となる。</description>
    </item>
    <item>
      <title>型の変換と昇格 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/conversion-and-promotion/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/conversion-and-promotion/</guid>
      <description>型の変換と昇格 Julia には数学演算子の引数を共通の型へと昇格 (promote) させるシステムがあります。このシステムは整数と浮動小数点数・数学演算と初等関数・型・メソッドといった章で何度か触れてきました。この章では昇格システムがどのように動作するかを説明し、新しい型や組み込みの数学演算子以外の関数へ適用する方法を示します。 伝統的に、算術演算の引数の昇格に関してプログラミング言語には二つの派閥があります: 組み込みの算術型と演算子に対する自動的な昇格を行う: たいていの言語では、+, -, *, / のような中値算術演算子のオペランドとして組み込みの数値型を使うと自動的に共通の型への昇格が起こって結果が計算されます。C, Java, Perl, Python をはじめとした言語は全て、オペランドの片方が整数である加算 1 + 1.5 を正しく浮動小数点数 2.5 と計算します。こういった昇格システムはプログラマーから見えないよう上手く設計されています: 算術演算を含む式を書くときに昇格が起こっていることをプログラマーが意識する必要はほとんどなく、そのままでは演算を行えない整数と浮動小数点数のような値に対して必須の変換はコンパイラとインタープリタが行います。このため、そういった自動的な変換に関する複雑な規則は全て言語の仕様と実装の一部にならざるを得ません。 自動的な変換を行わない: Ada と ML がこの派閥に属します ──どちらも非常に厳格な静的型付け言語です。これらの言語ではプログラマーが全ての変換を明示的に指定しなければなりません。例えば Ada や ML では 1 + 1.5 と書くとコンパイルエラーとなり、real(1) + 1.5 として加算を行う前に整数 1 を浮動小数点数へ変換しなければなりません。しかし全ての場所で明示的な変換を行う必要があるのは不便であり、Ada にさえある程度の自動的な変換が存在します: 整数リテラルは期待される整数型へ自動的に昇格し、浮動小数点数リテラルも同様に適切な浮動小数点数型に昇格します。 Julia はある意味では「自動的な変換を行わない」方の派閥に属します: 数学演算子は特殊な構文を持った関数に過ぎず、引数が自動的に変換されることはありません。しかし、異なる型を持つ引数に対する数学演算の適用が多相多重ディスパッチの高度な応用の一つに過ぎないことは理解できる思います ──これは Julia の多重ディスパッチと型システムが特に得意とする処理です。</description>
    </item>
    <item>
      <title>XIII. その他の微分テクニック - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/13_other_useful_dodges/</link>
      <pubDate>Fri, 10 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/13_other_useful_dodges/</guid>
      <description>部分分数分解 分数の形をした関数の微分は比較的面倒な操作であり、微分する分数が単純な形でない限り結果は複雑な式となることをこれまでに見た。もし分数を二つ以上のより単純な分数の和に分解できるなら、その単純な分数をそれぞれ微分してから足すことで元の関数の微分を求められる。分解された単純な分数の微分は比較的単純な式となるが、それらの和はもちろん最初の関数をそのまま微分した (複雑な) 式と等しい。つまりこのテクニックを使えば分数の微分を単純な形で簡単に求められる。</description>
    </item>
    <item>
      <title>補遺四 解析学と幾何学における無限 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/infinite_in_analysis_and_geometry/</link>
      <pubDate>Mon, 02 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/infinite_in_analysis_and_geometry/</guid>
      <description>「無限遠にある直線」や「無限遠にある円周上の点」など、解析幾何学における系の中には &#34;無限の&#34; 要素が存在する場合がある。この短い文章の目的は、こういった概念が解析学における極限とは全く関係がないと示すことである。 通常の &#34;デカルト幾何学&#34; (Cartesian geometry) では実数の組 \bm{(x, y)} を点と呼び、どちらかが 0 でない実数 a,\ b を使った線形関係 ax + by + c = 0 を満たす点の集合を直線と呼ぶ。無限の要素は存在せず、二つの直線に共通する点が存在しないことがあり得る。</description>
    </item>
    <item>
      <title>§15 連続体 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_15_arithmetical_continuum/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_15_arithmetical_continuum/</guid>
      <description>全ての実数 (有理数と無理数) の集まりを算術的連続体 (arithmetical continuum) と呼ぶ。 §2 の直線 \Lambda が算術的連続体に含まれる数に対応する点のみからなる1と考えると理解しやすい。線形連続体 (linear continuum) と呼ばれるこの直線上の点の集合は、算術的連続体の分かりやすいイメージとなる。 ここまではいくらかの時間をかけて、いくつかの実数のクラス、例えば有理数や二次の不尽根数が持つ重要な特徴を見てきた。ここでさらに例を示して、そういった非常に特別な個別のクラスが、算術的連続体を構成する無限に多くの数の (大雑把に言って) ほんの一部でしかないことを示す。</description>
    </item>
    <item>
      <title>2.4 誤り検出 - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/error/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/error/</guid>
      <description>第 1 章で議論したように、電気的干渉や熱雑音などが原因でフレームにビット誤りが入り込むことがある。ビット誤りは稀であるものの、訂正処理を行うためにビット誤りを検出する何らかの仕組みが必要になる。その仕組みが無ければ、エンドユーザーは「先ほど正しくコンパイルできた C プログラムがネットワーク越しにコピーしただけで構文エラーが出るようになったのはなぜだ？」と頭を悩ませることになるだろう。 コンピューターシステムで発生するビット誤りに対処するテクニックには、少なくとも 1940 年代から続く長い歴史がある。重要なものにハミング符号 (Hamming code) とリード・ソロモン符号 (Reed-Solomon code) がある。この二つのテクニックはデータを磁気ディスクや磁気コアメモリに保存していた時代にパンチカードリーダーで使うために開発された。本節ではネットワークでよく利用される誤り検出テクニックをいくつか見る。</description>
    </item>
    <item>
      <title>インターフェース - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/interfaces/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/interfaces/</guid>
      <description>インターフェース Julia に多くのパワーと拡張性をもたらしているのが、言語としては規定されていない様々なインターフェースです。いくつかの特定のメソッドを独自の型で実装すれば、実装した機能だけではなく、それらのインターフェースを使って汎用的に書かれた他のメソッドもその型のオブジェクトで使えるようになります。 反復 必須のメソッド 簡単な説明 iterate(iter) 最初の要素と初期状態のタプルを返す。コレクションが空なら nothing を返す。 iterate(iter, state) 次の要素と状態を返す。要素が残っていないなら nothing を返す。 重要なメソッド (省略可能) デフォルトの 定義 簡単な説明 IteratorSize(IterType) HasLength() HasLength(), HasShape{N}(), IsInfinite(), SizeUnknown() のいずれかを返す。 IteratorEltype(IterType) HasEltype() EltypeUnknown(), HasEltype() のいずれかを返す。 eltype(IterType) Any iterate() が返すタプルの第一要素の型を返す。 length(iter) (定義されない) 要素数を (既知なら) 返す。 size(iter, [dim]) (定義されない) 各次元の要素数を (既知なら) 返す。 逐次反復は iterate 関数で実装されます。Julia は反復するオブジェクトを変更せず、反復が状態を持つときは反復するオブジェクトとは別に状態が保持されます。iterate の返り値は次の要素があるならその値と状態のタプルであり、要素が残っていないなら nothing です。状態オブジェクトは次の反復で iterate 関数に戻され、一般に反復オブジェクトごとにプライベートな実装詳細とみなされます。</description>
    </item>
    <item>
      <title>XIV. 真の複利と組織的成長の法則 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/14_on_true_compound_interest_and_the_law_of_organic_growth/</link>
      <pubDate>Mon, 13 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/14_on_true_compound_interest_and_the_law_of_organic_growth/</guid>
      <description>ある量が増加していて、一定期間の増加量がその量自身に比例している場合を考える。これは金利が一定の口座に預けた資金の増え方と似ている: 預けている金額が多ければ多いほど、一定期間における金利も大きくなる。 金利の計算方法は二つある。専門用語で一つは単利 (simple interest) と呼ばれ、もう一つは複利 (compound interest) と呼ばれる。単利では金利の計算に利用される金額がいつでも一定だが、複利ではこの金額が金利で増える。そのため複利の口座に資金を長く預けると金利が増えていく。</description>
    </item>
    <item>
      <title>§16 連続な実数変数 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_16_continuous_real_variable/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_16_continuous_real_variable/</guid>
      <description>「実数」を捉える二つの異なる視点がある。一つは実数を前節で定義した「算術的連続体」という集まりだと考え、もう一つは実数を個別に考える。実数を個別に考えるときは特定の指定された数 (例えば 1,\ -\frac{1}{2},\ \sqrt{2},\ \pi) を念頭に置く場合もあれば、任意の数・不詳の数・とある数 x を念頭に置く場合もある。後者の考え方をするのは、私たちが「x は数だ」「x は長さの単位だ」「x は有理数でも無理数でもあり得る」などと言った場合である。こういった命題における x は連続実数変数 (continuous real variable) と呼ばれ、個別の実数は変数の値 (value) と呼ばれる。 連続でない「変数」もある。全ての実数の集まりではなく、それに含まれる部分的な集まり、例えば有理数の集まりや正の整数の集まりを考える場合がこれに当たる。例えば正の整数の集まりが登場する例としては、任意の (不詳の) 正の整数に関する「n は奇数または偶数だ」のような文がある。ここでは n が変数、それも正の整数変数になり、個別の正の整数がその値となる。</description>
    </item>
    <item>
      <title>2.5 確実な転送 - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/reliable/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/reliable/</guid>
      <description>前節で見たように、フレームが転送中に破損し、CRC といった符号によって誤りが検出されることがある。誤りを訂正できる強力な符号も存在するものの、ネットワークのリンクで発生する可能性のある多数のビット誤りやバースト誤りに対処するにはオーバーヘッドが大きすぎて現実的でないことが多い。また誤り訂正符号が使われる場合 (例えば無線リンク) でも、誤りが多すぎて訂正できない状況は発生する。そのため、破損したフレームの一部は破棄しなければならない。フレームを確実に転送する役目を持つリンクレベルのプロトコルは、どうにかして破棄された (失われた) フレームを復元しなければならない。</description>
    </item>
    <item>
      <title>モジュール - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/modules/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/modules/</guid>
      <description>モジュール Julia のモジュールは他の部分と分離された自由に使えるワークスペースであり、新しいグローバルスコープを作成します。モジュールは module Name ... end を使って構文的に区切られます。モジュールでは他の人が書いたコードとの名前の衝突を気にすることなくトップレベルの定義 (グローバル変数) を利用できます。モジュールでは他のモジュールに含まれる名前のどれを見えるようにする (インポートする) か、自身に含まれる名前のどれをパブリックにする (エクスポートする) かを指定できます。</description>
    </item>
    <item>
      <title>XV. サインとコサインの取り扱い - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/15_how_to_deal_with_sines_and_cosines/</link>
      <pubDate>Thu, 16 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/15_how_to_deal_with_sines_and_cosines/</guid>
      <description>角度はギリシャ文字で表される。本書では角度を表す変数として \theta (シータ) を使う。 関数 \[ y= \sin \theta \] の微分を考えよう。 図 43 調べるべきは \dfrac{d(\sin \theta)}{d \theta} の値である。つまり \theta を変化させたときサインの増分と角度の増分の比を考えて、変化がどちらも無限に小さい場合のこの比を求めたい。図 43 では円の半径が 1 で、高さ y が \sin \theta となっている。\theta が少し (角度の小要素 d \theta) だけ大きくなったとき、\sin \theta も少しだけ大きくなる。y の変位を dy とすれば、新しい高さは y + dy となる。新しい角度は \theta + d \theta だから、これを等式として表せば \[ y + dy = \sin(\theta + d \theta) \] となる。最初の等式を引けば \[ dy = \sin(\theta + d \theta)- \sin \theta \] を得る。</description>
    </item>
    <item>
      <title>§17 実数の切断 (デデキントの定理) - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_17_dedekinds_theorem/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_17_dedekinds_theorem/</guid>
      <description>§4–§7 では有理数の「切断」、すなわち (正の) 有理数を二つのクラス L と R に分割する方法について考えた。L と R には次の性質がある: 考えている数全てが、二つのクラスのどちらか一方に属する。 両方のクラスが要素を持つ。 L に属する任意の数は R に属する任意の数より小さい。 もちろん、全ての実数の集まりにもこの考えを適用できる。この考え方が非常に重要なことが後の章で分かる。 P と Q を互いに矛盾する実数に関する性質と仮定し1、全ての実数が P と Q のどちらかを持つとする。さらに P を満たす任意の数は Q を満たす任意の数より小さいとする。このとき P を 下クラス (lower class) あるいは 左手クラス (left-hand class) L と呼び、Q を 上クラス (upper class) あるいは 右手クラス (right-hand class) R と呼ぶ。</description>
    </item>
    <item>
      <title>2.6 多元接続ネットワーク - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/ethernet/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/ethernet/</guid>
      <description>Xerox の PARC (Palo Alto Research Center, パロアルト研究所) で 1970 年代中ごろに開発されたイーサネット (Ethernet) は、多くの競合テクノロジに打ち勝って現在ローカルエリアネットワークにおける支配的なテクノロジとなった。イーサネットと唯一競合するテクノロジとして無線ネットワーク用の IEEE 802.11 があるものの、イーサネットはキャンパスネットワークやデータセンターで圧倒的によく利用される。イーサネットの裏にある技術には CSMA/CD (Carrier Sense Multiple Access/Collision Detect, 搬送波感知多元接続/衝突検出) という一般的な名前が付いている。</description>
    </item>
    <item>
      <title>ドキュメント - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/documentation/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/documentation/</guid>
      <description>ドキュメント Julia には組み込みのドキュメントシステムがあり、パッケージ開発者とユーザーは関数や型といったオブジェクトにドキュメントを追加できます。このシステムは Julia 0.4 で追加されました。 基本的な構文は簡単です: トップレベルにおいてオブジェクト (関数・マクロ・型・インスタンス) の直前にある任意の文字列がそのオブジェクトのドキュメントと解釈されます (このドキュメントを docstring と呼びます)。docstring とドキュメントされるオブジェクトの間に空行や行コメントは許されないことに注意してください。簡単な例を示します:</description>
    </item>
    <item>
      <title>XVI. 偏微分 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/16_partial_differentiation/</link>
      <pubDate>Fri, 17 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/16_partial_differentiation/</guid>
      <description>独立変数が二つ以上含まれる関数で表される値に遭遇することもある。例えば y が二つの変動する値 u,\ v に依存しているなら、それは数式として \[ y = f(u, v) \] と表せる。 簡単な具体例として \[ y = u \times v \] を考える。微分はどうなるだろうか？ v を定数とみなして u で y を微分すれば \[ dy_v = v\, du \] となり、u を定数とみなして v で y を微分すれば \[ dy_u = u\, dv \] となる。ここで微分記号の右下の添え字は微分の操作中に定数とみなす変数を示している。</description>
    </item>
    <item>
      <title>§18 集積点 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_18_points_of_condensation/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_18_points_of_condensation/</guid>
      <description>実数あるいは実数に対応する直線上の点を集めたもの (定義は問わない) を、数や点の集まり (aggregate) あるいは 集合 (set) と呼ぶ。例えば正の整数の集合や全ての有理点の集合が考えられる。 ここでは議論の都合上、幾何学の言葉を使う1。点集合 S が与えられたとして、任意の点 \xi 取る。\xi は S に属するかもしれないし属さないかもしれない。このとき二つの可能性がある。つまり (i) [\xi - \delta, \xi + \delta] に S に属する点が \xi 以外にない2ように正数 \delta を取れる、(ii) そのような \xi を取れない、の二つである。</description>
    </item>
    <item>
      <title>2.7 無線ネットワーク - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/wireless/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/wireless/</guid>
      <description>無線リンクは有線リンクと共通の特徴を多く持つものの、いくつかの重要な点で異なる。ビット誤りが重大な問題となるのは有線リンクと同様である ── 無線リンクが使われる環境では予測できないノイズが発生しがちなので、ビット誤りはさらに大きな問題となる。また、フレーム化と転送の確実性保証の問題も同様に解決される必要がある。一方で、無線リンクがよく利用される小型携帯デバイス (携帯電話やセンサー) は限られた電力 (小さなバッテリー) しか持たない場合が多いので、有線リンクと異なり無線リンクでは消費電力が大きな問題となる。さらに、無線送信器から最大出力で無線を飛ばしていいわけではない ── 他のデバイスとの干渉を考慮する必要があり、通常はデバイスが発することのできる出力に周波数ごとの規制が存在する。</description>
    </item>
    <item>
      <title>メタプログラミング - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/metaprogramming/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/metaprogramming/</guid>
      <description>メタプログラミング Julia に残る最も大きな Lisp のレガシーがメタプログラミングのサポートです。Lisp と同様、Julia は自身のコードを自身の言語のデータ構造で表現します。Julia 言語のコードは同じ言語から作成・操作できるので、コードを変形・作成するプログラムを書くことができます。メタプログラミングにより追加のビルドステップを必要としない洗練されたコード生成、そして抽象構文木 (AST) のレベルで処理を行う真の Lisp スタイルマクロが可能になります。これに対して、C や C++ のようなプリプロセッサによる &#34;マクロ&#34; システムは文字的な操作と置換をコードのパースと解釈の前に行うだけです。Julia ではデータ型とコードが全て Julia のデータ構造として表現されるので、強力なリフレクションの機能を利用してプログラムの内部構造や型を他のデータと同様に詳しく調べることができます。</description>
    </item>
    <item>
      <title>XVII. 積分 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/17_integration/</link>
      <pubDate>Sat, 18 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/17_integration/</guid>
      <description>\displaystyle \int という摩訶不思議な記号の意味は第一章で説明した。これは上下に伸ばした S であり、「...の和」あるいは「...という条件を満たす値の和」を意味する。\displaystyle \int は同じく和を表す記号 \sum と似ているが、数学の世界では一つ違いがある。\sum は有限の大きさを持つ値を有限個足し合わせた和を表すのに対して、積分の記号 \displaystyle \int は無限に小さい値を無限個足し合わせた和を表す。積分が足し上げる無限に小さい値とは考えている値の小部分であり、例えば \displaystyle \int dy = y や \displaystyle \int dx = x が成り立つ。</description>
    </item>
    <item>
      <title>§19 ワイエルシュトラスの定理 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/1_19_weierstrasss_theorem/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/1_19_weierstrasss_theorem/</guid>
      <description>点集合の一般理論は解析学のより高度な分野で非常に興味深く重要になるが、その多くは本書のような本に含めるには難しすぎる。しかしデデキントの定理から導かれる基礎的な定理が一つあり、これは後で必要になる: 集合 S が無限に多くの点からなり、S の全ての点が区間 [\alpha, \beta] に含まれるなら、その区間の少なくとも一つの点は S の集積点である。 証明を示す。直線 \Lambda を次のようにして二つのクラス L と R に分ける: 点 P が L に属するのは P よりも左に S の点が無限にあるときであり、そうでないとき P は R に含まれる。するとデデキントの定理の (i) と (iii) が満たされる。さらに \alpha は L に含まれ \beta は R に含まれるので、条件 (ii) も満たされる。</description>
    </item>
    <item>
      <title>2.8 アクセスネットワーク - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/access/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/access/</guid>
      <description>家庭、オフィス、学校、そして多くの公共空間からインターネットに接続するときは、イーサネットや Wi-Fi の接続を用意するのに加えて、アクセス (access) あるいはブロードバンド (broadband) と呼ばれるサービスを ISP から購入する必要がある。本節では、このサービスで利用される二つのテクノロジを解説する: FTTH (Fiber to the Home, ファイバー・トゥ・ザ・ホーム) と呼ばれることも多い PON (passive optical network, 受動光ネットワーク) と、携帯デバイスを接続するセルラーネットワーク (cellular network) である。両方の場合でネットワークはイーサネットや Wi-Fi と同じく多元接続であるものの、これから見るようにアクセス調停へのアプローチが大きく異なる。</description>
    </item>
    <item>
      <title>第 1 章 g-h フィルタ - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/g_h_filter/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/g_h_filter/</guid>
      <description>本題に入る前に、Jupyter Notebook の使い方を確認して、SciPy, NumPy, Matplotlib に慣れておいてほしい。これらのパッケージは本書で絶え間なく使われる。はじめにの章に使い方を簡単に示してある。 1.1 直感をつかむための思考実験 体重計が存在しない世界を想像してほしい。ある日、同僚が駆け寄ってきて言うには、彼女は &#34;体重計&#34; を発明したらしい。彼女の説明を聞いたあなたは、さっそくその機械に乗ってみた: 結果は「172 ポンド」。あなたは有頂天になった──生まれて初めて自分の体重を知れたのもそうだが、この機械を世界中の減量クリニックに売ることを想像するだけでドル記号が目の中で踊る！ この発明は素晴らしい！</description>
    </item>
    <item>
      <title>多次元配列 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/arrays/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/arrays/</guid>
      <description>多次元配列 他の多くの技術計算言語と同様に、Julia はファーストクラスの配列実装を提供します。たいていの技術計算言語では配列の実装に多くの手間が割かれ、他のコンテナが割を食っているのが実情です。しかし Julia は配列を特別扱いしません。配列ライブラリはほぼ全てが Julia 自身で書かれており、その性能は他の Julia コードと同様コンパイラに由来します。このため AbstractArray を継承する独自の配列型を定義することもできます。独自の配列型を実装する方法について詳しくは AbstractArray インターフェースのマニュアルを参照してください。</description>
    </item>
    <item>
      <title>XVIII. 微分の逆操作としての積分 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/18_integrating_as_the_reverse_of_differentiating/</link>
      <pubDate>Tue, 21 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/18_integrating_as_the_reverse_of_differentiating/</guid>
      <description>微分という操作を使うと、x の関数 y に対する \dfrac{dy}{dx} を計算できる。 他の数学的操作と同様に、微分にも逆の操作がある。例えば y = x^{4} を微分すると \dfrac{dy}{dx} = 4x^{3} になるので、\dfrac{dy}{dx} = 4x^{3} に微分と逆の操作を行えば y = x^{4} が得られる。ここで興味深いのが、微分すると \dfrac{dy}{dx} = 4x^{3} になる関数は x^{4} の他にも存在し、x^{4} + a や x^{4} + c といった x^{4} に任意の定数を足した関数も全て条件を満たす点である。つまり \dfrac{dy}{dx} から y を求める逆の操作の結果には定数が含まれ、この定数は別の方法で定める必要がある。例えば y = x^{n} なら \dfrac{dy}{dx} = nx^{n-1} が分かるが、\dfrac{dy}{dx} = nx^{n-1} からは y = x^{n} + C が分かる。ここで C が表すのは定まっていない定数であり、0 となる可能性もある。</description>
    </item>
    <item>
      <title>§20 関数という考え方 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_20_idea_of_a_function/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_20_idea_of_a_function/</guid>
      <description>連続実変数 x と y が A_{0}P = x および B_{0}Q = y として幾何学的に表されるとする。A_{0},\ B_{0} は固定されており、それぞれ直線 \Lambda,\ \Mu 上にある。ここで P と Q が好き勝手に動けるわけではなく、二つの点の間に何らかの関係性があって、それが x と y の間の関係として表せるとする。つまり P と x が分かっていれば Q と y も分かる関係、例えば y = x や y = 2x、あるいは y = \frac{1}{2}x や y = x^{2} + 1 があるとする。このとき x の値が y の値を決定する。x と y の間の関係は x を使った y の明示的な式でなくてもよく、与えられた P から Q を得るための幾何学的な作図手順でも構わない。</description>
    </item>
    <item>
      <title>第一章に関するその他の例 - 第一章 実数変数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/1_real_variables/misc_examples/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/1_real_variables/misc_examples/</guid>
      <description>ax + by + cz = 0 が (1) 全ての x,\ y,\ z について、(2) \alpha x + \beta y + \gamma z=0 を満たす全ての x,\ y,\ z について、(3) \alpha x + \beta y + \gamma z=0 と Ax + By + Cz = 0 の両方を満たす任意の x,\ y,\ z について満たされるための条件はそれぞれ何か？ 任意の正の有理数は次の形をした表現をただ一つ持つ: \[ a_{1} + \frac{a_{2}}{1·2} + \cdots + \frac{a_{k}}{1·2·3\cdots k} \] ここで a_{1},\ a_{2},\ \ldots,\ a_{k} は整数であり、次が成り立つ: \[ 0 \leq a_{1},\quad 0 \leq a_{2} \lt 2,\quad 0 \leq a_{3} \lt 3,\quad \ldots,\quad 0 \lt a_{k} \lt k \]</description>
    </item>
    <item>
      <title>視点: エッジへの競争 - 第 2 章 ダイレクトリンク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/direct/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/direct/trend/</guid>
      <description>ソフトウェア化によるネットワークの変革を見ていくにあたって、最も激しい変化を経験しているネットワークであるインターネットに家庭、オフィス、モバイルユーザーを接続するのはアクセスネットワークであることを意識しておくべきである。第 2.8 節で解説した FTTH とセルラーネットワークは現在のところ複雑なハードウェア機器 (例えば OLT, BNG, BBU, EPC) から構築される。こういったデバイスは歴史的にクローズでプロプライエタリであるだけではなく、販売されるときベンターによって多種多様な機能が搭載される。そのためアクセスネットワークを構成するデバイスは高価で、運用が複雑で、変更がゆっくりとしか行えない。</description>
    </item>
    <item>
      <title>欠損値 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/missing/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/missing/</guid>
      <description>欠損値 Julia は統計的な意味での欠損値 (missing value) を表現する方法を提供します。欠損値とは正当な値が理論上は存在するものの観測に失敗したことを表す値です。Missing 型のシングルトンインスタンス missing が欠損値を表します。この missing は SQL の NULL や R の NA と同様であり、多くの場合で振る舞いも同じです。 欠損値の伝播 標準の数学演算子と数学関数は missing を自動的に伝播します。こういった関数のオペランドが不確かだと結果も不確かになるということです。実際のコードを使って説明すると、一般に missing が絡む数学演算は missing となります:</description>
    </item>
    <item>
      <title>XIX. 積分を使った面積の計算 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/19_on_finding_areas_by_integrating/</link>
      <pubDate>Thu, 23 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/19_on_finding_areas_by_integrating/</guid>
      <description>積分の応用の一つに、曲線で囲まれる領域の面積の計算がある。例を使ってこれを説明しよう。 図 52 曲線を AB として、その方程式が分かっているとする。つまりこの曲線の y 座標を表す x の関数が既知だと仮定する。曲線 AB の P から Q の部分を考える。 P からx 軸に垂線 PM を下ろし、同様に Q から垂線 QN を下ろす。さらに OM = x_{1} および ON = x_{2} とする。このとき PQ の下部に領域 PQNM が定まる。問題は領域 \bm{PQNM} の面積の計算である。 この問題を解く鍵は、領域全体を小さな短冊状の小領域に分割することにある。分割された小領域の幅は dx であり、dx を小さく取ればそれだけ x_{1} と x_{2} の間にある小領域の数が増える。このとき領域全体の面積はもちろん小領域の面積の和に等しい。つまり細い小領域の面積を表す式を見つけることができれば、それを積分を使って足し上げることで求めたい面積が計算できる。小領域の一つに注目すると、この領域の端は二つの垂直な直線で、底辺は長さ dx の直線、そして上部は少しだけ曲がった曲線となっている。この領域を左図に示す。その平均の高さを y とすると、底辺の幅は dx より領域の面積は y\, dx となる (dx が十分小さいとき、上部の曲線は直線と見分けがつかなくなる)。幅 dx は好きなだけ小さく取れるので、平均の高さが中間の点の高さと実質等しくなるように dx を取ればよい。すると領域全体の面積を S に対して小領域一つの面積はその一部分 dS だから、 \[ {\footnotesize \text{小領域一つの面積}} = dS = y \, dx \] が成り立つ。全ての小領域を足せば \[ S\ {\footnotesize \text{全体の面積}} = \int dS = \int y\, dx \] となる。</description>
    </item>
    <item>
      <title>§21 関数の図示 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_21_graphical_representation_of_functions/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_21_graphical_representation_of_functions/</guid>
      <description>変数 y が変数 x の関数だとする。この関数が表す x と y の関係を y の関数 x とみなすこともできるが、ここでは前者の視点に立って y を x の関数とみなして話を進める。このとき x を独立変数 (independent variable) と呼び、y を従属変数 (dependent variable) と呼ぶ。関数が表す関係が持つ形式が明らかでないときには、関数が存在するという事実を次の式で表す: \[ y = f(x) \] f(x) ではなく F(x),\ \phi(x),\ \psi(x),\ \ldots を使うこともある。 多くの場合で、関数の性質は次のように図示すると非常に分かりやすくなる。直行する二つの直線 OX,\ OY を両方向に無限に伸ばし、x と y の値をそれぞれ O から OX,\ OY に沿って測った長さで表す。もちろん符号を考慮し、図 6 のように正の方向に矢印を付ける。</description>
    </item>
    <item>
      <title>第 3 章 インターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/internetworking/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/internetworking/</guid>
      <description>自然は ... 長い遠回りをして終端にたどり着くことが多いように思える。 ── ヘルマン・ロッツェ</description>
    </item>
    <item>
      <title>ネットワークとストリーム - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/networking-and-streams/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/networking-and-streams/</guid>
      <description>ネットワークとストリーム Julia は端末・パイプ・TCP ソケットといったストリーム用 IO オブジェクトを扱うための豊富なインターフェースを提供します。このインターフェースはシステムレベルでは非同期的ですが、プログラマーから見ると同期的であり、内部の非同期的な操作をプログラマーが意識する必要は通常ありません。ストリームは Julia の協調的スレッディング (コルーチン) の機能を活用して実現されています。 ストリーム IO 全ての Julia のストリームは最低でも read メソッドと write メソッドを提供します。これらのメソッドの第一引数はストリームです:</description>
    </item>
    <item>
      <title>XX. 積分のテクニック - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/20_dodges_pitfalls_and_triumphs/</link>
      <pubDate>Fri, 24 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/20_dodges_pitfalls_and_triumphs/</guid>
      <description>積分の問題では、積分すべき式を積分が知られた式に変形する部分が最も難しくなることが多い。積分法を扱う ──本格的な── 本には積分の変形方法が山ほど載っている。ここに示すのはそんなテクニックの一部である。 部分積分:これは次の等式を使った積分の計算を表す: \[ \int u\, dx = ux - \int x\, du + C \] これを使えば、積分を直接には求められない場合にも \displaystyle \int x\, du を使って \displaystyle \int u\, dx を求められる場合がある。この等式の証明を示す。積の微分規則から \[ d(ux) = u\, dx + x\, du \] が分かる。これを変形すれば \[ u(dx) = d(ux) - x\, du \] であり、両辺を積分すれば上の等式が得られる。</description>
    </item>
    <item>
      <title>§22 極座標 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_22_polar_coordinates/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_22_polar_coordinates/</guid>
      <description>前節では P の座標の大きさ OM = x と MP = y で P の位置を特定した。OP = r および \angle MOP = \theta として、\theta は (正の方向に測って) 0 から 2\pi だとする。このとき \[ \begin{aligned} x &amp; = r\cos\theta, \quad y &amp; = r\sin\theta, \quad r &amp; = \sqrt{x^{2} + y^{2}}, \quad \cos\theta : \sin\theta : 1 &amp; = x : y : r \end{aligned} \] が成り立ち、r と \theta からも P の位置を決定できると分かる。加えてr は必ず 0 以上となる1。 図 7 P がとある軌跡上を動くなら、r と \theta の間には関係が生まれる。これを r = f(\theta) あるいは \theta = F(r) と表記し、軌跡の極方程式 (polar equation) と呼ぶ。上記の関係を使えば極方程式を (x, y) の方程式から求められる (逆もできる)。</description>
    </item>
    <item>
      <title>問題: ネットワーク同士の接続 - 第 3 章 インターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/internetworking/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/internetworking/problem/</guid>
      <description>これまで見てきたように、少量のノードを接続したり、ラストマイルのリンクを構築したりするためのテクノロジは数多く存在する。しかし地球規模のグローバルなネットワークを構築するにはどうすればよいだろうか？ 単一のイーサネットが相互接続できるホストは最大 1024 台で、ポイントツーポイントリンクが接続できるホストはわずか 2 台に過ぎない。また、無線ネットワークは電波信号が届く距離によって制限される。グローバルなネットワークを構築するには、こういった異なる種類のリンクと多元接続ネットワークを相互接続する手段が必要になる。異なる種類のネットワークを相互接続して地球規模の巨大なネットワークを作るという考え方はインターネットの中心にあるアイデアであり、インターネットワーキング (internetworking) と呼ばれる。</description>
    </item>
    <item>
      <title>並列計算 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/parallel-computing/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/parallel-computing/</guid>
      <description>並列計算 Julia がサポートする並列かつ並行な計算のための機能は大きく三つのカテゴリに分けられます: 非同期なタスク (コルーチン) マルチスレッディング 分散計算 タスクを使うと計算の停止と再開が行えます。例えば IO・イベント処理・生産者-消費者プロセスといったパターンでタスクは利用できます。タスクの同期は wait や fetch で行い、タスク同士の通信は Channel で行います。 マルチスレッディングはタスクを使って実装される機能であり、複数のタスクを複数のスレッドあるいは CPU コアでメモリを共有しながら同時に実行します。</description>
    </item>
    <item>
      <title>XXI. 微分方程式の解法 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/21_finding_some_solutions/</link>
      <pubDate>Fri, 24 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/21_finding_some_solutions/</guid>
      <description>この章ではここまでに登場した積分のテクニックが使った重要な微分方程式の解法をいくつか説明する。 本書をここまで読んで積分が簡単な操作に過ぎないことを理解した初学者は、積分が技法であることに気が付くだろう。他の技法と同じように、積分の技法は集中した練習を長く続けて始めて習得できる。積分を習得したいと望むなら、他の微積分の文献に出てくるような練習問題をとにかく解き続ける他ない。ここに示すのは本格的な理論のごく簡単な導入である。</description>
    </item>
    <item>
      <title>§23 多項式 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_23_polynomials/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_23_polynomials/</guid>
      <description>これからの例を見れば、無限に存在する様々な種類の関数をよりよく理解できるだろう。 多項式: 次の形をした関数を x の多項式 (polynomial) と呼ぶ: \[ a_{0}x^{m} + a_{1}x^{m-1} + \cdots + a_{m} \] ここで a_{0},\ a_{1},\ \ldots,\ a_{m} は定数を表す。もっとも単純な多項式は x のべき乗 y = x,\ x^{2},\ x^{3},\ \ldots,\ x^{m},\ \ldots であり、x^{m} のグラフは m の偶奇によって二つに分かれる。 まず m = 2 の場合を考える。このとき三つの点 (0, 0),\ (1, 1),\ (-1, 1) はグラフ上にある。グラフ上のその他の点は x に特定の値を代入すれば得られる。例えば \[ x = \frac{1}{2},\quad 2,\quad 3,\quad -\frac{1}{2},\quad -2,\quad 3 \quad \] のとき、それぞれ \[ y = \frac{1}{4},\quad 4,\quad 9,\quad \hphantom{-}\frac{1}{4},\quad \hphantom{-}4,\quad 9 \quad \] となる。グラフ上の点をいくつかプロットすれば、グラフ全体が 図 8 のような形をしていると予想できる。グラフ上にあると分かった点を結んで曲線を描き、適当な別の x とそれに対応する y をプロットしてその正確さをテストすれば、新しい点が曲線にとても近いことが分かるだろう (手で書いた分だけ不正確にはなる)。この曲線はもちろん放物線である。</description>
    </item>
    <item>
      <title>3.1 スイッチングの基礎 - 第 3 章 インターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/internetworking/switching/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/internetworking/switching/</guid>
      <description>非常に簡単に言うと、スイッチとはリンクを相互接続してより大きなネットワークを構築するための仕組みと言える。スイッチはいずれかの入力に届いたパケットを一つ以上の出力に転送する多入力多出力デバイスである。そのため、スイッチがあると可能なネットワークの構造にスター型トポロジー (図 56) が加わる。スター型トポロジーには魅力的な特徴がいくつかある: スイッチが持つ入力と出力の個数は固定なので単一のスイッチに接続できるホストの個数は制限されるものの、いくつかのスイッチを相互接続すれば大規模なネットワークを構築できる。</description>
    </item>
    <item>
      <title>非同期プログラミング - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/asynchronous-programming/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/asynchronous-programming/</guid>
      <description>非同期プログラミング プログラムが外界とやり取りをするとき、例えばインターネット越しに他のマシンと通信をするとき、プログラムの処理を前もって予測できない順序で実行しなければならないことがあります。プログラムの途中でファイルをダウンロードするとしましょう。このときはダウンロード操作を開始し、完了するのを待ちながら他の処理を行い、ファイルが利用可能になったらそれを使う処理を行いたいはずです。この種のシナリオをカバーするのが非同期 (asynchronous) プログラミングです。非同期プログラミングは並列 (concurrent) プログラミングとも呼ばれます (概念上は複数の処理が一度に起こるからです)。</description>
    </item>
    <item>
      <title>エピローグとアポローグ - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/epilogue_and_apologue/</link>
      <pubDate>Wed, 29 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/epilogue_and_apologue/</guid>
      <description>本書『かんたん微積分』が職業数学者の手に渡ったとすれば、彼らは (よほど怠惰でない限り) 学者として立ち上がり、この本がどれほどの悪書であるかを騒ぎ立てることだろう。そういった人々が言うところの懐疑的な態度がこの本には全く欠けており、非常に重大で嘆かわしい過ちをいくつも犯している。 第一に、この本は微積分に登場する操作の多くが馬鹿馬鹿しいほどに簡単であることを示している。 第二に、この本は多くの秘密を暴露している。一人の馬鹿にできることは他の馬鹿にもできると読者に示すことで、微積分なるひどく難解な理論を習得したと胸を張っている数学が得意な御仁に頭を下げる理由も大してないのではないかと読者に疑問を持たせている。微積分はこの上なく難しいと思ってもらいたい彼らにしてみれば、真実が暴かれるのは面白くないだろう。</description>
    </item>
    <item>
      <title>§24 有理関数 (その 1) - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_24_rational_functions/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_24_rational_functions/</guid>
      <description>簡単で重要な関数のクラスとしては有理関数 (rational function) が多項式に続く。有理関数は二つの多項式の商であり、一般的には多項式 P(x),\ Q(x) を使って次のように表せる: \[ R(x) = \frac{P(x)}{Q(x)} \] Q(x) が 1 あるいは定数 (x が関係しない式) となる特別なケースでは、R(x) が多項式となる。つまり有理関数は部分クラスとして多項式を含む。定義に関して注意すべき点をあげる: P(x) と Q(x) に共通因数 x + a あるいは x^{p} + ax^{p-1} + bx^{p-2} + \cdots + k がないことを通常は仮定する。つまり共通因数は除算によって全て削除されているとする。</description>
    </item>
    <item>
      <title>3.2 スイッチドイーサネット - 第 3 章 インターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/internetworking/ethernet/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/internetworking/ethernet/</guid>
      <description>前節でスイッチングに関する基本的な考え方を議論したので、続いて具体的なスイッチングテクノロジを見る: 本節ではスイッチドイーサネット (switched Ethernet) を説明する。スイッチドイーサネットの構築に使われるスイッチは L2 スイッチ (L2 switch) と呼ばれ、キャンパスや企業のネットワークで広く用いられている。歴史的に、L2 スイッチは複数のイーサネットセグメントを「橋渡し」して拡張 LAN (extended LAN) を構築するために使われていたので、ブリッジ (bridge) と呼ばれることが多かった。しかし現在では、ほとんどのネットワークはイーサネットをポイントツーポイントリンクとして利用し、イーサネットのポイントツーポイントリンクを L2 スイッチで相互接続することでスイッチドイーサネットを構築している。</description>
    </item>
    <item>
      <title>マルチスレッディング - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/multi-threading/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/multi-threading/</guid>
      <description>マルチスレッディング julialang.org のブログ記事 Announcing composable multi-threaded parallelism in Julia にも Julia のマルチスレッディングに関する機能の解説があります。 Julia で複数のスレッドを使う デフォルトの Julia は一つの実行スレッドを持って起動します。この事実は Threads.nthreads() を呼び出すと確認できます: julia&amp;gt; Threads.nthreads() 1 実行スレッドの個数はコマンドライン引数 -t/--threads または環境変数 JULIA_NUM_THREADS で設定できます。両方とも指定されると -t/--threads が優先されます。 Julia 1.5 コマンドライン引数 -t/--threads を使うには最低でも Julia 1.5 が必要です。それよりも古いバージョンでは環境変数だけが使用できます。</description>
    </item>
    <item>
      <title>§25 有理関数 (その 2) - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_25_graphs_of_rational_functions/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_25_graphs_of_rational_functions/</guid>
      <description>有理関数のグラフの描画では、多項式よりもさらに増して微積分の方法が有用になる。そのためここでは例をほんの少し示すに留める。 例 12 y = 1/x,\ y = 1/x^{2},\ y = 1/x^{3},\ \ldots のグラフを描け。 [最初の二つの関数のグラフを次の図に示す。1/0,\ 1/0^{2},\ \ldots といった表現は意味をなさないので、これらの関数は x = 0 で定義されないことに注意してほしい] 図 11 図 12 y = x + (1/x),\ x - (1/x),\ x^{2} + (1/x^{2}),\ x^{2} - (1/x^{2}),\ ax + (b/x) が通る点を調べよ。正の値、負の値、a,\ b など様々な値を試すこと。</description>
    </item>
    <item>
      <title>3.3 インターネット (IP) - 第 3 章 インターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/internetworking/basic-ip/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/internetworking/basic-ip/</guid>
      <description>前節では、ブリッジ (L2 スイッチ) を用いればそれなりに大きな LAN を構築できるものの、このアプローチはスケーラビリティと不均一性への対処に問題を抱えていることを見た。本節では、スイッチドネットワークのこういった欠点を克服し、それなりの効率のルーティングを持つ大規模で不均一性が高いネットワークを構築する方法をいくつか説明する。本書ではそういったネットワークをインターネットワーク (internetwork) と呼ぶ。真に地球規模なインターネットワークを構築する方法に関する議論は次節で行うことにして、本節では基本的な事項を説明する。まずはインターネットワークという言葉の意味をより深く考えるところから始めよう。</description>
    </item>
    <item>
      <title>マルチプロセッシングと分散計算 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/distributed-computing/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/distributed-computing/</guid>
      <description>マルチプロセッシングと分散計算 分散メモリ並列計算は Distributed モジュールとして実装され、Julia の標準ライブラリに付属します。 多くの現代的なコンピューターは複数の CPU を使って処理を行い、複数のコンピューターが組み合わさってクラスターとなることもあります。複数の CPU のパワーを上手く活用すれば、多くの計算を素早く終わらわせることができます。計算性能に影響を及ぼす主要な因子は二つあります: CPU 自身の計算速度と、CPU からメモリへのアクセス速度です。コンピューターのクラスターでは同じコンピューター (ノード) の RAM に対するアクセスが最も高速なのは自然に理解できると思います。しかし意外にも、典型的なマルチコアのノートパソコンでも同じ問題が起こります: メインメモリとキャッシュではアクセス速度が異なるためです。そのため優れたマルチプロセッシング環境では、特定のメモリ領域をどの CPU が保持するか (メモリのオーナーシップ) を制御できる必要があります。Julia はメッセージパッシングを使ったマルチプロセッシング環境を提供するので、異なるメモリドメインを持つ複数のプロセスでプログラムを同時に実行することが可能です。</description>
    </item>
    <item>
      <title>§26 陽な代数関数 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_26_explicit_algebraical_functions/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_26_explicit_algebraical_functions/</guid>
      <description>次に考える重要な関数のクラスは陽な代数関数 (explicit algebraical function) のクラスである。このクラスは、有理関数を作るのに使った操作に加えて根号を取る操作を x に対して有限回行って得られる関数から構成される。例えば \[ \frac{\sqrt{1 + x} - \sqrt[3]{1 - x}} {\sqrt{1 + x} + \sqrt[3]{1 - x}},\quad \sqrt{x} + \sqrt{x +\sqrt{x}},\quad \left(\frac{x^{2} + x + \sqrt{3}}{x\sqrt[3]{2} - \pi}\right)^{\frac{2}{3}} \] および整数 m,\ n に対する x^{m/n} (= \sqrt[n]{x^{m}}) はどれも陽な代数関数である。 y = \sqrt{x} といった関数の意味に曖昧さがあることを注意しておく。ここまでは \sqrt{2} で 2 の正の平方根を意味してきた。直感的にはこうして \sqrt{x} で正の数 x の正の平方根を表すとした方が自然であり、この場合 \sqrt{x} は x の一価関数となる。ただし \sqrt{x} を正負の根号も表す多価関数とみなした方が便利な場合もある。</description>
    </item>
    <item>
      <title>3.4 ルーティング - 第 3 章 インターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/internetworking/routing/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/internetworking/routing/</guid>
      <description>ここまで本章では、スイッチとルーターがネットワークトポロジーに関する十分な知識を持っており、受け取ったパケットをどのポートから送信すべきかを正しく選択できることを仮定してきた。仮想回線では、ルーティングは接続要求パケットだけで必要になる: それ以降のパケットは接続要求パケットと同じ経路を利用する。IP ネットワークを含むデータグラムネットワークでは、全てのパケットでルーティングが必要になる。いずれの場合でも、スイッチおよびルーターは宛先アドレスを見てそのアドレスにパケットを運ぶために最も適した出力ポートを選択できなくてはならない。ルーティングにおける基礎的な問題は「スイッチとルーターが転送テーブルの情報をどのように収集するか」である。</description>
    </item>
    <item>
      <title>外部プログラムの実行 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/running-external-programs/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/running-external-programs/</guid>
      <description>外部プログラムの実行 Julia はシェル・Perl・Ruby と同様のバックティックを使ったコマンドの記法を採用します: julia&amp;gt; `echo hello` `echo hello` ただしこれはシェル・Perl・Ruby といくつかの点で異なります: コマンドはすぐに実行されず、バックティックはコマンドを表す Cmd オブジェクトを作成します。Cmd オブジェクトは run で実行したり pipeline を使ってパイプで繫いだりできるほか、read と write でコマンドに対して読み書きを行うこともできます。 コマンドを実行するとき、特別な設定をしなければ Julia はコマンドの出力をキャプチャしません。デフォルトだとコマンドの出力は stdout に書き込まれます (libc の system を使ったときと同様です)。 コマンドの実行でシェルは使われません。Julia はコマンドの構文を直接パースし、適切に変数を補間し、シェルと同様のクオート記法を使って単語を区切ります。コマンドは fork と exec を使って julia の直接の子プロセスとして実行されます。 外部プログラムを実行する簡単な例を示します:</description>
    </item>
    <item>
      <title>§27 陰な代数関数 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_27_implicit_algebraical_functions/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_27_implicit_algebraical_functions/</guid>
      <description>もし \[ y = \frac{\sqrt{1 + x} - \sqrt[3]{1 - x}} {\sqrt{1 + x} + \sqrt[3]{1 - x}} \] なら、次の関係が容易に分かる: \[ y = \sqrt{x} + \sqrt{x + \sqrt{x}} \] あるいはもし \[ y = \sqrt{x} + \sqrt{x + \sqrt{x}} \] なら、次が成り立つ: \[ y^{4} - (4y^{2} + 4y + 1)x = 0 \] この二つの方程式は、どれも次の形をしている; \[ y^{m} + R_{1}y^{m-1} + \cdots + R_{m} = 0 \qquad \text{(1)} \] ここで R_{1},\ R_{2},\ \ldots,\ R_{m} は x の有理関数である。y をこれまでの例で考えた関数とすれば、y がこの形の方程式を満たすことは簡単に分かる。さらに任意の陽な代数関数についても同様だろうと自然に予想できる。この予想は正しく、証明も難しくないが、きちんとした証明を書くのに時間は割かないことにする。例を一つ示せば、証明がどのように進むかは理解できるだろう: \[ y = \frac{x + \sqrt{x} + \sqrt{x + \sqrt{x}} + \sqrt[3]{1 + x}} {x - \sqrt{x} + \sqrt{x + \sqrt{x}} - \sqrt[3]{1 + x}} \] とすると、次の式を得る: \[ y = \frac{x + u + v + w} {x - u + v - w}, \] \[ u^{2} = x,\quad v^{2} = x + u,\quad w^{3} = 1 + x \] 求めたい形の方程式を得るには、これらの方程式から u,\ v,\ w を削除すればよい。</description>
    </item>
    <item>
      <title>3.5 ルーティングの実装 - 第 3 章 インターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/internetworking/impl/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/internetworking/impl/</guid>
      <description>ここまではスイッチとルーターが行わなければならないことを説明し、それをどう行うかは説明してこなかった。スイッチあるいはルーターを作る簡単な方法が一つある: 汎用プロセッサを買ってきて、複数のネットワークインターフェースを取り付ければいい。そのデバイスで適切なソフトウェアを実行すれば、インターフェースに届いたパケットに対して本章で説明したスイッチングあるいは転送の処理を実行し、そのパケットを別のインターフェースから送信できる。ソフトウェアスイッチ (software switch) と呼ばれるこの方式は、市販のミッドエンドおよびローエンドのデバイスで用いられることがある1。一方で、ハイエンドのデバイスは通常ハードウェアによる高速化を活用する。そういった実装はハードウェアスイッチ (hardware switch) と呼ばれる。ただし、どちらのアプローチにもハードウェアとソフトウェアの組が当然含まれる。</description>
    </item>
    <item>
      <title>C と Fortran コードの呼び出し - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/calling-c-and-fortran-code/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/calling-c-and-fortran-code/</guid>
      <description>C と Fortran コードの呼び出し ほぼ全てのコードは Julia で書くことができますが、数値計算の分野では C や Fortran で書かれた質の高い成熟したライブラリが多く存在します。こういった既存のコードを簡単に使えるように、Julia は C や Fortran の関数を単純かつ効率的に呼び出すための仕組みを持ちます。Julia は &#34;no boilerplate&#34; 哲学を持ちます: Julia からの外部関数の呼び出しにはグルーコード・コード生成・コンパイルが必要ありません ──さらに対話プロンプトから呼び出すこともできます。適切に ccall 構文を使えば外部関数を呼び出すことができ、この構文の見た目は通常の関数呼び出しと変わりません。</description>
    </item>
    <item>
      <title>§28 超越関数 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_28_transcendental_functions/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_28_transcendental_functions/</guid>
      <description>有理関数でなく代数関数でさえない関数は全て超越関数 (transcendental function) と呼ばれる。否定的に定義されるこの関数のクラスには無限の種類の様々な関数が当然含まれ、その中には単純な関数もあれば重要な関数もある。そういった中で今の私たちが理解できる特に興味深い関数が二種類ある。 三角関数とその逆関数: これは初等三角法で使われるサイン関数とコサイン関数およびそれらの逆関数のことである。読者はこういった関数の基本的な性質を知っているものと仮定する1。</description>
    </item>
    <item>
      <title>視点: どこまでも仮想ネットワーク - 第 3 章 インターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/internetworking/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/internetworking/trend/</guid>
      <description>パケット交換ネットワークが考案されたのとほぼ時を同じくして、仮想回線をはじめとする仮想化 (virtualization) のアイデアが生まれた。しかしネットワークを仮想化するとは正確に何を意味しているのだろうか？ 理解を助ける例として仮想メモリ (virtual memory) を考えよう。仮想メモリは大きくてプライベートなメモリプールという抽象化を提供するが、実際の物理メモリは多くのアプリケーションによって共有され、仮想メモリで見えるようになるプールと比べてはるかに小さい。この抽象化があるおかげで、プログラマーは十分な量なメモリが存在し、他に誰もメモリを使っていないという錯覚の元でプログラムを書けるようになる。一方で「縁の下」ではメモリ管理システムが仮想メモリと物理リソースの対応付けや衝突の回避といった処理を行う。</description>
    </item>
    <item>
      <title>OS 間の差異 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/handling-operating-system-variation/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/handling-operating-system-variation/</guid>
      <description>OS 間の差異 クロスプラットフォームのアプリケーションやライブラリを書くときは、様々な箇所で OS 間の差異を吸収する必要があります。そのような状況で利用できるのが変数 Sys.KERNEL です。Sys モジュールには isunix, islinux, isapple, isbsd, isfreebsd, iswindows といった Sys.KERNEL 変数の利用を簡単にするための関数がいくつかあります。例えば次のように使います: if Sys.iswindows() windows_specific_thing(a) end islinux, isapple, isfreebsd は互いに素な isunix の部分集合であることに注意してください。また @static マクロを使うと、これらの関数を使った条件判定に合致しないコードを静的に隠すことができます。このマクロは以下の例で使われています。</description>
    </item>
    <item>
      <title>§29 その他の超越関数 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_29_other_transcendental_functions/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_29_other_transcendental_functions/</guid>
      <description>三角関数に次いで重要なのが、指数関数と対数関数である。これらの関数は第九章と第十章で取り上げるが、今の私たちには手に余る。また性質が調べられているその他の超越関数、例えば楕円関数・ベッセル関数・ラグランジュ関数・ガンマ関数はどれもこの本の範囲を超える。しかし初等的な関数の中には、理論的な重要性が有理関数・代数関数・三角関数よりも劣るものの、グラフを描くことで関数的な関係の可能性をよりよく理解できるものが存在する。 例 16 x を越えない最大の整数を [x] で表すとする。y = [x] のグラフを 図 15a に示す。太線の左端の点はグラフに含まれるが、右端の点は含まれない。 y = x - [x] (図 15b) 図 15a 図 15b y = \sqrt{x - [x]} (図 15c) y = [x] + \sqrt{x - [x]} (図 15d) 図 15c 図 15d y = (x - [x])^{2},\ y = [x] + (x - [x])^{2} y = [\sqrt{x}],\ y = [x^{2}],\ y = \sqrt{x} - [\sqrt{x}],\ y = x^{2} - [x^{2}],\ y = [1 - x^{2}] y を \bm{x} の最大素因数と定義する (例 10.6)。このとき y は整数の x に対してのみ定義される。もし \[ x = 1,\ 2,\ 3,\ 4,\ 5,\ 6,\ 7,\ 8,\ 9,\ 10,\ 11,\ 12,\ 13,\ \ldots, \] なら \[ y = 1,\ 2,\ 3,\ 2,\ 5,\ 3,\ 7,\ 2,\ 3,\ \hphantom{1} 5,\ 11,\ \hphantom{1} 3,\ 13,\ \ldots\hphantom{,} \] であり、グラフは孤立した点から構成される。</description>
    </item>
    <item>
      <title>第 4 章  高度なインターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/scaling/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/scaling/</guid>
      <description>外から平等に見えたとしても、必ず階層が隠されている。 ── メーソン・クーリー</description>
    </item>
    <item>
      <title>第 2 章 離散ベイズフィルタ - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/dicrete_bayes/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/dicrete_bayes/</guid>
      <description>カルマンフィルタはベイズフィルタと呼ばれるフィルタの区分に属する。たいていの教科書でカルマンフィルタを扱うときは、まずベイズ統計の公式を示し、それをカルマンフィルタの式に変形することで紹介することが多い。しかし、その議論は非常に抽象的であることがほとんどだ。 そういったアプローチでは数学のいくつかの分野に関する非常に深い理解が必要とされ、問題設定や解法を直感的なレベルで理解する仕事の多くは読者に任されている。 これから私はこの話題を異なる方法で解説する。これは Dieter Fox と Sebastian Thrun による著作 Probabilistic Robotics1を大いに参考にしている。彼らは廊下を移動するロボットを使った例でベイズ統計を直感的に説明している──私は犬を使う。犬は好きだし、動きがロボットより予測できないので興味深いフィルタリングの問題が現れる。私が調べた限り、この例が出版された論文に登場したのは Dieter Fox らによる 1999 年の論文2が最初で、その後 2003 年の論文3でさらに完全な例が示されている。Sebastian Thrun は Udacity の Artificial Intelligence for Robotics という素晴らしいコースを担当しており、そこでも同じ定式化が使われている。もし動画を視聴する方が好みなら、本書を離れてこのコースの最初の数講義を視聴しておくのを強く勧める。それから本書に戻ってくれば、ベイズ統計をさらに深く理解できるだろう。</description>
    </item>
    <item>
      <title>環境変数 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/environment-variables/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/environment-variables/</guid>
      <description>環境変数 Julia の設定は様々な環境変数を通して変更できます。環境変数の設定は OS ごとの通常の方法もしくは Julia が提供するポータブルな方法を使って行います。例えば環境変数 JULIA_EDITOR を vim にしたいなら、ENV[&#34;JULIA_EDITOR&#34;] = &#34;vim&#34; を (REPL などで) 実行すれば現在実行中のセッションで、ユーザーのホームディレクトリの ~/.julia/config/startup.jl に同じ内容を書き込めば以降の全てのセッションで設定を変更できます。この環境変数の現在の値は ENV[&#34;JULIA_EDITOR&#34;] を評価すると得られます。</description>
    </item>
    <item>
      <title>§30 一変数方程式の図を使った解法 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_30_graphical_solution_of_equations/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_30_graphical_solution_of_equations/</guid>
      <description>多くの方程式は次の形で表せる: \[ f(x) = \phi(x) \qquad \text{(1)} \] ここで f(x) と \phi(x) はグラフを簡単に描ける関数する。そして \[ y = f(x),\quad y = \phi(x) \] という二つの曲線が点 P で交わりその横座標が \xi なら、\xi は方程式 (1) の根となる。 例 17 二次方程式 \bm{ax^{2} + 2bx + c = 0}: この方程式を視覚的に解く方法はいくつかある。例えばグラフ \[ y = ax + 2b,\quad y = -\frac{c}{x} \] に交点があれば、そこから根が分かる。あるいは次の曲線でも構わない: \[ y = x^{2},\quad y = -\frac{2bx + c}{a} \] しかし最も初等的な方法は、次の円を描く方法だろう: \[ a(x^{2} + y^{2}) + 2bx + c = 0 \] この円は中心 (-b/a, 0) と半径 \{\sqrt{b^{2} - ac}\}/a を持つ。x 軸との交点の横座標が方程式の根となる。</description>
    </item>
    <item>
      <title>問題: 数十億台へのスケール - 第 4 章 高度なインターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/scaling/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/scaling/problem/</guid>
      <description>前章では異なる種類のネットワークがいくつか集まって構成されるインターネットワークを構築する方法を見た。つまり、不均一性 (heterogeneity) の問題に対する対処は完了した。インターネットワークにおけるもう一つの重要な問題 ── そして間違いなくあらゆるネットワークにおける基礎的な問題 ── はスケーリングである。ネットワークのスケーリングという問題を理解するには、インターネットの成長に目を向けるべきだろう。インターネットの規模は三十年にわたって毎年ほぼ倍増しており、この速度の成長から数多くの課題が生まれてきた。 最も重要な問題は数十万のネットワークと数十億のエンドノードを扱えるルーティングシステムの構築である。本章でこれから見ていくように、ルーティングのスケーリングという問題に対処するアプローチの多くは階層性を導入する。階層性はドメインに含まれる複数のエリアという形で導入される。また、ドメインをまたいでルーティングシステムをスケールさせる上でも階層性は利用される。インターネットを現在の規模までスケール可能にしたドメイン間ルーティングプロトコルは BGP (Border Gateway Protocol) である。本章では BGP の動作を解説し、インターネットが成長する中で BGP が直面した課題を考察する。</description>
    </item>
    <item>
      <title>Julia の組み込み - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/embedding/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/embedding/</guid>
      <description>Julia の組み込み C と Fortran コードの呼び出しで見たように、Julia は C で書かれた関数を簡単かつ高速に呼び出せます。しかしときには、この逆が必要となることもあります: C コードからの Julia 関数の呼び出しです。この機能があれば、Julia コードを全て C/C++ で書き直さずとも大きな C/C++ プロジェクトにそのまま統合できるようになります。ほとんど全てプログラミング言語は何らかの方法で C 関数を呼び出せるので、Julia C API を使えばさらに遠くまで言語の橋を伸ばすこともできます (Julia を Python や C# から呼び出すなど)。</description>
    </item>
    <item>
      <title>§31 二変数関数とその図示 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_31_functions_of_two_variables_and_their_graphical_representation/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_31_functions_of_two_variables_and_their_graphical_representation/</guid>
      <description>§20 ではある関係で結ばれる二つの変数を考えた。同様に、ある関係で結ばれた三つの変数 (x, y, z) を考えることもできる。つまり x と y が両方分かれば z も分かるという関係である。このとき z を x と y の二変数関数と呼ぶ。x と y を独立変数 (independent variable) と呼び、z を 従属変数 (dependent variable) と呼ぶ。そして z の値が x と y の値から決定することを次の式で表す: \[ z = f(x, y) \] §20 の内容は必要な変更を加えればこの複雑なケースにも適用できる。 二変数関数を幾何学的に表す方法は一変数関数の場合と基本的に全く変わらない。三次元空間内に OX,\ OY,\ OZ という三つの軸が必要であり、それぞれが他の二つと直行する。点 (a, b, c) はそれぞれ平面 YOZ,\ ZOX,\ XOY から OX,\ OY,\ OZ に平行に測った距離が a,\ b,\ c である点として定義される。もちろん符号を考慮し、OX,\ OY,\ OZ の方向を正とする。座標、軸、原点も同様に定義される。</description>
    </item>
    <item>
      <title>4.1 地球規模のインターネットワーク - 第 4 章 高度なインターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/scaling/global/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/scaling/global/</guid>
      <description>ここまで本書では、不均一なネットワークの集合を接続してインターネットワークを構築する方法、そして IP アドレスが持つ単純な階層性を利用してインターネットワーク内のルーティングをいくらかスケーラブルにする方法を見た。「いくらか」スケーラブルと表現したのは、ここまでに説明したルーティングのモデルでは各ルーターが他の全てのルーターを知る必要はないものの、インターネットワークに接続する全てのネットワークを知る必要はあるためである。現代のインターネットは数十万の (数え方によってはさらに多くの) ネットワークが接続している。前章で議論したルーティングプロトコルはそういった数字にまではスケールしない。本節ではルーティングのスケーラビリティを大きく改善する様々なテクニックを説明する。こういったテクニックによってインターネットは現在の規模まで成長可能になった。</description>
    </item>
    <item>
      <title>コードの読み込み - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/code-loading/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/code-loading/</guid>
      <description>コードの読み込み 情報 この章はパッケージ読み込みの技術的詳細を説明します。パッケージをインストールするには、Julia 組み込みのパッケージマネージャ Pkg を使ってアクティブな環境にパッケージを追加してください。アクティブな環境が持つパッケージを利用するには import X または using X を実行します。こういったコマンドの意味はモジュールの章で説明されています。 定義 Julia にはコードを読み込むメカニズムが二種類あります: コードのインクルード (include(&#34;source.jl&#34;)): 単一のプログラムを複数のソースファイルに分けるためのメカニズムです。include(&#34;source.jl&#34;) という式を評価すると、include の呼び出しが起こったモジュールのグローバルスコープでファイル source.jl の内容が評価されます。include(&#34;source.jl&#34;) を複数回呼び出すと、source.jl の内容は複数回評価されます。インクルードパス source.jl は include の呼び出しが起こったファイルからの相対パスとして解釈されます。このためインクルードを使うとソースツリーの一部分の移動が簡単に行えます。REPL では、インクルードパスは現在の作業ディレクトリ pwd() からの相対パスとして解釈されます。 パッケージの読み込み (import X と using X): このメカニズムはパッケージを読み込みます。パッケージとは再利用可能な独立した Julia コードの集合をモジュールとしてまとめたものであり、そのモジュールはインポートしたモジュールから X という名前で参照できるようになります。同じ Julia セッションで同じパッケージを複数回インポートしても、読み込みは最初のインポートでだけ起こります ──二回目以降のインポートでは初回にインポートされたモジュールに対する参照が返ります。ただし import X は文脈によって異なるパッケージを読み込む可能性があることに注意してください: X はメインプロジェクトに含まれる X という名前のパッケージを表せますが、依存パッケージに含まれる X という名前のパッケージも表せます。詳細は後述します。 コードのインクルードは非常に明快かつ単純です: ソースファイルを呼び出し側の文脈で評価するだけです。パッケージの読み込みはコードのインクルードの上に構築されており、異なる用途で使われます。この章の残りの部分ではパッケージの読み込みの振る舞いとメカニズムに焦点を当てます。</description>
    </item>
    <item>
      <title>§32 平面内の曲線 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_32_curves_in_a_plane/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_32_curves_in_a_plane/</guid>
      <description>ここまでは \[ y = f(x) \qquad \text{(1)} \] という表記で y の値が x から定まることを表現した。この表現が一番自然なのは、y が x の数式として明示的に書ける次のような場合である: \[ y = x^{2},\quad \sin x,\quad a\cos^{2}x + b\sin^{2}x \] しかしこの形で表せない関係、あるいは表せたとしても複雑すぎて手に負えない関係を表す関数を扱わなければならない状況というのは非常に多い。例えば y^{5} - y - x = 0 や x^{5} + y^{5} - ay = 0 では、y を x の陽な代数関数として表現できない。あるいはもし \[ x^{2} + y^{2} + 2Gx + 2Fy+ C = 0 \] であれば、y は明示的に表現できる: \[ y = -F + \sqrt{F^{2} - x^{2} - 2Gx - C} \] しかしそうだとしても、x の関数 y と x との関係は最初の方程式を見た方が分かりやすい。</description>
    </item>
    <item>
      <title>4.2 IP Version 6 - 第 4 章 高度なインターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/scaling/ipv6/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/scaling/ipv6/</guid>
      <description>新しいバージョンの IP が策定された動機は単純である: IP アドレスの枯渇に対処するためだ。CIDR によって IP アドレス空間が消費されるスピードは大きく減少し、インターネットのルーターで必要とされるルーティング情報の増加も抑えられた。しかし、もはや IPv4 を工夫して使うだけでは十分ではない。特に、アドレス空間の利用効率を 100% にするのは事実上不可能なので、インターネットに接続するホストの数が 40 億に達するより前にアドレス空間は使い尽くされる。加えて、仮に 40 億個のアドレスが全て使えたとしても、IP アドレスを割り当てなければならない機器はこれまでのようにコンピューターだけではなく、スマートフォン、テレビ、電化製品、ドローンなどにまで広がっているのは現在明らかである。後から分かった知識を持って考えれば、32 ビットのアドレス空間は非常に狭い。</description>
    </item>
    <item>
      <title>性能測定 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/profile/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/profile/</guid>
      <description>性能測定 Profile モジュールはコードの性能向上を支援するツールを提供します。このツールは実行されているコードの性能を計測し、各行の実行にかかった時間を分かりやすい形で出力します。最適化の対象となる「ボトルネック」を見つけるために最もよく使われます。 Profile は「サンプリングプロファイラ」あるいは「統計的プロファイラ」と呼ばれるものを実装します。これは任意のタスクを実行しているプログラムのバックトレースを定期的に取得することで動作します。バックトレースは現在実行中の関数と行番号、そしてその行にいたるまでの関数の呼び出し履歴を持つので、その時点における実行状態の &#34;スナップショット&#34; と言えます。 もしコードの特定の行を実行するのに多くの時間が費やされているなら、その行は取得されたバックトレースの中で頻繁に表れるはずです。言い換えれば、ある行のコスト ──正確には、その行が呼び出す全ての関数を含めたコスト── は、その行がバックトレースに表れる頻度に比例します。</description>
    </item>
    <item>
      <title>§33 空間内の軌跡 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_33_loci_in_space/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/2_33_loci_in_space/</guid>
      <description>三つの次元を持つ空間では、本質的に異なる二つの軌跡が存在する。最も単純な例はそれぞれ直線と平面である。 直線上を移動する点は一次の自由度しか持たない。点の移動方向は固定され、その位置は固定点からの距離という一つの情報で完全に決定される。例えば直線として第一章で考えた基準直線 \Lambda を取れば、直線上の任意の点の位置は一つの座標 x で決定される。一方で平面上を動く点には二次の自由度があり、その位置の決定には二つの座標が必要となる。 一つの方程式 \[ z = f(x, y) \] が表す軌跡は二つ目のクラスに属する軌跡であり、曲面 (surface) と呼ばれる。この曲面は「曲面」という言葉から常識的に想像される特徴を持っていることもあれば持っていないこともある (簡単で単純なケースであれば普通は持っている)。</description>
    </item>
    <item>
      <title>4.3 IP マルチキャスト - 第 4 章 高度なインターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/scaling/multicast/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/scaling/multicast/</guid>
      <description>イーサネットのような多元接続ネットワークはマルチキャストをハードウェアで実装する。しかし、一部のアプリケーションはインターネットのスケールで効率的に行えるマルチキャストを必要とする。例えばラジオ放送局がインターネットを通じてラジオを放送するとき、その放送局に耳を傾けている全てのホストに同じデータを送信しなければならない。この例では通信が一対多となる。この他にも一対多の通信を行うアプリケーションの例としてニュース、現在株価、ソフトウェアアップデート、テレビ映像の送信が考えられる。インターネットを通じたテレビ映像の送信は IPTV と呼ばれる。</description>
    </item>
    <item>
      <title>スタックトレース - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/stacktraces/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/stacktraces/</guid>
      <description>スタックトレース StackTraces モジュールは人間と機械の両方にとって読みやすい簡単なスタックトレースを提供します。 スタックトレースの表示 スタックトレースの表示で使う中心的な関数は stacktrace です。この関数が返すスタックトレースの例を示します: 6-element Array{Base.StackTraces.StackFrame,1}: top-level scope eval at boot.jl:317 [inlined] eval(::Module, ::Expr) at REPL.jl:5 eval_user_input(::Any, ::REPL.REPLBackend) at REPL.jl:85 macro expansion at REPL.jl:116 [inlined] (::getfield(REPL, Symbol(&amp;#34;##28#29&amp;#34;)){REPL.REPLBackend})() at event.jl:92 stacktrace() は StackTraces.StackFrame のベクトルを返します。Vector{StackFrame} には簡単のため別名 StackTraces.StackTrace が用意されています。この章の実行例では、コードを実行する環境によって異なる出力は [...] で表し、関数をインライン化しないよう必要に応じて関数定義の前に @noinline マクロを付けます:</description>
    </item>
    <item>
      <title>§34 平面上の直線に沿った変位 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_34_displacements/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_34_displacements/</guid>
      <description>ここまでの二つの章で考えてきた「実数」は、様々な視点から捉えることができる。実数を幾何学的な意味を持たない純粋な数と捉えることもできるし、幾何学的な意味を持たせるにしてもその方法は少なくとも三つある。まず実数を長さの表現、つまり第一章で考えた基準直線 \Lambda に沿った長さ A_{0}P とみなす方法がある。次に実数を点の別名、つまり A_{0} からの距離が x である点 P を表すとみなす方法がある。そして実数を \Lambda 上における変位の表現つまり位置の変化量とみなす方法がある。ここでは最後の考え方についてさらに考える。</description>
    </item>
    <item>
      <title>第二章に関するその他の例 - 第二章 実数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/misc_examples/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/2_functions_of_real_variables/misc_examples/</guid>
      <description>y = f(x) = \dfrac{ax + b}{cx - a} なら x = f(y) だと示せ。 全ての x に対して f(x) = f(-x) なら、f(x) を偶関数 (even function) と呼ぶ。全ての x について f(x) = -f(x) なら、f(x) を奇関数 (odd function) と呼ぶ。全ての x に対して定義された任意の関数は x の奇関数と偶関数の和であることを示せ。 [等式 f(x) = \frac{1}{2}\{f(x) + f(-x)\} + \frac{1}{2}\{f(x) - f(-x)\} を使う] 次の関数のグラフを描け: \[ 3\sin x + 4\cos x,\quad \sin\left(\frac{\pi}{\sqrt{2}} \sin x\right) \] (Math. Trip. 1896.) 次の関数のグラフを描け: \[ \sin x(a\cos^{2} x + b\sin^{2} x), \quad \frac{\sin x}{x}(a\cos^{2} x + b\sin^{2} x), \quad \left(\frac{\sin x}{x}\right)^{2} \] 関数 x\left[\dfrac{1}{x}\right],\ \ \dfrac{[x]}{x} のグラフを描け。</description>
    </item>
    <item>
      <title>4.4 MPLS (Multiprotocol Label Switching) - 第 4 章 高度なインターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/scaling/mpls/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/scaling/mpls/</guid>
      <description>IP の拡張に関する議論をさらに続けよう。本節では非常に広く用いられているもののエンドユーザーから見えることはほぼないインターネットアーキテクチャの追加機能を紹介する。その機能は MPLS (Multiprotocol Label Switching) と呼ばれ、仮想回線の特徴とデータグラムの柔軟性と障害耐性を併せ持つ。一方では、MPLS はインターネットプロトコルのデータグラムを基礎とするアーキテクチャと深く関連付いている ── MPLS は IP アドレスと IP ルーティングプロトコルを利用する。しかしもう一方では、MPLS が有効なルーターはパケットの転送を比較的短い固定長のラベルを読むだけで行うことができ、そのラベルはローカルなスコープを持つ: この点は仮想回線と似ている。一見すると正反対に思える二つのテクノロジを合体させていることがおそらくは理由となって、インターネットエンジニアのコミュニティにおける MPLS の評価は分かれている。</description>
    </item>
    <item>
      <title>パフォーマンス Tips - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/performance-tips/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/performance-tips/</guid>
      <description>パフォーマンス Tips 以降の節では、Julia コードを可能な限り高速にするために役立つテクニックを簡単に紹介します。 グローバル変数を避ける グローバル変数の値は好きなタイミングで変更できます。これは、グローバル変数の型が任意の時点で変わり得ることを意味します。このためコンパイラはグローバル変数が含まれるコードを上手く最適化できません。可能な場合は必ず、変数をローカルにするか、関数の引数として渡してください。 パフォーマンスが重要なコード、あるいはベンチマークされるコードは必ず関数の内部にあるべきです。</description>
    </item>
    <item>
      <title>§35 変位の同値性および実数との積 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_35_equality_of_displacements/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_35_equality_of_displacements/</guid>
      <description>前節の設定で P の座標が (\xi, \eta) で Q の座標が (\xi&#39;, \eta&#39;) なら、次の式が直ちに分かる: \[ x = \xi&#39; - \xi,\quad y = \eta&#39; - \eta \] つまり (\xi, \eta) から (\xi&#39;, \eta&#39;) への変位は次のように表記できる: \[ [\xi&#39; - \xi, \eta&#39; - \eta] \] 二つの変位 [x, y],\ [x&#39;, y&#39;] は x = x&#39; かつ y = y&#39; のとき等しく、等しいのはこの場合に限る。よって [x, y] = [x&#39;, y&#39;] が成り立つための必要十分条件が分かる: \[ x = x&#39;,\quad y = y&#39; \qquad \text{(1)} \] \overline{PQ} の逆の変位 \overline{QP} は [\xi - \xi&#39;, \eta - \eta&#39;] であり、次のように定めるのが自然である: \[ \begin{aligned} [\xi - \xi&#39;, \eta - \eta&#39;] &amp; = -[\xi&#39; - \xi, \eta&#39; - \eta],\\ \overline{QP} &amp; = -\overline{PQ} \end{aligned} \] この二つの式が -[\xi&#39; - \xi, \eta&#39; - \eta],\ -\overline{PQ} という表記の意味を定義する。こうして \[ -[x, y] = [-x, -y] \] を定義したなら、続いて符号を問わない任意の実数 \alpha について \[ \alpha[x, y] = [\alpha x, \alpha y] \qquad \text{(2)} \] と自然に定義できる。この定義を使えば、図 19 で OB = -\frac{1}{2}OA とき次が成り立つと分かる: \[ \overline{OB} = -\frac{1}{2}\overline{OA} = -\frac{1}{2}[x, y] = [-\frac{1}{2}x, -\frac{1}{2}y] \]</description>
    </item>
    <item>
      <title>4.5 携帯デバイスのルーティング - 第 4 章 高度なインターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/scaling/mobile-ip/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/scaling/mobile-ip/</guid>
      <description>携帯デバイスによってインターネットのアーキテクチャに新たな課題がもたらされると知っても大きな驚きではないだろう。インターネットはコンピューターが移動できない大きなデバイスであった時代に設計されている。インターネットを設計した人々の頭の中に将来発明される携帯デバイスという概念があった可能性はあるものの、携帯デバイスへの対応が最優先の課題でなかったことは間違いない。もちろん現代ではノート PC やスマートフォンをはじめとする携帯コンピューターがありとあらゆる場所に存在し、ドローンのような新しい形の携帯コンピューターも増加している。本節では携帯デバイスの存在下で生じる課題、およびそれに対処するために現在使われているアプローチを紹介する。</description>
    </item>
    <item>
      <title>ワークフロー Tips - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/workflow-tips/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/workflow-tips/</guid>
      <description>ワークフロー Tips Julia を効率的に使いこなすためのアドバイスをいくつか示します。 REPL を中心としたワークフロー Julia REPL の章でも説明したように、Julia の REPL は対話的なワークフローを助ける豊富な機能を提供します。コマンドラインからの操作を快適にするヒントをここに示します。 基本的なエディタ/REPL ワークフロー 最も基本的な Julia ワークフローはコマンドラインの julia とテキストエディタを組み合わせて使うのものです。典型的なパターンは次の通りです: 開発中のコードを一時的なモジュールに入れる: Tmp.jl といった名前のファイルを作り、次のようなコードを書く</description>
    </item>
    <item>
      <title>§36 変位の加算 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_36_addition_of_displacements/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_36_addition_of_displacements/</guid>
      <description>次の式にはまだ意味が与えられていない: \[ \overline{PQ} + \overline{P&#39;Q&#39;},\quad [x, y] + [x&#39;, y&#39;] \] 常識的に考えて、二つの変位の和はそれらを連続して適用したときの結果を表す変位として定義される必要がある。P&#39;Q&#39; と長さが同じで平行な QQ_{1} を書く。P に対して \overline{PQ} と \overline{P&#39;Q&#39;} を連続して適用すると、P はまず Q に移動しその後 Q_{1} に移動する。よって \overline{PQ} と \overline{P&#39;Q&#39;} の和は \overline{PQ_{1}} として定義するべきと分かる。PQ と長さが同じで平行な OA、および P&#39;Q&#39; と長さが同じで平行な OB を書いて平行四辺形 OACB を完成させれば、次が成り立つ: \[ \overline{PQ} + \overline{P&#39;Q&#39;} = \overline{PQ_{1}} = \overline{OA} + \overline{OB} = \overline{OC} \]</description>
    </item>
    <item>
      <title>視点: クラウドがインターネットを飲み込む - 第 4 章 高度なインターネットワーク - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/scaling/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/scaling/trend/</guid>
      <description>クラウドとインターネットは共生関係にあるシステムである。歴史的には異なるシステムだったものの、現在ではクラウドとインターネットの境界はますます曖昧になっている。教科書的な定義から始めるなら、インターネットは任意の二つのホスト (例えばクライアントのノート PC とリモートのサーバーマシン) にエンドツーエンドの接続を提供し、クラウドは倉庫サイズのデータセンターをいくつも利用し、大量のサーバーマシンに対する電力供給、冷却、運用を低コストで行う。エンドユーザーがインターネット越しに近くのデータセンターに接続するのは、同じ人物がオフィスのリモートマシン用の部屋にあるサーバーに接続するのと全く変わらない。 この説明は Amazon, Microsoft, Google といった商用クラウドプロバイダが始まったころのインターネットとクラウドの関係の説明としては間違っていない。例えば 2009 年ごろの Amazon はクラウド用のデータセンターを二つ持っており、一つはアメリカの東海岸に、もう一つは西海岸にあった。しかし現在では、主要なクラウドプロバイダは数十ものデータセンターを地球上の様々な場所に保有している。その多くがインターネット全体との高速で大容量な接続を提供する IXP (Internet Exchange Point, インターネット相互接続点) の近くに存在することに驚きはしないだろう。世界には 150 箇所以上の IXP が存在する。全てのクラウドプロバイダがそれぞれの IXP の近くに完全なデータセンターを持つわけではない (共用施設である場合も多い) ものの、クラウドの最も頻繁にアクセスされるコンテンツ (例えば最も閲覧される Netflix の映画、YouTube のビデオ、Facebook の写真) が多くの場所に分散されるのはまず間違いない。</description>
    </item>
    <item>
      <title>スタイルガイド - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/style-guide/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/style-guide/</guid>
      <description>スタイルガイド この章では Julia コードが従うべきコーディングスタイルを説明します。こういった規則は絶対的なものではなく、言語に慣れるため、そしていくつかある選択肢の中から選択するときに参考にするための提案にすぎません。 スクリプトではなく関数を書く トップレベルで少しずつコードを書いて処理を行う方法は問題解決の最初の一歩として悪くありませんが、なるべく早くプログラムを関数に分割できないかを考えるべきです。関数はスクリプトより再利用しやすく、テストしやすく、入力と出力に対して何を行うのかが明確です。さらに Julia コンパイラの動作方法の関係で、関数内部のコードはトップレベルのコードよりずっと速く実行できます。</description>
    </item>
    <item>
      <title>§37 変位の乗算 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_37_multiplication_of_displacements/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_37_multiplication_of_displacements/</guid>
      <description>ここまでは二つの変位の積が持つ意味について考えてこなかった。考えた唯一の積は変位と数値の乗算である。式 \[ [x, y] × [x&#39;, y&#39;] \] は意味を持たず、この意味は好きに定義できる。しかし明らかに、定義が少しでも使いものになるためには、二つの変位の積が変位となる必要がある。 積の定義の一例として \[ [x + x&#39;, y + y&#39;] \] が考えられる。言い換えると、二つの変位の積を和と同じものとして定義するのである。しかしこの定義には二つの深刻な欠点がある。第一に、この定義には意味がない。以前から表現できているのものを表現する別の方法をわざわざ追加することになる。第二に、次の理由によりこの定義は不便かつミスリーディングとなる。\alpha が実数なら \alpha [x, y] は [\alpha x, \alpha y] だと定義した。また §34 で見たように、実数 \alpha 自身も変位とみなせる: 軸 OX に沿った変位 [\alpha]、後で定義した記法を使えば変位 [\alpha, 0] である。よって積の定義が次の等式を満たすことが (絶対に必要ではないにせよ) 望ましい: \[ [\alpha, 0] [x, y] = [\alpha x, \alpha y] \] 和と同じ積の定義ではこれが成り立たない。</description>
    </item>
    <item>
      <title>第 5 章 トランスポートプロトコル - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/e2e/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/e2e/</guid>
      <description>勝利は明るく美しい花である。輸送はその根であり、根を持たない花が咲くことは決してない。 ── ウィンストン・チャーチル</description>
    </item>
    <item>
      <title>よくある質問 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/faq/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/faq/</guid>
      <description>よくある質問 一般 Julia という名前には由来となった人物や物事がある？ ありません。 MATLAB/Python/R/... のコードを Julia にコンパイルしないのはなぜ？ 「他の動的言語を書き慣れている人は大勢いて、そういった人々は自身が慣れ親しんだ言語で既にたくさんのコードを書いているわけで、なら MATLAB や Python をフロントエンドとして使って Julia バックエンドで実行すれば (あるいはそういった言語を Julia に &#34;トランスパイル&#34; すれば)、Julia の高速な実行速度を新しい言語を学ぶことなく得られるではありませんか。単純な話です。そうでしょ？」</description>
    </item>
    <item>
      <title>§38 変位の積の正しい定義 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_38_correct_definition_of_multiplication_of_displacements/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_38_correct_definition_of_multiplication_of_displacements/</guid>
      <description>採用すべき正しい定義は次の通りである。\triangle OAB と \triangle OCD を対応する角度がこの順番の相似な三角形とする。このとき \[ OB/OA = OD/OC \] および OB · OC = OA · OD が成り立つ。ここから次に示す変位の乗算と除算の定義が提案される: \[ \overline{OB}/\overline{OA} = \overline{OD}/\overline{OC},\quad \overline{OB} · \overline{OC} = \overline{OA} · \overline{OD} \] 図 22 ここで \[ \overline{OB} = [x, y],\quad \overline{OC} = [x&#39;, y&#39;],\quad \overline{OD} = [X, Y] \] として、A を点 (1, 0) と仮定する。すると \overline{OA} = [1, 0] であり、 \[ \overline{OA} · \overline{OD} = [1, 0] [X, Y] = [X, Y] \] および \[ [x, y] [x&#39;, y&#39;] = [X, Y] \] が成り立つ。つまり積 \overline{OB} · \overline{OC} を \overline{OD} と定義すれば、D は OC 上に \triangle OAB と相似な三角形を作ったときの頂点となる。ただし定義に曖昧さがあり、OC から作れる三角形が (\triangle OCD と \triangle OCD&#39; の) 二つある点に注意が必要となる。ここでは \angle COD と \angle AOB が向きも含めて等しくなるように選ぶ。このとき二つの三角形は向きを含めて相似であると言う。</description>
    </item>
    <item>
      <title>問題: プロセス同士の対話 - 第 5 章 トランスポートプロトコル - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/e2e/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/e2e/problem/</guid>
      <description>単純なイーサネットや無線ネットワークから地球規模のインターネットワークまで、コンピューターの集まりを接続するのに利用できるテクノロジは数多く存在する。コンピューター同士の相互接続が完了すると、ホスト間のパケット転送サービスをプロセス間の通信チャンネルにすることが次の問題となる。これはネットワークアーキテクチャのトランスポート層 (transport layer) が担う役割である。トランスポート層で使われるプロトコル (トランスポートプロトコル) はエンドノードで実行されるアプリケーションプログラムの間の通信をサポートするので、エンドツーエンドプロトコル (end-to-end protocol) とも呼ばれる。</description>
    </item>
    <item>
      <title>他の言語との主な違い - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/noteworthy-differences/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/noteworthy-differences/</guid>
      <description>Julia と他のプログラミング言語との違いを説明します。</description>
    </item>
    <item>
      <title>§39 複素数 (その 1) - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_39_complex_numbers/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_39_complex_numbers/</guid>
      <description>OX に沿った変位 [x] が点 (x) と実数 x に対応したように、平面上の変位 [x, y] にも対応する点 (x, y) と実数の組 \bm{x,\ y} が存在する。 この実数の組 x,\ y を次のように表記すると便利である: \[ x + yi \] こう表記する理由は後で明らかになる。今は x + yi を \bm{[x, y]} の別表記に過ぎないと考えてなくてはならない。x + yi を複素数 (complex number) と呼ぶ。 次に複素数の同一性、加算、乗算を定義する。任意の複素数には対応する変位が一つ存在する。二つの複素数が同一なのは対応する変位が同一なときと定め、二つの複素数の和および積は対応する変位の和または積に対応する複素数と定める。つまり \[ x + yi = x&#39; + y&#39;i \qquad \text{(1)} \] は x = x&#39;,\ y = y&#39; と同値であり、さらに次が成り立つ: \[ (x + yi) + (x&#39; + y&#39;i) = (x + x&#39;) + (y + y&#39;)i \qquad \text{(2)} \] \[ (x + yi) (x&#39; + y&#39;i) = xx&#39; - yy&#39; + (xy&#39; + yx&#39;)i \qquad \text{(3)} \]</description>
    </item>
    <item>
      <title>5.1 単純な逆多重化 (UDP) - 第 5 章 トランスポートプロトコル - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/e2e/udp/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/e2e/udp/</guid>
      <description>可能な中で最も単純なトランスポートプロトコルは、下位のネットワークが提供するホスト間のパケット転送サービスをそのままプロセス間の通信サービスとしたものである。一つのホストで複数のプロセスが実行されることはあるだろうから、このプロトコルは何らかの逆多重化を行ってホストで実行される複数のアプリケーションがネットワークを共有できるようにする必要がある。この要件を除けば、このプロトコルは下位のネットワークによって提供されるベストエフォート型サービスに何の機能も追加しない。こういったプロトコルの例としてインターネットの UDP (User Datagram Protocol) がある。</description>
    </item>
    <item>
      <title>第 3 章 確率・ガウス分布・ベイズの定理 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/gaussians/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/gaussians/</guid>
      <description>前章の最後で離散ベイズフィルタの欠点にいくつか触れた。追跡とフィルタリングの問題の多くで、私たちが望むのは単峰性で連続なフィルタである。つまり、考えている系は浮動小数点数で (連続に) モデル化され、信念から得られる結論は一つだけ (単峰性) であるのが望ましい。例えばフィルタには「航空機は緯度・経度・高度が (12.34,\ -95.54,\ 2389.5) の位置にいます」と言ってほしいのであって、「(1.65,\ -78.01,\ 2100.45) かもしれないし、(34.36,\ -98.23,\ 2543.79) かもしれない」とは言ってほしくない。物体が同じ瞬間に複数の位置に存在するというのは現実世界に対して私たちが抱く直感と合致しない。さらに前にも触れた通り、多峰性のフィルタは計算量がとてつもなく大きくなる可能性がある。加えて当然、推定された位置が複数あるとナビゲーションが不可能になる。</description>
    </item>
    <item>
      <title>Unicode の入力 - マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/unicode-input/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/unicode-input/</guid>
      <description>Unicode の入力 Julia REPL (およびその他の編集環境) で入力を編集しているときに、LaTeX 風の短縮形を使った補完で入力できる Unicode 文字を次の表に示します。REPL ヘルプに記号を (どこかからコピーして) 入力すれば、その記号を打ち込む方法を確認できます。 注意 この表の二列目に文字が表示されなかったり、Julia REPL にレンダリングされる文字と異なる文字が表示される可能性があります。その場合はブラウザや REPL 環境のフォント設定を確認することを強く推奨します。グリフに問題を持つフォントも多くあります。</description>
    </item>
    <item>
      <title>§40 複素数 (その 2) - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_40_factor_theorem_for_roots_of_complex_numbers/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_40_factor_theorem_for_roots_of_complex_numbers/</guid>
      <description>最も重要な実数の性質の一つが、二つの数の積が \bm{0} となるのは少なくとも一方が \bm{0} のときに限るという因数定理 (factor theorem) である。複素数でもこれが正しいことを証明するために、前節の式 (4) に x = 0 と y = 0 を代入する。すると \[ x&#39;\xi - y&#39;\eta = 0,\quad x&#39;\eta + y&#39;\xi = 0 \] が成り立つ。この方程式から \xi = 0,\ \eta = 0 つまり \[ \xi + \eta i = 0 \] が成り立つか、そうでなければ x&#39; = 0 かつ y&#39; = 0 つまり x&#39; + y&#39;i = 0 が成り立つことが分かる。よって x&#39; + y&#39;i と \xi + \eta i のどちらかが 0 でない限り x + yi は 0 にならない。</description>
    </item>
    <item>
      <title>5.2 確実なバイトストリーム (TCP) - 第 5 章 トランスポートプロトコル - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/e2e/tcp/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/e2e/tcp/</guid>
      <description>UDP などの単純な逆多重化プロトコルと対照的に、より高度なトランスポートプロトコルはコネクション指向の確実なバイトストリームサービスを提供する。アプリケーションがデータの損失や入れ替わりを気にする必要がなくなるので、こういったサービスは様々な種類のアプリケーションで有用なことが示されている。この種のプロトコルでおそらく最も広く使われているのはインターネットの TCP (Transmission Control Protocol) であり、加えて TCP は最も注意深く調整が加えられているプロトコルでもある。この二つの事実があるので、本節では TCP を詳しく見ていく。ただし節の最後では TCP 以外に考えられる設計の選択肢も議論する。</description>
    </item>
    <item>
      <title>基本的な関数 - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/base/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/base/</guid>
      <description>基本的な関数 はじめに Julia Base ライブラリには科学計算や数値計算で使われる様々な関数やマクロの中で、他の汎用プログラミング言語でも見られる一般的なものが含まれています。これ以外の機能は日々追加される種々のパッケージから利用できます。このドキュメントでは Julia Base に含まれる関数をトピックごとに分けて示します。 一般的な注意事項を示します: モジュールの関数を使うには、import Module としてモジュールをインポートしてから Module.fn(x) とします。 import Module の代わりに using Module とすると、Module がエクスポートする全ての関数が現在の名前空間にインポートされます。 慣習により、名前の最後に感嘆符 (!) が付く関数は引数を変更します。引数を変更するバージョンと変更しないバージョンの両方を持つ関数もあります (sort! と sort など)。 言語で基礎的な役割を持つ関数 Base.exit ── 関数 exit(code=0) プログラムを与えられた終了コードで終了します。デフォルトの終了コードは 0 であり、これはプログラムが正常に終了したことを示します。対話セッションではキーボードショートカット ^D で exit() を呼び出せます。</description>
    </item>
    <item>
      <title>§41 方程式 \(i \times i  = -1\) - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_41_equation_i_times_i_equals_minus_one/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_41_equation_i_times_i_equals_minus_one/</guid>
      <description>x + 0i を x と表記し、0 + yi を yi と表記すると前に定めた。さらに複素数 1i を i と表記するとしよう。i は OY に沿った単位量の変位に対応する複素数であり、 \[ i^{2} = ii = (0 + 1i) (0 + 1i) = (0 · 0 - 1 · 1) + (0 · 1 + 1 · 0)i = -1 \] つまり (-i)^{2} = -1 が成り立つ。よって i と -i は方程式 x^{2} = -1 を満たす。 ここまでくれば、次のことを容易に納得できるだろう: 複素数の加算と乗算は、\bm{i} を実数を表す記号として実数と同様に扱い、計算結果に含まれる \bm{ii = i^{2}} を \bm{-1} に変えれば計算できる。例えば次のようになる: \[ \begin{aligned} (x + yi) (x&#39; + y&#39;i) &amp; = xx&#39; + xy&#39;i + yx&#39;i + yy&#39;i^{2}\\ &amp; = (xx&#39; - yy&#39;) + (xy&#39;+ yx&#39;)i \end{aligned} \]</description>
    </item>
    <item>
      <title>5.3 遠隔手続き呼び出し - 第 5 章 トランスポートプロトコル - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/e2e/rpc/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/e2e/rpc/</guid>
      <description>クライアントとサーバーとして構造化できるアプリケーションプログラムでよく行われる通信パターンの一つに、リクエストメッセージとリプライメッセージの交換がある。クライアントがリクエストメッセージをサーバーに送信し、それに対してサーバーがリプライメッセージで応答するというものであり、返事を受け取るまでの間クライアントはブロックする (実行を停止する)。こういったメッセージの交換におけるクライアントとサーバーの基本的な対話を図 137 に示す。</description>
    </item>
    <item>
      <title>コレクションとデータ構造 - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/collections/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/collections/</guid>
      <description>コレクションとデータ構造 反復 逐次反復は iterate 関数で実装されます。一般的な for ループ for i in iter # または &amp;#34;for i = iter&amp;#34; # body end は、次のコードへ変換されます: next = iterate(iter) while next !== nothing (i, state) = next # body next = iterate(iter, state) end state オブジェクトは何でもよく、反復可能オブジェクトの型に合わせて適切なものを選択します。反復可能な型を独自に定義する方法について詳しくはマニュアルの反復インターフェースの節を参照してください。 このインターフェースは次の型で完全に実装されます: AbstractRange UnitRange Tuple Number AbstractArray BitSet IdDict Dict WeakKeyDict EachLine AbstractString Set Pair NamedTuple Base.iterate ── 関数 iterate(iter [, state]) -&amp;gt; Union{Nothing, Tuple{Any, Any}} 反復子を進め、次の要素を取得します。要素が残っていないなら nothing を返すべきで、要素が存在するなら次の要素と新しい反復状態からなる二要素のタプルを返すべきです。</description>
    </item>
    <item>
      <title>§42 \(i\) による乗算の幾何学的解釈 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_42_geometric_presentation_of_multiplication_with_i/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_42_geometric_presentation_of_multiplication_with_i/</guid>
      <description>等式 \[ (x + yi)i = -y + xi \] が成り立つから、x + yi が \overline{OP} に対応するとき \angle POQ が正の直角になるよう Q を取ると、(x + yi)i が \overline{OQ} に対応する。言い換えると、複素数 \bm{i} による乗算は変位を直角に回転させる。 この考えに基づいて複素数の理論を構築することもできる。x が OX 方向の変位を表し、i を x を直角に回転させる操作を表すとすれば、量が y の OY 方向の変位を yi と表記することになる。そうすれば x + yi は §37–§40 と同様に自然に定義され、(x + yi)i は x + yi を直角に回転させた変位を表す。さらに (x + yi)x&#39; は xx&#39; + yx&#39;i、(x + yi)y&#39;i は -yy&#39; + xy&#39;i となり、(x + yi) (x&#39; + y&#39;i) はこれらの和として次のように定義されていただろう: \[ xx&#39; - yy&#39; + (xy&#39; + yx&#39;)i \]</description>
    </item>
    <item>
      <title>5.4 リアルタイム通信 (RTP) - 第 5 章 トランスポートプロトコル - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/e2e/rtp/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/e2e/rtp/</guid>
      <description>パケット交換通信が始まったころ、多くのアプリケーションが行うのはファイルの転送だった。しかし早くも 1981 年には、デジタル化された音声といったリアルタイムトラフィックを伝達する実験が開始されている。本書ではアプリケーションに対する「リアルタイム」という言葉を送信したデータが非常に短い時間で転送されることに関して厳しい要件があることを指して使う。リアルタイムアプリケーションの古典的な例として VoIP (Voice over IP) を用いた音声通話がある: 会話を成立させるために許される遅延は非常に短い。これからすぐに見るように、リアルタイムアプリケーションでは本章で議論してきたプロトコルでは満たせない特有の要件がトランスポートプロトコルに対して課される。</description>
    </item>
    <item>
      <title>数学 - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/math/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/math/</guid>
      <description>数学 数学演算子 Base.:- ── メソッド -(x) 単項マイナス演算子です。 例 julia&amp;gt; -1 -1 julia&amp;gt; -(2) -2 julia&amp;gt; -[1 2; 3 4] 2×2 Array{Int64,2}: -1 -2 -3 -4 ソースコード Base.:+ ── 関数 +(x, y...) 加算演算子です。x+y+z+... は、この関数を全ての値を引数として +(x, y, z, ...) と呼び出します。 例 julia&amp;gt; 1 + 20 + 4 25 julia&amp;gt; +(1, 20, 4) 25 ソースコード dt::Date + t::Time -&amp;gt; DateTime Date と Time の加算は DateTime を作成します。Time の時・分・秒・ミリ秒と Time の年・月・日を使って新しい DateTime が作成されます。Time 型の値がゼロでないマイクロ秒あるいはナノ秒を持っていると InexactError が発生します。 ソースコード Base.:- ── メソッド -(x, y) 減算演算子です。</description>
    </item>
    <item>
      <title>§43 実係数の二次方程式 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_43_quadratic_equation_with_real_coefficients/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_43_quadratic_equation_with_real_coefficients/</guid>
      <description>z^2 + 1 = 0 を満たす実数 z は存在しない。この事実を「方程式は実根を持たない」と表現する。しかし先ほど見た通り、i と -i という二つの複素数はこの方程式を満たす。この事実を「方程式は二つの複素根を持つ」と表現する。z^{2} = -1 を満たすこの i を \sqrt{-1} と表記する場合がある。 複素数は虚数 (imaginary number) とも呼ばれる1。ただしこう呼ばれているからといって、通常の言葉の意味で虚数が実数よりも「虚 (imaginary)」である、あるいは虚数が数字でないなどと納得してはいけない。ここまでの議論から分かるように、二つの記号を並べて表記される実数の組 \bm{(x, y)} を、考える上で便利なように x + yi と表記したのが虚数である。この実数の組の「リアルさ」は、\frac{1}{2} といった通常の数字、それが印刷された紙、あるいは太陽系の「リアルさ」と全く変わらない。例えば \[ i = 0 + 1i \] は数字の組 (0, 1) の別表記であり、点あるいは変位 [0, 1] として幾何学的に表すこともできる。あるいは i が方程式 z^{2} + 1 = 1 の根だと言った場合、それは数字の組 (あるいは変位) を組み合わせる「乗算」という操作が定義されていて、二つの (0, 1) をその操作で組み合わせたときの結果が (-1, 0) になる、ということを意味している。</description>
    </item>
    <item>
      <title>視点: HTTP が新たな細いくびれに - 第 5 章 トランスポートプロトコル - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/e2e/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/e2e/trend/</guid>
      <description>インターネットは細いくびれ (narrow waist) のアーキテクチャを持つと形容されてきた。中間にあるユニバーサルなプロトコル (IP) は多くのトランスポートプロトコルとアプリケーションプロトコル (TCP, UDP, RTP, SunRPC, DCE-RPC, gRPC, SMTP, HTTP, SNMP など) を自身の上にサポートでき、同時に多くのネットワークテクノロジ (Ethernet, PPP, Wi-Fi, SONET, ATM など) の上に自身を実装できる。この一般的な構造はインターネットがユビキタスになる上で非常に重要な役割を果たしてきた: 皆が合意する IP 層を最小限にすることで、その上と下の両方に数千の花を咲かせることができる。現在これはユニバーサルな採用を目指す任意のプラットフォームが採用すべき戦略として広く理解されている。</description>
    </item>
    <item>
      <title>数値 - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/numbers/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/numbers/</guid>
      <description>数値 標準の数値型 抽象数値型 Core.Number ── 型 Number 任意の数値型を表す抽象上位型です。 ソースコード Core.Real ── 型 Real &amp;lt;: Number 任意の実数型を表す抽象上位型です。 ソースコード Core.AbstractFloat ── 型 AbstractFloat &amp;lt;: Real 任意の浮動小数点数型を表す抽象上位型です。 ソースコード Core.Integer ── 型 Integer &amp;lt;: Real 任意の整数型を表す抽象上位型です。 ソースコード Core.Signed ── 型 Signed &amp;lt;: Integer 任意の符号付き整数型を表す抽象上位型です。 ソースコード Core.Unsigned ── 型 Unsigned &amp;lt;: Integer 任意の符号無し整数型を表す抽象上位型です。 ソースコード Base.AbstractIrrational ── 型 AbstractIrrational &amp;lt;: Real 無理数を正確に表現する数値型を表す抽象上位型です。この型の値と他の数値の算術演算を行うと、この型の値は適切な精度へ自動的に丸められます。</description>
    </item>
    <item>
      <title>§44 アルガン図 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_44_argands_diagram/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_44_argands_diagram/</guid>
      <description>図 24 で P を点 (x, y) とし、r を OP の長さ、\theta を \angle XOP とすると次が成り立つ: \[ x = r\cos\theta,\quad y = r\sin\theta,\quad r = \sqrt{x^{2} + y^{2}},\quad \cos\theta : \sin\theta : 1 = x : y : r \] 図 24 §43 と同様に x + yi を z と表記し、z を複素変数 (complex variable) と呼ぶ。そして P は点 \bm{z}、あるいは z に対応する点と呼び、z は P の引数 (argument)、x は z の実部 (real part)、y は z の虚部 (imaginary part)、r は z の大きさ (modulus)、\theta は z の 偏角 (argument)1 と呼ぶ。そして次のように表記する: \[ x = \operatorname{Re}(z),\quad y = \operatorname{Im}(z),\quad r = |z|,\quad \theta = \arg z \]</description>
    </item>
    <item>
      <title>第 6 章 輻輳制御 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/congestion/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/congestion/</guid>
      <description>あなたを美しくしたその手は、あなたを善良にもしたのです。 ── ウィリアム・シェイクスピア</description>
    </item>
    <item>
      <title>文字列 - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/strings/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/strings/</guid>
      <description>文字列 Core.AbstractChar ── 型 AbstractChar は任意の文字の実装を表す上位型です。Julia において文字 (character) は Unicode 符号位置を表します。文字が表す符号位置は codepoint 関数で整数として取得でき、Char コンストラクタは整数で指定する符号位置を表す文字を作成します。符号位置を表す整数値は &amp;lt; や == による文字の比較などで利用されます。新しい T &amp;lt;: AbstractChar 型は最低でも codepoint(::T) メソッドと T(::UInt32) コンストラクタを定義する必要があります。 Unicode の一部だけを表せる AbstractChar の部分型も定義でき、その場合はサポートされていない UInt32 からの変換でエラーを発生させることが許されています。逆に組み込みの Char 型が表すのは (正当でないバイト列を情報を失わずに表す必要があるために) Unicode の上位集合であり、Char から UInt32 への変換ではエラーが発生する可能性があります。与えられた AbstractChar の部分型で特定の符号位置が表現できるかどうかは isvalid で判定できます。</description>
    </item>
    <item>
      <title>§45 ド・モアブルの定理 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_45_de_moivres_theorem/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_45_de_moivres_theorem/</guid>
      <description>次の命題は加算と乗算の定義から直ちに従う: 二つの複素数の和の実部 (および和の虚部) は二つの実部の和 (および虚部の和) に等しい。 二つの複素数の積の大きさは二つの大きさの積に等しい。 二つの複素数の積の偏角は二つの偏角の和に等しいか、二つの偏角の和から 2\pi 離れた値に等しい。 \arg(zz&#39;) の主値が常に \arg z の主値と \arg z&#39; の主値の和であるとは限らない。例えば z = z&#39; = -1 + i とすれば z と z&#39; の偏角の主値はどちらも \frac{3}{4}\pi となる。しかし zz&#39; = -2i なので \arg(zz&#39;) の主値は -\frac{1}{2}\pi であり、\frac{3}{2}\pi ではない。</description>
    </item>
    <item>
      <title>問題: リソースの割り当て - 第 6 章 輻輳制御 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/congestion/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/congestion/problem/</guid>
      <description>これまでにネットワークプロトコルの階層を十分詳しく見てきたので、アプリケーションプロセスが不均一なネットワークを通じてどのようにデータを転送するかは理解できたことだろう。続いてプロトコルスタック全体に関係する問題に焦点を当てる ── 互いに協力関係に無い多くユーザーに対してリソースを効率的かつ公平に割り当てるにはどうすればいいだろうか？ 共有されるリソースにはリンクの帯域、ルーターのバッファ、あるいはスイッチでパケットが転送を待つ間に格納されるキューなどがある。例えばルーターに到着したパケットはリンクの利用権を誰よりも早く受け取ることを望み、ルーターは受け取ったパケットを特定のリンク越しの転送を待機するパケットを取り置くキューに配置する。あまりにも多くのパケットが同じリンクに殺到するとキューが満杯になり、望ましくない二つのことが起きる: パケットが経験するエンドツーエンドの遅延が大きくなり、キューがオーバーフローする最悪のケースではパケットが破棄される。長いキューがいつまでたっても解消されず、パケットの破棄が頻繁に起こる状況を輻輳ふくそう (congestion) と呼ぶ。多くのネットワークはこういった状況に対処する輻輳制御 (congestion-control) の仕組みを提供する。</description>
    </item>
    <item>
      <title>配列 - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/arrays/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/arrays/</guid>
      <description>配列 コンストラクタと型 Core.AbstractArray ── 型 AbstractArray{T,N} T 型の要素を持つ N 次元の配列型 (および配列に近い型) を表す上位型です。Array などを部分型に持ちます。マニュアルの AbstractArray インターフェースの節も参照してください。 ソースコード Base.AbstractVector ── 型 AbstractVector{T} T 型の要素を持つ一次元の配列型 (および配列に似た型) を表す上位型です。AbstractArray{T,1} の別名です。 ソースコード Base.AbstractMatrix ── 型 AbstractMatrix{T} T 型の要素を持つ二次元の配列型 (および配列に似た型) を表す上位型です。AbstractArray{T,2} の別名です。 ソースコード Base.AbstractVecOrMat ── 定数 AbstractVecOrMat{T} AbstractVector{T} と AbstractMatrix{T} からなる型共用体です。 ソースコード Core.Array ── 型 Array{T,N} &amp;lt;: AbstractArray{T,N} T 型の要素を持つ N 次元の密配列です。</description>
    </item>
    <item>
      <title>§46 複素変数の有理関数 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_46_rational_functions_of_a_complex_variable/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_46_rational_functions_of_a_complex_variable/</guid>
      <description>複素数の有理関数に関する定理をさらにいくつか紹介する。複素変数 z の有理関数 (rational function) の定義は実変数 x の有理関数の定義と全く同じであり、二つの z の多項式の商と定義される。 任意の有理関数 R(z) は x と y の実数係数有理関数 X と Y を使って X + Yi と書ける。 まず加算と乗算の定義から、任意の多項式 P(x + yi) が x と y の実数係数多項式 A と B を使って A + Bi と書けることが分かる。同様に Q(x + yi) も C + Di と書ける。よって \[ R(x + yi) = \frac{P(x + yi)}{Q(x + yi)} \] は次のように変形できる: \[ \begin{aligned} \frac{A + Bi}{C + Di} &amp; = \frac{(A + Bi) (C - Di)}{(C + Di) (C - Di)}\\ &amp; = \frac{AC + BD}{C^{2} + D^{2}} + \frac{BC - AD}{C^{2} + D^{2}} i \end{aligned} \] 上述の定理はここから従う。</description>
    </item>
    <item>
      <title>6.1 リソース割り当てにおける問題 - 第 6 章 輻輳制御 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/congestion/issues/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/congestion/issues/</guid>
      <description>リソース割り当て (resource allocation) は複雑な問題であり、ネットワークが初めて設計されたときから始まって大量の研究が行われてきた。この分野では現在でも活発な研究が行われている。この問題を複雑にしている要因の一つに、リソース割り当てを考えるときにプロトコル階層の各層を分離できない点が挙げられる。リソース割り当てはネットワーク内のルーター、スイッチ、リンクによって、そしてエンドホストで実行されるトランスポートプロトコルによって集合的に実装される。エンドシステムは自身のリソース要件をシグナリングプロトコルでネットワークノードに伝え、ネットワークノードは利用可能なリソースに関する情報を応答する。本章の主な目標の一つはこういったリソース割り当ての仕組みを理解するためのフレームワークを定義すること、そしてリソース割り当ての仕組みの代表的な例に関する詳細を説明することである。</description>
    </item>
    <item>
      <title>タスク - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/parallel/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/parallel/</guid>
      <description>タスク Core.Task ── 型 Task(func) 与えられた関数 func を実行するタスク (コルーチン) を作成します。func は引数を取らない関数である必要があります。タスクは func が返ったときに終了します。 例 julia&amp;gt; a() = sum(i for i in 1:1000); julia&amp;gt; b = Task(a); この例の b は実行可能な Task であり、まだ開始されてはいません。 ソースコード Base.@task ── マクロ @task 式を Task に包み、その Task を返します。このマクロはタスクを作成するだけで、実行はしません。 例 julia&amp;gt; a1() = sum(i for i in 1:1000); julia&amp;gt; b = @task a1(); julia&amp;gt; istaskstarted(b) false julia&amp;gt; schedule(b); julia&amp;gt; yield(); julia&amp;gt; istaskdone(b) true ソースコード Base.@async ── マクロ @async 式を Task に包み、その Task をローカルマシンのスケジューラキューに追加します。</description>
    </item>
    <item>
      <title>§47 複素数の根号 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_47_roots_of_complex_numbers/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_47_roots_of_complex_numbers/</guid>
      <description>複素数 a と整数 m,\ n に対する \sqrt[n]{a} や a^{m/n} の意味を今まで定義してこなかった。初等代数における実数 a に対する根号の定義と同じもの採用するのが自然である。そこで整数 n に対する \sqrt[n]{a} および a^{1/n} を z^{n} = a を満たす複素数 z として定義し、整数 n,\ m に対する a^{m/n} を (a^{1/n})^{m} として定義する。ただしこの定義からは、方程式の根がいくつ存在するのか、あるいはそもそも存在するのかは明らかでない。</description>
    </item>
    <item>
      <title>6.2 キューイング - 第 6 章 輻輳制御 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/congestion/queuing/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/congestion/queuing/</guid>
      <description>リソース割り当ての仕組みがどれだけ単純または複雑であろうと、各ルーターでは転送待ちのパケットをバッファするためのキューを管理するキューイング (queuing) と呼ばれる処理が必要になる。キューイングに使われるアルゴリズムは帯域 (どのパケットが転送されるか) とバッファ空間 (どのパケットが破棄されるか) の両方をパケットに割り当てると考えることができる。このアルゴリズムはパケットが転送されるまでの待機時間を決定するので、パケットが経験する遅延に直接影響する。この節では FIFO (first-in, first-out, 先入れ先出し) と FQ (fair queuing, 公平キューイング) というキューイングでよく使われる二つのアルゴリズムを説明する。加えて提案されているそれらの変種もいくつか紹介する。</description>
    </item>
    <item>
      <title>マルチスレッディング - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/multi-threading/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/multi-threading/</guid>
      <description>マルチスレッディング Base.Threads.@threads ── マクロ Threads.@threads [schedule] for ... end for ループを並列化して複数のスレッドで実行するためのマクロです。反復空間を分割して複数のタスクに割り当て、それらのタスクをスケジュールポリシーに従って複数のスレッドで実行します。ループの終端にバリアが敷かれ、全てのタスクが実行を終えるのを待機します。 引数 schedule は特定のスケジュールポリシーを要請するために利用します。現在サポートされる値は :static だけであり、こうするとスレッドごとに一つのタスクが作成され、各タスクに反復が平等に割り当てられます。他の @threads の内部あるいは ID が 1 でないスレッドで :static を指定するとエラーになります。</description>
    </item>
    <item>
      <title>§48 \(z^{n} = a\) の解 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_48_roots_of_z_to_n_equals_a/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_48_roots_of_z_to_n_equals_a/</guid>
      <description>正の実数 \rho と -\pi \lt \phi \leq \pi を満たす \phi について \[ a = \rho(\cos\phi + i\sin\phi) \] とする。z = r(\cos\theta + i\sin\theta) とおけば、前節の方程式は \[ r^{n}(\cos n\theta + i\sin n\theta) = \rho(\cos\phi + i \sin\phi) \] となり、次の関係が成り立つ: \[ r^{n} = \rho,\quad \cos n\theta = \cos\phi,\quad \sin n\theta = \sin\phi \qquad \text{(1)} \] r として可能なのは通常の \rho の n 乗根 \sqrt[n]{\rho} のみである。そして後ろの二つの関係が満たされるには、整数 k に対して n\theta = \phi + 2k\pi すなわち \[ \theta = \frac{\phi + 2k\pi}{n} \] が必要となる。整数 p,\ q\ (0 \leq q \lt n) を使って k = pn + q とすれば \theta = 2p\pi + (\phi + 2q\pi)/n であり、p の値は重要でない。つまり方程式 \[ \bm{z^{n} = a = \rho(\cos\phi + i\sin\phi)} \] はちょうど \bm{n} 個の解 \bm{z = r(\cos\theta + i\sin\theta)} を持つ。ここで r と \theta は次の関係を満たす: \[ r = \sqrt[n]{\rho},\quad \theta = \frac{\phi + 2q\pi}{n}\quad (q = 0,\ 1,\ 2,\ \ldots,\ n - 1) \]</description>
    </item>
    <item>
      <title>6.3 TCP の輻輳制御 - 第 6 章 輻輳制御 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/congestion/tcpcc/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/congestion/tcpcc/</guid>
      <description>本節ではエンドツーエンド輻輳制御として現在支配的な例を見ていく。それは TCP によって実装される輻輳制御であり、「予約をせずにネットワークにパケットを送信し、観測可能なイベントが起こればそれに対応する」を基本的な戦略とする。TCP の輻輳制御はネットワーク内のルーターがキューイングで FIFO を使うことを仮定するものの、公平キューイングを使う場合でも正しく動作する。 TCP の輻輳制御は 1980 年代の後半に Van Jacobson によってインターネットに導入された。これは TCP/IP というプロトコルスタックの運用が開始されてから約 8 年後のことだった。輻輳制御が導入される直前、インターネットは輻輳崩壊に苦しんでいた ── ホストは広報されたウィンドウサイズが許す限りのパケットをインターネットに送信し、どこかのルーターで輻輳が発生し、パケットが破棄され、タイムアウトを検知したホストがパケットを再送し、さらに悪い輻輳が発生する、という状況がよくあった。</description>
    </item>
    <item>
      <title>定数 - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/constants/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/constants/</guid>
      <description>定数 Core.nothing ── 定数 nothing Nothing 型のシングルトンインスタンスです。慣習により、(C の void 関数のように) 関数から返す値が存在しないとき、および変数やフィールドが値を持たないときに使われます。 ソースコード Base.PROGRAM_FILE ── 定数 PROGRAM_FILE コマンドライン引数として Julia に渡されたスクリプト名を表す文字列です。このスクリプト名はインクルードされたファイルの内部でも変わらないことに注意してください。これとは別に @__FILE__ もあります。 ソースコード Base.ARGS ── 定数 ARGS Julia に渡されたコマンドライン引数を表す文字列の配列です。</description>
    </item>
    <item>
      <title>§49 ド・モアブルの定理の一般形 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/3_49_general_form_of_de_moivres_theorem/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/3_49_general_form_of_de_moivres_theorem/</guid>
      <description>前節の結果から、1 より大きい正の整数 q に対する (\cos\theta + i\sin\theta)^{1/q} の一つが \[ \cos(\theta/q) + i\sin(\theta/q) \] だと分かる。正負を問わない整数を p として両辺を p 乗すると、(\cos\theta + i\sin\theta)^{p/q} の一つが \cos(p\theta/q) + i\sin(p\theta/q) となるという定理が得られる。つまり \bm{1} より大きい任意の有理数 \bm{\alpha} について、\bm{(\cos\theta + i\sin\theta)^{\alpha}} の一つは \[ \bm{\cos\alpha\theta + i\sin\alpha\theta} \] に等しい。 これはド・モアブルの定理 (§45) を一般化したものである。</description>
    </item>
    <item>
      <title>6.4 高度な輻輳制御 - 第 6 章 輻輳制御 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/congestion/avoidance/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/congestion/avoidance/</guid>
      <description>本節では輻輳ふくそう制御をさらに細かく見ていく。前節で見た標準 TCP (standard TCP) の戦略は「輻輳が発生したら輻輳ウィンドウの制御を行う」というものであり、輻輳を一度も起こらないようにするものではない。標準 TCP は輻輳が起こるまでネットワークにかける負荷を増加させ、輻輳が起こると負荷を大きく下げる動作を周期的に繰り返す。言い換えれば、標準 TCP は接続で利用可能な帯域を推定するためにパケットロスを必要とする。これとは異なる魅力的な選択肢として、どの程度の負荷で輻輳が起こるかを予測し、輻輳が起きてパケットが破棄され始める直前に送信ペースを落とす戦略が考えられる。このような戦略を輻輳回避 (congestion avoidance) と呼んで輻輳制御 (congestion control) と区別するが、「回避」は「制御」の一種だと考えた方が正確だろう。</description>
    </item>
    <item>
      <title>第 4 章 一次元カルマンフィルタ - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/one_dimensional_kalman_filters/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/one_dimensional_kalman_filters/</guid>
      <description>これで離散ベイズフィルタとガウス分布が理解できたので、カルマンフィルタを実装する準備が整った。カルマンフィルタの実装は離散ベイズフィルタと同じように行う──数式から始めるのではなく、問題について考えることで段階を踏んでコードを書いていく。 「一次元」フィルタとは追跡する状態変数が一つだけ (例えば x 軸上における位置だけ) であることを意味する。複数の状態変数 (例えば位置・速度・加速度など) を同時に追跡できる一般的な多次元フィルタは以降の章で学ぶ。g-h フィルタでは位置だけではなく速度も追跡することで優れた結果が得られていたことを思い出してほしい。同じことはカルマンフィルタでも起こる。</description>
    </item>
    <item>
      <title>はじめに - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/welcome/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/welcome/</guid>
      <description>ようこそ。 これは D3D/OpenGL のグラフィックスパイプラインを実際の GPU が実装している通りに説明していくブログシリーズの目次ページである。こういった話題の多くはグラフィックスプログラマーによく知られており、同じようなことが書かれた論文は大量に存在している。しかし個別の要素に関する非常に細かい情報や一般的な概観は存在するにもかかわらず、その中間の文章があまり存在しないこと、またあったとしても大部分が時代遅れであることが私は気になっていた。</description>
    </item>
    <item>
      <title>ファイルシステム - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/file/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/file/</guid>
      <description>ファイルシステム Base.Filesystem.pwd ── 関数 pwd() -&amp;gt; AbstractString カレントワーキングディレクトリを取得します。 例 julia&amp;gt; pwd() &amp;#34;/home/JuliaUser&amp;#34; julia&amp;gt; cd(&amp;#34;/home/JuliaUser/Projects/julia&amp;#34;) julia&amp;gt; pwd() &amp;#34;/home/JuliaUser/Projects/julia&amp;#34; ソースコード Base.Filesystem.cd ── メソッド cd(dir::AbstractString=homedir()) カレントワーキングディレクトリを設定します。 例 julia&amp;gt; cd(&amp;#34;/home/JuliaUser/Projects/julia&amp;#34;) julia&amp;gt; pwd() &amp;#34;/home/JuliaUser/Projects/julia&amp;#34; julia&amp;gt; cd() julia&amp;gt; pwd() &amp;#34;/home/JuliaUser&amp;#34; ソースコード Base.Filesystem.cd ── メソッド cd(f::Function, dir::AbstractString=homedir()) 作業ディレクトリを一時的に dir に変更し、f を実行し、元のディレクトリに戻ります。 例 julia&amp;gt; pwd() &amp;#34;/home/JuliaUser&amp;#34; julia&amp;gt; cd(readdir, &amp;#34;/home/JuliaUser/Projects/julia&amp;#34;) 34-element Array{String,1}: &amp;#34;.circleci&amp;#34; &amp;#34;.freebsdci.sh&amp;#34; &amp;#34;.git&amp;#34; &amp;#34;.gitattributes&amp;#34; &amp;#34;.github&amp;#34; ⋮ &amp;#34;test&amp;#34; &amp;#34;ui&amp;#34; &amp;#34;usr&amp;#34; &amp;#34;usr-staging&amp;#34; julia&amp;gt; pwd() &amp;#34;/home/JuliaUser&amp;#34; ソースコード Base.Filesystem.readdir ── 関数 readdir(dir::AbstractString=pwd(); join::Bool = false, sort::Bool = true) -&amp;gt; Vector{String} dir に含まれる名前を返します。dir が与えられなければカレントワーキングディレクトリが使われます。join が false なら、readdir はディレクトリ内の名前をそのまま返します。join が true なら、各 name に対して joinpath(dir, name) で計算されるフルパスが返り値の配列の要素となります。名前の絶対パスが必要なら、readdir に絶対パスを渡した上で join を true にしてください。</description>
    </item>
    <item>
      <title>§50 正整数関数 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_50_functions_of_a_positive_integral_variable/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_50_functions_of_a_positive_integral_variable/</guid>
      <description>第二章では実変数 x の関数という概念についてたくさんの例を使って議論したが、説明に使った関数の間で大きく異なる重要な特徴が一つあった: 全ての x に対して定義される関数もあれば、有理数に対してだけ定義される関数もあり、さらに整数に対してだけ定義される関数もあった。 例えば次の関数が考えられる: (i) x (ii) \sqrt{x} (iii) x の分母 (iv) 分母と分子の積の平方根 (v) x の最大素因数 (vi) x の最大素因数と \sqrt{x} の積 (vii) x 番目の素数 (viii) ダートムーア刑務所の囚人 x の背の高さ (インチ)</description>
    </item>
    <item>
      <title>第三章に関するその他の例 - 第三章 複素数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/3_complex_numbers/misc_examples/</link>
      <pubDate>Sun, 26 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/3_complex_numbers/misc_examples/</guid>
      <description>三角形 xyz が正三角形となる条件は次の等式で表せる: \[ x^{2} + y^{2} + z^{2} - yz - zx - xy = 0 \] [XYZ を正三角形とする。変位 \overline{ZX} と \overline{YZ} は正または負の方向に \frac{2}{3}\pi の角度をなす。\operatorname{Cis}\frac{2}{3}\pi = \omega_{3} より \operatorname{Cis}(-\frac{2}{3}\pi) = 1/\omega_{3} = \omega_{3}^{2} なので、x - z = (z - y)\omega_{3} または x - z = (z - y)\omega_{3}^{2} が成り立つ。したがって x + y\omega_{3} + z\omega_{3}^{2} = 0 または x + y\omega_{3}^{2} + z\omega_{3} = 0 であり、例 22.3 より示すべき結果が得られる] XYZ,\ X&#39;Y&#39;Z&#39; が三角形で \[ \overline{YZ} · \overline{Y&#39;Z&#39;} = \overline{ZX} · \overline{Z&#39;X&#39;} = \overline{XY} · \overline{X&#39;Y&#39;} \] が成り立つなら、両方とも正三角形である。[仮定から \[ (y - z)(y&#39; - z&#39;) = (z - x)(z&#39; - x&#39;) = (x - y)(x&#39; - y&#39;) = \kappa^{2} \] が分かるので、\sum 1/(y&#39; - z&#39;) = 0 すなわち \sum {x&#39;}^{2} - \sum y&#39;z&#39; = 0 を得る。前問を使えば示すべき式が得られる]</description>
    </item>
    <item>
      <title>6.5 クオリティオブサービス (QoS) - 第 6 章 輻輳制御 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/congestion/qos/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/congestion/qos/</guid>
      <description>汎用のパケット交換ネットワークはあらゆる種類のアプリケーションとデータをサポートするものとされる。サポートされるアプリケーションにはデジタル化された音声や映像のストリームを転送するマルチメディアアプリケーションも含まれる。初期のネットワークにおいて、こういったアプリケーションを達成する上での課題の一つが広い帯域を持つ回線の提供だった。これは現在では問題にはならないものの、ネットワークを通じた音声と映像の転送では十分な帯域の提供以外にも課題が存在する。 例えば音声通話では、参加者は自分が発した音声がすぐに他の参加者に届き、それに対する反応がすぐに返ってくることを期待して会話を行う。そのため、適時性 (timeliness, 転送を遅延させないこと) が非常に重要になる。データの遅延が大きいと正常な動作が不可能になるアプリケーションをリアルタイムアプリケーション (real-time application) と呼ぶ。リアルタイムアプリケーションの代表的な例として音声または映像を扱うアプリケーションが示される場合が多いものの、産業用制御アプリケーションといった他の例も存在する ── ロボットアームに対する命令はアームが障害物にぶつかる前に届かなければならない。ファイル転送アプリケーションが適時性に関する要件を持つ場合もある: 例えばデータベースの更新を深夜中に終わらせて、翌日の仕事中にデータを利用できるようにしなければならない状況などが考えられる。</description>
    </item>
    <item>
      <title>IO とネットワーク - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/io-network/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/io-network/</guid>
      <description>IO とネットワーク 一般的な IO Base.stdout ── 定数 stdout 標準出力ストリームを指すグローバル変数です。 ソースコード Base.stderr ── 定数 stderr 標準エラーストリームを指すグローバル変数です。 ソースコード Base.stdin ── 定数 stdin 標準入力ストリームを指すグローバル変数です。 ソースコード Base.open ── 関数 open(f::Function, args...; kwargs....) 関数 f を open(args...; kwargs...) が返すファイル記述子に適用し、完了したらそのファイル記述子を閉じます。 例 julia&amp;gt; open(&amp;#34;myfile.txt&amp;#34;, &amp;#34;w&amp;#34;) do io write(io, &amp;#34;Hello world!&amp;#34;) end; julia&amp;gt; open(f-&amp;gt;read(f, String), &amp;#34;myfile.txt&amp;#34;) &amp;#34;Hello world!&amp;#34; julia&amp;gt; rm(&amp;#34;myfile.txt&amp;#34;) ソースコード open(filename::AbstractString; lock = true, keywords...) -&amp;gt; IOStream 五つのキーワード引数で指定されるモードでファイルを開きます: キーワード引数 説明 デフォルト値 read 読み込みのために開く !write write 書き込みのために開く truncate | append create ファイルが存在しなければ作成する !read &amp; write | truncate | append truncate サイズをゼロに切り捨てる !read &amp; write append 末尾にシークする false キーワード引数が一つも指定されないときのデフォルトは読み込み専用でファイルを開く処理です。開かれたファイルにアクセスするためのストリームを返します。</description>
    </item>
    <item>
      <title>§51 補間 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_51_interpolation/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_51_interpolation/</guid>
      <description>n の関数が与えられたときに、x が正の整数のときその関数と同じ値を取る x の関数を求める問題は、高等数学において非常に重要である。これは関数補間問題 (problem of functional interpolation) と呼ばれる。 しかしこれは、この条件を満たす x の関数を適当に一つ見つける問題ではない: 上述の通り定義されてない部分には好きな値を割り当てられるので、この問題はあまりにも簡単すぎる。例えば n の関数の値が x の関数の値の全てだとみなして他の値では値を持たないとできるが、これは明らかに私たちが望むものではない。必要なのは、x の(できる限り単純な) 式であって x = 1,\ 2,\ \ldots で与えられた関数と同じ値を持つものである。</description>
    </item>
    <item>
      <title>視点: ソフトウェア定義トラフィックエンジニアリング - 第 6 章 輻輳制御 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/congestion/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/congestion/trend/</guid>
      <description>本章を通して考えてきた問題は「利用可能なネットワークの帯域をエンドツーエンドフローの集合にどのように割り当てるか」というものだった。TCP の輻輳制御であれ、IntServ であれ、DiffServ であれ、この問題を考えるとき割り当てようとしている内部ネットワークの帯域は固定されていると仮定されていた: サイト A とサイト B を結ぶ 1 Gbps リンクはいつでも 1 Gbps で変化せず、考えてきたアルゴリズムは競合し合うユーザー間でその 1 Gbps をどのように共有すべきかを示すものだった。この仮定が成り立たなかったらどうなるだろうか？ 容量を「すぐに」追加できて、1 Gbps リンクを 10 Gbps リンクにアップグレードしたり、直接は結ばれていないサイトの間に新しいリンクを追加したりできたとしたら、どうするべきだろうか？</description>
    </item>
    <item>
      <title>記号 - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/punctuation/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/punctuation/</guid>
      <description>Julia のプログラムで用いられる記号とその意味を説明します。</description>
    </item>
    <item>
      <title>§52 有限クラスと無限クラス - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_52_finite_and_infinite_classes/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_52_finite_and_infinite_classes/</guid>
      <description>先に進む前に、純粋数学において頻出する抽象的で論理的なこの概念について少し説明する必要がある。 まず、読者はクラス (a class) という概念を理解しているだろうと思う。「クラス」を論理的に細かく議論する必要はない: クラスとはとある性質を持つ物や対象を集めたり揃えたりしたものだと大雑把に捉えれば十分であり、そのとき性質は単純なものでも複雑なものでも構わない。例えば英国臣民のクラス・代議士のクラス・正の整数のクラス・実数のクラスなどが考えられる。</description>
    </item>
    <item>
      <title>第 7 章 エンドツーエンドデータ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/data/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/data/</guid>
      <description>データが集まる前に理論を組み立てるのは大きな過ちである。 ── アーサー・コナン・ドイル卿</description>
    </item>
    <item>
      <title>ソート - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/sort/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/sort/</guid>
      <description>ソート Julia にはソートおよびソート済み配列に対する操作を行うための多機能で柔軟な API があります。Julia のソート関数はデフォルトで適当なアルゴリズムを選択し、標準的な昇順で要素をソートします: julia&amp;gt; sort([2,3,1]) 3-element Array{Int64,1}: 1 2 3 逆順のソートは簡単に行えます: julia&amp;gt; sort([2,3,1], rev=true) 3-element Array{Int64,1}: 3 2 1 配列をインプレースにソートするには、sort 関数を &#34;大声で&#34; 呼んでください: julia&amp;gt; a = [2,3,1]; julia&amp;gt; sort!(a); julia&amp;gt; a 3-element Array{Int64,1}: 1 2 3 配列を直接ソートする代わりに、配列をソートする添え字の置換を計算することもできます:</description>
    </item>
    <item>
      <title>§53 \(n\) が大きいときの \(n\) の関数の性質 (その 1) - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_53_properties_possessed_by_a_function_of_n_for_large_values_of_n/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_53_properties_possessed_by_a_function_of_n_for_large_values_of_n/</guid>
      <description>§50–§51 で考えた「n の関数」に戻る。n の関数は第二章で考えた x の関数と様々な点で異なるが、共通する基礎的な性質が一つある: 関数の値が定義される変数の値を集めると無限クラスになる。これからの議論の基礎となるのがこの事実であり、次章で見るようにこの議論は x の関数に対しても適用できる。 \phi(n) を任意の n の関数、P を \phi(n) に関する任意の性質 (例えば「正の整数である」や「1 より大きい」など) とする。n = 1,\ 2,\ 3,\ \ldots のそれぞれについて \phi(n) が性質 P を持つかどうかを考えると、次の三つの可能性がある:</description>
    </item>
    <item>
      <title>問題: データで何をする？ - 第 7 章 エンドツーエンドデータ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/data/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/data/problem/</guid>
      <description>ネットワークの視点から見ると、アプリケーションプログラムが互いに送り合うメッセージは単なるバイトの連なりに過ぎない。しかしアプリケーションの視点から見ると、メッセージには様々なデータ ── 整数の配列、映像のフレーム、文章、画像など ── が含まれている。言い換えれば、そういったバイト列には意味がある。本章では、アプリケーションプログラムがやり取りする様々なデータをバイト列に符号化する最も優れた方法は何かという問題を考える。多くの点で、この問題は第 2 章で考えたバイト列を電磁信号に符号化する問題と共通点を持つ。</description>
    </item>
    <item>
      <title>反復ユーティリティ - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/iterators/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/iterators/</guid>
      <description>反復ユーティリティ Base.Iterators.Stateful ── 型 Stateful(itr) この反復子ラッパーのとらえ方はいくつかあります: Stateful は反復子と反復状態を包む可変ラッパーです。 Stateful は反復子に似た抽象化を Channel に似た抽象化に変換します。 Stateful は反復子であり、要素を生成するたびに自身を残りの部分を表す反復子に改変します。 Stateful は通常の反復子インターフェースを提供します。ただし Channel といった他の可変反復子と同様に、反復が (for ループ中の break などで) 通常よりも早く中断した場合には、その後に同じ反復子オブジェクトに対して反復を行うと中断した位置から反復が再開します (これに対して、不変な反復子では最初から反復が始まります)。</description>
    </item>
    <item>
      <title>§54 \(n\) が大きいときの \(n\) の関数の性質 (その 2) - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_54_meaning_of_for_large_n/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_54_meaning_of_for_large_n/</guid>
      <description>\phi(n) と P が前節の命題 (a) を満たす、つまり有限個の例外を除いた全ての n で \phi(n) が成り立つとする。例外の数を N として、全ての例外を \[ n_{1},\ n_{2},\ \ldots,\ n_{N} \] と表記する。当然これら N 個の値が最初の N 個の値 1,\ 2,\ \ldots,\ N である必要はない。実際に考える関数ではたいてい例外が 1,\ 2,\ \ldots,\ N になるが、そうでなくとも n \gt n_{N} なら \phi(n) が性質 P を持つと言えればよい。例えば n 番目の素数は奇数となるのは n \gt 2 のときであり、n = 2 が唯一の例外となる。あるいは 1/n \lt .001 となるのは n \gt 1000 のときで、最初から 1000 個の n の値が例外となる。あるいは \[ \frac{1000\{1 + (-1)^{n}\}}{n} \lt 1 \] となるのは n \gt 2000 のときで、例外は 2,\ 4,\ 6,\ \ldots,\ 2000 となる。つまり、こういった場合には最初の有限個より後ろの全ての \bm{n} が考えている性質を持つ。</description>
    </item>
    <item>
      <title>7.1 マーシャリング - 第 7 章 エンドツーエンドデータ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/data/presentation/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/data/presentation/</guid>
      <description>ネットワークデータに対して最も頻繁に施される変形の一つは、アプリケーションが使う表現からネットワークを通じた転送に適した表現への変形である。この変形はよくプレゼンテーションフォーマット化 (presentation formatting) と呼ばれる。図 179 に示すように、送信側のアプリケーションは転送したいデータを自身が内部で使う表現からネットワークを通じて送信できる表現に変換する。つまり、送信側でデータはメッセージに符号化 (encode) される。受信側では、アプリケーションが受け取ったメッセージを自身が処理できる表現に変換する。つまり、受信側でメッセージはデータに復号 (decode) される。この一連の処理をマーシャリング (marshalling) またはシリアライゼーション (serialization)と呼ぶことがある。これらは遠隔手続き呼び出し (RPC) の用語である。RPC でクライアントは引数を付けて手続きを起動するので、そのときネットワークメッセージを作るために引数を「適切な形に素早くまとめる」必要がある。</description>
    </item>
    <item>
      <title>C インターフェース - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/c/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/c/</guid>
      <description>C インターフェース Base.@ccall ── マクロ @ccall library.function_name(argvalue1::argtype1, ...)::returntype @ccall function_name(argvalue1::argtype1, ...)::returntype @ccall $function_pointer(argvalue1::argtype1, ...)::returntype C からエクスポートされた共有ライブラリ library に含まれる関数 function_name を呼び出します。関数は library.function_name という形で指定され、library には文字列定数もしくはリテラルを利用できます。ライブラリ名は省略でき、その場合 function_name は現在のプロセスで解決されます。この他に @ccall には dlsym の返り値などとして取得した関数ポインタを $function_pointer として渡すこともできます。 @ccall に渡す argvalue は自動的に呼ばれる unsafe_convert(argtype, cconvert(argtype, argvalue)) で対応する argtype にそれぞれ変換されます (unsafe_convert と cconvert のドキュメントに詳細があります)。多くの場合、この呼び出しは最終的に convert(argtype, argvalue) となります。</description>
    </item>
    <item>
      <title>§55 「\(n\) が無限大に向かうとき」について - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_55_meaning_of_n_tends_to_infinity/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_55_meaning_of_n_tends_to_infinity/</guid>
      <description>これまで考えたことを少し異なる視点から観察する自然な方法がある。n が順に 1,\ 2,\ 3,\ \ldots という値を取ると考える。「順に」という言い回しは時間の経過を暗に示しているが、例えば n が決まった時間 (例えば一秒) ごとに進むと考えればよい。n は時間の経過と共に大きくなり、その大きさは限りがない。私たちがどんなに大きな数 (例えば 2147483647) を想像したとしても、n がその数よりも大きくなる瞬間がある。 この際限ない n の増加を表す簡便な表現として「\bm{n} が無限大に向かうとき (n tends to infinity)」あるいは「n \to \infty」をこれから使うことにする。ここで最後の記号 \infty は無限大を表す。「向かう」からは「順に」と同様に時間の経過が示唆されるので、上述のように n が時間と共に変化すると考える。ただしこれは考える上でそうすると分かりやすいだけに過ぎない。変数 n は論理的な対象であって、それ自体は時間と何の関係もない。</description>
    </item>
    <item>
      <title>7.2 マルチメディアデータの圧縮 - 第 7 章 エンドツーエンドデータ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/data/multimedia/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/data/multimedia/</guid>
      <description>音声、画像、映像といったマルチメディアデータはインターネットトラフィックの大部分を占める。ネットワークを通じたマルチメディアの大規模な転送を可能にした要因の一つにデータ圧縮技術の進化がある。ほとんどのマルチメディアは人間の感覚器官 ── 視覚器官あるいは聴覚器官 ── によって捉えられ人間の脳によって知覚されるので、その圧縮では特殊な課題が生じる: 人間にとって最も重要な情報を保持しつつ、人間による音声あるいは映像の知覚に影響を及ぼさない情報を全て捨てなければならない。このため、マルチメディアデータの圧縮には計算機科学と人体感覚研究の両方の分野が関係する。本節ではマルチメディアデータの表現と圧縮に関する主な成果を紹介する。</description>
    </item>
    <item>
      <title>C 標準ライブラリ - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/libc/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/libc/</guid>
      <description>C 標準ライブラリ Base.Libc.malloc ── 関数 malloc(size::Integer) -&amp;gt; Ptr{Cvoid} C 標準ライブラリの malloc を呼び出します。 ソースコード Base.Libc.calloc ── 関数 calloc(num::Integer, size::Integer) -&amp;gt; Ptr{Cvoid} C 標準ライブラリの calloc を呼び出します。 ソースコード Base.Libc.realloc ── 関数 realloc(addr::Ptr, size::Integer) -&amp;gt; Ptr{Cvoid} C 標準ライブラリの realloc を呼び出します。 この関数は malloc で最初に取得したメモリに対してのみ使うようにしてください。詳しくは free のドキュメントにある警告を参照してください。 ソースコード Base.Libc.free ── 関数 free(addr::Ptr) C 標準ライブラリの free を呼び出します。この関数は malloc で取得したメモリを指すポインタにのみ利用し、他の C ライブラリから取得したポインタに対しては使わないでください。C ライブラリから得た Ptr オブジェクトは、そのライブラリで定義された解放関数で解放されるべきです。システムに複数の libc ライブラリが存在してアサートが失敗する可能性を避けるためです。</description>
    </item>
    <item>
      <title>§56 \(n\) が無限大に向かうときの \(n\) の関数の挙動 (その 1) - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_56_constant_limit_of_a_function_of_n/</link>
      <pubDate>Sun, 02 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_56_constant_limit_of_a_function_of_n/</guid>
      <description>続いてこれまでの内容を使って、高等数学に絶え間なく登場するあの種の命題が持つ意味の議論に進む。例として (a)「n が大きいとき 1/n は小さい」と (b)「n が大きいとき 1 - (1/n) は 1 にほぼ等しい」という二つの命題を考える。一見すると自明に思えるこれらの命題にも、注意を必要とする点がたくさんある。まずは少し単純な (a) から見ていく。 以前に「n が大きいとき 1/n は .01 より小さい」という命題を考えた。これは n がとある値 (具体的には 100) より大きいときに 1/n \lt .01 が成り立つことを意味する。同様に「n が大きいとき 1/n は .0001 より小さい」も成り立つ: n \gt 10000 なら 1/n \lt .0001 となる。この命題は .01 や .0001 を .000001 あるいは .00000001 としても、あるいは好きな正の値としてもなお成り立つ。</description>
    </item>
    <item>
      <title>視点: ビッグデータとデータアナリティクス - 第 7 章 エンドツーエンドデータ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/data/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/data/trend/</guid>
      <description>本章はデータに関する章だった。計算機科学で現在最も注目されているのはビッグデータ (big data) またはデータアナリティクス (data analytics) と呼ばれる分野であり、ビッグデータとコンピューターネットワークにどんな関係があり得るかという疑問がここから自然に生まれる。一般向けの文章で「ビッグデータ」という単語は特に正確な定義を持たずに使われるものの、実用上の定義は非常に単純に表せる: 物理システムあるいは人工システムを監視することで収集されるセンサーデータをビッグデータと呼び、機械学習と呼ばれる統計的手法でビッグデータから洞察を得ることをデータアナリティクスと呼ぶ。収集されるデータは膨大になる場合が多いために「ビッグ」データと呼ばれる。ビッグデータとデータアナリティクスの発展はネットワーク分野にどんな影響を及ぼすだろうか？</description>
    </item>
    <item>
      <title>スタックトレース - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/stacktraces/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/stacktraces/</guid>
      <description>スタックトレース Base.StackTraces.StackFrame ── 型 StackFrame 実行コンテキストを表すスタックの情報です。次のフィールドを持ちます: func::Symbol 実行コンテキストを含む関数の名前 linfo::Union{Core.MethodInstance, CodeInfo, Nothing} 実行コンテキストを含む MethodInstance (見つかる場合のみ) file::Symbol 実行コンテキストを含むファイルのパス line::Int 実行コンテキストを含むファイルにおける行番号 from_c::Bool C のコードかどうか inlined::Bool インライン化されたフレームのコードかどうか pointer::UInt64 backtrace が返す実行コンテキストを指すポインタの表現 ソースコード Base.StackTraces.StackTrace ── 型 StackTrace Vector{StackFrame} の別名です。利便性のために提供されます。stacktrace はこの型の値を返します。</description>
    </item>
    <item>
      <title>§57 \(n\) が無限大に向かうときの \(n\) の関数の挙動 (その 2) - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_57_infinite_limit_of_a_function_of_n/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_57_infinite_limit_of_a_function_of_n/</guid>
      <description>続いて別の例を考える: \phi(n) = n^{2} とする。このとき「n が大きいとき n^{2} は大きい」が成り立つ。この命題を正確に表現すると次のようになる: \Delta を任意の正の整数とすると、\Delta がどれだけ大きくとも、十分大きい n で n^{2} \gt \Delta となる。 n_{0}(\Delta) 以上の全ての n で n^{2} \gt \Delta となる n_{0}(\Delta) を見つけられる。 当然これを「n が \infty に向かうとき n^{2} は \infty に向かう」あるいは「n^{2} は n と共に \infty へ向かう」と表現し、 \[ n^2 \to \infty \] と書く。</description>
    </item>
    <item>
      <title>第 8 章 ネットワークセキュリティ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/security/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/security/</guid>
      <description>人間の弱さと神の穏やかさを兼ね備えることは、真に偉大である。 ── セネカ</description>
    </item>
    <item>
      <title>SIMD サポート - Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/simd-types/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/simd-types/</guid>
      <description>SIMD サポート 型 VecElement{T} は SIMD 演算のライブラリを作成するために存在します。この型を実際に使うときは llvmcall が必要です。VecElement{T} の型は次のように定義されます: struct VecElement{T} value::T end この型は特別なコンパイル規則を持ちます: T がプリミティブなビット型のとき、VecElement{T} だけから構成されるタプルは LLVM の vector 型に対応します。 -O3 のとき、コンパイラはそういったタプルを自動的にベクトル化する可能性があります。例えば次のプログラムを julia -O3 でコンパイルすると、x86 システムでは二つの SIMD 加算命令が生成されます:</description>
    </item>
    <item>
      <title>§58 極限の定義 (その 1) - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_58_definition_of_a_limit/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_58_definition_of_a_limit/</guid>
      <description>以上の議論を終えれば、極限 (limit) の一般的な概念を説明する準備が整う。大雑把に言って「n が大きいときに \phi(n) が l にほぼ等しい」なら「n が \infty に向かうときに \phi(n) が極限 l に向かう」と言う。これまでの説明が分かっていればこの文の意味は明確だと思うが、厳密な数学的定義とするにはこれだけでは正確さが十分でない。正確には「十分大きな n について、\phi(n) と l の差が \varepsilon より小さい」と表現しなければならない。この命題は \varepsilon = .01 でも \varepsilon = .0001 でも正しく、さらに全ての正の実数 \varepsilon に対して正しい。\varepsilon がどんな値だったとしても、とある有限の n_{0}(\varepsilon) より後の全ての n について \phi(n) と l の間が \varepsilon より小さくなる。もちろん一般的に言って \varepsilon が小さいほど n_{0} は大きくなる。</description>
    </item>
    <item>
      <title>問題: ネットワークに対する攻撃 - 第 8 章 ネットワークセキュリティ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/security/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/security/problem/</guid>
      <description>コンピューターネットワークは異なる目標を持った多くのアプリケーションによって共有されるリソースである場合が多い。インターネットは特に広く共有されており、競争関係にあるビジネス相手、敵対関係にある外国政府、そしてチャンスをうかがっている犯罪者によって利用される。セキュリティ対策を取らないと、ネットワークを通じた会話や分散アプリケーションの実行を通して機密情報が敵対者 (adversary) に漏洩する可能性がある。 例として、セキュアなウェブに対する脅威 (threat) をいくつか考えてみよう。 あるウェブサイトでクレジットカードを使って商品を購入しようとするとき、明らかな脅威は敵対者がネットワーク通信を盗聴 (eavesdrop) し、そのメッセージを読むことでクレジットカード情報を取得することである。この盗聴はどのように行われる可能性があるだろうか？ イーサネットや Wi-Fi といったブロードキャストネットワークであれば、ネットワーク上の全てのメッセージトラフィックを受信するように任意のノードを設定できるので、盗聴は簡単に行える。さらに手の込んだアプローチとしては、回線に物理的な盗聴機器を取り付ける方法、あるいはデータが通る経路上のいずれかのノードにスパイウェアを仕込む方法などが考えられる。こういった手の込んだ盗聴に対する対策が取られるのは最上級の機密 (国家機密など) をやり取りする場合に限られる。そこまでの対策はできないにしても、メッセージを暗号化 (encrypt) すれば敵対者はメッセージの内容を理解できなくなる。メッセージの暗号化を行うプロトコルは機密性 (confidentiality) を提供する。この考え方さらに突き詰め、通信の長さと宛先さえも外部に漏らさないことをトラフィック機密性 (traffic confidentiality) と呼ぶ ── 特定の状況では、どれだけの通信がどこに向かうかという情報さえも敵対者にとって有用となる。</description>
    </item>
    <item>
      <title>Base64 - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Base64/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Base64/</guid>
      <description>Base64 Base64.Base64 ── モジュール Base64 base64 でエンコードされた文字列の IO に関する機能を提供します。 ソースコード Base64.Base64EncodePipe ── 型 Base64EncodePipe(ostream) 新しい書き込み専用 IO ストリームを返します。このストリームに任意のデータを書き込むと、そのデータは base64 でエンコードされた ASCII バイト列に変換された上で ostream に書き込まれます。エンコーディングを完了させるには Base64EncodePipe に対する close が必要です (ただし Base64EncodePipe を close しても内部の ostream は閉じられません)。 例 julia&amp;gt; io = IOBuffer(); julia&amp;gt; iob64_encode = Base64EncodePipe(io); julia&amp;gt; write(iob64_encode, &amp;#34;Hello!&amp;#34;) 6 julia&amp;gt; close(iob64_encode); julia&amp;gt; str = String(take!(io)) &amp;#34;SGVsbG8h&amp;#34; julia&amp;gt; String(base64decode(str)) &amp;#34;Hello!&amp;#34; ソースコード Base64.base64encode ── 関数 base64encode(writefunc, args...; context=nothing) base64encode(args...; context=nothing) base64encode(writefunc, args...) は args... を引数として writefunc を呼び出し、その出力を base64 でエンコードしたバイト列を文字列として返します。引数 writefunc は IO ストリームを第一引数に受け取る write に似た関数です。base64encode(args...) は base64encode(write, args...) と等価であり、引数を標準の write 関数でバイト列として書き出したときの出力を base64 でエンコードした文字列を返します。</description>
    </item>
    <item>
      <title>§59 極限の定義 (その 2) - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_59_geometric_representation_of_a_limit/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_59_geometric_representation_of_a_limit/</guid>
      <description>極限の定義は次のように図示できる。\phi(n) のグラフは n = 1,\ 2,\ 3,\ \ldots に対応する無数の点からなる。 図 27 直線 y = l を描き、そこから \varepsilon だけ離れた平行な二直線 y = l - \varepsilon,\ y = l + \varepsilon を描く。すると \[ \lim_{n \to \infty} \phi(n) = l \] となるのは、二つの直線の隙間がどれだけ小さくとも、直線 x = n_{0} を引いてこの直線よりも右にある全ての点が二つの直線の間にあるようにできるときとなる。この幾何学的な定義の捉え方は、正の整数ではなく全ての実数に対して定義される関数を考えるときに特に重要となる。</description>
    </item>
    <item>
      <title>8.1 信頼と脅威 - 第 8 章 ネットワークセキュリティ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/security/trust/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/security/trust/</guid>
      <description>セキュアなネットワークを構築する理由と方法を見ていく前に、一つの単純な真実をはっきりさせておくことが重要だろう: セキュリティ障害は避けられない。突き詰めればセキュリティとは信頼に関する仮定を置き、脅威を評価し、リスクを軽減する処置を取ることに尽きるからである。完全なセキュリティというものは存在しない。 信頼 (trust) と脅威 (threat) は表裏一体と言える。脅威とはシステムが避けるように設計される障害シナリオであり、信頼とは第三者やシステム内部の要素がどう振る舞うかに関する仮定である。例えばオープンキャンパスのときに Wi-Fi を通じてメッセージを転送するとき、メッセージの横取りはおそらく脅威とみなされる (そして本章で解説される対策が取られる) だろう。しかし鍵のかかったデータセンターの中にある二台のマシンの間で光ファイバーケーブル越しにメッセージを転送するなら、そのチャンネルはセキュアだと信頼できるので、追加の対策は取られないだろう。</description>
    </item>
    <item>
      <title>第 5 章 多変量ガウス分布 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/multivariate_gaussians/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/multivariate_gaussians/</guid>
      <description>前章で説明した手法は非常に強力であるものの、一つの変数 (次元) にしか適用できず、広場を動き回る犬の位置と速度といった多次元のデータを表現する方法は提供されない。位置と速度は互いに影響する関係にあるので、g-h フィルタの章で学んだようにこの情報は絶対に捨ててはいけない。本章ではこの関係を確率的に記述する方法を学ぶ。この重要な洞察があるとフィルタの性能が大きく向上する。 5.1 多変量正規分布 ここまでは確率密度関数が \mathcal{N}(\mu, \sigma^2) と表される単一の確率変数に対するガウス分布を使ってきた。この分布を正式な用語で単変量正規分布 (univariate normal distribution) と呼ぶ。「単変量」とは変数が一つあることを意味する。</description>
    </item>
    <item>
      <title>CRC32c - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/CRC32c/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/CRC32c/</guid>
      <description>CRC32c CRC32c.crc32c ── 関数 crc32c(data, crc::UInt32=0x00000000) 与えられたデータの CRC32c チェックサムを計算します。data に指定できるのは Array{UInt8}・Array{UInt8} の連続部分配列・String です。省略可能引数として、チェックサムの初期値として使われる整数 crc も指定できます。crc パラメータは複数の部分に分割されたデータのチェックサムを計算するのにも利用でき、例えば crc32c(data2, crc32c(data1)) は [data1; data2] のチェックサムを計算するのと等価です (正確にはリトルエンディアンのチェックサムが計算されます)。</description>
    </item>
    <item>
      <title>§60 極限の定義 (その 3) - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_60_definition_of_divergence/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_60_definition_of_divergence/</guid>
      <description>n が \infty に向かうときに極限を持つ n の関数については以上となる。次は n^{2} や -n^{2} のように、正および負の無限大に向かう関数について同様の定義を考える。ここまでを理解した読者であれば次の定義を簡単に理解できるだろう: 関数 \phi(n) が n と共に +\infty (正の無限大) に向かうとは、任意の実数 \Delta について、どれだけ \Delta が大きくとも、「n \geq n_{0}(\Delta) ならば \phi(n) \gt \Delta」が成り立つように n_{0}(\Delta) を選べることを言う。言い換えれば、\Delta がどれだけ大きかったとしても十分大きな n に対して \phi(n) \gt \Delta となることを言う。</description>
    </item>
    <item>
      <title>8.2 暗号学的な構成要素 - 第 8 章 ネットワークセキュリティ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/security/crypto/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/security/crypto/</guid>
      <description>本章では暗号学ベースのセキュリティに関する様々な概念を一つずつ紹介していく。本節では最初のステップとして暗号学的アルゴリズム ── 暗号と暗号学的ハッシュ関数 ── を紹介する。これらのアルゴリズムは直接セキュリティに役立つわけではなく、セキュリティに役立つ仕組みで重要な構成要素となる。暗号学的アルゴリズムは鍵 (key) というパラメータを持ち、第 8.3 節では鍵を配布するときに生じる問題とその解決法を紹介する。第 8.4 節では、暗号学的な構成要素を組み合わせて正しい鍵を持つ二者の間にセキュアな通信を提供するプロトコルを構築する方法を説明する。最後に第 8.5 節では、実際に現在使われているセキュリティプロトコルおよびセキュリティシステムを詳しく見ていく。</description>
    </item>
    <item>
      <title>Dates - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Dates/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Dates/</guid>
      <description>Dates Dates モジュールは日時を扱うための型を二つ提供します: 日単位の精度を持つ Date と、ミリ秒単位の精度を持つ DateTime です。この二つの型は両方とも抽象型 TimeType の部分型です。型を区別する理由は簡単で、精度の細かい値を無視できるとコードが書きやすく、理解も簡単になるためです。例えば Date は最小単位を一日とする (時・分・秒は考えない) ことが最初から決まっているので、タイムゾーン・夏時間・うるう秒は問題とならず、実装せずに済みます。 Date と DateTime はどちらも基本的に Int64 のラッパーです。二つの型が持つ唯一のフィールド instant は実際には UTInstant{P} という型であり、この型は世界時秒 (UT second) に基づいて途切れることなく増加するマシンの時間軸を表します1。DateTime 型はタイムゾーンを認識しないので、Python の用語で言えば &#34;ナイーブ&#34; であり、Java 8 の LocalDateTime と同様です。タイムゾーンに関する機能が必要な場合は、IANA タイムゾーンデータベースを内蔵した TimeZones.jl パッケージを利用してください。</description>
    </item>
    <item>
      <title>§61 極限の定義に関して - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_61_on_definition_of_limit/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_61_on_definition_of_limit/</guid>
      <description>読者は次の点に注意すべきである。 明らかに、\phi(n) の値を有限個の n で変化させても n が無限大に向かうときの \phi(n) の挙動は変化しない。例えば 1/n は n が \infty に向かうとき 0 に向かうが、1/n の値を有限個だけ適当に変化させれば新しい関数を無数に作れる。例として n = 1,\ 2,\ 7,\ 11,\ 101,\ 107,\ 109,\ 237 で 3 となり、他の n では 1/n となる関数 \phi(n) を考えると、この関数は最初の 1/n と同様 \lim\phi(n) = 0 を満たす。あるいは n = 1,\ 2,\ 7,\ 11,\ 101,\ 107,\ 109,\ 237 で 3 となり、それ以外の n で n^{2} となる関数を \phi(n) とすれば、\phi(n) \to +\infty が成り立つ。</description>
    </item>
    <item>
      <title>8.3 鍵の事前配布 - 第 8 章 ネットワークセキュリティ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/security/key-distro/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/security/key-distro/</guid>
      <description>暗号と認証子を使うには、通信を行う参加者が通信で用いられる鍵を知っておく必要がある。秘密鍵暗号を使うとき、両参加者は共通の鍵をどのように入手するのだろうか？ あるいは公開鍵暗号を使うとき、両参加者は特定の公開鍵が特定の参加者の公開鍵であることをどうやって知るのだろうか？ この問題に対する解決策は、鍵が短い間だけ利用されるセッション鍵 (session key) なのか、それとも長い間利用される事前配布鍵 (predistributed key) なのかによって変化する。 セッション鍵とは比較的短い単一の通信をセキュアにするために用いられる鍵を言う。同じ参加者を結ぶ通信であっても、通信 (セッション) のたびに新しいセッション鍵が生成される。セッション鍵を使うとき、通信の暗号化は速度を優先するために秘密鍵暗号で行われる。参加者が通信で用いるセッション鍵を決めるとき、何らかのプロトコル ── セッション鍵生成プロトコル ── が必要となる。セッション鍵生成プロトコル自体にもセキュリティが必要であり (例えば攻撃者が新しいセッション鍵を盗めてはならず)、そのセキュリティは長い間利用される事前配布鍵を利用して提供される。</description>
    </item>
    <item>
      <title>DelimitedFiles - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/DelimitedFiles/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/DelimitedFiles/</guid>
      <description>DelimitedFiles DelimitedFiles.readdlm ── メソッド readdlm(source, delim::AbstractChar, T::Type, eol::AbstractChar; header=false, skipstart=0, skipblanks=true, use_mmap, quotes=true, dims, comments=false, comment_char=&amp;#39;#&amp;#39;) ソース source から行列を読み込みます。col で区切られる各行は行を表し、各列は delim で区切られます。ソースに指定できるのはテキストファイル・ストリーム・バイト配列です。メモリマップトファイルを使うには、マップされた部分のバイト配列表現をソースとして渡してください。 T が数値型なら返り値はその型の配列となります。そのとき数値でない要素は T が浮動小数点数型のとき NaN として、それ以外のときゼロとして読み込まれます。数値型以外の便利な T の値には String, AbstractString, Any があります。</description>
    </item>
    <item>
      <title>§62 振動関数 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_62_oscillating_functions/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_62_oscillating_functions/</guid>
      <description>n が無限大に向かうとき \phi(n) が極限に向かわず、さらに +\infty にも -\infty にも向かわないとき、「n が無限大に向かうとき \phi(n) は振動する (oscillate)」と言う。 例えば前節の最後の例のように関数の取る値が周期的な列をなす場合、その関数は振動する。ただしこのような特殊な挙動をせずに振動する場合もある。関数が振動するのは他に特別なことをしないときであり、関数の振動は純粋に否定的に定義される。 もっとも単純な振動関数の例を次に示す: \[ \phi(n) = (-1)^{n} \] \phi(n) は n が偶数なら +1 で n が奇数なら -1 であり、二つの値を交互に取る。次に \[ \phi(n) = (-1)^{n} + \frac{1}{n} \] を考える。この関数の取る値は \[ -1 + 1,\quad 1 + \frac{1}{2},\quad -1 + \frac{1}{3},\quad 1 + \frac{1}{4},\quad -1 + \frac{1}{5},\ \ldots \] となる。n が大きいときの関数の値は +1 と -1 にほぼ等しくなる。\phi(n) が極限あるいは \infty や -\infty に向かうことはないので、この関数は振動する: しかし同じ値は繰り返されない。またこの関数の値の大きさが全て 3/2 以下であることも分かる。同様に \[ \phi(n) = (-1)^{n} 100 + \frac{1000}{n} \] も振動する。n が大きいときの関数の値は 100 と -100 にほぼ等しい。この場合の大きさの最大値は n = 1 のときの 900 である。次に \phi(n) = (-1)^{n}n を考えると、関数は -1,\ 2,\ -3,\ 4,\ -5,\ \ldots\ という値を取る。\phi(n) は極限にも +\infty や -\infty にも向かわないので、この関数は振動する。しかしこの場合には、関数の値の大きさを上から抑える上限が存在しない。この二種類の例から、さらなる定義が必要だと分かる:</description>
    </item>
    <item>
      <title>8.4 認証プロトコル - 第 8 章 ネットワークセキュリティ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/security/authentication/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/security/authentication/</guid>
      <description>ここまで本章ではメッセージの暗号化と認証子の作成、そして暗号で必要な鍵の事前配布を説明した。後は全てのメッセージに認証子を付け、機密性が必要な場合はメッセージの暗号化を行えばセキュアなプロトコルが手に入ると思うかもしれない。 しかし、それで問題が解決するほどプロトコルのセキュア化の問題は単純ではない。主な理由が二つある: まず、攻撃者が以前に送られたメッセージのコピーを送信する再送攻撃 (replay attack) という問題がある。例えばウェブサイトに何かを注文するメッセージが再送されると、ウェブサイトは同じ商品が二つ注文されたと受け取るかもしれない。攻撃者はオリジナルの送信者が作成したメッセージをそのまま再送するので、再送されるメッセージはオリジナルの送信者が送信したメッセージではないにもかかわらず正当な認証子を持つ。明らかに、セキュアなプロトコルにはメッセージの独自性 (originality)を保証する手段が必要になる。</description>
    </item>
    <item>
      <title>Distributed - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Distributed/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Distributed/</guid>
      <description>Distributed Distributed.addprocs ── 関数 addprocs(manager::ClusterManager; kwargs...) -&amp;gt; プロセス ID のリスト 指定したクラスターマネージャを通してワーカープロセスを起動します。 例えば Beowulf クラスターは ClusterManagers.jl が実装する独自のクラスターマネージャを通してサポートされます。 新しく起動したワーカーがマスターからの接続確立を待機する秒数は、ワーカープロセスの環境変数 JULIA_WORKER_TIMEOUT で指定できます。この値は TCP/IP トランスポートを利用するときにだけ意味を持ちます。 REPL をブロックせずにワーカーを起動するには、addprocs を個別のタスクとして実行してください。ワーカーをプログラム的に起動する関数でも同様です。</description>
    </item>
    <item>
      <title>§63 振る舞いが分かっている二つの関数の和の振る舞い - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_63_limit_of_sum_of_known_functions/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_63_limit_of_sum_of_known_functions/</guid>
      <description>\phi(n) と \psi(n) が極限 a,\ b に向かうなら、\phi(n) + \psi(n) は 極限 a + b に向かう。 これはほとんど明らか1である。次のような議論がすぐに頭に浮かぶだろう: 「n が大きいとき、\phi(n) はほぼ a に等しく、\psi(n) は b にほぼ等しい。よってその和は a + b にほぼ等しい」 後はこれを正しく表現すればよい。 \varepsilon を任意の正の実数 (例えば .001,\ .0000001,\ \ldots) とする。n \geq n_{0} で次の条件が成り立つような n_{0} を見つければよい: \[ |\phi(n) + \psi(n) - a - b| \lt \varepsilon \qquad \text{(1)} \] 第三章で証明したように、二つの数の和の大きさは大きさの和以下なので \[ |\phi(n) + \psi(n) - a - b| \leq |\phi(n) - a| + |\psi(n) - b| \] が成り立つ。よって n \geq n_{0} で次の条件が満たされるように n_{0} を選べるなら \text{(1)} が成り立つと分かる: \[ |\phi(n) - a| + |\psi(n) - b| \lt \varepsilon \qquad \text{(2)} \] そしてこれはもちろん正しい: \lim \phi(n) = a だから、極限の定義より n_{1} が存在して n \geq n_{1} のとき |\phi(n) - a| \lt \varepsilon&#39; が成り立つ。ここで \varepsilon&#39; はどれだけ小さくても構わない。よって \varepsilon&#39; = \frac{1}{2}\varepsilon として n \geq n_{1} で |\phi(n) - a| \lt \frac{1}{2}\varepsilon となるようできる。同様に n \geq n_{2} で |\psi(n) - b| \lt \frac{1}{2}\varepsilon となる n_{2} を見つけられる。後は \bm{n_{1}} と \bm{n_{2}} の大きい方を n_{0} として取る。そうすれば n \geq n_{0} のとき |\phi(n) - a| \lt \frac{1}{2}\varepsilon かつ |\psi(n) - b| \lt \frac{1}{2}\varepsilon となって (2) が満たされるので、定理が証明される。</description>
    </item>
    <item>
      <title>8.5 セキュリティシステムの例 - 第 8 章 ネットワークセキュリティ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/security/systems/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/security/systems/</guid>
      <description>本章ではセキュリティの様々な要素を提供する部品を見てきた。例えば暗号アルゴリズム、鍵の事前配布方式、認証プロトコルはどれも部品と言える。本節では、こういった部品を利用する完全なシステムをいくつか見ていく。 本節で見るシステムはセキュリティが提供されるプロトコル層で大まかに分類できる。アプリケーション層にセキュリティを提供するシステムとしては、メールで利用される PGP (Pretty Good Privacy)、そしてリモートログインで利用される SSH (Secure Shell) がある。トランスポート層向けのセキュリティシステムとしては、IETF が策定する TLS (Transport Layer Security)、および TLS の起源となった古い規格 SSL (Secure Socket Layer) がある。IPsec (IP Security) は名前が示すように IP 層 (ネットワーク層) で用いられる。IEEE 802.11i は無線ネットワークのリンク層にセキュリティを提供する。本節ではこういったアプローチのそれぞれについて、その特筆すべき機能を説明していく。</description>
    </item>
    <item>
      <title>FileWatching - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/FileWatching/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/FileWatching/</guid>
      <description>FileWatching FileWatching.poll_fd ── 関数 poll_fd(fd, timeout_s::Real=-1; readable=false, writable=false) ファイル記述子 fd の読み込み可能性および書き込み可能性の変更を監視します。タイムアウトは timeout_s 秒に設定されます。 二つのキーワード引数は読み込み可能性と書き込み可能性のどちらを監視するかを指定します。少なくとも一方は true である必要があり、両方を true にしても構いません。 返り値は readable, writable, timedout という真偽値フィールドを持ったオブジェクトであり、これがポーリングの結果を与えます。 ソースコード FileWatching.poll_file ── 関数 poll_file(path::AbstractString, interval_s::Real=5.007, timeout_s::Real=-1) -&amp;gt; (previous::StatStruct, current) ファイルの変更を監視します。interval_s 秒ごとにポーリングを行い、ファイルが変更されるか timeout_s 秒が経過したら値を返します。interval_s は長い期間であるべきです: デフォルトでは 5.007 秒です。</description>
    </item>
    <item>
      <title>§64 極限に関する諸定理 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_64_general_theorems_concerning_limits/</link>
      <pubDate>Thu, 06 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_64_general_theorems_concerning_limits/</guid>
      <description>次の結果は簡単に確認できるだろう: \phi(n) が極限に向かって \psi(n) が +\infty または -\infty に向かうか無限または有限に振動するなら、\phi(n) + \psi(n) は \psi(n) と同じように振る舞う。 \phi(n) \to +\infty で \psi(n) が +\infty に向かうか有限に振動するなら、\phi(n) + \psi(n) \to +\infty が成り立つ。 もちろん二つ目の命題は +\infty を -\infty に変えても成り立つ。 \phi(n) \to + \infty かつ \psi(n) \to -\infty なら、\phi(n) + \psi(n) は極限に向かう場合もあれば +\infty または -\infty に向かう場合もある。あるいは有限または無限に振動する場合もある。</description>
    </item>
    <item>
      <title>視点: ブロックチェーンと分散インターネット - 第 8 章 ネットワークセキュリティ - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/security/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/security/trend/</guid>
      <description>アプリケーションのユーザーは、おそらく深く考えることもなく、自身が利用するアプリケーションに多大な信頼を置いている。特に Facebook や Google といった巨大なサービスは、個人的な写真や動画だけではなく、他のウェブアプリケーションへのシングルサインオン (Single Sign On) の形でユーザー自身のアイデンティティまで保存・管理する。近年この事実は多くの人々によって問題とみなされ、ユーザーがサードパーティを信頼する必要がない分散プラットフォーム (decentralized platform) への関心が高まっている。分散プラットフォームのシステムは Bitcoin といった暗号通貨を利用して構築される。ここで暗号通貨は金銭的価値があるために利用されるのではなく、暗号通貨自身がブロックチェーン (blockchain) と呼ばれる単一の組織が管理できない分散テクノロジをベースとしているために利用される。世間を取り巻く熱狂ハイプに惑わされないのは難しいことだが、本質的にブロックチェーンは分散されたログ (元帳) と言える。そのログには誰でも「事実」を書き込むことができ、その「事実」が記録されたことを後から世界の誰に対してでも証明できる。</description>
    </item>
    <item>
      <title>Future - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Future/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Future/</guid>
      <description>Future Future モジュールは既存の関数の将来の振る舞いを実装します。これらは将来の Julia のリリースで現在の振る舞いを置き換えます。 Future.copy! ── 関数 Future.copy!(dst, src) -&amp;gt; dst src を dst にコピーします。 Julia 1.1 この関数は Julia 1.1 で Base に移動しました。この関数ではなく copy!(dst, src) を使ってください。Future.copy! は将来非推奨となります。 ソースコード Future.randjump ── 関数 randjump(r::MersenneTwister, steps::Integer) -&amp;gt; MersenneTwister MersenneTwister オブジェクトを作成・初期化し、状態を r から steps ステップだけ進めます。一ステップは二つの Float64 の生成に対応します。異なる step の値それぞれに対して、大きな多項式が内部で生成されます。steps=big(10)^20 に対する MersenneTwister が一つ事前に計算されています。</description>
    </item>
    <item>
      <title>§65 振る舞いが分かっている二つの関数の積の振る舞い - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_65_limit_of_product_of_known_functions/</link>
      <pubDate>Thu, 06 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_65_limit_of_product_of_known_functions/</guid>
      <description>二つの関数の積についても同様の定理をそれぞれ示せる。一番重要な定理を次に示す: \lim\phi(n) = a かつ \lim\psi(n) = b なら \[ \lim\phi(n)\psi(n) = ab \] が成り立つ。 \phi_{1}(n) と \psi_{1}(n) を \[ \phi(n) = a + \phi_{1}(n), \quad \psi(n) = b + \psi_{1}(n) \] と定義すると、\lim\phi_{1}(n) = 0 と \lim\psi_{1}(n) = 0 が成り立つ。そして \[ \phi(n)\psi(n) = ab + a\psi_{1}(n) + b\phi_{1}(n) + \phi_{1}(n)\psi_{1}(n) \] なので、\phi(n)\psi(n) - ab の絶対値は a\psi_{1}(n),\ b\phi_{1}(n),\ \phi_{1}(n)\psi_{1}(n) の絶対値の和以下である。したがって \[ \lim\{\phi(n)\psi(n) - ab\} = 0 \] が分かり、定理が証明される。</description>
    </item>
    <item>
      <title>第 9 章 アプリケーション - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/applications/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/applications/</guid>
      <description>これは終わりではない。終わりの始まりですらない。しかしおそらくは、始まりの終わりなのだろう。 ── ウィンストン・チャーチル</description>
    </item>
    <item>
      <title>InteractiveUtils - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/InteractiveUtils/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/InteractiveUtils/</guid>
      <description>InteractiveUtils Base.Docs.apropos ── 関数 apropos(string) 文字列 string を全てのドキュメントから検索します。大文字と小文字を区別しません。 ソースコード InteractiveUtils.varinfo ── 関数 varinfo(m::Module=Main, pattern::Regex=r&amp;#34;&amp;#34;) モジュールがエクスポートするグローバル変数に関する情報を示す Markdown の表を返します。省略可能な引数 pattern を指定すると、それとマッチするグローバル変数だけを含んだ表が返ります。 メモリ使用量はオブジェクトの内部構造のサイズの下限を近似した値です。 ソースコード InteractiveUtils.versioninfo ── 関数 versioninfo(io::IO=stdout; verbose::Bool=false) 使われている Julia のバージョンに関する情報を出力します。出力は真偽値のキーワード引数によって制御されます:</description>
    </item>
    <item>
      <title>§66 振る舞いが分かっている二つの関数の商の振る舞い - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_66_limit_of_division_of_known_functions/</link>
      <pubDate>Thu, 06 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_66_limit_of_division_of_known_functions/</guid>
      <description>もちろん二つの関数の差についても同様の定理が存在し、ここまでの定理の系として簡単に示せる。商 \[ \frac{\phi(n)}{\psi(n)} \] に関する定理を示すには、次の定理をまず証明する。 \lim\phi(n) = a で a が 0 でないなら、次が成り立つ: \[ \lim\frac{1}{\phi(n)} = \frac{1}{a} \] 仮定から \[ \phi(n) = a + \phi_{1}(n) \] と置くと \lim\phi_{1}(n) = 0 であり、そして \[ \left|\frac{1}{\phi(n)} - \frac{1}{a}\right| = \frac{|\phi_{1}(n)|}{|a| |a + \phi_{1}(n)|} \] が成り立つ。\lim\phi_{1}(n) = 0 より、n \geq n_{0} のときこの値が \varepsilon 以下になるよう n_{0} を選べる。</description>
    </item>
    <item>
      <title>問題: アプリケーションごとのプロトコル - 第 9 章 アプリケーション - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/applications/problem/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/applications/problem/</guid>
      <description>本書はコンピューターネットワークを利用する人々が望むアプリケーションプログラム ── ウェブブラウザからビデオ会議ツールまで ── についての議論から始まった。以降の章では、そういったアプリケーションを実現するためのネットワークインフラストラクチャを構成要素ごとに一つずつ説明してきた。本章で話は一周して元に戻り、再度ネットワークアプリケーションが話題となる。ネットワークアプリケーションは「他のマシン上のピアとメッセージを交換する」という意味でネットワークプロトコルの実装でもあれば、「ウィンドウシステム、ファイルシステム、そして最終的にはユーザーと対話する」という意味で伝統的なアプリケーションプログラムでもある。本章では現在利用できる有名なネットワークアプリケーションを見ていく。</description>
    </item>
    <item>
      <title>LibGit2 - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/LibGit2/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/LibGit2/</guid>
      <description>LibGit2 LibGit2 モジュールは libgit2 に対するバインディングを提供します。libgit2 はバージョン管理システム Git のコア機能を実装するポータブルな C ライブラリです。このバインディングは現在 Julia のパッケージマネージャで使われています。このモジュールはいずれ個別のパッケージに移動する予定です。 このドキュメントは一部 libgit2 API に関するいくらかの前提知識を仮定します。ここに示すオブジェクトやメソッドについてさらに詳しくは、upstream の libgit2 API リファレンスを参照してください。</description>
    </item>
    <item>
      <title>§67 有理関数の極限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_67_limits_of_rational_functions/</link>
      <pubDate>Thu, 06 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_67_limits_of_rational_functions/</guid>
      <description>R\{\phi(n), \psi(n), \chi(n),\ \ldots\} が \phi(n),\ \psi(n),\ \chi(n),\ \ldots の有理関数である、つまり \phi(n),\ \psi(n),\ \chi(n),\ \ldots の多項式 P,\ Q を使って \[ \frac{P\{\phi(n), \psi(n), \chi(n),\ \ldots\}}{Q\{\phi(n), \psi(n), \chi(n),\ \ldots\}} \] と書けるとする。このとき \[ \lim\phi(n) = a, \quad \lim\psi(n) = b, \quad \lim\chi(n) = c,\ \ldots \] で Q(a, b, c,\ \ldots) \neq 0 なら、次の等式が成り立つ: \[ \lim R\{\phi(n), \psi(n), \chi(n),\ \ldots\} = R(a, b, c,\ \ldots) \] 証明は次の通り。P は定数 A と正の整数 p,\ q,\ \ldots を使った次の形の項の和として表せる: \[ A\{\phi(n)\}^{p} \{\psi(n)\}^{q} \cdots \] §65 の定理 (を任意個の関数の積に拡張したもの) から、この項は極限 Aa^{p}b^{q}\cdots に向かうと分かる。よって §63 の定理の拡張から P は極限 P(a, b, c,\ \ldots) に向かう。したがって §66 の定理から示したい式が得られる。</description>
    </item>
    <item>
      <title>9.1 伝統的アプリケーション - 第 9 章 アプリケーション - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/applications/traditional/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/applications/traditional/</guid>
      <description>最も有名な二つのネットワークアプリケーション ── ワールドワイドウェブとメール ── から議論を始めよう。大まかに捉えると、この二つのアプリケーションはどちらもリクエスト/リプライのパラダイムを利用する ── ユーザーがリクエストをサーバーに送信し、サーバーはクライアントにリプライを返す。こういったアプリケーションはコンピューターネットワークが誕生したころから存在していたので、本書ではこういったアプリケーションを「伝統的」アプリケーションと呼ぶ (正確に言えばウェブはメールよりずっと後に誕生したが、ウェブの前身とも言えるファイル転送アプリケーションはメールと同程度に古くから存在する)。これに対して次節以降では、最近になって広く使われるようになったアプリケーションのクラスを見る: ストリーミングアプリケーション (映像や音声を配信するマルチメディアアプリケーション) や、オーバーレイを利用する様々なアプリケーションが解説される。なお、この分類は曖昧な点に注意してほしい。例えばウェブを使ってマルチメディアデータを転送することは当然できる。しかし本節では、ウェブページや画像といったデータのリクエストというウェブの一般的な利用方法に焦点を当てる。</description>
    </item>
    <item>
      <title>Libdl - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Libdl/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Libdl/</guid>
      <description>Libdl Libdl.dlopen ── 関数 dlopen(libfile::AbstractString [, flags::Integer]; throw_error:Bool = true) 共有ライブラリを読み込み、不透明1なハンドルを返します。 定数 Libdl.dlext が与える拡張子 (.so, .dll, .dylib のいずれか) は dlopen の文字列引数 libfile から省略でき、省略すると自動で付け足されます。libfile が絶対パスでないときは、システムのロードパスおよび配列 DL_LOAD_PATH にあるパスで libfile が検索されます。 省略可能な引数 flag には RTLD_LOCAL, RTLD_GLOBAL, RTLD_LAZY, RTLD_NOW, RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND, RTLD_FIRST をビット単位の OR でゼロ個以上繫いだものを指定できます。このフラグは POSIX (および GNU libc や MacOS) の dlopen の対応するフラグに変換されますが、現在のプラットフォームで利用できない機能を指定したときは無視されます。</description>
    </item>
    <item>
      <title>§68 一般的な有理関数の極限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_68_general_limits_of_rational_functions/</link>
      <pubDate>Thu, 06 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_68_general_limits_of_rational_functions/</guid>
      <description>上の一般的な定理は次の非常に重要な問題に適用できる: 「最も一般的な n の有理関数 \[ S(n) = \frac{a_{0}n^{p} + a_{1}n^{p-1} + \cdots + a_{p}} {b_{0}n^{q} + b_{1}n^{q-1} + \cdots + b_{q}} \] は、n が \infty に向かうときどう振る舞うか1？」 定理を適用するために、S(n) を次のように変形する: \[ n^{p-q}\left\{ \biggl(a_{0} + \frac{a_{1}}{n} + \cdots + \frac{a_{p}}{n^{p}}\biggr)\bigg/ \biggl(b_{0} + \frac{b_{1}}{n} + \cdots + \frac{b_{q}}{n^{q}}\biggr) \right\} \] 中括弧の中身は R\{\phi(n)\} という形をしている。ここで \phi(n) = 1/n であり、n が \infty に向かうとき R は R(0) = a_{0}/b_{0} に向かう。そして p \lt q なら n^{p-q} \to 0、p = q なら n^{p-q} = 1 したがって n^{p-q} \to 1、p \gt q なら n^{p-q} \to +\infty となる。よって §65 の定理から \[ \begin{cases} \lim S(n) = 0 &amp; (p \lt q), \\ \lim S(n) = a_{0}/b_{0} &amp; (p = q), \\ S(n) \to +\infty &amp; (p \gt q,\ a_{0}/b_{0} \text{ が正}), \\ S(n) \to -\infty &amp; (p \gt q,\ a_{0}/b_{0} \text{ が負}) \end{cases} \] が分かる。</description>
    </item>
    <item>
      <title>9.2 マルチメディアアプリケーション - 第 9 章 アプリケーション - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/applications/multimedia/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/applications/multimedia/</guid>
      <description>前節で説明した伝統的アプリケーションと同様に、電話やビデオ会議といったマルチメディアアプリケーションにも独自のプロトコルが必要となる。マルチメディアアプリケーション用プロトコルを設計する初期の実験は多くが MBone Tools で行われた。MBone Tools は MBone と呼ばれるネットワーク向けに開発されたアプリケーションの総称であり、vat や vic が含まれる。MBone は IP マルチキャストをサポートする実験的オーバーレイネットワークで、複数人参加のビデオ会議などが可能だった (オーバーレイネットワークは第 9.4 節で詳しく説明する)。最初のうちはそれぞれのアプリケーションが独自のプロトコルを (ときには複数) 実装していたものの、異なるマルチメディアアプリケーションでも要件は共通することが明らかになった。ここからマルチメディアアプリケーションでの利用を念頭に置いた汎用プロトコルがいくつも生まれていった。</description>
    </item>
    <item>
      <title>LinearAlgebra - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/LinearAlgebra/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/LinearAlgebra/</guid>
      <description>LinearAlgebra 多次元配列のサポートに加えて (およびその一部として)、Julia は一般的で有用な多くの線形代数演算に対するネイティブ実装を提供します。この実装は using LinearAlgebra で読み込むことができます。tr, det, inv のような基本的な演算は全てサポートされます: julia&amp;gt; A = [1 2 3; 4 1 6; 7 8 1] 3×3 Array{Int64,2}: 1 2 3 4 1 6 7 8 1 julia&amp;gt; tr(A) 3 julia&amp;gt; det(A) 104.0 julia&amp;gt; inv(A) 3×3 Array{Float64,2}: -0.451923 0.211538 0.0865385 0.365385 -0.192308 0.0576923 0.240385 0.0576923 -0.0673077 固有値や固有ベクトルの計算といったその他の有用な演算もサポートされます: julia&amp;gt; A = [-4. -17.; 2. 2.] 2×2 Array{Float64,2}: -4.0 -17.0 2.0 2.0 julia&amp;gt; eigvals(A) 2-element Array{Complex{Float64},1}: -1.0 - 5.0im -1.0 + 5.0im julia&amp;gt; eigvecs(A) 2×2 Array{Complex{Float64},2}: 0.945905-0.0im 0.945905+0.0im -0.166924+0.278207im -0.166924-0.278207im さらに、Julia は様々な分解演算をサポートします。事前に行列を扱いやすい (実行速度やメモリ使用量に関して有利な) 形に分解することで、線形方程式の求解や行列のべき乗といった問題を高速化できます。詳細は factorize のドキュメントを参照してください。使用例を示します:</description>
    </item>
    <item>
      <title>§69 単調増加関数 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_69_steadily_increasing_or_decreasing_functions/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_69_steadily_increasing_or_decreasing_functions/</guid>
      <description>n の関数からなる特殊なクラスで特に重要なのが、n が \infty に向かうときの値の変動が常に同じ方向である関数のクラス、つまり常に増加する関数と常に減少する関数からなるクラスである。ただ \phi(n) が常に増加するなら -\phi(n) は常に減少するので、二つのケースを別々に考える必要はない。どちらかに対して証明された定理は簡単にもう一方へと拡張できる。 全ての n に対して \phi(n + 1) \geq \phi(n) なら、関数 \phi(n) は \bm{n} に関して単調増加 (increase steadily with n) だと言う。</description>
    </item>
    <item>
      <title>9.3 インフラストラクチャアプリケーション - 第 9 章 アプリケーション - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/applications/infrastructure/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/applications/infrastructure/</guid>
      <description>インターネットのスムーズな動作に不可欠でありながらもプロトコルスタックの層モデルに厳密には当てはまらないプロトコルがいくつか存在する。その一つに DNS (Domain Name System) がある ── DNS は典型的なユーザーが起動するアプリケーションではないものの、ネットワークを利用する DNS 以外のほぼ全てのアプリケーションは DNS に依存する。DNS が提供するネームサービス (名前解決サービス) はホスト名からホストアドレスへの変換を行う。こういったアプリケーションが存在することで、他のアプリケーションのユーザーはリモートホストをアドレスではなく名前で参照できる。言い換えれば、多くの場合ネームサービスを利用するのは他のアプリケーションであり、人間ではない。</description>
    </item>
    <item>
      <title>第 6 章 多変量カルマンフィルタ - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/multivariate_kalman_filters/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/multivariate_kalman_filters/</guid>
      <description>これで多変量形式の完全なカルマンフィルタを解説・実装する準備が整った。前章では多変量ガウス分布が複数の確率変数 (例えば航空機の位置と速度) の間に存在する相関関係を表現することを学び、変数の間に相関関係があると事後分布が格段に改善されることを見た。たとえ位置と速度が大まかにしか分からなくても、その間に相関があることを知っていれば、非常に正確な推定値が得られる。 完全な解説付きの例をいくつか使ってフィルタの動作を直感的に理解していくのが望ましいと思っているので、これからたくさんの例を示す。ただし、本章で示す例では多くの問題がごまかされている。特殊ケースでしか動かなかったり、&#34;魔法&#34; が含まれていたり──特定の結果を導いた理由が明らかでなかったり──する。しかし一般化された厳密な等式から始めたとしたら、たくさんある記号が何を表して、実際の問題にどうすれば適用できるのだろうかと途方に暮れてしまうだろう。厳密な数学的基礎は次章に回し、本章で触れられない正しい近似の仕方や追加情報はそこで提供する。</description>
    </item>
    <item>
      <title>Logging - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Logging/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Logging/</guid>
      <description>Logging Logging モジュールは計算の履歴や進捗をイベントのログとして記録する方法を提供します。イベントはソースコードにログを表す文を挿入することで作成されます: @warn &amp;#34;Abandon printf debugging, all ye who enter here!&amp;#34; ┌ Warning: Abandon printf debugging, all ye who enter here! └ @ Main REPL[1]:1 Logging モジュールのシステムは println() をソースコード中にまき散らすよりもいくつかの点で優れています。第一に、Logging を使うとメッセージの可視性や表示方法をソースコードを改変せずに変更できます。例えば上の例で使った @warn ではなく @debug を使って @debug &amp;#34;The sum of some values $(sum(rand(100)))&amp;#34; とすると、デフォルトでは何も出力されなくなります。さらにシステムは無視されるメッセージを評価しないので、ソースコードにこういったデバッグ文を残しておいても実行速度への影響はごくわずかです。この例で言えば、sum(rand(100)) の評価とその後の文字列処理はデバッグログが有効になっていない限り実行されません。</description>
    </item>
    <item>
      <title>§70 単調増加関数の収束判定 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_70_convergence_of_monotonic_functions/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_70_convergence_of_monotonic_functions/</guid>
      <description>上述の定理がなぜ重要かというと、この定理を使えば n の関数が n \to \infty のとき極限に向かうかどうかをあらかじめ極限を予測、推定することなく判定できる場面が非常に多いためである。これは今まで不可能だった。極限の存在とその値が分かっているなら \[ |\phi(n) - l| \lt \varepsilon\quad (n \geq n_{0}) \] という判定法が使える。例えば \phi(n) = 1/n なら、極限には 0 しかあり得ないとすぐに分かる。しかし \[ \phi(n) = \left(1 + \frac{1}{n}\right)^{n} \] が極限に向かうかどうかを判定するときには、極限がそもそも存在するのか、極限が存在したとしてその値は何かが分からない。そのため極限 l を使う上述の判定法は、l の存在を判定するのに全く使いものにならない。</description>
    </item>
    <item>
      <title>9.4 オーバーレイネットワーク - 第 9 章 アプリケーション - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/applications/overlays/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/applications/overlays/</guid>
      <description>インターネットは誕生したときからクリーンなモデルを採用してきた: ネットワーク内のルーターがパケットを送信元から宛先に向けて転送し、ホストで実行されるアプリケーションはネットワークの端に接続される。第 9.1 節で説明したクライアント/サーバーパラダイムには、このモデルが明らかに当てはまる。 しかし最近になって、転送の判断を自ら行うインターネット中に分散されたアプリケーションが新たに登場し、そういったアプリケーションではパケットの転送とアプリケーションの処理の境界は曖昧になってきている。この新しいタイプのハイブリッドなアプリケーションの実装では、アプリケーション特有のわずかな処理のサポートが伝統的なルーターとスイッチに追加されることもある。例えば、いわゆる L7 スイッチ (L7 switch) はサーバークラスターの前に設置され、HTTP リクエストをリクエストされた URL に応じて特定のサーバーに転送する。しかし、インターネットに新しい機能を追加するときの選択肢として現在大きな盛り上がりを見せているのはオーバーレイネットワーク (overlay network) である。オーバーレイネットワークは単に「オーバーレイ」とも呼ばれる。</description>
    </item>
    <item>
      <title>Markdown - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/markdown/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/markdown/</guid>
      <description>Markdown この章では Julia 標準の Markdown ライブラリが実装する Markdown の構文を説明します。次の Markdown 要素がサポートされます: インライン要素 ここで「インライン」とは、段落といったテキストブロックの中で利用できるという意味です。次の要素がインライン要素です: 太字 テキストを二つのアスタリスク ** で囲むと、内側のテキストが太字になります: この段落には**太字**がある。 斜体 テキストを一つのアスタリスク * で囲むと、内側のテキストが斜体になります: この段落には*斜体*の文字がある。 リテラル 書かれた通りにそのまま出力されるべきテキストは単一のバックティック ` で囲んでください:</description>
    </item>
    <item>
      <title>§71 ワイエルシュトラスの定理の別証明 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_71_alternative_proof_of_weierstrasss_theorem/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_71_alternative_proof_of_weierstrasss_theorem/</guid>
      <description>§69 の結果を使うと、§19 で示した重要な定理の別証明が可能になる。 PQ を二つの等しい部分に分ける。二つの部分の少なくとも一方は S の点を無限に含むので、それを P_{1}Q_{1} とする (図 28)。両方が無限の点を含むときは左側の部分を選ぶ。 図 28 同様に P_{1}Q_{1} を二つの等しい部分に分ければ、少なくとも一方は S の点を無限に含む。無限の点を含むのが片方だけならそれを P_{2}Q_{2} とし、両方が含むときは左側の部分を P_{2}Q_{2} とする。この操作を繰り返すと区間の無限列 \[ PQ,\quad P_{1}Q_{1},\quad P_{2}Q_{2},\quad P_{3}Q_{3},\quad \ldots, \] を定義できる。各区間は一つ前の区間の半分であり、全ての区間は S の点を無限に含む。</description>
    </item>
    <item>
      <title>視点: クラウドが新たなインターネット - 第 9 章 アプリケーション - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/applications/trend/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/applications/trend/</guid>
      <description>第 9.1 節で見たように、電子メールやウェブサーバーといった伝統的なインターネットアプリケーションの実行場所はオンプレミスのマシンからコモディティのクラウドで実行される VM へと移行しつつある。この影響は用語の変化 (「ウェブサービス」から「クラウドサービス」へ) や内部で利用されるテクノロジの変化 (仮想マシンからクラウドネイティブのマイクロサービスへ) として現れている。しかし、ネットワークアプリケーションの実装方法に対してクラウドが及ぼす影響はこの移行が示唆するよりもさらに大きい。これから最も大きな影響力を持つのは、おそらくコモディティクラウドとオーバーレイネットワークを組み合わせたテクノロジ (例えば第 9.4 節で説明したピアツーピアネットワーク) である。</description>
    </item>
    <item>
      <title>Mmap - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Mmap/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Mmap/</guid>
      <description>Mmap Mmap.Anonymous ── 型 Mmap.Anonymous(name::AbstractString=&amp;#34;&amp;#34;, readonly::Bool=false, create::Bool=true) ファイルに結び付かないゼロで初期化されたマップトメモリを指す IO 風オブジェクトを作成します。返り値のオブジェクトは Mmap.mmap で利用できます。 SharedArray が共有メモリ配列を作るときに利用します。 例 julia&amp;gt; using Mmap julia&amp;gt; anon = Mmap.Anonymous(); julia&amp;gt; isreadable(anon) true julia&amp;gt; iswritable(anon) true julia&amp;gt; isopen(anon) true ソースコード Mmap.mmap ── 関数 Mmap.mmap(io::Union{IOStream,AbstractString,Mmap.AnonymousMmap} [, type::Type{Array{T,N}}, dims, offset]; grow::Bool=true, shared::Bool=true) Mmap.mmap(type::Type{Array{T,N}}, dims) メモリマップを使って、値がファイルとリンクした配列を作成します。大きすぎてコンピューターのメモリに収まらないデータを簡単に処理する手段を提供します。 作成される配列の型は Array{T,N} です。要素型を表すビット型 T と次元 N が配列中のバイトを解釈する方法を決定します。ファイルはバイナリフォーマットで格納されている必要があり、フォーマットの変換は利用できないことに注意してください (これは Julia ではなくオペレーティングシステムの制限です)。</description>
    </item>
    <item>
      <title>§72 \(x^n\) の極限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_72_limit_of_one_plus_one_over_n_to_n_x_n/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_72_limit_of_one_plus_one_over_n_to_n_x_n/</guid>
      <description>§69 の結果を \phi(n) = x^{n} という特に重要な関数に適用しよう。x = 1 なら \phi(n) = 1 で \lim\phi(n) = 1 となり、x = 0 なら \phi(n) = 0 で \lim \phi(n) = 0 となる。これらの特殊ケースについてこれ以上考える必要はない。 まず x が正だとする。すると \phi(n + 1) = x\phi(n) なので、x \gt 1 なら \phi(n) は n と共に増加し、x \lt 1 なら n と共に減少する。 もし x \gt 1 なら、x^{n} は (明らかに 1 より大きい) 極限または +\infty に向かう。極限 l に向かうなら 例 25.7 から \lim\phi(n + 1) = \lim\phi(n) = l であり、ここから \[ \lim\phi(n + 1) = \lim x\phi(n) = x\lim\phi(n) = xl \] となって l = xl が分かる。しかし x と l はどちらも 1 より大きいので、これはあり得ない。よって \[ x^{n} \to +\infty\quad (x \gt 1) \] が分かる。</description>
    </item>
    <item>
      <title>Pkg - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Pkg/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Pkg/</guid>
      <description>Pkg Pkg は Julia 組み込みのパッケージマネージャです。パッケージのインストール・更新・削除といった処理を行います。 情報 ここにあるのは Pkg の非常に簡単な紹介です。Project.toml・Manifest.toml・パッケージバージョンの互換性 ([compat])・環境・レジストリなどに関する詳しい情報は https://julialang.github.io/Pkg.jl/v1/ にある完全なマニュアルを参照してください。 ここにあるのは Julia のパッケージマネージャ Pkg の手短な概観です。Julia を使い始めたユーザーが Pkg の基本的な機能に慣れるのに役立つはずです。</description>
    </item>
    <item>
      <title>§73 \((1 &#43; \frac{1}{n})^{n}\) の極限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_73_limit_of_one_plus_one_over_n_to_n/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_73_limit_of_one_plus_one_over_n_to_n/</guid>
      <description>§69 の定理を使うと \displaystyle \phi(n) = \left(1 + \frac{1}{n}\right)^{n} に関するより難しい問題を解くことができる。 二項定理1から次が分かる: \[ \begin{gathered} \begin{aligned} \biggl(1 + \frac{1}{n}\biggr)^{n} &amp; = 1 + n · \frac{1}{n} + \frac{n(n - 1)}{1·2}\, \frac{1}{n^{2}} + \cdots + \frac{n(n - 1)\cdots (n - n + 1)}{1·2\cdots n}\, \frac{1}{n^{n}}\\ &amp; = 1 + 1 + \frac{1}{1·2} \biggl(1 - \frac{1}{n}\biggr) + \frac{1}{1·2·3} \biggl(1 - \frac{1}{n}\biggr) \biggl(1- \frac{2}{n}\biggr) + \cdots\\ \end{aligned} \\ {} + \frac{1}{1·2\cdots n} \biggl(1 - \frac{1}{n}\biggr) \biggl(1 - \frac{2}{n}\biggr)\cdots \biggl(1 - \frac{n - 1}{n}\biggr) \end{gathered} \] この式の第 p + 1 項 \[ \frac{1}{1·2\cdots p} \left(1 - \frac{1}{n}\right) \left(1 - \frac{2}{n}\right)\cdots \left(1 - \frac{p - 1}{n}\right) \] は正であり、n の単調増加関数と分かる。項数は n と共に増えるので \left(1 + \dfrac{1}{n}\right)^{n} は n と共に増加し、n \to \infty のとき極限または +\infty に向かう。</description>
    </item>
    <item>
      <title>Printf - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Printf/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Printf/</guid>
      <description>Printf Printf.@printf ── マクロ @printf([io::IOStream], &amp;#34;%Fmt&amp;#34;, args...) C の printf 形式のフォーマット指定文字列を使って args を出力します。いくつか注意点があります: フラグ %a, %A, %e, %E, %f, %F, %g, %G では、Inf と NaN はそれぞれ &#34;Inf&#34; および &#34;NaN&#34; として出力されます。また浮動小数点数に一番近い十進数値が二つある場合には、ゼロから遠い方が出力されます。 省略可能引数 IOStream が指定されると、そこが出力のリダイレクト先となります。 @sprintf も参照してください。 例 julia&amp;gt; @printf(&amp;#34;%f %F %f %F\n&amp;#34;, Inf, Inf, NaN, NaN) Inf Inf NaN NaN julia&amp;gt; @printf &amp;#34;%.0f %.1f %f\n&amp;#34; 0.5 0.025 -0.0078125 1 0.0 -0.007813 ソースコード Printf.@sprintf ── マクロ @sprintf(&amp;#34;%Fmt&amp;#34;, args...) @printf によるフォーマットの出力を文字列として返します。</description>
    </item>
    <item>
      <title>§74 補助的な不等式 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_74_some_algebraical_lemmas/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_74_some_algebraical_lemmas/</guid>
      <description>以降で使うことになる初等的な不等式をいくつかここで示しておく。 \alpha \gt 1 で r が正の整数なら \[ r\alpha^{r} \gt \alpha^{r-1} + \alpha^{r-2} + \cdots + 1 \] が成り立つ。両辺に \alpha - 1 を乗じれば \[ r\alpha^{r}(\alpha - 1) \gt \alpha^{r} - 1 \] となり、さらに両辺に r(\alpha^{r} - 1) を足して r(r + 1) で割れば \[ \frac{\alpha^{r+1} - 1}{r + 1} \gt \frac{\alpha^{r} - 1}{r}\quad (\alpha \gt 1) \qquad \text{(1)} \] を得る。同様に \[ \frac{1 - \beta^{r+1}}{r + 1} \lt \frac{1 - \beta^{r}}{r}\quad (0 \lt \beta \lt 1) \qquad \text{(2)} \] も示せる。 ここから r と s が正の整数で r \gt s なら \[ \frac{\alpha^{r} - 1}{r} \gt \frac{a^{s} - 1}{s},\quad \frac{1 - \beta^{r}}{r} \lt \frac{1 - \beta^{s}}{s} \qquad \text{(3)} \] が成り立つと分かる。ここで 0 \lt \beta \lt 1 \lt \alpha である。特に s = 1 とすれば \[ \alpha^{r} - 1 \gt r(\alpha - 1),\quad 1 - \beta^{r} \lt r(1 - \beta) \qquad \text{(4)} \] を得る。</description>
    </item>
    <item>
      <title>Profile - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Profile/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Profile/</guid>
      <description>Profile Profile.@profile ── マクロ @profile @profile &amp;lt;expression&amp;gt; は一定の周期でバックトレースを取得しながら式を実行します。取得されたバックトレースは内部にあるバッファに追加されます。 ソースコード これ以降のメソッドはエクスポートされないので、Profile.print() などとして呼び出す必要があります。 Profile.clear ── 関数 clear() 内部バッファに含まれるバックトレースを全て削除します。 ソースコード Profile.print ── 関数 print([io::IO = stdout,] [data::Vector]; kwargs...) 性能測定の結果を io に出力します。io のデフォルト値は stdout です。ベクトル data を渡さないと、内部バッファに積まれたバックトレースが使われます。</description>
    </item>
    <item>
      <title>§75 \(n (\sqrt[n]{x} - 1)\) の極限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_75_limit_of_a_certain_function/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_75_limit_of_a_certain_function/</guid>
      <description>§74 の不等式 (3) の最初の式に r = 1/(n-1) と s = 1/n を代入すると、\alpha \gt 1 なら \[ (n - 1)(\sqrt[n-1]{\alpha} - 1) \gt n(\sqrt[n]{\alpha} - 1) \] だと分かる。よって \phi(n) = n(\sqrt[n]{\alpha} - 1) なら \phi(n) は n に関して単調減少する。加えて \phi(n) は常に正なので、\phi(n) は n \to \infty のとき極限 l に向かい、l \geq 0 である。 同様に §74 で示した (7) の最初の式で s = 1/n とすると \[ n(\sqrt[n]{\alpha} - 1) \gt \sqrt[n]{\alpha}\left(1 - \frac{1}{\alpha}\right) \gt 1 - \frac{1}{\alpha} \] を得る。よって l \geq 1 - (1/\alpha) \gt 0 が分かる。つまり \alpha \gt 1 なら \[ \lim_{n \to \infty} n(\sqrt[n]{\alpha} - 1) = f(\alpha) \] であり、f(\alpha) \gt 0 が成り立つ。</description>
    </item>
    <item>
      <title>Julia REPL - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/REPL/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/REPL/</guid>
      <description>Julia REPL Julia の実行形式 julia にはコマンドラインから使えるフル機能の対話 REPL (read-eval-print loop) が組み込まれています。Julia の文を素早く簡単に評価できるのに加えて、この REPL は検索可能な履歴・タブ補完・たくさんの便利なキーバインド・専用のヘルプモードとシェルモードを持ちます。 julia を引数を付けずに呼び出すか、実行形式をダブルクリックすると REPL が起動します: $ julia _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type &amp;#34;?&amp;#34; for help, &amp;#34;]?&amp;#34; for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.5.4 (2021-03-11) _/ |\__&amp;#39;_|_|_|\__&amp;#39;_| | xxNOxx|__/ | julia&amp;gt; REPL はバナーと julia&gt; というプロンプトを表示します。対話セッションを終了するには ^D とタイプする (空行で Ctrl キーと d キーを同時に押す) か exit() と入力してからエンター/リターンキーを押してください。</description>
    </item>
    <item>
      <title>§76 無限級数 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_76_definition_of_infinite_series/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_76_definition_of_infinite_series/</guid>
      <description>u(n) が n の関数で、全ての n に対して定義されているとする。\nu = 1,\ 2,\ \ldots,\ n に対応する u(\nu) の値を全て足せば、u(\nu) とは異なる n の関数が得られる。具体的には \[ s(n) = u(1) + u(2) + \cdots + u(n) \] であり、この関数も全ての n に対して定義される。簡便のために、記法を少し変えて \[ s_{n} = u_{1} + u_{2} + \cdots + u_{n} \] あるいは \[ s_{n} = \sum_{\nu=1}^{n} u_{\nu} \] と書くことが多い。 n が \infty に向かうときに s_{n} が極限 s に向かうなら \[ \lim_{n\to\infty} \sum_{\nu=1}^{n} u_{\nu} = s \] となる。この等式を通常 \[ \sum_{\nu=1}^{\infty} u_{\nu} = s, \quad u_{1} + u_{2} + u_{3} + \cdots = s \] と書く。点々 \cdots は u の級数が無限に続くことを表す。</description>
    </item>
    <item>
      <title>Random - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Random/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Random/</guid>
      <description>Random Julia の乱数生成は MersenneTwister オブジェクトを通してdSFMTというメルセンヌツイスターライブラリを利用します。Julia はグローバルな乱数生成器 (random number generator, RNG) を持ち、デフォルトではこれを使って乱数が生成されます。他の RNG 型は AbstractRNG を継承することで追加でき、そういった型は異なる種類の乱数列を生成できます。MersenneTwister 以外に Julia が提供する RNG 型の一つが RandomDevice であり、これは OS が提供するエントロピープールのラッパーです。 乱数生成に関する関数の多くは AbstractRNG オブジェクトを省略可能な第一引数に受け取ります。この引数を渡さなければグローバルな RNG が使われます。さらに一部の関数では可変長引数 dims... (もしくはタプルの引数 dims) に次元を指定でき、指定すると乱数の配列が生成されます。</description>
    </item>
    <item>
      <title>§77 無限級数に関する定理 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_77_theorems_concerning_definition_of_infinite_series/</link>
      <pubDate>Sat, 08 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_77_theorems_concerning_definition_of_infinite_series/</guid>
      <description>これから無限級数を扱うときには、次の一般的な定理を利用できる場面に多く遭遇する: u_{1} + u_{2} + \cdots が収束して和が s なら、a + u_{1} + u_{2} + \cdots は収束して和は a + s となる。同様に a + b + c + \cdots + k + u_{1} + u_{2} + \cdots は収束して和は a + b + c + \cdots + k + s となる。 u_{1} + u_{2} + \cdots が収束して和が s なら、u_{m+1} + u_{m+2} + \cdots は収束して和は \[ s - u_{1} - u_{2} - \cdots - u_{m} \] となる。 (1) および (2) で最初の級数が発散もしくは振動するなら、後の級数も同じ振る舞いをする。</description>
    </item>
    <item>
      <title>SHA - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/SHA/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/SHA/</guid>
      <description>SHA SHA モジュールの使い方は非常に簡単です: julia&amp;gt; using SHA julia&amp;gt; bytes2hex(sha256(&amp;#34;test&amp;#34;)) &amp;#34;9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08&amp;#34; 執筆時点で実装されているのは SHA-1 と SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) と SHA-3 (SHA3-224, SHA3-256, SHA3-384, SHA3-512) です。エクスポートされる関数は Array{UInt8}, ByteString, IO オブジェクトのいずれかを受け取ります。このためファイルのチェックサムの計算が簡単に行えます: shell&amp;gt; cat /tmp/test.txt test julia&amp;gt; using SHA julia&amp;gt; open(&amp;#34;/tmp/test.txt&amp;#34;) do f sha2_256(f) end 32-element Array{UInt8,1}: 0x9f 0x86 0xd0 0x81 0x88 0x4c 0x7d 0x65 ⋮ 0x5d 0x6c 0x15 0xb0 0xf0 0x0a 0x08 /tmp/text.txt の末尾に改行が無いことに注意してください。Julia は julia&gt; プロンプトの前に改行を自動的に挿入します。 口語で sha2_256 を sha256 と呼ぶことがあるので、利便性のために sha2_xxx() には shaxxx() という別名が与えられます。SHA-3 にはそういった口語表現が存在しないので、sha3_xxx() という完全な名前が必要です。</description>
    </item>
    <item>
      <title>§78 無限幾何級数 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_78_infinite_geometrical_series/</link>
      <pubDate>Sat, 08 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_78_infinite_geometrical_series/</guid>
      <description>続いて &#34;幾何&#34; 級数 (geometrical series) を考える。この級数の一般項は u_{n} = r^{n-1} で \[ s_{n} = 1 + r + r^{2} + \cdots + r^{n-1} = \frac{1 - r^{n}}{1 - r} \] が成り立つ。ただし r = 1 のときは例外で \[ s_{n} = 1 + 1 + \cdots + 1 = n \] となる。r = 1 なら s_{n} \to \infty だが、一般に s_{n} は r^{n} が極限に向かうときに限って収束する。§72 の結果を使えば次が分かる: -1 \lt r \lt 1 のときに限って級数 1 + r + r^{2} + \cdots は収束し、和は 1/(1-r) となる。 もし r \geq 1 なら s_{n} \geq n であり s_{n} \to +\infty、すなわち級数は +\infty に発散する。もし r = -1 なら n が奇数のとき s_{n} = 1 でそうでないとき s_{n} = 0 となる、つまり s_{n} は有限に振動する。そして r \lt -1 なら s_{n} は無限に振動する。以上の結果を次にまとめる:</description>
    </item>
    <item>
      <title>Serialization - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Serialization/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Serialization/</guid>
      <description>Serialization Serialization.serialize ── 関数 serialize(stream::IO, value) deserialize で読み戻せる不透明なフォーマットを使って、任意の値をストリームに書き込みます。読み戻された値は元の値と可能な限り同一となります。一般に、読み込みと書き込みで使われる Julia のバージョンもしくはシステムイメージが異なるとデシリアライズ処理は失敗します。Ptr は全てゼロのビットパターン (NULL) としてシリアライズされます。 ストリームには 8 バイトの識別ヘッダーが最初に書き込まれます。ヘッダーを書き込まないようにするには、Serializer を構築してから serialize の第一引数にそれを渡してください。writeheader にも情報があります。</description>
    </item>
    <item>
      <title>§79 極限を使った連続実関数の表現 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_79_representation_of_functions_by_means_of_limits/</link>
      <pubDate>Sat, 08 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_79_representation_of_functions_by_means_of_limits/</guid>
      <description>ここまでの節で \[ \lim_{n \to \infty} \phi_{n}(x) \] という形の関数の極限、あるいは \[ u_{1}(x) + u_{2}(x) + \cdots = \lim_{n \to \infty}\{u_{1}(x) + u_{2}(x) + \cdots + u_{n}(x)\} \] という形の級数を考えた。こういった関数や級数は n の関数だが、その極限には n 以外に x というもう一つの変数が関係しており、極限は x の関数となる。例えば §75 では \[ f(x) = \lim_{n \to \infty} n(\sqrt[n]{x} - 1) \] という形の関数を考えた。あるいは幾何級数 1 + x + x^{2} + \cdots は x の関数であり、-1 \lt x \lt 1 なら 1/(1 - x) に等しく、それ以外では全ての x に対して定義されない。</description>
    </item>
    <item>
      <title>第 7 章 カルマンフィルタの数学 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/kalman_filter_math/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/kalman_filter_math/</guid>
      <description>本書をここまで読んできた読者が「カルマンフィルタは恐ろしく難しい」という評判はいくらか不相応なようだと思えていることを願っている。もちろん数式の細かい部分はごまかしたが、実装はすぐに理解できたはずだ。基礎にある考え方は非常に簡単である──二つの観測値、あるいは観測値と予測値が入力され、その二つの間にある値が出力される。観測値が正確だと信じているなら推定値は観測値に近づき、予測値が正確だと信じているなら推定値は予測値に近づく。これはロケットサイエンス1ではない (軽いジョークだ: アポロ 11 号が月と地球を往復するときにはまさにこの数式が使われた！)。</description>
    </item>
    <item>
      <title>SharedArrays - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/SharedArrays/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/SharedArrays/</guid>
      <description>SharedArrays SharedArrays.SharedArray ── 型 SharedArray{T}(dims::NTuple; init=false, pids=Int[]) SharedArray{T,N}(...) ビット型 T の要素を持つサイズ dims の共有配列を構築します。pids は構築される共有配列を共有するプロセスの集合を表し、この集合に含まれるプロセスは同じホスト上にある必要があります。SharedArray{T,N}(dims) と N が指定されるなら、N は dims の長さと一致しなければなりません。 pids が指定されないと、共有配列は現在のホスト上の全てのプロセス (マスター含む) にマップされます。ただし localindices と indexpids で「マップしているプロセス」とみなされるのはワーカープロセスだけです。そのため、これらの関数を使うと、マスタープロセスをドライバとして使って実際の計算をワーカーで行わせる分散コードを簡単に書けるようになります。</description>
    </item>
    <item>
      <title>§80 有界集合の上限と下限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_80_bounds_of_a_bounded_aggregate/</link>
      <pubDate>Sun, 09 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_80_bounds_of_a_bounded_aggregate/</guid>
      <description>S を実数の集合とする。S に含まれる全ての s について s \leq K となる実数 K が存在するなら、S は上に有界 (bounded above) と言う。全ての s について s \geq K となる実数 K が存在するなら、S は下に有界 (bounded below) と言う。S が下にも上にも有界なら、S は有界 (bounded) と言う。 S が上に有界だとする (下に有界でなくてもよい)。このとき上述の K が持つ「全ての s に対して s \leq K」という性質を持つ実数は K の他にも無限にある。例えば K より大きい全ての数はこの性質を持つ。これからこの性質を持つ実数に最小値 \bm{M} があることを示す1。この M より大きい S の任意は存在せず、それでいて M より小さい任意の実数は少なくとも一つの S の要素より小さくなる。</description>
    </item>
    <item>
      <title>Sockets - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Sockets/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Sockets/</guid>
      <description>Sockets Sockets.Sockets ── モジュール ソケットのサポートです。IPAddr とその部分型、および TCPSocket, UDPSocket などを提供します。 ソースコード Sockets.connect ── メソッド connect([host], port::Integer) -&amp;gt; TCPSocket ホスト host のポート port に接続します。 ソースコード Sockets.connect ── メソッド connect(path::AbstractString) -&amp;gt; PipeEndpoint path にある名前付きパイプまたは UNIX ドメインソケットに接続します。 ソースコード Sockets.listen ── メソッド listen([addr, ]port::Integer; backlog::Integer=BACKLOG_DEFAULT) -&amp;gt; TCPServer addr が指定するアドレスのポート port にリッスンします。デフォルトでは localhost だけにリッスンします。全てのインターフェースパスにリッスンするには IPv4(0) または IPv6(0) の適切な方を渡してください。backlog は保留 (accept を呼ばない状態) にできる接続の最大個数を表し、サーバーはそれ以上の接続を拒否します。backlog のデフォルト値は 511 です。</description>
    </item>
    <item>
      <title>§81 有界関数の上限と下限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_81_bounds_of_a_bounded_function/</link>
      <pubDate>Sun, 09 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_81_bounds_of_a_bounded_function/</guid>
      <description>\phi(n) を正整数変数 n の関数とする。\phi(n) の値を全て集めると集合 S が定義でき、S に対しては §80 の議論を全て適用できる。こうして定義される S が上に有界、下に有界、有界のとき、\phi(n) をそれぞれ上に有界、下に有界、有界と言う。\phi(n) が上に有界なら、ある実数 K が存在して全ての n に対して \phi(n) \leq K となる。このときある実数 M があって 全ての n に対して \phi(n) \leq M 任意の正の実数 \varepsilon に対して、少なくとも一つの n で \phi(n) \gt M - \varepsilon が成り立つ。この実数 M を \phi(n) の上限 (supremum) と呼ぶ。同様に \phi(n) が下に有界なら、ある実数が k があって全ての n で \phi(n) \geq k である。このときある実数 m があって</description>
    </item>
    <item>
      <title>SparseArrays - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/SparseArrays/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/SparseArrays/</guid>
      <description>SparseArrays Julia は疎ベクトルと疎行列のサポートを標準ライブラリの SparseArrays モジュールに持ちます。疎配列とはゼロ要素を多く持つために密配列ではない特別なデータ構造を使うことで空間効率と実行速度を改善できるような配列です。 疎行列の格納形式 Julia は疎行列を圧縮列格納形式 (compressed sparse column format, CSC) で格納します。Julia の疎行列は SparseMatrixCSC{Tv,Ti} という型を持ち、ここで Tv は格納される値の型、Ti は列ポインタと行インデックスに使われる整数型を表します。SparseMatrixCSC の内部表現は次の通りです: struct SparseMatrixCSC{Tv,Ti&amp;lt;:Integer} &amp;lt;: AbstractSparseMatrix{Tv,Ti} m::Int # 行数 n::Int # 列数 colptr::Vector{Ti} # 第 j 列は colptr[j]:(colptr[j+1]-1) にある rowval::Vector{Ti} # 格納された値の行インデックス nzval::Vector{Tv} # 格納される値 (通常は非ゼロ) end CSC 形式により疎行列の要素への列ごとのアクセスは高速になりますが、行ごとのアクセスは非常に低速になります。また CSC 形式を使う疎行列の格納されていない部分に要素を一つずつ挿入するといった操作は遅くなる傾向があります。これは挿入される要素より後ろの要素を全て一つずつ後ろに動かす必要があるためです。</description>
    </item>
    <item>
      <title>§82 上極限と下極限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_82_upper_limit_and_lower_limit/</link>
      <pubDate>Sun, 09 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_82_upper_limit_and_lower_limit/</guid>
      <description>\phi(n) を有界関数、M と m を \phi(n) の上限と下限とする。任意の実数 \xi を取り、大きい n に対する \phi(n) と \xi の間で成り立つ不等式について考える。可能性は三つあり、どれか一つだけが起こる: 十分大きい全ての n で \xi \geq \phi(n) 十分大きい全ての n で \xi \leq \phi(n) 無限個の n で \xi \lt \phi(n)、かつ無限個の n で \xi \gt \phi(n) (1) のとき \xi を上の数 (superior number) と呼び、(2) のとき \xi を下の数 (inferior number)、(3) のとき \xi を中間の数 (intermediate number) と呼ぶ。明らかに、上の数は m および下の数より小さくならない。</description>
    </item>
    <item>
      <title>Statistics - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Statistics/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Statistics/</guid>
      <description>Statistics 標準ライブラリの Statistics モジュールには基礎的な統計機能が含まれます。 Statistics.std ── 関数 std(itr; corrected::Bool=true, mean=nothing[, dims]) コレクション itr の標本標準偏差を計算します。 この関数が使うアルゴリズムは itr の各要素が同一の生成分布から独立に取られたという仮定の下で、生成分布の標準偏差の推定値を返します。配列に対しては sqrt(sum((itr .- mean(itr)).^2) / (length(itr) - 1)) の計算と等価です。corrected がデフォルトの true だと残差平方和は n-1 で割られ、false だと n で割られます (n は itr の要素数)。</description>
    </item>
    <item>
      <title>§83 有界関数に対する収束の基本原則 (コーシーの収束判定法) - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_83_general_principle_of_convergence/</link>
      <pubDate>Mon, 10 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_83_general_principle_of_convergence/</guid>
      <description>前節の結果から \phi(n) が極限に向かうための必要十分条件が分かる。これは「収束の基本原則1 (the general principle of convergence)」と呼ばれる非常に重要な条件である。 有界関数 \phi(n) が極限に向かう必要十分条件は、任意の正の実数 \varepsilon に対して、 \[ |\phi(n_{2}) - \phi(n_{1})| \lt \varepsilon \] が n_{2} \gt n_{1} \geq n_{0}(\varepsilon) を満たす全ての n_{1} と n_{2} で成り立つよう n_{0}(\varepsilon) を取れることである。 まず必要性を示す。\phi(n) \to l のときある n_{0} があって n \geq n_{0} で \[ l - \frac{1}{2}\varepsilon \lt \phi(n) \lt l + \frac{1}{2}\varepsilon \] が成り立つ。よって全ての n_{1} \geq n_{0} と全ての n_{2} \geq n_{0} で \[ |\phi(n_{2}) - \phi(n_{1})| \lt \varepsilon \qquad \text{(1)} \] となる。</description>
    </item>
    <item>
      <title>Test - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Test/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Test/</guid>
      <description>Test Julia の基礎部分のテスト Julia の開発は高速に進んでおり、複数のプラットフォームで機能を検証する幅広いテストスイートを持ちます。このテストスイートは Julia をソースからビルドしたときは make test で実行でき、バイナリインストールしたときは Base.runtests() で実行できます。 Base.runtests ── 関数 Base.runtests(tests=[&amp;#34;all&amp;#34;]; ncores=ceil(Int, Sys.CPU_THREADS / 2), exit_on_error=false, revise=false, [seed]) ncores 個のプロセッサを使って tests が指定する Julia のユニットテストを実行します。tests は文字列または文字列の配列です。exit_on_error が false だといずれかのテストが失敗した場合でも他のファイルのテストは実行され、true だとテストが一つ失敗した時点で全ての実行が終了します。revise が true だと、テストを実行する前に Base および標準ライブラリに対する変更が Revise パッケージを使って読み込まれます。キーワード引数 seed が与えられると、テストを実行するコンテキストにおけるグローバルの RNG がその値でシードされます。seed が与えなければシードはランダムに選ばれます。</description>
    </item>
    <item>
      <title>§84 非有界関数 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_84_application_of_general_principle_of_convergence/</link>
      <pubDate>Mon, 10 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_84_application_of_general_principle_of_convergence/</guid>
      <description>ここまでは有界関数だけを考えてきた。しかし次に示すように「収束の基本原則」は関数の有界性を仮定しなくても成り立つので、前節で示した定理からは「有界関数」という言葉を取り除ける。 まず \phi(n) が極限 l に向かうなら、有限個の値を除いた全ての値が l + \varepsilon と l - \varepsilon と \phi(n) の間にあるので、\phi(n) が有界だと分かる。 次に前節の定理の条件が満たされるなら、 \[ |\phi(n_{2}) - \phi(n_{1})| \lt \varepsilon \] が全ての n_{1} \geq n_{0} と全ての n_{2} \geq n_{0} で成り立つ。n_{0} より大きい n_{1} を固定すれば \[ \phi(n_{1}) - \varepsilon \lt \phi(n_{2}) \lt \phi(n_{1}) + \varepsilon \] が n_{2} \geq n_{0} のとき成り立つ。ここから \phi(n) は有界と分かり、前節で示した証明の後半部分が適用できる。</description>
    </item>
    <item>
      <title>UUIDs - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/UUIDs/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/UUIDs/</guid>
      <description>UUIDs UUIDs.uuid1 ── 関数 uuid1([rng::AbstractRNG=GLOBAL_RNG]) -&amp;gt; UUID RFC 4122 によって規定されるバージョン 1 (時刻ベース) の汎用一意識別子 (universally unique identifier, UUID) を生成します。ノード ID は RFC の section 4.5 に従ってランダムに生成されることに注意してください (ノード ID はホストを識別しません)。 例 julia&amp;gt; rng = MersenneTwister(1234); julia&amp;gt; uuid1(rng) UUID(&amp;#34;cfc395e8-590f-11e8-1f13-43a2532b2fa8&amp;#34;) ソースコード UUIDs.uuid4 ── 関数 uuid4([rng::AbstractRNG=GLOBAL_RNG]) -&amp;gt; UUID RFC 4122 によって規定されるバージョン 4 (ランダムまたは疑似ランダム) の汎用一意識別子 (universally unique identifier, UUID) を生成します。 例 julia&amp;gt; rng = MersenneTwister(1234); julia&amp;gt; uuid4(rng) UUID(&amp;#34;196f2941-2d58-45ba-9f13-43a2532b2fa8&amp;#34;) ソースコード UUIDs.uuid5 ── 関数 uuid5(ns::UUID, name::String) -&amp;gt; UUID RFC 4122 によって規定されるバージョン 5 (名前空間とドメインベース) の汎用一意識別子 (universally unique identifier, UUID) を生成します。</description>
    </item>
    <item>
      <title>§85 複素関数と複素級数の極限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_85_limits_of_complex_functions_and_complex_series/</link>
      <pubDate>Mon, 10 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_85_limits_of_complex_functions_and_complex_series/</guid>
      <description>この章ではこれまで n の実関数と項が実数の級数を考えてきた。こういった概念と定義は関数の値や級数の項が複素数の場合へと自然に拡張できる。 \phi(n) が複素数 \[ \rho(n) + i\sigma(n) \] で、\rho(n) と \sigma(n) が n の実関数だとする。このとき \rho(n) と \sigma(n) が n \to \infty のときにそれぞれ極限 r と s に向かうなら \phi(n) は極限 l = r + is に収束すると言い、 \[ \lim\phi(n) = l \] と書く。同様に u_{n} が複素数 v_{n} + iw_{n} なら、級数 \[ u_{1} + u_{2} + u_{3} + \cdots \] が和 l = r + is に収束するのは、級数 \[ v_{1} + v_{2} + v_{3} + \cdots,\quad w_{1} + w_{2} + w_{3} + \cdots \] がそれぞれ r,\ s に収束するときである。</description>
    </item>
    <item>
      <title>Unicode - 標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/Unicode/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/Unicode/</guid>
      <description>Unicode Unicode.isassigned ── 関数 Unicode.isassigned(c) -&amp;gt; Bool 与えられた文字あるいは整数に Unicode 符号位置が割り当てられていれば true を返します。 例 julia&amp;gt; Unicode.isassigned(101) true julia&amp;gt; Unicode.isassigned(&amp;#39;\x01&amp;#39;) true ソースコード Unicode.normalize ── 関数 Unicode.normalize(s::AbstractString; keywords...) Unicode.normalize(s::AbstractString, normalform::Symbol) 文字列 s を正規化します。デフォルト (compose=true) では正準合成による正規化 (NFC) が Unicode のバージョン安定性を保証せずに行われます。このとき入力文字列と (正準) 等価な文字列の中で最も短いものが生成されますが、以前の Unicode バージョンに存在しない結合文字が現れる可能性があります。 normalform には Unicode 規格にある四つの正規化形式 :NFC, :NFD, :NFKC, :NFKD のいずれかを指定できます。正規化形式 C (正準合成) と D (正準分解) は視覚的に同一な異なる抽象文字列の表現を単一の正準な形式に変換し、C と D では C の方がコンパクトになります。正規化形式 KC と KD はさらに「互換等価」な文字の並びを正準化します: つまり、抽象的には似ているものの視覚的に異なる文字を全て単一の正準な文字に変換します (例えば合字をそれぞれの文字に分けます)。KC と KD では KC の方がコンパクトになります。</description>
    </item>
    <item>
      <title>リフレクションとイントロスぺクション - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/reflection/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/reflection/</guid>
      <description>リフレクションとイントロスぺクション Julia は様々な実行時リフレクションの機能を提供します。 モジュールが持つ束縛 Module がエクスポートする名前は names(m::Module) で取得できます。この関数は Symbol の配列を返し、それぞれがエクスポートされた束縛を表します。names(m::Module, all = true) とするとエクスポートの状態に関わらず m に含まれる全ての束縛が返ります。 DataType のフィールド DataType が持つフィールドの名前は fieldnames で取得できます。例えば次の Point 型に対する fieldnames(Point) はフィールド名 x, y を表す Symbol のタプルを返します:</description>
    </item>
    <item>
      <title>§86 複素関数と複素級数の特徴 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_86_properties_of_complex_functions_and_complex_series/</link>
      <pubDate>Mon, 10 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_86_properties_of_complex_functions_and_complex_series/</guid>
      <description>次の定理は実関数や実級数に関して証明したものと同様であり、証明は難しくない。 \lim\phi(n) = l なら固定された任意の p に対して \lim\phi(n + p) = l となる。 u_{1} + u_{2} + \cdots が収束して和が l なら a + b + c + \cdots + k + u_{1} + u_{2} + \cdots は和 a + b + c + \cdots + k + l に収束し、u_{p+1} + u_{p+2} + \cdots は和 l - u_{1} - u_{2} - \cdots - u_{p} に収束する。 \lim\phi(n) = l かつ \lim\psi(n) = m なら \[ \lim\{\phi(n) + \psi(n)\} = l + m \] が成り立つ。 \lim\phi(n) = l なら \lim k\phi(n) = kl となる。 \lim\phi(n) = l かつ \lim\psi(n) = m なら \lim \phi(n)\psi(n) = lm となる。 u_{1} + u_{2} + \cdots が和 l に収束し v_{1} + v_{2} + \cdots が和 m に収束するなら、(u_{1} + v_{1}) + (u_{2}+ v_{2}) + \cdots は和 l + m に収束する。</description>
    </item>
    <item>
      <title>Julia ランタイムの初期化 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/init/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/init/</guid>
      <description>Julia ランタイムの初期化 Julia ランタイムは julia -e &#39;println(&#34;Hello World!&#34;)&#39; をどのように実行するのでしょうか？ main() 実行は ui/repl.c に含まれる main() から始まります。 main() は libsupport_init() を呼び、C ライブラリロケールの設定と ios ライブラリの初期化を行います (参照: ios_init_stdstreams() と レガシーの ios.c ライブラリ)。 続いて jl_parse_opts() が呼ばれてコマンドラインオプションが処理されます。jl_parse_opts() が処理するのは初期化の早い段階またはコード生成に関係するオプションだけであり、他のオプションは base/client.jl の exec_options()1 で処理されます。</description>
    </item>
    <item>
      <title>§87 複素数 \(z\) に対する \(z^{n}\) の極限 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_87_z_to_n_for_complex_z/</link>
      <pubDate>Mon, 10 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_87_z_to_n_for_complex_z/</guid>
      <description>\phi(n) = z^{n} という重要なケースを考える。z が実数の場合のこの問題は前に §72 で考えた。 §86 の (1) より z^{n} \to l なら z^{n+1} \to l となる。一方 §86 の (4) からは \[ z^{n+1} = zz^{n} \to zl \] が分かるので、l = zl が成り立つ。これは (a) l = 0 または (b) z = 1 のときに限って成り立つ。z = 1 なら \lim z^{n} = 1 である。この特殊ケースを除けば、極限が存在するならそれは 0 となる。 正の r を使って z = r(\cos\theta + i\sin\theta) とする。このとき \[ z^{n} = r^{n} (\cos n\theta + i\sin n\theta) \] だから、|z^{n}| = r^{n} が成り立つ。よって |z^{n}| は r \lt 1 のときに限って 0 に向かう。よって §86 の (10) から \[ \lim z^{n} = 0 \] が r \lt 1 のときに限って成り立つと分かる。これ以外のとき z^{n} は収束しない。唯一の例外は z = 1 で、このときは z^{n} \to 1 となる。</description>
    </item>
    <item>
      <title>Julia の AST - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/ast/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/ast/</guid>
      <description>Julia の AST Julia には二種類のコード表現があります。一つ目は表層構文 AST (surface syntax AST) で、これはパーサー (例えば Meta.parse) によって生成され、マクロによって操作される表現です。表層構文 AST は入力されたコードをそのまま構造的に表現したものであり、文字ストリームから julia-parser.scm によって生成されます。二つ目のコード表現は低水準形式 (lowered form) またの名を中間表現 (intermediate representation, IR) であり、これは型推論とコード生成で使われる表現です。低水準形式に含まれるノードの種類は表層構文 AST より少なく、マクロは全て展開され、制御構造は明示的な分岐と文の並びに変換されます。低水準形式は julia-syntax.scm によって構築されます。</description>
    </item>
    <item>
      <title>§88 複素数 \(z\) の幾何級数 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_88_geometrical_series_for_complex_z/</link>
      <pubDate>Mon, 10 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/4_88_geometrical_series_for_complex_z/</guid>
      <description>z \neq 1 なら等式 \[ s_{n} = 1 + z + z^{2} + \cdots + z^{n-1} = \frac{1 - z^{n}}{1 - z} \] が成り立つので、級数 \bm{1 + z + z^{2} + \cdots} が収束するのは \bm{r = |z| \lt 1} のときに限る。そのときの和は 1/(1 - z) となる。 よって z = r(\cos\theta + i\sin\theta) = r\operatorname{Cis}\theta で r \lt 1 なら \[ \begin{aligned} 1 + z + z^{2} + \cdots &amp; = \frac{1}{1 - r\operatorname{Cis}\theta} \\ \end{aligned} \] つまり \[ \begin{aligned} 1 + r \operatorname{Cis}\theta + r^{2} \operatorname{Cis} 2\theta + \cdots &amp; = \frac{1}{1 - r\operatorname{Cis}\theta}\\ &amp; = \frac{1 - r\cos\theta + ir\sin\theta}{1 - 2r\cos\theta + r^{2}} \end{aligned} \] となる。実部と虚部を分けて書けば、r \lt 1 に対して \[ \begin{aligned} 1 + r\cos\theta + r^{2}\cos 2\theta + \cdots &amp; = \frac{1 - r\cos\theta}{1 - 2r\cos\theta + r^{2}},\\ r\sin\theta + r^{2}\sin 2\theta + \cdots &amp; = \frac{r\sin\theta}{1 - 2r\cos\theta + r^{2}} \end{aligned} \] を得る。\theta を \theta + \pi に変えれば、絶対値が 1 より小さい負の r でもこの式が成立すると分かる。つまりこの式は -1 \lt r \lt 1 で成り立つ。</description>
    </item>
    <item>
      <title>Julia の型 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/types/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/types/</guid>
      <description>Julia の型 Julia をしばらく使ったなら、Julia で型が持つ重要な役割を理解しているはずです。ここでは型について、特にパラメトリック型について詳しく説明します。 型と集合 (Union{}/Bottom) Julia の型システムは集合の言葉を使って考えるのがおそらく最も分かりやすいでしょう。プログラムが操作するのは個別の値であるのに対して、型が指すのは値の集合です。これはプログラムで使われるコレクションとは異なります: 例えば複数の値を Set にまとめたとしても、それは Set 型の値が一つあるだけです。そうではなく、型は可能な値の集合を表し、これによって値が取る値が正確には分からないもののある程度は分かることを表現します。</description>
    </item>
    <item>
      <title>§89 \(x → ∞\) の極限 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_89_limits_as_x_tends_to_inifinity/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_89_limits_as_x_tends_to_inifinity/</guid>
      <description>連続実変数の関数に話を戻そう。これからは一価関数だけに話を限定し1、考える関数を \phi(x) とする。x が基準直線 \Lambda 上の全ての点に対応する値を順に取るとして、考える点が固定された点から右に向かって止まることなく移動する様子を考える。このような状況を「x が無限大に向かう」あるいは「x が \infty に向かう」と言い、x \to \infty と表す。前章で議論した「n が \infty に向かうとき」との唯一の違いは、x が \infty に向かうときに全ての値を取る点にある。つまり x が \infty に向かうとき、x として考える値には \Lambda 上で最初の点から右にある全ての点が対応する。これに対して n が \infty に向かうときは対応する点が飛び飛びだった。この事実を「x は連続的に (continuously) \infty に向かう」と表現する。</description>
    </item>
    <item>
      <title>第四章のその他の例 - 第四章 正整数関数の極値 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/misc_examples/</link>
      <pubDate>Mon, 10 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/4_limits_of_functions_of_a_positive_integral_variable/misc_examples/</guid>
      <description>関数 \phi(n) が n = 0,\ 1,\ 2,\ \ldots で 1,\ 0,\ 0,\ 0,\ 1,\ 0,\ 0,\ 0,\ 1,\ \ldots という値を取るとする。\phi(n) を三角関数が含まれない n の式で表せ。 [\phi(n) = \frac{1}{4}\{1 + (-1)^{n} + i^{n} + (-i)^{n}\}] n が \infty に向かうとき \phi(n) が単調増加で \psi(n) が単調減少だとする。全ての n で \psi(n) \gt \phi(n) が成り立つなら、\phi(n) と \psi(n) の両方が極限に向かい、さらに \lim\phi(n) \leq \lim\psi(n) だと示せ。 [§69 の結果から直ちに得られる] もし \[ \phi(n) = \left(1 + \frac{1}{n}\right)^{n},\quad \psi(n) = \left(1 - \frac{1}{n}\right)^{-n} \] なら \phi(n + 1) \gt \phi(n) かつ \psi(n + 1) \lt \psi(n) だと示せ。 [一つ目の式は §73 で示した]</description>
    </item>
    <item>
      <title>第 8 章 カルマンフィルタの設計 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/designing_kalman_filters/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/designing_kalman_filters/</guid>
      <description>多変量カルマンフィルタの章では &#34;教科書的な&#34; 問題に取り組んだ。ああいった問題は問題として記述するのが簡単で、数行のコードでプログラムにできて、さらに教えやすい。しかし現実世界の問題があれほど簡単なことはほとんどない。本章ではより現実的な例に取り組み、フィルタの性能の評価方法を学ぶ。 二次元空間を動くロボットを追跡する問題から始める。二次元空間とは例えば広場や倉庫を想像してほしい。最初は単純なノイズ付きセンサーから出力されるノイズの含まれた (x, y) 座標をフィルタリングして二次元の軌跡を生成する問題を考える。この問題を理解できたら、次はセンサーの個数を増やしたり制御入力を加えたりすることで問題を大きく拡張する。</description>
    </item>
    <item>
      <title>Julia オブジェクトのメモリレイアウト - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/object/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/object/</guid>
      <description>Julia オブジェクトのメモリレイアウト オブジェクトレイアウト (jl_value_t) jl_value_t 構造体は Julia のガベージコレクタが保有するメモリブロックに対する名前であり、Julia オブジェクトに関連するメモリ上のデータを表現します。この構造体に型情報は含まれず、実体は不透明なポインタです1: typedef struct _jl_value_t jl_value_t; それぞれの jl_value_t 構造体には、ガベージコレクタの到達性や型といった Julia オブジェクトに関するメタデータを持つ jl_taggedvalue_t 構造体2含まれます: typedef struct { &amp;lt;不透明メタデータ&amp;gt; jl_value_t value; } jl_taggedvalue_t; Julia オブジェクトの型は jl_datatype_t オブジェクトが表す葉型のインスタンスです。このインスタンスは jl_typeof() で取得できます:</description>
    </item>
    <item>
      <title>§90 \(x → -∞\) の極限 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_90_limits_as_x_tends_to_negative_inifinity/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_90_limits_as_x_tends_to_negative_inifinity/</guid>
      <description>前節の内容を踏まえれば「x が -\infty に向かう」や「x \to \infty」あるいは式 \[ \lim_{x \to -\infty} \phi(x) = l,\quad \phi(x) \to \infty,\quad \phi(x) \to -\infty \] の意味は簡単に理解できるだろう。実際 x = -y および \phi(x) = \phi(-y) = \psi(y) とすれば x が -\infty に向かうとき y は \infty に向かうので、考えている x が -\infty に向かうときの \phi(x) の振る舞いは y が \infty に向かうときの \psi(y) の振る舞いに一致する。</description>
    </item>
    <item>
      <title>Julia コードの実行 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/eval/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/eval/</guid>
      <description>Julia コードの実行 Julia がコードを実行する方法を理解する上で最も難しいのが、コードブロックを実行するときに様々な処理がどのように組み合わさるかを理解する部分です。 通常コードチャンクは様々な処理を通して最終的な結果となります。例えば flisp・AST・C++・LLVM・eval・typeinf・macroexpand・sysimg (システムイメージ)・ブートストラップ・コンパイル・パース・実行・JIT・インタープリタ・ボックス化・ボックス化解除・組み込み命令関数・プリミティブ関数といった処理や概念が登場します。中には聞きなれない名前もあるでしょう。</description>
    </item>
    <item>
      <title>§91 連続関数の極限に対する算術演算 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_91_arithmetic_operation_with_limits/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_91_arithmetic_operation_with_limits/</guid>
      <description>第四章で証明した関数の和・積・商に関する定理は、連続変数 x の関数に対しても成り立つ (もちろん表現が多少変わるが、どれも自明だろう)。結論が似ているだけではなく、証明もほとんど同じとなる。</description>
    </item>
    <item>
      <title>Julia の呼び出し規約 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/callconv/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/callconv/</guid>
      <description>Julia の呼び出し規約 Julia は四つの異なる用途に応じて三つの呼び出し規約を使い分けます: 規約の名前 接頭辞 用途 Native julia_ 特殊化されたシグネチャを使った高速な呼び出し JL Call jlcall_ 汎用な呼び出しのラッパー JL Call jl_ 組み込み関数 C ABI jlcapi_ C から呼び出し可能なラッパー Native 呼び出し規約 Native 呼び出し規約は汎用でない高速な関数呼び出しのために設計されています。通常は特殊化されたシグネチャが使われます。 LLVM ゴースト (長さゼロの型) は無視されます。 LLVM スカラーとベクトルは値で渡されます。 LLVM アグリゲート (配列と構造体) は参照で渡されます。 小さな返り値は LLVM の返り値として返ります。大きな返り値は &#34;構造体リターン&#34; (sret) を通して返ります (呼び出し側が返り値のスロットを提供します)。</description>
    </item>
    <item>
      <title>§92 連続関数の単調増加と単調減少 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_92_steadily_increasing_and_decreasing_functions/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_92_steadily_increasing_and_decreasing_functions/</guid>
      <description>§69 に対応する定義を次に示す: x_{2} \gt x_{1} のとき常に \phi(x_{2}) \geq \phi(x_{1}) なら、\phi(x) は単調増加だと言う。この条件が成り立つのがある x から後ろ、つまり x_{2} \gt x_{1} \geq x_{0} でのみという場合も多くある。§69 で示した定理は n を x に変えれば成り立ち、証明も言葉遣いを調整すれば同様となる。 x_{2} \gt x_{1} のとき常に \phi(x_{2}) \gt \phi(x_{1}) で等号が成り立たないなら、\phi(x) は 狭義単調増加 (steadily increasing in the stricter sense) だと言う。この区別が重要になることもある (例えば §108–§109 )。</description>
    </item>
    <item>
      <title>Julia のネイティブコード生成の概要 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/compiler/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/compiler/</guid>
      <description>Julia のネイティブコード生成の概要 ポインタの表現 コードをオブジェクトファイルに書き出すとき、ポインタはリロケーション情報として書き出されます。そのためコードのデシリアライズで再生成されたオブジェクトに定数の参照が含まれる場合でも、その参照は実行時の正しいオブジェクトを指すことが保証されます。 ポインタ以外のオブジェクトはリテラルの定数として書き出されます。 ポインタのオブジェクトを書き出すのは literal_pointer_val です。この関数は Julia の値と LLVM のグローバル変数を適切に追跡し、オブジェクトは現在のランタイムとデシリアライズ後のランタイムの両方で正当となります。</description>
    </item>
    <item>
      <title>§93 \(x → 0\) の極限 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_93_limits_as_x_tends_to_zero/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_93_limits_as_x_tends_to_zero/</guid>
      <description>\phi(x) を \lim\limits_{x \to \infty} \phi(x) = l を満たす関数とする。y = 1/x として \[ \phi(x) = \phi(1/y) = \psi(y) \] と定めると、x が \infty に向かうとき y は極限 0 に向かい、\psi(y) は極限 l に向かう。 ここで x を無視して、\psi(y) を y の関数とみなす。大きい x に対応する y の値、つまり 0 に近い y の値だけに限って考えると、y の値を小さく取ることで \psi(y) を好きなだけ l に近くできる。変数が無限大に向かうときの極限の定義を正確に言うと、\lim\phi(x) = l は任意の正の実数 \varepsilon がどれだけ小さくとも、x_{0} 以上の全ての x で |\phi(x) - l| \lt \varepsilon が成り立つように x_{0} を選べることを意味する。そしてこれは、y_{0} より小さい全ての y で |\psi(y) - l| \lt \varepsilon が成り立つように y_{0} = 1/x_{0} を選べることに等しい。</description>
    </item>
    <item>
      <title>Julia の関数呼び出し - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/functions/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/functions/</guid>
      <description>Julia の関数呼び出し この章では Julia の関数・メソッド定義・メソッドテーブルがどのように動作するかを説明します。 メソッドテーブル Julia の関数は全て総称関数 (generic function) です。一つの総称関数は概念的には一つの関数ですが、複数の定義 (メソッド) から構成されます。総称関数のメソッドが格納されるのがメソッドテーブルです。メソッドテーブル (MethodTable 型のオブジェクト) は TypeName のタプルをキーに持ちます。TypeName はパラメータ化された型の族を表し、例えば Complex{Float32} と Complex{Float64} はどちらも Complex という TypeName を持ちます。</description>
    </item>
    <item>
      <title>§94 \(x → a\) の極限 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_94_limits_as_x_tends_to_a/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_94_limits_as_x_tends_to_a/</guid>
      <description>y \to 0 のとき \phi(y) \to l とする。このとき \[ y = x - a,\quad \phi(y) = \phi(x - a) = \psi(x) \] とおくと、y \to 0 のとき x \to a および \psi(x) \to l となる。ここから \[ \lim_{x \to a} \psi(x) = l \] あるいは \lim\psi(x) = l や \psi(x) \to l という表記が自然に導かれる。このとき「x が a に向かうとき \psi(x) は極限 l に向かう」と言う。正確で直接的な定義を次に示す: \varepsilon が与えられたときに、0 \lt |x - a| \leq \delta(\varepsilon) で \[ |\phi(x) - l| \lt \varepsilon \] が成り立つよう \delta(\varepsilon) を常に選べるなら、 \[ \lim_{x \to a} \phi(x) = l \] と表記する。</description>
    </item>
    <item>
      <title>Base.Cartesian モジュール - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/cartesian/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/cartesian/</guid>
      <description>Base.Cartesian モジュール Cartesian モジュールは多次元アルゴリズムを書くときに役立つマクロを提供します (このモジュールはエクスポートされません)。多次元アルゴリズムであっても簡単なテクニックを使えばたいていは書くことができますが、Base.Cartesian が活用できる/必要になる場面はいくつか存在します。 基本的な使い方 簡単な使用例を示します: @nloops 3 i A begin s += @nref 3 A i end これは次のコードを生成します: for i_3 = axes(A, 3) for i_2 = axes(A, 2) for i_1 = axes(A, 1) s += A[i_1, i_2, i_3] end end end 一般的に言うと、Cartesian モジュールは反復される部分を持つ汎用なコードを書くためにあります。この例で言えばループが入れ子になって反復されています。他の応用例としては反復された式 (例えばループ展開) の記述や可変個の引数を持った関数の &#34;splat&#34; 構文 (i...) を使わない呼び出しがあります。</description>
    </item>
    <item>
      <title>§95 近傍における単調増加と単調減少 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_95_increasing_and_decreasing_in_neighbors/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_95_increasing_and_decreasing_in_neighbors/</guid>
      <description>a - \delta \lt x&#39; \lt x&#39;&#39; \lt a + \delta のとき \phi(x&#39;) \leq \phi(x&#39;&#39;) となる実数 \delta が存在するなら、\phi(x) は x = a の近傍で単調増加であると言う。 \phi(x) が a の近傍で単調増加のとき、x \lt a として y = 1/(a - x) とおく。x \to a-0 のとき y \to \infty であり、\phi(x) = \psi(y) は常に \phi(a) 以下の y の単調増加関数となる。§92 から、\phi(x) が \phi(a) 以下の極限に向かうことが言える。この値を \[ \lim_{x \to a+0} \phi(x) = \phi(a+0) \] と書く。\phi(a-0) も同様に定義する。このとき明らかに \[ \phi(a-0) \leq \phi(a) \leq \phi(a+0) \] が成り立つ。同様の議論は単調減少関数についても行える。</description>
    </item>
    <item>
      <title>コンパイラとの対話 (:meta を使った操作) - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/meta/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/meta/</guid>
      <description>コンパイラとの対話 (:meta を使った操作) 特定のコードブロックが特殊な意味を持つというヒントあるいは指令をコンパイラに与えたくなる状況が存在します。例えばコードを必ずインライン化したい場合や、特別なコンパイラ最適化パスを有効にしたい場合です。バージョン 0.4 以降の Julia では、こういった指令は :meta 式に配置するという慣習になっています。通常 :meta は関数本体の最初の式となります (が、そうでなくても構いません)。 :meta 式はマクロを使って作成します。例として @inline マクロの実装を考えます:</description>
    </item>
    <item>
      <title>§96 上限と下限、収束の一般原則 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_96_upper_limit_and_lower_limit_of_function/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_96_upper_limit_and_lower_limit_of_function/</guid>
      <description>§80–§84 の議論は実変数 x の関数が極限 a に向かうときにも適用できる。特に \phi(x) が a を含んだ区間で有界である1 (a - \delta \leq x \leq a + \delta で H \lt \phi(x) \lt K となるよう \delta,\ H,\ K を取れる) 場合には、x \to a における \phi(x) の上極限 \Lambda と下極限 \lambda が定義でき、x \to a で \phi(x) \to l となる必要十分条件は \lambda = \Lambda = l となる。同様に収束の一般原則に対応する命題も得られる。つまり x \to a で \phi(x) が極限 l に向かうための必要十分条件は、正の実数 \varepsilon が与えられたときに 0 \lt |x_{2} - a| \lt |x_{1} - a| \leq \delta(\varepsilon) なら |\phi(x_{2}) - \phi(x_{1})| \lt \varepsilon となるように \delta(\varepsilon) を選べることである。</description>
    </item>
    <item>
      <title>部分配列 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/subarrays/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/subarrays/</guid>
      <description>部分配列 Julia の SubArray 型は親の AbstractArray に対する &#34;ビュー&#34; として振る舞うコンテナです。このページには SubArray の設計指針と実装に関するドキュメントを示します。 主な設計目標の一つは、IndexLinear 型の配列と IndexCartesian 型の配列の両方に対して高い性能を保証することです。さらに IndexLinear 配列のビューは可能なかぎり IndexLinear であるべきです。 添え字の置換 三次元配列の二次元スライスを作ることを考えます: julia&amp;gt; A = rand(2,3,4); julia&amp;gt; S1 = view(A, :, 1, 2:3) 2×2 view(::Array{Float64,3}, :, 1, 2:3) with eltype Float64: 0.200586 0.066423 0.298614 0.956753 julia&amp;gt; S2 = view(A, 1, :, 2:3) 3×2 view(::Array{Float64,3}, 1, :, 2:3) with eltype Float64: 0.200586 0.066423 0.246837 0.646691 0.648882 0.276021 view が &#34;シングルトン次元&#34; (Int によって指定される、サイズが 1 の次元) を落とすので、S1 と S2 は両方とも二次元の SubArray となります。使うときは S1[i,j], S2[i,j] のようにします。親の配列 A から値を取り出すときは、S1[i,j] を A[i,1,(2:3)[j]] と置き換え、S[i,j] を A[1,i,(2:3)[j]] と置き換えるのが自然なアプローチです。</description>
    </item>
    <item>
      <title>§97 よくある誤解 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_97_common_mistake/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_97_common_mistake/</guid>
      <description>前節の例 4, 5, 6, 7, 8 を見たとき、そもそも証明が必要なのかと疑問に思うかもしれない。「x = 0 や x = a を代入すればそれで終わりでは？」ということだ。そうすればもちろん a,\ a/\alpha,\ a^{m},\ P(a),\ R(a) が得られる。ここで何が間違っているのかを正確に理解しておくのは非常に重要なので、次の例に移る前にさらに説明しておく。 式 \[ \lim_{x \to 0} \phi(x) = l \] が考えているのは、x が \bm{0} でないが \bm{0} に非常に近い値を取るときの \phi(x) の値である1。x = 0 のときの \phi(x) の値ではない。つまり上のように書いたとき、x が 0 にほぼ等しいときに \phi(x) が l にほぼ等しいことを私たちは主張しているのであって、x が実際に 0 に等しいときに何が起こるかについては何も言っていない。例えば \phi(x) = 0 という式で定義される関数を考えると、明らかに \[ \lim\phi(x) = 0 \qquad \text{(1)} \] が成り立つ。ここで \psi(x) を、x = 0 のとき \psi(x) = 1 でそれ以外は \phi(x) と等しい関数として定義する。すると \[ \lim\psi(x) = 0 \qquad \text{(2)} \] が依然として成り立つ。x が 0 にほぼ等しいなら、\psi(x) は 0 にちょうど等しいからである。しかし \psi(0) = 1 なので、この関数のグラフは x 軸が x = 0 で突き出た形となり、この突き出た点が孤立点 (0, 1) となる。式 (2) は、このグラフを正負を問わない適当な x に対応する点から x = 0 に向かって移動したときに、縦座標が極限 0 に向かうことを表している (実際には縦座標は常に 0 に等しい)。この事実は孤立点 (0, 1) がどこにあろうと揺るがない。</description>
    </item>
    <item>
      <title>isbits 型からなる型共用体の最適化 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/isbitsunionarrays/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/isbitsunionarrays/</guid>
      <description>isbits 型からなる型共用体の最適化 Julia の Array 型は &#34;ビットの&#34; 値を保持することも、ヒープアロケートの &#34;ボックス化された&#34; 値を保持することもできます。この違いは値がインラインに (配列用にアロケートされたメモリに直接) 保存されるか、それとも別の場所にアロケートされたオブジェクトに対するポインタが配列のメモリに保存されるかを定めます。性能的に言えば、インラインに保存された値に直接アクセスする方がポインタをたどって実際の値を取得するよりも優れています。一般に Julia の型が「isbits である」とは、その型の値が固定された確定のサイズを持ち、他のオブジェクトを指すフィールドが存在しないことを言います (参照: isbitstype)。</description>
    </item>
    <item>
      <title>§98 実変数関数の連続性 (その 1) - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_98_continuous_functions_of_a_real_variable/</link>
      <pubDate>Wed, 12 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_98_continuous_functions_of_a_real_variable/</guid>
      <description>読者は連続曲線 (continuousc curve) という言葉を意味をおおまかに理解していると思う。例えば 図 29 の C は連続で、C&#39; は基本的に連続だが x = \xi&#39; と x = \xi&#39;&#39; で不連続となっている。 図 29 いずれにせよ任意の曲線は何らかの関数 \phi(x) のグラフとみなせる。とすれば、グラフが連続曲線となる関数を連続 (continuous) と呼び、そうでなければ不連続と呼ぶのが自然である。しばらくの間これが連続性の定義だとみなして、この性質から導かれる性質について詳しく見ていく。</description>
    </item>
    <item>
      <title>システムイメージの作成 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/sysimg/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/sysimg/</guid>
      <description>システムイメージの作成 Julia システムイメージの作成 Julia は Base モジュールが含まれる準備済みシステムイメージ sys.jl と共に配布されます。このファイルは可能な限り多くのプラットフォームで共有ライブラリ sys.{so,dll,dylib} へと事前コンパイルされ、これによってスタートアップ時間が大幅に短縮されます。Julia システムに事前コンパイルされたシステムイメージファイルが付属しないときは、Julia の DATAROOTDIR/julia/base フォルダーにあるソースファイルからコンパイルされたイメージファイルを生成できます。</description>
    </item>
    <item>
      <title>微分と積分の標準形 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/standard_forms/</link>
      <pubDate>Wed, 22 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/standard_forms/</guid>
      <description>\[ \def\arraystretch{2.5}\small \begin{array}{ccc} \dfrac{dy}{dx} &amp; y &amp; \vphantom{\Large \displaystyle \int} \displaystyle \int y\, dx \\ \hline &amp; \text{\normalsize 代数関数} &amp; \\ 1 &amp; x &amp; \dfrac{1}{2}x^{2} + C \\ 0 &amp; a &amp; ax + C \\ 1 &amp; x ± a &amp; \dfrac{1}{2} x^{2} ± ax + C \\ a &amp; ax &amp; \dfrac{1}{2} ax^{2} + C \\ 2x &amp; x^{2} &amp; \dfrac{1}{3} x^{3} + C \\ nx^{n-1} &amp; x^n &amp; \dfrac{1}{n+1} x^{n+1} + C \\ -x^{-2} &amp; x^{-1} &amp; \log_e x + C \\ \dfrac{du}{dx} ± \dfrac{dv}{dx} ± \dfrac{dw}{dx} &amp; u ± v ± w &amp; \displaystyle \int u\, dx ± \int v\, dx ± \int w\, dx \\ \dfrac{dv}{dx} + v\, \dfrac{du}{dx} &amp; uv &amp; {\footnotesize \text{一般形は知られていない}} \\ \dfrac{1}{v^{2}} \left(v\, \dfrac{du}{dx} - u\, \dfrac{dv}{dx}\right) &amp; \dfrac{u}{v} &amp; {\footnotesize \text{一般形は知られていない}} \\ \dfrac{du}{dx} &amp; u &amp; \displaystyle ux - \int x\, du + C \\ &amp; \text{\normalsize 指数関数と対数関数} &amp; \\ e^x &amp; e^x &amp; e^x + C \\ x^{-1} &amp; \log_e x &amp; x(\log_e x - 1) + C \\ 0.4343 \times x^{-1} &amp; \log_{10} x &amp; 0.4343x (\log_e x - 1) + C \\ \displaystyle a^x \log_e a &amp; a^x &amp; \dfrac{a^x}{\log_e a} + C \\ &amp; \text{\normalsize 三角関数} &amp; \\ \cos x &amp; \sin x &amp; -\cos x + C \\ -\sin x &amp; \cos x &amp; \sin x + C \\ \sec^{2} x &amp; \tan x &amp; -\log_e \cos x + C \\ &amp; \text{\normalsize 逆三角関数} &amp; \\ \dfrac{1}{\sqrt{(1-x^{2})}} &amp; \arcsin x &amp; x \cdot \arcsin x + \sqrt{1 - x^{2}} + C \\ \displaystyle -\dfrac{1}{\sqrt{(1-x^{2})}} &amp; \arccos x &amp; x \cdot \arccos x - \sqrt{1 - x^{2}} + C \\ \dfrac{1}{1+x^{2}} &amp; \arctan x &amp; \begin{array}{ll} &amp; x \cdot \arctan x \\[-10pt] &amp; \quad - \dfrac{1}{2} \log_e (1 + x^{2}) + C \end{array} \\ &amp; \text{\normalsize 双曲線関数} &amp; \\ \cosh x &amp; \sinh x &amp; \cosh x + C \\ \sinh x &amp; \cosh x &amp; \sinh x + C \\ \operatorname{sech}^{2} x &amp; \tanh x &amp; \log_e \cosh x + C \\ &amp; {\footnotesize \text{その他の関数}} &amp; \\ \displaystyle -\dfrac{1}{(x + a)^{2}} &amp; \dfrac{1}{x + a} &amp; \log_e (x+a) + C \\ -\dfrac{x}{(a^{2} + x^{2})^{\frac{3}{2}}} &amp; \dfrac{1}{\sqrt{a^{2} + x^{2}}} &amp; \log_e (x + \sqrt{a^{2} + x^{2}}) + C \\ \displaystyle \mp \dfrac{b}{(a ± bx)^{2}} &amp; \dfrac{1}{a ± bx} &amp; ± \dfrac{1}{b} \log_e (a ± bx) + C \\ -\dfrac{3a^{2}x}{(a^{2} + x^{2})^{\frac{5}{2}}} &amp; \dfrac{a^{2}}{(a^{2} + x^{2})^{\frac{3}{2}}} &amp; \dfrac{x}{\sqrt{a^{2} + x^{2}}} + C \\ \displaystyle a \cdot \cos ax &amp; \sin ax &amp; -\dfrac{1}{a} \cos ax + C \\ -a \cdot \sin ax &amp; \cos ax &amp; \dfrac{1}{a} \sin ax + C \\ \displaystyle a \cdot \sec^{2}ax &amp; \tan ax &amp; -\dfrac{1}{a} \log_e \cos ax + C \\ \sin 2x &amp; \sin^{2} x &amp; \dfrac{x}{2} - \dfrac{\sin 2x}{4} + C \\ \displaystyle -\sin 2x &amp; \cos^{2} x &amp; \dfrac{x}{2} + \dfrac{\sin 2x}{4} + C \\ n \cdot \sin^{n-1} x \cdot \cos x &amp; \sin^n x &amp; \begin{array}{l} \displaystyle \displaystyle -\frac{\cos x}{n} \sin^{n-1} x \\[-5pt] \ \ \displaystyle + \frac{n-1}{n} \int \sin^{n-2} x\, dx + C \end{array} \\ -\dfrac{\cos x}{\sin^{2} x} &amp; \dfrac{1}{\sin x} &amp; \log_e \tan \dfrac{x}{2} + C \\ \displaystyle -\dfrac{\sin 2x}{\sin^{4} x} &amp; \dfrac{1}{\sin^{2} x} &amp; -\operatorname{cotan} x + C \\ \dfrac{\sin^{2} x - \cos^{2} x}{\sin^{2} x \cdot \cos^{2} x} &amp; \dfrac{1}{\sin x \cdot \cos x} &amp; \log_e \tan x + C \\ \begin{array}{l} n \cdot \sin mx \cdot \cos nx \\[-15pt] \ \ + m \cdot \sin nx \cdot \cos mx\end{array} &amp; \sin mx \cdot \sin nx &amp; \begin{array}{l}\displaystyle \frac{1}{2} \cos(m - n)x \\[-10pt] \ \ \displaystyle - \frac{1}{2} \cos(m + n)x + C\end{array} \\ 2a\cdot\sin 2ax &amp; \sin^{2} ax &amp; \dfrac{x}{2} - \dfrac{\sin 2ax}{4a} + C \\ -2a\cdot\sin 2ax &amp; \cos^{2} ax &amp; \dfrac{x}{2} + \dfrac{\sin 2ax}{4a} + C \\ \end{array} \]</description>
    </item>
    <item>
      <title>§99 実変数関数の連続性 (その 2) - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_99_geometric_repretation_of_continuous_function/</link>
      <pubDate>Wed, 12 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_99_geometric_repretation_of_continuous_function/</guid>
      <description>前節で示した連続性の定義は次のように図示できる。二つの水平な直線 y = \phi(\xi) - \varepsilon と y = \phi(\xi) + \varepsilon を描く。すると不等式 |\phi(x) - \phi(\xi)| \lt \varepsilon は x に対応する曲線上の点がこの二つの直線の間にあることを意味する。同様に不等式 |x - \xi| \leq \delta は x が区間 [\xi - \delta, \xi + \delta] にあることを意味する。つまり連続性の定義は、二つの水平な直線を描いたときにその幅がどれだけ小さくとも、曲線を二つの垂直な直線で切って、その切り取られた曲線全体が二つの水平な直線の間に収まるようにできることを意味する。これは 図 29 の曲線 C でも正しい (\xi をどこに取っても構わない)。</description>
    </item>
    <item>
      <title>第 9 章 非線形フィルタリング - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/nonlinear_filtering/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/nonlinear_filtering/</guid>
      <description>これまでに考えたカルマンフィルタは線形の方程式を仮定しているので、線形の問題しか扱えない。しかし世界は非線形であり、本書で学んできた古典的なフィルタを適用できる問題は非常に限られる。 プロセスモデルに非線形性が存在する場合もある。例えば大気中を落下する物体を追跡したいとしよう。その物体の加速度は大気から受ける抗力によって変化する。抗力は空気密度に依存し、空気密度は高度が上がると減少する。一次元の落下は次の非線形微分方程式でモデル化できることが知られている:</description>
    </item>
    <item>
      <title>ソフトウェアスタック - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/software/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/software/</guid>
      <description>このサイト (https://fgiesen.wordpress.com/) に最後に記事を投稿してからしばらく経つ。今回は 2011 年時点におけるグラフィックスハードウェアとグラフィックスソフトウェアに関する一般的な事項を説明してみようと思う。あなたが今使っている PC に含まれるグラフィックススタックが持つ機能の説明はウェブを探せば見つけることができるが、そういった文章は「どうやって (how)」や「なぜ (why)」の説明ではないことが多い。このシリーズの狙いはどんなハードウェアに対しても通用する形でそのギャップを埋めることである。この章では Windows で D3D9/10/11 を実行する DX11 クラスのハードウェアに関して話をするが、その理由は私がこの (PC) スタックにたまたま慣れているからであって、以降の章でこの API が重要になるからではない。実際に実行を行う GPU にはネイティブコマンドしか存在しないのだから。</description>
    </item>
    <item>
      <title>LLVM の処理 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/llvm/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/llvm/</guid>
      <description>LLVM の処理 これは LLVM のドキュメントを置き換えるものではなく、Julia で LLVM を使うときに気を付けるべき事項をまとめたものです。 Julia から LLVM へのインターフェースの概要 デフォルトで Julia は LLVM を動的リンクします。静的リンクするには USE_LLVM_SHLIB=0 としてください。 低水準形式の Julia AST を LLVM IR に変換する、あるいは直接実行するためのコードは src/ ディレクトリにあります: ファイル 説明 builtins.c 組み込み関数 ccall.cpp ccall の変換 cgutils.cpp 変換ユーティリティ (特に配列とタプルへのアクセス) codegen.cpp コード生成のトップレベル・パスのリスト・組み込み関数の変換 debuginfo.cpp JIT コードに対するデバッグ情報の追跡 disasm.cpp JIT コードのディスアセンブリとネイティブオブジェクトファイルの処理 gf.c 総称関数 intrinsics.cpp 組み込み命令の変換 llvm-simdloop.cpp @simd 用の独自 LLVM パス sys.c IO とオペレーティングシステムユーティリティ関数 いくつかの .cpp はまとめて単一のオブジェクトにコンパイルされます。</description>
    </item>
    <item>
      <title>練習問題の解答 - かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/answers/</link>
      <pubDate>Wed, 18 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/answers/</guid>
      <description>練習問題 I \text{(1)} \dfrac{dy}{dx} = 13x^{12} \ \text{(2)} \dfrac{dy}{dx} = - \dfrac{3}{2} x^{-\frac{5}{2}} \ \text{(3)} \dfrac{dy}{dx} = 2ax^{(2a-1)} \ \text{(4)} \dfrac{du}{dt} = 2.4t^{1.4} \ \text{(5)} \dfrac{dz}{du} = \dfrac{1}{3} u^{-\frac{2}{3}} \ \text{(6)} \dfrac{dy}{dx} = -\dfrac{5}{3}x^{-\frac{8}{5}} \ \text{(7)} \dfrac{du}{dx} = -\dfrac{8}{5}x^{-\frac{13}{5}} \ \text{(8)} \dfrac{dy}{dx} = 2ax^{a-1} \ \text{(9)} \dfrac{dy}{dx} = \dfrac{3}{q} x^{\frac{3-q}{q}} \ \text{(10)} \dfrac{dy}{dx} = -\dfrac{m}{n} x^{-\frac{m+n}{n}} \ 練習問題 II \text{(1)} \dfrac{dy}{dx} = 3ax^{2} \ \text{(2)} \dfrac{dy}{dx} = 13 \times \frac{3}{2}x^{\frac{1}{2}} \ \text{(3)} \dfrac{dy}{dx} = 6x^{-\frac{1}{2}} \ \text{(4)} \dfrac{dy}{dx} = \dfrac{1}{2}c^{\frac{1}{2}} x^{-\frac{1}{2}} \ \text{(5)} \dfrac{du}{dz} = \dfrac{an}{c} z^{n-1} \ \text{(6)} \dfrac{dy}{dt} = 2.36t \ \text{(7)} \dfrac{dl_t}{dt} = 0.000012×l_0 \text{(8)} \dfrac{dC}{dV} = abV^{b-1} および 0.98,\ 3.00,\ 7.47 燭毎ボルト \text{(9)} \begin{aligned} \dfrac{dn}{dD} &amp;= -\dfrac{1}{LD^{2}} \sqrt{\dfrac{gT}{\pi \sigma}}, \dfrac{dn}{dL} = -\dfrac{1}{DL^{2}} \sqrt{\dfrac{gT}{\pi \sigma}}, \\ \dfrac{dn}{d \sigma} &amp;= -\dfrac{1}{2DL} \sqrt{\dfrac{gT}{\pi \sigma^{3}}}, \dfrac{dn}{dT} = \dfrac{1}{2DL} \sqrt{\dfrac{g}{\pi \sigma T}} \end{aligned} \text{(10)} \begin{aligned} \dfrac{t\ {\footnotesize \text{が変化するときの}}\ P\ {\footnotesize \text{の変化率}}}{D\ {\footnotesize \text{が変化するときの}}\ P\ {\footnotesize \text{の変化率}}} = -\dfrac{D}{t} \end{aligned}</description>
    </item>
    <item>
      <title>§100 連続関数の性質 (その 1) - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_100_properties_of_continuous_functions/</link>
      <pubDate>Wed, 12 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_100_properties_of_continuous_functions/</guid>
      <description>§98 に示した連続性の概念が最も単純で最も自然なものとは思えないかもしれない。私たちが連続と言い表す概念を解析する方法をもう一つ示す。\phi(x) のグラフ上の点 A,\ B の座標をそれぞれ (x_{0},\ \phi(x_{0})),\ (x_{1},\ \phi(x_{1})) とする。A と B の間を通る直線 \lambda を適当に取る。このとき常識的に考えると、連続な \phi(x) のグラフは \lambda を横切る。 この性質を連続曲線に固有の幾何学的性質とみなすなら、x 軸に平行な \lambda だけを考えたとしても一般性は失われないのは明らかである。ただ A と B の y 座標が同じになってはいけないので、議論の都合上 \phi(x_{1}) \gt \phi(x_{0}) と仮定する。\lambda が直線 y = \eta で \phi_(x_{0}) \lt \eta \lt \phi(x_{1}) を満たすなら、\phi(x) が \lambda を横切るとは、x_{0} と x_{1} の間にある x で \phi(x) = \eta が成り立つことを意味する。</description>
    </item>
    <item>
      <title>Julia ランタイムの printf() と stdio - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/stdio/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/stdio/</guid>
      <description>Julia ランタイムの printf() と stdio stdio に対する libuv のラッパー julia.h は stdio.h のストリームに対する libuv ラッパーを定義します: uv_stream_t *JL_STDIN; uv_stream_t *JL_STDOUT; uv_stream_t *JL_STDERR; このラッパーに対応する出力関数も定義されます: int jl_printf(uv_stream_t *s, const char *format, ...); int jl_vprintf(uv_stream_t *s, const char *format, va_list args); これらの printf 関数は src/ と ui/ にある .c ファイルで、出力のバッファリングが統一した方法で行われることを保証するために stdio が必要になったときに使われます。 完全な libuv インフラを使ったのでは時間がかかり過ぎる特殊な状況 (シグナルハンドラなど) では、STDERR_FILENO に直接 write(2) する jl_safe_printf() を使うことができます:</description>
    </item>
    <item>
      <title>§101 連続関数の性質 (その 2) - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_101_other_properties_of_continuous_functions/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_101_other_properties_of_continuous_functions/</guid>
      <description>この節では連続関数に関する定理をさらにいくつか示す。 \phi(x) が x = \xi で連続とする。\phi(\xi) が正なら、区間 [\xi - \delta, \xi + \delta] 全体で \phi(x) が正となるように正の実数 \delta を選べる。 証明は次の通り。連続性の定義における不等式で \varepsilon = \frac{1}{2}\phi(\xi) とすれば、ある \delta があって \[ |\phi(x) - \phi(\xi)| \lt \dfrac{1}{2}\phi(\xi) \] が [\xi - \delta, \xi + \delta] で成り立つ。このとき \[ \phi(x) \geq \phi(\xi) - |\phi(x) - \phi(\xi)| \gt \dfrac{1}{2}\phi(\xi) \gt 0 \] だから、\phi(x) は正と分かる。\phi(x) が負のときにも同様の定理が成り立つ。</description>
    </item>
    <item>
      <title>境界検査 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/boundscheck/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/boundscheck/</guid>
      <description>境界検査 現代的なプログラミング言語の多くと同様に、Julia は配列にアクセスするとき境界検査を行ってプログラムの安全性を確認します。しかしタイトな内部ループなどの性能が重要な状況では、境界検査をスキップして実行時性能を向上させたい場合もあるでしょう。例えばベクトル化された命令 (SIMD 命令) を生成するときはループ本体に分岐が含まれてはいけないので、境界検査は (自動的に) 無効化されます。このような場合、Julia は @inbounds マクロを挿入して特定のブロックで境界検査をスキップするようコンパイラに伝えます。ユーザー定義の配列型は @boundscheck マクロを使うことで、文脈に依存した形で境界検査コードを実行できます。</description>
    </item>
    <item>
      <title>§102 連続関数の値域 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_102_range_of_continuous_function/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_102_range_of_continuous_function/</guid>
      <description>区間 [a, b] 内の全ての x で定義された \phi(x) を考える。これ以外の仮定は考えない。 [a, b] に含まれる全ての x に対する \phi(x) の値を集めると、集合 S が構成される。この S には (§81 で n の関数に対して行ったように) §80 の議論を適用できる。例えば考えている全ての x について \phi(x) \leq K となる K が存在するなら、\phi(x) は上に有界 (bounded above) と言う。このとき、全ての \phi(x) は M 以下だが M より小さい任意の値に対してそれより大きい \phi(x) が少なくとも一つ必ず存在するという M がある。この M を上限 (supremum) と呼ぶ。連続変数 x の関数に対する下に有界、下限、有界の意味を同様に定義する。</description>
    </item>
    <item>
      <title>ロックの管理 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/locks/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/locks/</guid>
      <description>ロックの管理 マルチスレッドのコードがデッドロックを含まないことを保証するために、Julia では次の戦略が使われています。これは基本的にコフマンの第四条件 (環状 wait) を避けるためのものです: ロックを一度に一つずつ取得するようにコードを構成する。 共有ロックは必ず同じ順番 (後述) で取得する。 制限のない再帰を必要とする構文を避ける。 ロック Julia システムに存在するロックと発生する可能性のあるデッドロックを割けるための使用方法を次に示します1 (ダチョウのアルゴリズムは許されません)。</description>
    </item>
    <item>
      <title>§103 区間内における関数の振動 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_103_103oscillation_within_range/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_103_103oscillation_within_range/</guid>
      <description>\phi(x) を [a, b] で有界な関数、M と m を [a, b] における \phi(x) の上限と下限とする。M と m が a と b によって変化することを明示的に表すために、これから M と m を M(a, b) および m(a, b) と表記する。さらに \[ O(a, b) = M(a, b) - m(a, b) \] と定義し、この上限と下限の差 O(a, b) を [a, b] における \phi(x) の 振動 (oscillation) と呼ぶことにする。M(a, b),\ m(a, b),\ O(a, b) の簡単な性質は次の通りである: a \leq c \leq b なら M(a, b) は M(a, c) と M(c, b) の大きい方と等しく、m(a, b) は m(a, c) と m(c, b) の小さい方と等しい。 M(a, b) と O(a, b) は b の単調増加関数であり、m(a, b) は b の単調減少関数である。 O(a, b) \leq O(a, c) + O(c, b) が成り立つ。 最初の二つは定義から直ちに得られる。M(a, c) と M(c, b) の大きい方を \mu として、任意の正の実数 \varepsilon を取る。すると [a, c] と [c, b]、つまり [a, b] 全体で \phi(x) \leq \mu が成り立ち、さらに [a, c] または [c, b] のどこか、つまり [a, b] のどこかで \phi(x) \gt \mu - \varepsilon が成り立つ。よって M(a, b) = \mu となる。m についても同じように示せる。(2) は (1) の系として得られる。</description>
    </item>
    <item>
      <title>独自の添え字を持った配列 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/offset-arrays/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/offset-arrays/</guid>
      <description>独自の添え字を持った配列 Julia の配列の添え字は 1 で始める慣習となっていますが、世の中には添え字が 0 から始まる言語もあれば、最初の添え字を好きなように指定できる (Fortran のような) 言語もあります。標準を決める (Julia なら添え字を 1 で始めると定める) ことのメリットも存在しますが、1:size(A,d) 以外の (0:size(A,d)-1 でもない) 添え字が使えると非常に簡単に書けるアルゴリズムも存在します。こういったアルゴリズムを書きやすくするために、Julia は任意の添え字を持った配列をサポートします。</description>
    </item>
    <item>
      <title>§104 §102 の定理の別証明 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_104_alternative_proof_of_theorem_in_105/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_104_alternative_proof_of_theorem_in_105/</guid>
      <description>§102 の二番目の定理の最も単純な証明を示す。[a, b] に含まれる任意の実数を \xi とする。関数 M(a, \xi) は \xi に関して単調増加であり、かつ M を超えない。よって M(a, \xi) \lt M か M(a, \xi) = M かに応じて \xi を L と R に入れれば、切断を定義できる。この切断に対応する実数を \beta とする。a \lt \beta \lt b なら \[ M(a, \beta - \eta) \lt M,\quad M(a, \beta + \eta) = M \] が全ての正の実数 \eta に対して成り立つ。さらに §103 の \text{(1)} から \[ M(\beta - \eta, \beta + \eta) = M \] も分かる。つまり x が \beta に近ければ \phi(x) は M に好きなだけ近い値を取る。\phi(x) は連続だから、\phi(\beta) は M に等しくなければならない。</description>
    </item>
    <item>
      <title>モジュールの読み込み - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/require/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/require/</guid>
      <description>モジュールの読み込み Base.require はモジュールの読み込みと事前コンパイルキャッシュの管理を行います。import 文を実装するのがこの関数です。 実験的機能 次に示すのは実験的な機能であり、安定した Julia API の一部ではありません。この機能を使うときは、近いうちに変更される可能性があることを念頭に置いてよく考えてから使ってください。 モジュール読み込みのコールバック コールバックを登録することで、Base.require がモジュールを読み込んだタイミングで何らかの処理を実行させることができます:</description>
    </item>
    <item>
      <title>§105 ハイネ・ボレルの定理 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_105_heine_borel_theorem/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_105_heine_borel_theorem/</guid>
      <description>続いて関数の振動に関する定理を証明する。この定理はいくらか抽象的だが非常に重要であり、特に後で見る積分の理論で使われる。この定理の証明には直線上の区間に関する一般的な定理が必要になる。 直線上の区間の集合、つまり各要素が区間 [\alpha, \beta] である集まりが与えられたとする。区間の性質には制限を付けないので、区間の数が有限個でも無限個でもよく、区間同士が重なっていても構わないし1、互いに入れ子になっている可能性もある。 これから何度か使うので、区間の集合の例をいくつか示しておく。</description>
    </item>
    <item>
      <title>型推論 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/inference/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/inference/</guid>
      <description>型推論 型推論の動作 型推論とは入力の型から他の値の型を導出する処理のことです。Julia が採用する型推論のアプローチはブログ記事 Inference Convergence Algorithm in Julia と Inference Convergence Algorithm in Julia - Revisited で説明されています1。 compiler.jl のデバッグ Julia セッションを開始してから compiler/*.jl を編集 (例えば print を挿入) したときは、base ディレクトリに移動して include(&#34;compiler/compiler.jl&#34;) を実行することで現在のセッションの Core.Compiler を新しいバージョンで置き換えることができます。このテクニックを使えば編集ごとに Julia を再ビルドするよりもずっと高速な開発が可能です。 あるいは Revise.jl パッケージのコマンド Revise.track(Core.Compiler) をセッションの最初で実行して、コンパイラに対する変更を監視させることもできます。Revise のドキュメントで説明されるように、こうするとファイルを編集して保存した瞬間にコンパイラに対する変更が反映されます。</description>
    </item>
    <item>
      <title>§106 関数の振動に関する定理 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_106_application_of_heine_borel_theorem/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_106_application_of_heine_borel_theorem/</guid>
      <description>ハイネ・ボレルの定理を使って、関数の振動に関する重要な定理を二つ示す。 \phi(x) が区間 [a, b] で連続なら、[a, b] を有限個の小区間 [a, x_{1}],\ [x_{1}, x_{2}],\ \ldots,\ [x_{n}, b] に分割し、各小区間で \phi(x) の振動が与えられた値より小さくなるようにできる。 証明は次の通り。\xi を a と b の間にある任意の実数とする。\phi(x) は x = \xi で連続だから、条件「\phi(x) の振動が \varepsilon より小さい」が成り立つように区間 [\xi - \delta, \xi + \delta] を取れる。この条件がある \delta で成り立つとき \delta より小さい任意の値に対しても条件が成り立つので、任意の \xi と任意の \varepsilon に対してこの条件を満たす区間が無限に存在する。どの \delta で条件が満たされるかは \xi によって変わるので、ある \xi に対する \delta が他の \xi で \delta になれるかは分からず、現段階では \delta は前もって取った \xi に対する条件を成り立せるとしか言えない。\xi に対応するこの区間を \xi の \bm{\varepsilon}-区間と呼ぶ。</description>
    </item>
    <item>
      <title>Julia の SSA 形式 IR - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/ssair/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/ssair/</guid>
      <description>Julia の SSA 形式 IR 背景 バージョン 0.7 以降の Julia のコンパイラは新しい SSA 形式の中間表現を利用します。これ以前のコンパイラは低水準形式の Julia AST から直接 LLVM IR を生成していました。低水準形式は抽象構文木から構文的な抽象化を取り除いたものですが、それでも見た目は抽象構文木とあまり変わりません。しばらくして最適化を助けるために SSA 値が IR に導入され、さらに IR は線形化 (関数の引数が定数と SSA 値だけからなる形に変形) されました。しかし IR に Phi ノード (後方辺や条件付き制御フローの再合流で必要なノード) が存在しないために SSA でない値 (スロット) が IR に残ってしまっており、SSA 形式を活かしたミドルエンドの最適化ができない状態でした。そういった最適化を SSA 形式の表現を使わずに可能にするために英雄的な労力が注がれましたが、最終的に SSA 形式の表現はどうしても必要であるという結論になりました。</description>
    </item>
    <item>
      <title>§107 連続な多変数関数 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_107_continuous_functions_of_several_variables/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_107_continuous_functions_of_several_variables/</guid>
      <description>連続性と不連続性の概念は複数の独立変数を持つ関数 (§31) へ拡張できる。しかし多変数関数に対する連続性では、この章で考えたものよりずっと複雑な問題が生じる。この問題について詳しく述べようと思っても紙面が足りないが、二変数関数については後で考えることになるので、ここで定義を与えておく。これは §98 で最後に示した形の定義を一般化したものである。 二つの変数 x,\ y の関数 \phi(x, y) が x = \xi,\ y = \eta で連続とは、任意の正の実数 \varepsilon が与えられときに、\varepsilon がどれだけ小さくとも、0 \leq |x - \xi| \leq \delta(\varepsilon) かつ 0 \leq |y - \eta| \leq \delta(\varepsilon) のとき \[ |\phi(x, y) - \phi(\xi, \eta) | \lt \varepsilon \] が成り立つように \delta(\varepsilon) を取れることを言う。つまり中心が (\xi, \eta) で一辺の長さが 2\delta(\varepsilon) の辺が軸に平行な正方形を考えたときに、その中の全ての点で \phi(x, y) と \phi(\xi, \eta) の差が \varepsilon 以下であることを言う1。</description>
    </item>
    <item>
      <title>C コードに付ける GC 用の静的解析注釈 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/gc-sa/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/gc-sa/</guid>
      <description>C コードに付ける GC 用の静的解析注釈 解析の実行 Julia には GC の振る舞いに関して C コードを静的に解析するためのアナライザプラグインが付属します。ソースコードは src/clangsa にあり、実行するには依存する Clang のビルドが必要です。Make.user で BUILD_LLVM_CLANG 指定すれば適切なバージョンの Clang をビルドでき、USE_BINARYBUILDER_LLVM 変数を指定すればプリビルドのバイナリを利用できます。Clang を用意したら make -C src analyzegc でソースツリーに対する解析が行えます。</description>
    </item>
    <item>
      <title>§108 陰関数定理 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_108_implicit_function_theorem/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_108_implicit_function_theorem/</guid>
      <description>陰関数については前に第二章で説明した。例えば x と y が \[ y^{5} - xy - y - x = 0 \qquad \text{(1)} \] という関係で結ばれているなら、y は x の &#34;陰関数&#34; となる。 しかしこういった方程式が本当に x の関数 y を定義するかは証明なしには分からないし、複数の関数が定義される可能性もある。第二章では関数が定義されるのを当然として話を進めたが、ここまでの知識を使えばこれを正当化できる。 話を簡単にするために、用語を次のように定める。§107 と同様に、点 (a, b) を囲む四角形であって特定の条件が成り立つものを考える。そのような四角形を (a, b) の近傍 (neighborhood) と呼び、条件が \bm{(a, b)} の近傍で成り立つ、あるいは \bm{(a, b)} の近くで成り立つと言う。これは考えている条件が成り立つように四角形を一つ取れることだけを意味する。「直線上の区間」を「四角形」に置き換えれば、一変数の関数で使ったのと同じ言い回しが使える。</description>
    </item>
    <item>
      <title>クラッシュ (segfault) の報告と解析 - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/backtraces/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/backtraces/</guid>
      <description>クラッシュ (segfault) の報告と解析 Julia を壊したのですね、おめでとうございます！ この章では Julia 内部で不具合が起こったときによく現れる症状を見たときに行える一般的な手続きを紹介します。ここで紹介されるデバッグ方法から得られる情報があれば、メンテナはスクリプトの実行速度が予想より遅い理由の調査や segfault の解析をずっと簡単に行えます。 このページを読むよう言われたのなら、現在の症状に最も近いものを次から見つけ、そこにある指示に従ってデバッグ情報を生成してください。症状は次の通りです:</description>
    </item>
    <item>
      <title>§109 逆関数 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_109_inverse_function/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/5_109_inverse_function/</guid>
      <description>前節の定理で f(x, y) を F(y) - x とすると、次の結果が得られる。 y の関数 F(y) が y = b の近傍で連続かつ (§95 の意味で) 狭義単調増加 (あるいは減少) で、F(b) = a だとする。このとき x = a で b に等しく、かつ x = a の近傍で F(y) = x が恒等的に成り立つ関数 y = \phi(x) がただ一つ存在する。 こうして定義される関数を F(y) の逆関数と呼ぶ。 例えば y^{3} = x,\ a = 0,\ b = 0 とすると定理の条件は全て満たされ、逆関数は x = \sqrt[3]{y} となる。 一方で y^{2} = x とすると定理の条件が成り立たない。y^{2} は y が負のとき単調減少で正のとき単調増加なので、0 を含んだ任意の区間で y^{2} は単調とならない。この場合定理の結論は成り立たず、y^{2} = x は x の関数を二つ定義する。具体的には y = \sqrt{x} と y = -\sqrt{x} であり、これらはどちらも x = 0 で 0 となり、正の x に対してだけ定義される。これは方程式が二つの解を持つこともあれば解を持たないこともある事実に対応する。一般的な方程式 \[ y^{2n} = x, \quad y^{2n+1} = x \] についても考察してみるとよい。方程式 \[ y^{5} - y - x = 0 \] も興味深い例となる。これについては前に 例 14.7 で考えた。</description>
    </item>
    <item>
      <title>第 10 章 無香料カルマンフィルタ - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/unscented_kalman_filter/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/unscented_kalman_filter/</guid>
      <description>前章では非線形な系がもたらす難しさを議論した。この非線形性は二つの場所で現れる。一つは観測値である。例えばレーダーが直距離 (slant, 自身と目標を直線で結んだ距離) を観測するとき、x 座標を計算するには平方根を取らなければならない: \[ x=\sqrt{\text{直距離}^2 - \text{高度}^2} \] 非線形性がプロセスモデルで発生することもある──大気中を運動するボールを追跡するとき、空気抗力により非線形な振る舞いが引き起こされる。通常のカルマンフィルタはこういった問題に対して性能が悪かったり、全く見当違いな値を返したりする。</description>
    </item>
    <item>
      <title>GDB デバッグ Tips - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/debuggingtips/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/debuggingtips/</guid>
      <description>GDB デバッグ Tips Julia 変数の表示 GDB を実行中に jl_value_t* 型のオブジェクト obj を表示するには次のようにします: (gdb) call jl_(obj) オブジェクトは GDB セッションではなく Julia セッションで表示されます。これはオブジェクトの型と値が Julia の C コードによって操作されていることが分かったときに有用です。 同様に、Julia 内部の Julia コード (例えば compiler.jl) をデバッグしているときは、次のコマンドで obj を表示できます: ccall(:jl_, Cvoid, (Any,), obj) こうすると Julia の出力ストリームが初期化される順番によって引き起こされる問題を回避できます。</description>
    </item>
    <item>
      <title>§110 導関数 (その 1) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_110_derivatives/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_110_derivatives/</guid>
      <description>曲線に自然に関連付けられる性質の議論に戻る。最も重要で明白な性質は、前章で見た、曲線の見た目がつながっているかどうかという性質である。この性質は連続関数の定義で表される。 直線・円・円錐曲線といった初等幾何学で登場する普通の曲線には他にもたくさんの一般的な性質がある。その中でおそらく最も単純で最も注目に値するのは、曲線の各点で有限の方向が定まる、言い換えると、曲線上の各点で接線が引けることである。読者も知っての通り、初等幾何学では曲線上の点 P における接線が「点 Q が点 P に向かって近づくときの、弦 PQ の&#34;極限&#34;」として定義される。この「極限」の存在するという仮定が意味することを考えよう。</description>
    </item>
    <item>
      <title>第五章に関するその他の例 - 第五章 連続関数の極値と連続性 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/misc_examples/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/5_limits_of_functions_of_a_continuous_variable/misc_examples/</guid>
      <description>a と b が 0 でないなら \[ ax^{n} + bx^{n-1} + \cdots + k = ax^{n} (1 + \varepsilon_{x}) \] が成り立つ。ここで \varepsilon_{x} は x が大きいときに一次の小ささを持つ式を表す。 P(x) = ax^{n} + bx^{n-1} + \cdots + k で a が 0 でないとする。x を大きくしていくと、いずれ P(x) は a と同じ符号を持つようになる。また任意の正の定数 \lambda に対する P(x + \lambda) - P(x) も同様の振る舞いをする。 一般に \[ \dfrac{ax^{n} + bx^{n-1} + \cdots + k}{Ax^{n} + Bx^{n-1} + \cdots + K} = \alpha + \frac{\beta}{x}(1 + \varepsilon_{x}) \] だと示せ。ここで \alpha = a/A,\ \beta = (bA - aB)/A^{2} で、\varepsilon_{x} は x が大きいときに一次の小ささを持つ式とする。例外的な場合を全て示せ。</description>
    </item>
    <item>
      <title>Julia で Valgrind を使う - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/valgrind/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/valgrind/</guid>
      <description>Julia で Valgrind を使う Valgrind はメモリデバッグ・メモリリーク検出・プロファイルを行うツールです。この章では Valgrind を使って Julia のメモリ関連のバグをデバッグするときに気を付けるべき事項を紹介します。 一般的な注意点 初期設定の Valgrind はプログラムが自己改変を行わないと仮定します。この仮定は多くのプログラムで守られますが、julia のような JIT コンパイラでは簡単に破られます。このため valgrind には --smc-check=all-non-file を必ず渡すようにしてください。これを忘れると、クラッシュや異常な振る舞いが (たいてい見つかりにくい形で) 引き起こされます。</description>
    </item>
    <item>
      <title>§111 導関数 (その 2) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_111_properties_of_derivatives/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_111_properties_of_derivatives/</guid>
      <description>区間 a \leq x \leq b の全ての x で導関数 \phi&#39;(x) が存在するなら、\phi(x) はその区間の全ての点で連続となる。なぜなら \{\phi(x + h) - \phi(x)\}/h が極限に向かうとき \lim\phi(x + h) = \phi(x) が成り立ち、連続性という言葉がこの性質を表すからである。 この逆も成り立つだろうか。つまり、任意の連続曲線の全ての点で接線が引けて、その点の x 座標における関数の微分係数が求まるだろうか1。もちろん答は「成り立たない」である。平行でない二つの直線から構成される関数を考えればよい (図 37)。直線の交点における \{\phi(x + h) - \phi(x)\}/h の極限を考えると、h が正の値から 0 に近づくときの極限は \tan \beta だが、負の値から近づくときの極限は \tan \alpha となる。</description>
    </item>
    <item>
      <title>サニタイザのサポート - 開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/sanitizers/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/sanitizers/</guid>
      <description>サニタイザのサポート 一般的な注意事項 Clang のサニタイザを使うときは当然 Clang (USECLANG=1) を使ったビルドが必要ですが、もう一つ注意事項があります: 大部分のサニタイザはホストコンパイラによって提供されるランタイムライブラリを利用しますが、Julia の JIT が生成する計測対象のコードもそのライブラリの機能を使います。これはホストコンパイラの LLVM バージョンと Julia が使う LLVM ライブラリのバージョンが一致しなければならないことを意味します。 簡単な解決法は、バージョンが一致するツールチェインが含まれる専用のフォルダを作ることです。BUILD_LLVM_CLANG=1 と設定するとこれを行えます。変数 CC, CXX を上書きしてから USECLANG=1 とすれば、このツールチェインを他のビルドフォルダから参照できます。</description>
    </item>
    <item>
      <title>§112 導関数 (その 3) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_112_nonexistence_of_derivatives/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_112_nonexistence_of_derivatives/</guid>
      <description>\phi(x) が不連続となる x では \phi(x) に微分係数が存在しないことを見た。例えば 1/x や \sin(1/x) のような x = 0 で定義されない関数は当然 x = 0 で不連続なので、x = 0 における微分係数を持たない。あるいは [x] は任意の整数の x で不連続なので、整数の x 全てで微分できない。 [x] は連続する二つの整数の間で定数なので、微分が存在する場所では常に 0 となる。よって [x] の微分 [x]&#39; は整数では定義されず、それ以外では 0 と等しい関数となる。興味深いことに、関数 1 - \dfrac{\sin\pi x}{\sin\pi x} も全く同じ性質を持っている。</description>
    </item>
    <item>
      <title>§113 微分の一般的性質 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_113_general_rules_for_differentiation/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_113_general_rules_for_differentiation/</guid>
      <description>この節の命題では、考えている x において f(x) と F(x) に f&#39;(x) と F&#39;(x) という導関数が存在すると仮定する。 \phi(x) = f(x) + F(x) なら、\phi(x) の導関数は \[ \phi&#39;(x) = f&#39;(x) + F&#39;(x) \] となる。 \phi(x) = kf(x) で k が定数なら、\phi(x) の導関数は \[ \phi&#39;(x) = kf&#39;(x) \] となる。 例 35.1 の定理からこの二つの結果を導くのは読者への練習問題とする。 \phi(x) = f(x)F(x) なら、\phi(x) の導関数は \[ \phi&#39;(x) = f(x)F&#39;(x) + f&#39;(x)F(x) \] となる。</description>
    </item>
    <item>
      <title>§114 複素関数の導関数 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_114_derivatives_of_complex_functions/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_114_derivatives_of_complex_functions/</guid>
      <description>ここまでは y = \phi(x) が x の実関数だとしてきた。y が複素関数 \phi(x) + i\psi(x) なら、y の微分を \phi&#39;(x) + i\psi&#39;(x) と定義できる。複素関数 \phi(x) に対する前節の結果 1 から 5 は簡単に確認できるだろう。結果 6 と 7 にも複素関数に対する似た命題が存在するが、この命題の拡張には「複素変数の関数」の一般的な概念が必要となる。この概念はこれまでに特殊な例として数回だけしか登場していない。</description>
    </item>
    <item>
      <title>§115 微分の記法 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_115_notation_of_differential_calculus/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_115_notation_of_differential_calculus/</guid>
      <description>導関数 (derivative) が微分係数 (differential coefficient) という別名を持つと前に説明したが、違う名前だけでなく違う記号も存在する。関数 y = \phi(x) の導関数を指して \[ D_{x}y,\quad \frac{dy}{dx} \] と表記する場合もある。最後の記号が理解しやすいということで一番よく使われる。ここで dy/dx の意味が「実数 dy を実数 dx で割った数」でない点に注意する必要がある。dy/dx は「D_{x} あるいは d/dx で表される操作を y = f(x) に適用した結果」を意味する。つまり D_{x} と d/dx は h \to 0 における \{\phi(x + h) - \phi(x)\}/h の極限を取る操作を表す。</description>
    </item>
    <item>
      <title>§116 多項式の微分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_116_differentiation_of_polynomials/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_116_differentiation_of_polynomials/</guid>
      <description>続いて単純な種類の関数の微分についてさらに体系的に見ていく。 多項式: \phi(x) = a_{0}x^{n} + a_{1}x^{n-1} + \cdots + a_{n} なら、 \[ \phi&#39;(x) = na_{0}x^{n-1} + (n - 1)a_{1}x^{n-2} + \cdots + a_{n-1} \] が成り立つ。x の n 次方程式をいわゆる二項形式 (binomial form) で表した方が分かりやすい場合もある: \[ a_{0}x^{n} + \binom{n}{1} a_{1}x^{n-1} + \binom{n}{2} a_{2}x^{n-2} + \cdots + a_{n} \] このときは \[ \phi&#39;(x) = n \left\{ a_{0}x^{n-1} + \binom{n - 1}{1} a_{1}x^{n-2} + \binom{n - 1}{2} a_{2}x^{n-3} + \cdots + a_{n-1} \right\} \] となる。 \phi(x) の二項形式が \[ (a_{0}, a_{1},\ \ldots, a_{n} \mathbin{)\kern-5pt(} x, 1)^{n} \] と表記されることもある。この表記を使えば \[ \phi&#39;(x) = n(a_{0}, a_{1},\ \ldots, a_{n-1} \mathbin{)\kern-5pt(} x, 1)^{n-1} \] である。</description>
    </item>
    <item>
      <title>§117 有理関数の微分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_117_differentiation_of_rational_functions/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_117_differentiation_of_rational_functions/</guid>
      <description>有理関数: もし \[ R(x) = \frac{P(x)}{Q(x)} \] で P と Q が多項式なら、§113 の結果 5 から \[ R&#39;(x) = \frac{P&#39;(x)Q(x) - P(x)Q&#39;(x)}{\{Q(x)\}^{2}} \] が分かる。この式を使えば任意の有理関数の導関数を計算できるが、最も単純な形が得られるとは限らない。最も単純な形になるのは Q(x) と Q&#39;(x) が共通因数を持たないとき、つまり Q(x) が重複する因数を持たないときである。Q(x) が重複する因数を持つなら、この形で計算した R&#39;(x) はさらに簡略化できる。 有理関数の微分では部分分数分解を利用できる場合が非常に多い。§116 と同様に Q(x) を \[ a_{0}(x - \alpha_{1})^{m_{1}} (x - \alpha_{2})^{m_{2}}\cdots (x - \alpha_{\nu})^{m_{\nu}} \] と表す。すると代数の文献1にあるように、多項式 \Pi(x) を前に出した次の形で R(x) を表せる: \[ \begin{aligned} \Pi(x) &amp; + \frac{A_{1, 1}}{x - \alpha_{1}} + \frac{A_{1, 2}}{(x - \alpha_{1})^{2}} + \cdots + \frac{A_{1, m_{1}}}{(x - \alpha_{1})^{m_{1}}}\\ &amp; + \frac{A_{2, 1}}{x - \alpha_{2}} + \frac{A_{2, 2}}{(x - \alpha_{2})^{2}} + \cdots + \frac{A_{2, m_{2}}}{(x - \alpha_{2})^{m_{2}}} + \cdots \end{aligned} \] これは一つの多項式と次の形をした項の和からなる: \[ \frac{A}{(x - \alpha)^{p}} \] ここで \alpha は Q(x) = 0 の根である。多項式の微分方法は分かっているので、後は §113 の結果 (\alpha が複素数なら §114 で拡張した結果) を使えば分数の項の微分が \[ -\frac{pA(x -\alpha)^{p-1}}{(x - \alpha)^{2p}} = -\frac{pA}{(x - \alpha)^{p+1}} \] だと分かる。</description>
    </item>
    <item>
      <title>§118 代数関数の微分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_118_differentiation_of_explicit_algebraical_functions/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_118_differentiation_of_explicit_algebraical_functions/</guid>
      <description>代数関数: 前節の結果と §113 の結果 6 を合わせれば、任意の陽な代数関数の導関数を得られる。 そのような関数の中で一番重要なのは、有理数 m に対する x^{m} である。正または負の整数の m に対しては x^{m} の微分が mx^{m-1} となることは §117 で前に見た。m が有理数のときにもこれが正しいことを示そう。整数 p,\ q を使って y = x^{m} = x^{p/q} とする。さらに z = x^{1/q} とすると x = z^{q} および y = z^{p} が成り立つ。よって \[ \frac{dy}{dx} = \biggl(\frac{dy}{dz}\biggr) \bigg/ \biggl(\frac{dx}{dz}\biggr) = \frac{p}{q} z^{p-q} = mx^{m-1} \] となる。 この結果は 例 36.3 を使っても示せる: \phi(x) = x^{m} とすれば \[ \begin{aligned} \phi&#39;(x) &amp; = \lim_{h \to 0} \frac{(x + h)^{m} - x^{m}}{h}\\ &amp; = \lim_{\xi \to x} \frac{\xi^{m} - x^{m}}{\xi - x} = mx^{m-1} \end{aligned} \] であり、一般的な形の \[ \frac{d}{dx} (ax + b)^{m} = ma(ax + b)^{m-1} \] も任意の m に対して成り立つと分かる。</description>
    </item>
    <item>
      <title>§119 超越関数の微分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_119_differentiation_of_transcendental_functions/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_119_differentiation_of_transcendental_functions/</guid>
      <description>超越関数: 例 39.4 では \[ D_{x} \sin x = \cos x, \quad D_{x} \cos x = -\sin x \] が成り立つことを見た。 また §113 の結果 4 と 5 を使えば \[ \begin{alignedat}{2} D_{x} \tan x &amp; = \sec^{2} x, &amp; D_{x} \cot x &amp; = -\cosec^{2} x,\\ D_{x} \sec x &amp; = \tan x \sec x, \quad &amp; D_{x} \cosec x &amp; = -\cot x\cosec x. \end{alignedat} \] を容易に確認できる。さらに結果 7 からは初等三角関数の逆関数の導関数が分かる。次の結果が得られるだろう: \[ \begin{alignedat}{2} D_{x} \arcsin x &amp; = ±\frac{1}{\sqrt{1 - x^{2}}}, &amp; D_{x} \arccos x &amp; = \mp \frac{1}{\sqrt{1 - x^{2}}},\\ D_{x} \arctan x &amp; = \frac{1}{1 + x^{2}}, &amp; D_{x} \text{arccot } x &amp; = -\frac{1}{1 + x^{2}},\\ D_{x} \text{arcsec } x &amp; = ± \frac{1}{x\sqrt{x^{2} - 1}}, \quad &amp; D_{x} \text{arccosec } x &amp; = \mp \frac{1}{x\sqrt{x^{2} - 1}} \end{alignedat} \] ここでサインとコセカントの逆関数の符号は \cos(\arcsin x) と同じように取り、サインとセカントの逆関数の符号は \sin(\arccos x) と同じように取る。</description>
    </item>
    <item>
      <title>第 11 章 拡張カルマンフィルタ - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/extended_kalman_filters/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/extended_kalman_filters/</guid>
      <description>本書では前半の章で線形カルマンフィルタの理論を構築し、最後の二つの章では非線形な問題に対するカルマンフィルタの利用という話題に踏み込んだ。本章では拡張カルマンフィルタ (extended Kalman filter, EKF) を学ぶ。EKF は現在の推定値で系を線形化することで非線形性に対処し、線形化した系に対するフィルタリングに線形カルマンフィルタを利用する。EKF は非線形な問題に対する手法として最初に考案されたものの一つであり、現在最もよく使われる手法でもある。 EKF はフィルタの設計者に難しい数学の問題を提示する。そのため本章は本書の中で最も難しい章である。非線形なフィルタリングの問題に取り組むとき、私は EKF の利用を避けるためならどんなことでもするつもりで他の手法を優先する。ただ、この話題は避けられない: 古典的な論文は全て EKF を使っており、今の論文で使われることも多い。たとえ自分の仕事で EKF を使わないとしても、カルマンフィルタに関する文献を読めるようになるには EKF について知っておかなければならない。</description>
    </item>
    <item>
      <title>§120 微分の反復 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_120_repeated_differentiation/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_120_repeated_differentiation/</guid>
      <description>\phi(x) から \phi&#39;(x) を構成したのと同様に \phi&#39;(x) からは \phi&#39;&#39;(x) を構成できる。この関数 \phi&#39;&#39;(x) を \phi(x) の 二次導関数 (second derivative) あるいは 二次微分係数 (second differential coefficient) と呼ぶ。y = \phi(x) の二次導関数は次ようにも表記する: \[ D_{x}^{2}y,\quad \left(\frac{d}{dx}\right)^{2}y,\quad \frac{d^{2}y}{dx^{2}} \] 全く同じ方法で \bm{n} 次導関数あるいは \bm{n} 次微分係数を定義できる。これは \[ \phi^{(n)}(x),\quad D_{x}^{n}y,\quad \left(\frac{d}{dx}\right)^{n}y,\quad \frac{d^{n}y}{dx^{n}} \] と表記する。ただし n 次微分係数が一般的に書ける関数は多くない。そのうちいくつかを次の例で紹介する。 例 45 \phi(x) = x^{m} なら次が成り立つ: \[ \phi^{(n)}(x) = m(m - 1) \cdots (m - n + 1)x^{m-n} \] この結果を使えば任意の多項式の n 次導関数を求められる。</description>
    </item>
    <item>
      <title>§121 微分に関する諸定理 (ロルの定理) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_121_rolles_theorem/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_121_rolles_theorem/</guid>
      <description>この節では x の関数 \phi(x) の導関数 \phi&#39;(x) が考えている全ての x で値を持つとする。もちろんこの仮定により \phi(x) は連続となる。 \phi&#39;(x_{0}) \gt 0 とする。このとき x_{0} より小さく x_{0} に十分近い全ての x で \phi(x) \lt \phi(x_{0}) が成り立ち、x_{0} より大きく x_{0} に十分近い全ての x で \phi(x) \gt \phi(x_{0}) が成り立つ。 仮定から \{\phi(x_{0} + h) - \phi(x_{0})\}/h は h \to 0 のとき正の極限 \phi&#39;(x_{0}) に収束する。これは絶対値が十分小さい h に対して \phi(x_{0} + h) - \phi(x_{0}) と h が同じ符号を持つときにしか成り立たないが、定理はまさにこのことを示している。この結果は幾何学的に考えても納得できる: \phi&#39;(x) \gt 0 は曲線 y = \phi(x) の接線が x 軸と正の角度をなすことを意味する。\phi&#39;(x) \lt 0 の場合の定理を自分で定式化してみるとよい。</description>
    </item>
    <item>
      <title>§122 極大値と極小値 (その 1) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_122_maxima_and_minima/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_122_maxima_and_minima/</guid>
      <description>x = \xi における \phi(x) の値 \phi(\xi) が極大 (maximum) であるとは、x = \xi の近傍における任意の \phi(x) よりも \phi(\xi) の方が大きい、つまり \xi - \delta \lt x \lt \xi および \xi \lt x \lt \xi + \delta で \phi(\xi) \gt \phi(x) となる x の区間 [\xi - \delta, \xi + \delta] が存在することを言う。同様に極小 (minimum) も定義する。例えば 図 39 ではグラフで表される関数が極大の点に A が対応し、極小の点に B が対応する。A_{3} が極大で B_{1} が極小の状況で B_{1} における関数の値が A_{3} における値よりも大きくなっているが、これは何も問題ないことに注意してほしい。</description>
    </item>
    <item>
      <title>§123 極大値と極小値 (その 2) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_123_condition_for_maxima_and_minima/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_123_condition_for_maxima_and_minima/</guid>
      <description>極大および極小の条件の異なる表現方法があり、こちらが便利になる場合もある。\phi(x) が二次導関数 \phi&#39;&#39;(x) を持つとする。全ての \phi(x) に対して \phi&#39;(x) が存在するわけではないのと同様に、\phi&#39;(x) が存在するとき \phi&#39;&#39;(x) が必ず存在するわけではない。しかし現在の私たちが扱うことになる関数ではこの条件が満たされることが多い。さてこのとき次が成り立つ: \phi&#39;(\xi) = 0 かつ \phi&#39;&#39;(\xi) \neq 0 なら、\phi(x) は x = \xi で極大または極小となる。具体的には \phi&#39;&#39;(\xi) \lt 0 なら極大で、\phi&#39;&#39;(\xi) \gt 0 なら極小となる。</description>
    </item>
    <item>
      <title>§124 極大値と極小値 (その 3) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_124_examples_of_maxima_and_minima/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_124_examples_of_maxima_and_minima/</guid>
      <description>ここまでは (前節を除いて) 考えている区間に含まれる全ての x で \phi(x) が導関数を持つ状況を考えてきた。この条件が満たされないなら定理は成り立たない。例えば次の関数は 定理 B の前提を満たすが結論は満たさない: \[ y = 1 - \sqrt{x^{2}} \] ただし平方根は正の値を取るとする。この関数のグラフを 図 40 に示す。この関数は \phi(-1) = \phi(1) = 0 を満たすが、図からも明らかなように x が負なら \phi&#39;(x) は -1 で x が正なら \phi&#39;(x) は 1 である。また \phi(x) は x = 0 で微分係数を持たず、グラフの点 P では接線を引けない。つまり \phi(x) は明らかに x = 0 で極大となるにもかかわらず、\phi&#39;(0) は存在せず、0 と等しくない。つまり定理 B を使った極大性の判定が失敗する。</description>
    </item>
    <item>
      <title>§125 平均値の定理 (その 1) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_125_mean_value_theorem/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_125_mean_value_theorem/</guid>
      <description>続いて一般的な定理をもう一つ証明する。これはとてつもなく重要な定理であり、平均値の定理 (Mean Value Theorem, Theorem of the Mean) と呼ばれることが多い。 区間 [a, b] 内の全ての x に対して \phi(x) が微分係数を持つとする。このとき a と b の間にある \xi であって \[ \phi(b) - \phi(a) = (b - a)\phi&#39;(\xi) \] を満たすものが存在する。 おそらく微分積分学において最も重要なこの定理の厳密な証明を示す前に、その簡単な幾何学的意味を確認しておく。この定理は単に、図 43 のように曲線 APB 上の全ての点で接線を引けるとき、接線が AB と平行になる (P のような) 点が存在することを意味する。\phi&#39;(\xi) は P で引いた接線と OX がなす角度のタンジェントであり、\{\phi(b) - \phi(a)\}/(b - a) は AB と OX がなす角度のタンジェントを表すためである。</description>
    </item>
    <item>
      <title>§126 平均値の定理 (その 2) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_126_application_of_mean_value_theorem/</link>
      <pubDate>Sun, 16 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_126_application_of_mean_value_theorem/</guid>
      <description>中間値の定理からは次の非常に重要な結果が得られる: とある x の区間で \phi&#39;(x) = 0 なら、その区間で \phi(x) は定数である。 a と b を区間内の二つの実数とすると \[ \phi(b) - \phi(a) = (b - a) \phi&#39;\{a + \theta(b - a)\} = 0 \] が成り立つためである。簡単な系として、とある区間で \phi&#39;(x) = \psi&#39;(x) なら関数 \phi(x) と \psi(x) の差はその区間内で常に定数となることが分かる。</description>
    </item>
    <item>
      <title>§127 積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_127_integration/</link>
      <pubDate>Sat, 22 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_127_integration/</guid>
      <description>本章では与えられた関数 \phi(x) の導関数を求める方法を解説し、最もよく表れる関数をはじめとした様々な \phi(x) を考えてきた。次はこれと逆の問題、つまり与えられた関数を導関数に持つ関数を求める問題を考えるのが自然である。 与えられた関数を \psi(x) とする。\phi&#39;(x) = \psi(x) となる関数 \phi(x) を求めたい。少し考えれば、この問題が三つの部分からなると分かる: 何よりもまず、そのような関数 \phi(x) が実際に存在するかどうかを知る必要がある。この問題と「関数 \phi(x) が存在したとして、それを表現する簡単な式を見つける問題」が異なる点に注意しなければならない。 そのような関数が複数存在するか、つまり問題が唯一の解を持つかどうかを知る必要がある。そして解が複数存在するなら、特定の解を使って全ての解を表すことができるような単純な関係が異なる解の間に存在するかを知る必要がある。 解があるなら、その式を見つける方法を知る必要がある。 関数の微分を考えるときに生じる問題と比較すれば、この三つの問題がどんなものであるかがはっきりする。</description>
    </item>
    <item>
      <title>§128 積分と対数関数 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_128_definition_of_logarithmic_function/</link>
      <pubDate>Sat, 22 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_128_definition_of_logarithmic_function/</guid>
      <description>この章の前半部分の結果から、最も頻繁に登場する関数の積分が得られる。例えば \[ \int x^{m}\, dx = \frac{x^{m+1}}{m + 1},\quad \int \cos x\, dx = \sin x,\quad \int \sin x\, dx = -\cos x \qquad \text{(1)} \] である。 この等式は、左辺の積分記号の中にある関数の積分の一つが右辺の関数であると解釈されなければならない。もちろん最も一般的な積分は右辺に定数 C を加えることで得られる。この定数は積分定数 (arbitrary constant of integration) と呼ばれる。 一つ目の等式には一つだけ例外がある。それは m = -1 の場合で、このとき右辺が意味を持たなくなる。多項式と有理関数の微分が 1/x にならないことは前に見た (例 42.4)。</description>
    </item>
    <item>
      <title>§129 多項式の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_129_integration_of_polynomials/</link>
      <pubDate>Sat, 22 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_129_integration_of_polynomials/</guid>
      <description>§113 で述べた一般的な定理と同じものは積分に対しても当然存在する。例えば \[ \int \{f(x) + F(x)\}\, dx = \int f(x) dx + \int F(x)\, dx, \qquad \text{(1)} \] \[ \int kf(x)\, dx = k\int f(x)\, dx \qquad \text{(2)} \] はすぐに分かる。 この等式はもちろん積分定数が適切に付いているものとして解釈する。つまり \text{(1)} は、f(x) の任意の積分と F(x) の任意の積分の和が f(x) + F(x) のとある積分になると主張している。 この定理を使えば、\sum A_{\nu} f(\nu)(x) という形をした関数、つまり積分が分かっている関数に定数を乗じた項の有限個の和の積分が求められるようになる。特に多項式の積分が求められる: \[ \int (a_{0}x^{n} + a_{1}x^{n-1} + \cdots + a_{n})\, dx = \frac{a_{0}x^{n+1}}{n + 1} + \frac{a_{1}x^{n}}{n} + \cdots + a_{n}x \]</description>
    </item>
    <item>
      <title>第 12 章 粒子フィルタ - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/particle_filters/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/particle_filters/</guid>
      <description>12.1 動機 こんな問題を考えよう。移動している複数の物体があって、それらを追跡したいとする。追跡する物体は複数のジェット戦闘機や複数のミサイルかもしれないし、球場でクリケットをしている人々かもしれない。なんでもいい。これまでに学んだフィルタにこの問題を扱えるものはあるだろうか？ 残念ながら、どのフィルタも理想的ではない。この問題の特徴を考えよう: 多峰性 (マルチモーダル): ゼロ個、一つ、あるいは複数の物体を同時に追跡したい。 遮蔽 (オクルージョン): 物体が他の物体を隠し、複数のオブジェクトから観測値が一つしか得られない場合がある。 非線形な観測値: レーダーは物体への距離を観測するので、(x,y,z) の座標に変換するとき非線形な平方根が必要になる。 ガウス分布に従わないノイズ: 背景が大きく変化すると、コンピュータービジョンのアルゴリズムが背景を物体と誤認する場合がある。 連続: 物体の位置と速度 (つまり状態) は時間の経過とともに滑らかに変化する。 多変量: 位置、速度、旋回速度といった複数の属性を追跡したい。 未知のプロセスモデル: 系のプロセスモデルを私たちは知らない。 これまでに学んだフィルタはどれも、こういった制約があるとき上手く動作しない:</description>
    </item>
    <item>
      <title>§130 有理関数の積分 (その 1) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_130_integration_of_rational_functions/</link>
      <pubDate>Sat, 22 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_130_integration_of_rational_functions/</guid>
      <description>多項式の積分の後は有理関数を考えるのが自然である。R(x) を §117 で示した標準形、つまり多項式 \Pi(x) と A/(x -\alpha)^{p} という形の項の和として表された有理関数とする。 多項式の部分および p \neq 1 の項についてはすぐに積分が求まる。なぜなら \[ \int \frac{A}{(x - \alpha)^{p}}\, dx = -\frac{A}{p - 1}\, \frac{1}{(x - \alpha)^{p-1}} \] が実数および複素数の \alpha に対して成り立つためである (§117)。 p = 1 の項の積分は少し難しくなる。§113 の結果 6 からは \[ \int F&#39;\{f(x)\}\, f&#39;(x)\, dx = F\{f(x)\} \qquad \text{(3)} \] が分かる。a,\ b を実数として f(x) = ax + b とおく。F(x),\ F&#39;(x) を \phi(x),\ \psi(x) と書けば、\psi(x) の積分が \phi(x) となる。そして \[ \int \psi(ax + b)\, dx = \frac{1}{a}\phi(ax + b) \qquad \text{(4)} \] が成り立つ。</description>
    </item>
    <item>
      <title>§131 有理関数の積分 (その 2) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_131_notes_on_integration_of_rational_functions/</link>
      <pubDate>Sat, 22 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_131_notes_on_integration_of_rational_functions/</guid>
      <description>§130 では任意の実有理関数 R(x) の積分を計算する一般的な方法を示したが、これは方程式 \bm{Q(x) = 0} が解けることを前提としていた。単純な場合 (例えば 例 48.5) では方程式を解くのは簡単である。しかし複雑なケースでは方程式を解くのに必要な労力が途方もなく大きくなり、他の方法を使わざるを得なくなる。積分の実践的な問題について詳しく議論するのはこの本の目的ではない。詳細な知識が必要な読者はグルサ著 Cours d&#39;Analyse, second ed., vol. i, pp. 246 et seq. およびバートランド著 Calcul Intégral そしてブロムウィッチ博士による小冊子 Elementary Integrals (Bowes and Bowes, 1911) を参照してほしい。</description>
    </item>
    <item>
      <title>§132 代数関数の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_132_integration_of_explicit_algebraical_functions/</link>
      <pubDate>Sat, 22 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_132_integration_of_explicit_algebraical_functions/</guid>
      <description>次に考えるのは当然代数関数の積分である。x の代数関数 y の積分を求めよう。しかしここでは、一見するともっと一般的な次の積分を考えた方が議論が上手く進む: \[ \int R(x, y)\, dx \] R(x, y) は x と y の有理関数とする。こうして表すとより一般的な問題を扱っているように見えるが、関数 R(x, y) も x の代数関数なので (例 14.6)、考えている問題は変わらない。実際に使う形を決めるのは扱いやすさだけである: 例えば \[ \frac{px + q + \sqrt{ax^{2} + 2bx + c}} {px + q - \sqrt{ax^{2} + 2bx + c}} \] という関数は、そのまま x の代数関数とみなすよりも x と代数関数 \sqrt{ax^{2} + 2bx + c} の関数とみなした方がずっと分かりやすい。</description>
    </item>
    <item>
      <title>§133 置換積分と有理化 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_133_integration_by_rationalisation_and_substitution/</link>
      <pubDate>Sat, 22 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_133_integration_by_rationalisation_and_substitution/</guid>
      <description>§130 の式 \text{(3)} から、\displaystyle \int \psi(x)\, dx = \phi(x) のとき次の等式が成り立つと分かる: \[ \int \psi\{f(t)\}\, f&#39;(t)\, dt = \phi\{f(t)\} \qquad \text{(1)} \] 積分がすぐに計算できない \psi(x) の中には、この等式を使うと積分が行えるものが多くある。この手続きを一般的に言えば「新しい変数 t の関数 f(t) を使って x = f(t) として、\psi(x) を簡略化する。f&#39;(t) を乗じた \psi\{f(t)\}\, f&#39;(t) を積分できるかを確認し、もしできるならその結果を x の形に書き直す」となる。この手続きで生じる t の関数 \psi\{f(t)\}\, f&#39;(t) の積分なら簡単に計算できる場合が多い。例えばこれが有理関数なら必ず積分を計算できるし、そうでなくても積分ができるように x と t の間の関係を選ぶことがたいていは可能である。例えば有理関数 R(x) に対する R(\sqrt{x}) の積分は、x = t^{2} とすれば 2tR(t^{2}) の積分の問題となって t の有理関数の積分に帰着される。この積分方法は有理化による積分 (integration by ratinalisation) と呼ばれ、非常に広い応用を持つ。</description>
    </item>
    <item>
      <title>§134 円錐曲線で関連付いた変数の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_134_integrals_connected_with_conics/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_134_integrals_connected_with_conics/</guid>
      <description>x と y が次の形をした方程式で関連付いているとする: \[ ax^{2} + 2hxy + by^{2} + 2gx + 2fy + c = 0 \] 言い換えると、x の関数としての y のグラフが円錐曲線だとする。(\xi, \eta) をその円錐曲線上の任意の点として、x - \xi = X,\ y - \eta = Y とおく。x と y の間の関係を X と Y を使って表すと次の形になる: \[ aX^{2} + 2hXY + bY^{2} + 2GX + 2FY = 0 \] ここで F = h\xi + b\eta + f および G = a\xi + h\eta + g である。Y = tX とすると、X と Y の両方を t の有理関数として表せる。よって x と y も同様に t の有理関数として表すことができ、実際に計算すると \[ x - \xi = -\frac{2 (G + Ft)}{a + 2ht + bt^{2}},\quad y - \eta = -\frac{2t(G + Ft)}{a + 2ht + bt^{2}} \] となる。この関係を使えば前節で説明した有理化の手続きを実行できる。</description>
    </item>
    <item>
      <title>§135 \(1/\sqrt{ax^{2} &#43; 2bx &#43; c}\) の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_135_integral_one_over_square_root_of_ax2_2bx_c/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_135_integral_one_over_square_root_of_ax2_2bx_c/</guid>
      <description>y^{2} = ax^{2} + 2bx + c で a \gt 0 とする。y + x\sqrt{a} = t とおけば \[ 2\frac{dx}{dt} = \frac{(t^{2} + c)\sqrt{a} + 2bt}{(t\sqrt{a} + b)^{2}},\quad 2y = \frac{(t^{2} + c)\sqrt{a} + 2bt}{t\sqrt{a} + b} \] を得る。ここから \[ \int \frac{dx}{y} = \int \frac{dt}{t\sqrt{a} + b} = \frac{1}{\sqrt{a}} \log \left|x\sqrt{a} + y + \frac{b}{\sqrt{a}}\right| \qquad \text{(1)} \] が分かる。具体的に a = 1,\ b = 0,\ c = a^{2} あるいは a = 1,\ b = 0,\ c = -a^{2} とすれば \[ \int \frac{dx}{\sqrt{x^{2} + a^{2}}} = \log \{x + \sqrt{x^{2} + a^{2}}\},\quad \int \frac{dx}{\sqrt{x^{2} - a^{2}}} = \log |x + \sqrt{x^{2} - a^{2}}| \qquad \text{(2)} \] を得る。この等式の正しさは実際に右辺を微分してみればすぐに分かる。この二つの等式は次の等式と合わせて考えるとよい: \[ \int \frac{dx}{\sqrt{a^{2} - x^{2}}} = \arcsin\frac{x}{a} \qquad \text{(3)} \] これは最初の一般形で a \lt 0 の場合に対応する。\text{(3)} では a \gt 0 が仮定されており、a \lt 0 なら \arcsin(x/|a|) となる (参考: §119)。実際の積分では、一般的な積分の問題を (次節で説明される方法で) ここで示した標準形の組み合わせに変形して計算する。</description>
    </item>
    <item>
      <title>§136 \((λ x &#43; μ)/\sqrt{ax^{2} &#43; 2bx &#43; c}\) の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_136_integral_lambda_x_mu_over_square_root_of_ax2_2bx_c/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_136_integral_lambda_x_mu_over_square_root_of_ax2_2bx_c/</guid>
      <description>これまでの結果を使えば、全ての場合についてこの積分を計算できる。次のように議論するのが最も分かりやすいだろう。 \[ \begin{gathered} \lambda x + \mu = \frac{\lambda}{a} (ax + b) + \mu - \frac{\lambda b}{a},\quad \int \frac{ax + b}{\sqrt{ax^{2} + 2bx + c}}\, dx = \sqrt{ax^{2} + 2bx + c} \end{gathered} \] から次の等式が分かる: \[ \int \frac{(\lambda x + \mu)\, dx}{\sqrt{ax^{2} + 2bx + c}} = \frac{\lambda}{a} \sqrt{ax^{2} + 2bx + c} + \left(\mu - \frac{\lambda b}{a}\right) \int \frac{dx}{\sqrt{ax^{2} + 2bx + c}} \] 最後の積分では a が正にも負にもなる。a が正なら、x\sqrt{a} + (b/\sqrt{a}) = t とすれば \[ \frac{1}{\sqrt{a}} \int \frac{dt}{\sqrt{t^{2} + \kappa}} \] を得る。ここで \kappa = (ac - b^{2})/a である。a が負なら、A = -a として x\sqrt{A} - (b/\sqrt{A}) = t とすれば次を得る: \[ \frac{1}{\sqrt{-a}}\int \frac{dt}{\sqrt{-\kappa - t^{2}}} \]</description>
    </item>
    <item>
      <title>§137 \((λ x &#43; μ) \sqrt{ax^{2} &#43; 2bx &#43; c}\) の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_137_integral_mu_x_mu_square_root_of_ax2_2bx_c/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_137_integral_mu_x_mu_square_root_of_ax2_2bx_c/</guid>
      <description>全く同じやり方で \[ \begin{array}{l} \displaystyle \int(\lambda x + \mu) \sqrt{ax^{2} + 2bx + c}\, dx \\ \displaystyle \quad = \left(\frac{\lambda}{3a}\right) (ax^{2} + 2bx + c)^{3/2} + \left(\mu - \frac{\lambda b}{a}\right) \int \sqrt{ax^{2} + 2bx + c}\, dx \end{array} \] が分かる。最後の積分は次の三つのどれかに帰着される: \[ \int \sqrt{t^{2} + a^{2}}\, dt,\quad \int \sqrt{t^{2} - a^{2}}\, dt,\quad \int \sqrt{a^{2} - t^{2}}\, dt \] こういった形の積分を計算するのに便利な積分に関する一般的な定理を新たに紹介する。</description>
    </item>
    <item>
      <title>§138 部分積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_138_integration_by_parts/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_138_integration_by_parts/</guid>
      <description>部分積分 (integration by parts) の定理は §113 で示した積の微分則を言い換えたものに過ぎない。§113 の結果 3 から \[ \int f&#39;(x)F(x)\, dx = f(x)F(x) - \int f(x)F&#39;(x)\, dx \] が分かる。積分したい関数が f&#39;(x)F(x) という形をしていて、f(x)F&#39;(x) なら積分できるという状況はあり得る。例えば \phi(x) = x\psi(x) で \psi(x) が既知の関数 \chi(x) の二次導関数なら \[ \int\phi(x)\, dx = \int x\chi&#39;&#39;(x)\, dx = x\chi&#39;(x) - \int \chi&#39;(x)\, dx = x\chi&#39;(x) - \chi(x) \] が成り立つ。 部分積分の例として、前節で考えた積分に部分積分を適用しよう。 \[ f(x) = ax + b,\quad F(x) = \sqrt{ax^{2} + 2bx + c} = y \] とすれば \[ \begin{aligned} a\int y\, dx &amp; = (ax + b)y - \int \frac{(ax + b)^{2}}{y}\, dx \\ &amp; = (ax + b)y - a\int y\, dx + (ac - b^{2}) \int \frac{dx}{y} \end{aligned} \] であり、ここから \[ \int y\, dx = \frac{(ax + b)y}{2a} + \frac{ac - b^{2}}{2a} \int \frac{dx}{y} \] が分かる。最後の積分の計算方法は §135 で見た。</description>
    </item>
    <item>
      <title>§139 \(y^{2} = ax^{2} &#43; 2bx &#43; c\) における積分 \(∫ R(x, y)\, dx\) - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_139_the_general_integral_r_x_y/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_139_the_general_integral_r_x_y/</guid>
      <description>特殊な双曲線 y^{2} = ax^{2} + 2bx + c で関連付いた変数に対する §134 で考えた積分の最も一般的な形を考える。つまり X = y^{2} = ax^{2} + 2bx + c としたときの \[ \int R(x, \sqrt{X})\, dx \qquad \text{(1)} \] である。R は実有理関数とする。 被積分関数は x と \sqrt{X} の多項式 P と Q を使って P/Q と書ける。よって A,\ B,\ \ldots を x の有理関数とすれば \[ \frac{A + B\sqrt{X}}{C + D\sqrt{X}} = \frac{(A + B\sqrt{X})(C - D\sqrt{X})}{C^{2} - D^{2}X} = E + F\sqrt{X} \] という形まで簡略化できる。ここで新しく生じる問題は F\sqrt{X} の積分である。この問題は x の有理関数 G に対する G/\sqrt{X} の積分と考えることもできる。そして \[ \int \frac{G}{\sqrt{X}}\, dx \qquad \text{(2)} \] は G を部分分数に分解すれば必ず計算できる。この計算では三種類の積分が生じる。</description>
    </item>
    <item>
      <title>第 13 章 平滑化 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/smoothing/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/smoothing/</guid>
      <description>カルマンフィルタの性能は未来のデータを考えに入れるとき最適ではない。例えば航空機を追跡していて、最後の観測値が次のように現在の軌跡から大きく離れたとしよう (簡単のため、これからは一次元の問題だけを考える): In [3]import matplotlib.pyplot as plt data = [10.1, 10.2, 9.8, 10.1, 10.2, 10.3, 10.1, 9.9, 10.2, 10.0, 9.9, 11.4] plt.plot(data) plt.xlabel(&amp;#39;time&amp;#39;) plt.ylabel(&amp;#39;position&amp;#39;); Out [3]突然値を変える観測値 航空機はしばらくじっとしていて、最後に突然大きく位置を変えている。この位置の変化は航空機のフライトエンベロープ (安全に飛行できる速度) の限界を超えていると仮定しよう。そうだとしてもカルマンフィルタは最後の観測値を取り入れ、状態を更新する。これほど急激に旋回する可能性は低いものの、次の可能性はある:</description>
    </item>
    <item>
      <title>§140 超越関数の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_140_integration_of_transcendental_functions/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_140_integration_of_transcendental_functions/</guid>
      <description>超越関数には非常に多くの種類があるので、その積分は有理関数や代数関数の積分ほどには体系的に行えない。ここでは積分が必ず見つかる超越関数のクラスを順にいくつか見ていく。</description>
    </item>
    <item>
      <title>§141 サインとコサインの多項式の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_141_integration_of_polynomials_in_sin_and_cos/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_141_integration_of_polynomials_in_sin_and_cos/</guid>
      <description>関数が次の形をした項の有限個の和なら、必ず積分を計算できる: \[ A\cos^{m} ax \sin^{m&#39;} ax \cos^{n} bx \sin^{n&#39;} bx\cdots \] ここで m,\ m&#39;,\ n,\ n&#39;,\ \ldots は正の整数で、a,\ b,\ \ldots は実数とする。この形の項は次の形をした項の和として表せる: \[ \alpha\cos\{(pa + qb + \cdots)x\},\quad \beta \sin\{(pa + qb + \cdots)x\} \] ここから積分もすぐに分かる。 例 51 \sin^{3} x \cos^{2} 2x の積分を計算する。この場合には等式 \[ \sin^{3} x = \dfrac{1}{4}(3\sin x - \sin 3x),\quad \cos^{2} 2x = \dfrac{1}{2}(1 + \cos 4x) \] を使う。二つの式を乗じて \sin x \cos 4x を例えば \frac{1}{2}(\sin 5x - \sin 3x) と置き換えれば \[ \begin{array}{l} \displaystyle \dfrac{1}{16}\int (7\sin x - 5\sin 3x + 3\sin 5x - \sin 7x)\, dx\\ \displaystyle \qquad \qquad = - \dfrac{7}{16}\cos x + \dfrac{5}{48}\cos 3x - \dfrac{3}{80}\cos 5x + \dfrac{1}{112}\cos 7x \end{array} \] を得る。</description>
    </item>
    <item>
      <title>§142 \(x^{n} \cos x\) と \(x^{n} \sin x\) の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_142_integration_of_polynomials_in_sin_cos_and_x/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_142_integration_of_polynomials_in_sin_cos_and_x/</guid>
      <description>部分積分を使うと上述の結果を一般化できる。等式 \[ \begin{alignedat}{3} \int x^{n}\cos x\, dx &amp; = &amp; &amp; x^{n}\sin x &amp; &amp; - n\int x^{n-1}\sin x\, dx,\\ \int x^{n}\sin x\, dx &amp; = &amp; - &amp; x^{n}\cos x &amp; &amp; + n\int x^{n-1}\cos x\, dx \end{alignedat} \] が成り立つから、この処理を繰り返すことで正の整数 n に対するこの積分を完全に計算できる。つまり \displaystyle\int x^{n}\cos ax\, dx と \displaystyle\int x^{n}\sin ax\, dx は n が正の整数のとき計算できる。さらに多項式 P に対する \[ \int P(x, \cos ax, \sin ax, \cos bx, \sin bx,\ \ldots)\, dx \] も同様の方法で計算できる。 例 52 関数 \[ x\sin x,\quad x^{2}\cos x,\quad x^{2}\cos^{2}x, \] \[ x^{2}\sin^{2}x \sin^{2} 2x,\quad x\sin^{2}x \cos^{4}x,\quad x^{3}\sin^{3}\frac{1}{3}x \] の積分を計算せよ。 次の条件を満たす多項式 P,\ Q を求めよ: \[ \int\{(3x - 1)\cos x + (1 - 2x)\sin x\}\, dx = P\cos x + Q\sin x \]</description>
    </item>
    <item>
      <title>§143 \(\cos x\) と \(\sin x\) の有理関数の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_143_integration_of_rational_functions_of_cos_and_sin/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_143_integration_of_rational_functions_of_cos_and_sin/</guid>
      <description>\cos x と \sin x の有理関数の積分は置換 \tan \frac{1}{2} = t を使うと計算できる。等式 \[ \cos x = \frac{1 - t^{2}}{1 + t^{2}},\quad \sin x = \frac{2t}{1 + t^{2}},\quad \frac{dx}{dt} = \frac{2}{1 + t^{2}} \] が成り立つので、積分は t の有理関数の積分に帰着される。 例 53 次を示せ: \[ \int \sec x\, dx = \log |\sec x + \tan x|,\quad \int \cosec x\, dx = \log |\tan \dfrac{1}{2}x| \] 次が成り立つ: \[ \begin{gathered} \int \tan x\, dx = -\log |\cos x|,\ \int \cot x\, dx = \log |\sin x|,\\ \int\sec^{2} x\, dx = \tan x,\ \int \cosec^{2} x\, dx = -\cot x,\\ \int \tan x\sec x\, dx = \sec x,\ \int \cot x \cosec x\, dx = -\cosec x \end{gathered} \] [積分はどれも一般的な形に含まれるが、置換を使う必要はない。§119 と §130 の式 \text{(5)} からすぐに分かる]</description>
    </item>
    <item>
      <title>§144 \(\arcsin x,\ \arctan x,\ \log x\) を含む式の積分 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_144_integration_of_functions_involving_arcsin_arctan_and_log/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_144_integration_of_functions_involving_arcsin_arctan_and_log/</guid>
      <description>サインとタンジェントの逆関数および対数関数の積分は部分積分を使って簡単に求められる。結果を次に示す: \[ \begin{aligned} \int \arcsin x\, dx &amp; = x\arcsin x - \int \frac{x\, dx}{\sqrt{1 - x^{2}}} = x\arcsin x + \sqrt{1 - x^{2}},\\ \int \arctan x\, dx &amp; = x\arctan x - \int \frac{x\, dx}{1 + x^{2}} = x\arctan x - \dfrac{1}{2} \log(1 + x^{2}),\\ \int \log x\, dx &amp; = x\log x - \int dx = x(\log x - 1) \end{aligned} \] y = f(x) の積分が求まるときに f の逆関数 \phi に対する x = \phi(y) の積分も必ず求められることを示すのは難しくない。置換 y = f(x) を使えば \[ \int \phi(y)\, dy = \int xf&#39;(x)\, dx = xf(x) - \int f(x)\, dx \] が分かる。この方法を使って \arcsin y と \arctan y の積分を計算してみるとよい。</description>
    </item>
    <item>
      <title>§145 平面曲面の面積 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_145_areas_of_plane_curves/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_145_areas_of_plane_curves/</guid>
      <description>ここまで説明してきた積分の最も重要な応用は、平面曲線の面積の計算である。連続曲線 y = \phi(x) のグラフ P_{0}PP&#39; (図 44) が x 軸の上方にあると仮定し、P が点 (x, y) で P&#39; が点 (x + h, y + k) だとする。h は正でも負でもよい (図では正としている)。 図 44 図 44a 読者は「面積」の意味を当然知っており、特に「ONPP_{0} の面積」と言ったときに何を意味するかを知っていると思う。ここでは面積という概念が数学的な定義なしに定められているものとする。実は &#34;面積&#34; は最も詳細な数学的解析を必要とする概念であり、これまでにたくさんの解析がなされてきた。以降の章ではこの問題に立ち返り、ONPP_{0} などの領域の「面積」が正確に何を意味するのかを説明する。ただ今の段階では、そういった領域にとある正の実数 (ONPP_{0}) が対応付いているのだと単純に仮定して話を進める。この実数は面積と呼ばれ、次に示すような常識的に明らかな性質を持つ: \[ (PRP&#39;) + (NN&#39;RP) = (NN&#39;P&#39;P),\quad (N_{1}NPP_{1}) \lt (ONPP_{0}) \]</description>
    </item>
    <item>
      <title>§146 平面曲線の長さ - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_146_lengths_of_plane_curves/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/6_146_lengths_of_plane_curves/</guid>
      <description>直線でない曲線の長さは、実は面積よりも難しい概念となる。図 44 において P_{0}P が有限の長さ S(x) を持つという仮定からは (面積で行ったような) 満足行く議論が行えない。そもそも S(x) が連続である、つまり \lim\{S(P&#39;) - S(P)\} = 0 であることさえ証明できない。図 44 ではこれが明らかに成り立つように思えるが、図 44a ではそうとも言えない。実は曲線の長さが意味するものを注意深く解析しない限り、いくらかでも厳密さを持った議論は行えない。 ただ曲線の長さを表す式がどのような形にならなければならないかは簡単に分かる。曲線が接線を持ち、その傾きが連続的に変化すると仮定する。このとき \phi&#39;(x) は連続となる。すると曲線が長さを持つという仮定から \[ \frac{S(x + h) - S(x)}{h} = \frac{\{PP&#39;\}}{h} = \frac{PP&#39;}{h} × \frac{\{PP&#39;\}}{PP&#39;} \] が分かる。ここで \{PP&#39;\} は弦 PP&#39; に対応する弧の長さを表す。さて \[ PP&#39; = \sqrt{PR^{2} + {RP&#39;}^{2}} = h\sqrt{1 + \frac{k^{2}}{h^{2}}} \] だから、x と x + h の間にある \xi で \[ k = \phi(x + h) - \phi(x) = h\phi&#39;(\xi) \] が成り立つ。よって \[ \lim \frac{PP&#39;}{h} = \lim \sqrt{1 + [\phi&#39;(\xi)]^{2}} = \sqrt{1 + [\phi&#39;(x)]^{2}} \] が分かる。加えて \[ \lim \frac{\{PP&#39;\}}{PP&#39;} = 1 \] を仮定すれば、 \[ S&#39;(x) = \lim \frac{S(x + h) - S(x)}{h} = \sqrt{1 + [\phi&#39;(x)]^{2}} \] および \[ S(x) = \int \sqrt{1 + [\phi&#39;(x)]^{2}}\, dx \] が分かる。</description>
    </item>
    <item>
      <title>§147 高階の平均値の定理 (テイラーの定理) - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_147_taylors_theorem/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_147_taylors_theorem/</guid>
      <description>§125 で証明したように、f(x) が区間 [a, b] で導関数 f&#39;(x) を持つとき、a \lt \xi \lt b を満たす \xi で \[ f(b) - f(a) = (b - a) f&#39;(\xi) \] が成り立つ。同じことを言い換えると、f(x) が [a, a + h] で導関数を持つなら、とある \theta_{1}\ (0 \lt \theta_{1} \lt 1) で \[ f(a + h) - f(a) = hf&#39;(a + \theta_{1} h) \qquad \text{(1)} \] が成り立つ。この定理の証明では関数 \[ f(b) - f(x) - \frac{b - x}{b - a} \{f(b) - f(a)\} \] を考えた。この関数は x = a と x = b で 0 となる。 f(x) が [a, b] で二次導関数 f&#39;&#39;(x) を持つと仮定する。これにより一次導関数 f&#39;(x) の連続性も仮定される。関数 \[ f(b) - f(x) - (b - x) f&#39;(x) - \left(\frac{b - x}{b - a}\right)^{2} \{f(b) - f(a) - (b - a)f&#39;(a)\} \] を考えると、この関数も x = a と x = b で 0 になる。この関数の導関数は \[ \frac{2(b - x)}{(b - a)^{2}} \{f(b) - f(a) - (b - a) f&#39;(a) - \dfrac{1}{2}(b - a)^{2}f&#39;&#39;(x)\} \] であり、これは a と b の間にある x\ (a と b は除く) で 0 になる (§121)。つまり a と b の間のとある \xi で次の等式が成り立つ: \[ f(b) = f(a) + (b - a)f&#39;(a) + \dfrac{1}{2}(b - a)^{2}f&#39;&#39;(\xi) \] \theta_{2}\ (0 \lt \theta_{2} \lt 1) を使えば \xi = a + \theta_{2}(b - a) という形で表すこともできる。</description>
    </item>
    <item>
      <title>第六章に関するその他の例 - 第六章 微分と積分 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/misc_examples/</link>
      <pubDate>Tue, 25 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/6_derivatives_and_integrals/misc_examples/</guid>
      <description>x \leq 0 で 1 + x、0 \lt x \lt 1 で x、1 \leq x \leq 2 で 2 - x、x \gt 2 で 3x - x^{2} となる関数を f(x) とする。x = 0,\ 1,\ 2 における f(x) の連続性および f&#39;(x) の存在と連続性を議論せよ。 a,\ ax + b,\ ax^{2} + 2bx + c,\ \ldots をそれぞれ u_{0},\ u_{1},\ u_{2},\ \ldots と表記する。このとき u_{0}^{2} u_{3} - 3u_{0} u_{1} u_{2} + 2u_{1}^{3} と u_{0} u_{4} - 4u_{1} u_{3} + 3u_{2}^{2} が x によらないと示せ。 定数 a_{0},\ a_{1},\ \ldots,\ a_{2n} に対して U_{r} = (a_{0}, a_{1},\ \ldots, a_{r} \mathbin{)\kern-5pt(} x, 1)^{r} とする1。このとき \[ U_{0}U_{2n} - 2nU_{1}U_{2n-1} + \frac{2n(2n - 1)}{1·2} U_{2}U_{2n-2} - \cdots + U_{2n}U_{0} \] は x によらない。 [微分して等式 U_{r}&#39; = rU_{r-1} を使う]</description>
    </item>
    <item>
      <title>§148 テイラー級数 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_148_taylors_series/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_148_taylors_series/</guid>
      <description>点 x = a を囲む区間 [a - \eta, a + \eta] で f(x) の全ての導関数が連続とする。h の絶対値が \eta より小さいなら、全ての n に対して \theta_{n}\ (0 \lt \theta_{n} \lt 1) があって \[ f(a + h) = f(a) + hf&#39;(a) + \cdots + \frac{h^{n-1}}{(n - 1)!} f^{(n-1)}(a) + \frac{h^{n}}{n!} f^{(n)}(a + \theta_{n} h), \] が成り立つ。つまり \[ S_{n} = \sum_{0}^{n-1} \frac{h^{\nu}}{\nu!} f^{(\nu)}(a),\quad R_{n} = \frac{h^{n}}{n!} f^{(n)}(a + \theta_{n} h) \] とすれば、 \[ f(a + h) - S_{n} = R_{n} \] が成り立つ。 加えて n \to \infty で R_{n} \to 0 とすれば、 \[ f(a + h) = \lim_{n\to\infty} S_{n} = f(a) + hf&#39;(a) + \frac{h^{2}}{2!} f&#39;&#39;(a) + \cdots \] となる。 この f(a + h) の展開にはテイラー級数 (Teylor&#39;s Series) という名前が付いている。a = 0 とした \[ f(h) = f(0) + hf&#39;(0) + \frac{h^{2}}{2!} f&#39;&#39;(0) + \cdots \] はマクローリン級数 (Maclaurin&#39;s Series) と呼ばれ、関数 R_{n} はラグランジュの剰余項 (Lagrange&#39;s form of the remainder) と呼ばれる。</description>
    </item>
    <item>
      <title>§149 テイラーの定理を使った極大値と極小値の計算 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_149_applications_of_taylors_theorem_to_maxima_and_minima/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_149_applications_of_taylors_theorem_to_maxima_and_minima/</guid>
      <description>テイラーの定理を使うと §122–§123 で示した極値の判定法が理論的に完全なものになる (ただしこの結果が実際に役に立つわけではない)。\phi(x) が一次と二次の導関数を持つなら、\phi(x) が x = \xi で極大となるための十分条件は \phi&#39;(\xi) = 0 かつ \phi&#39;&#39;(\xi) \lt 0 であり、極小となるための十分条件は \phi&#39;(\xi) = 0 かつ \phi&#39;&#39;(\xi) \gt 0 だった。\phi&#39;&#39;(\xi) と \phi&#39;(\xi) がどちらも 0 だとこの方法では判定できなくなる。 最初の n 個の導関数 \[ \phi&#39;(x),\quad \phi&#39;&#39;(x),\quad \ldots,\quad \phi^{(n)}(x) \] が連続で、x = \xi で \phi^{(n)}(x) 以外が全て 0 になるとする。このとき十分小さい h で \[ \phi(\xi + h) - \phi(\xi) = \frac{h^{n}}{n!} \phi^{(n)} (\xi + \theta_{n} h) \] が成り立つ。極大値または極小値が存在するには、十分小さい全ての h でこの式の符号が一定でなければならない。ここから n は偶数だと分かる。n が偶数で \phi^{(n)}(\xi) が負なら極大値が、正なら極小値が存在する。</description>
    </item>
    <item>
      <title>第 14 章 適応フィルタ - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/adaptive_filtering/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/adaptive_filtering/</guid>
      <description>ここまでに考えた問題では、追跡する物体がプロセスモデルに従って行儀良く振る舞っていた。例えば直線的に移動する物体を追跡するなら、定常速度フィルタ (定常速度モデルを仮定するカルマンフィルタ) を使うことができる。物体が直線上をそれなりに等しい速度で移動する限り、あるいは速度や進行方向を非常に少しずつ変化させる限り、このフィルタは優れた推定値を出力する。しかし追跡するのが機動 (maneuver) する目標、例えば曲がりくねった道路を進む車や風にもまれながら飛行する航空機だったらどうなるだろうか？ こういった状況でフィルタの性能は大きく悪化する。あるいは海に浮かぶ帆船の追跡を考えてほしい。制御入力をモデルに組み込むことはできても、風や海流をモデル化する方法は存在しない。</description>
    </item>
    <item>
      <title>§150 テイラーの定理を使った極限の計算 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_150_applications_of_taylors_theorem_to_calculation_of_limits/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_150_applications_of_taylors_theorem_to_calculation_of_limits/</guid>
      <description>x の関数 f(x) と \phi(x) の導関数 f&#39;(x) と \phi&#39;(x) が x = \xi で連続であり、f(\xi) と \phi(\xi) が両方とも 0 だとする。このとき関数 \[ \psi(x) = \frac{f(x)}{\phi(x)} \] は x = \xi で定義されない。しかしもちろん \psi(x) が x \to \xi で極限に向かう可能性はある。 さて \xi と x の間の x_{1} に対して \[ f(x) = f(x) - f(\xi) = (x - \xi)f&#39;(x_{1}) \] であり、同様に \xi と x の間の x_{2} に対して \phi(x) = (x - \xi)\phi&#39;(x_{2}) が成り立つ。したがって \[ \psi(x) = \frac{f&#39;(x_{1})}{\phi&#39;(x_{2})} \] が分かる。このとき四つの異なる場合が存在する。 f&#39;(\xi) \neq 0 かつ \phi&#39;(\xi) \neq 0 なら \[ \frac{f(x)}{\phi(x)} \to \frac{f&#39;(\xi)}{\phi&#39;(\xi)} \] が成り立つ。</description>
    </item>
    <item>
      <title>§151 平面曲線の交点 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_151_contact_of_plane_curves/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_151_contact_of_plane_curves/</guid>
      <description>ある点が二つの曲線の両方に存在するとき、二つの曲線はその点で交わる (intersect) と言う。さらにその点における接線が同じなら、二つの曲線はその点で接する (touch) と言う。 二つの関数 f(x) と \phi(x) について、全ての次数の導関数が x = \xi で連続とする。曲線 y = f(x) と y = \phi(x) を考える。一般に f(\xi) と \phi(\xi) は異なっており、x = \xi という横座標は交点に対応しない。しかしもし f(\xi) = \phi(\xi) なら、x = \xi,\ y = f(\xi) = \phi(\xi) という点で曲線が交わる。二つの曲線がこの点で交わるとする。さらに曲線がこの点で接するには、一次導関数 f&#39;(x) と \phi&#39;(x) が x = \xi で等しいことが必要十分である。</description>
    </item>
    <item>
      <title>§152 多変数関数の微分 (その 1) - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_152_differentiation_of_functions_of_several_variables/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_152_differentiation_of_functions_of_several_variables/</guid>
      <description>ここまでは x という一つの変数の関数だけを考えてきた。しかし微分の考え方を x,\ y,\ \ldots という複数の変数の関数に拡張するのを妨げるものは何もない。 f(x, y) を二つの1実変数 x と y の関数として、極限 \[ \lim_{h\to 0}\frac{f(x + h, y) - f(x, y)}{h},\quad \lim_{k\to 0}\frac{f(x, y + k) - f(x, y)}{k} \] が考えている全ての x と y に対して存在すると仮定する。つまり f(x, y) が x に関する導関数 df/dx = D_{x}f(x, y) を持ち、さらに y に関する導関数 df/dy = D_{y}f(x, y) も持つとする。こういった導関数は f の偏微分係数 (partial differential coefficients) と呼ばれ、 \[ \frac{\partial f}{\partial x},\quad \frac{\partial f}{\partial y} \] あるいは \[ f_{x}&#39;(x, y),\quad f_{y}&#39;(x, y) \] と表記される。f_{x}&#39;,\ f_{y}&#39; や f_{x},\ f_{y} と書かれることもある。ただしここで、こういった記法が本質的に新しい概念を定義していると考えてはいけない。x に関する &#34;偏微分&#34; は、手続きとして通常の微分と全く同一である。f が x とは独立な二つ目の引数 y を取る点にだけ気を付ければよい。</description>
    </item>
    <item>
      <title>§153 二変数関数の微分 (その 2) - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_153_theorem_of_the_total_differential_coefficient/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_153_theorem_of_the_total_differential_coefficient/</guid>
      <description>一変数の関数の微分に関する全微分係数定理 (Theorem of the Total Differential Coefficient)と呼ばれる非常に重要な定理がある。この定理は前節で説明した二変数関数に関する概念を利用しており、 \[ f\{\phi(t), \psi(t)\} \] を t に関して微分する方法を与える。 最初に、x と y の二変数関数 f(x, y) が考えている全ての x,\ y で連続 (§107) なf_{x}&#39;,\ f_{y}&#39; を持つ場合を考える。さらに (x, y) の変動が曲線 \[ x = \phi(t),\quad y = \psi(t) \] に制限されていると仮定する。ここで \phi と \psi は t の関数で、連続な導関数 \phi&#39;(t),\ \psi&#39; (t) を持つ。このとき f(x, y) は単一の変数 t の関数となるので、これを F(t) と表記する。F&#39;(t) を求める問題を考える。</description>
    </item>
    <item>
      <title>§154 二変数関数の平均値の定理 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_154_mean_value_theorem_for_functions_of_several_variables/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_154_mean_value_theorem_for_functions_of_several_variables/</guid>
      <description>前章の結果の多くは平均値の定理から導かれた。この定理は \[ \phi(x + h) - \phi(x) = hf&#39;(x + \theta h) \] と表される。あるいは y = \phi(x) とすれば \[ \delta y = f&#39;(x + \theta\, \delta x)\, \delta x \] とも書ける。 z = f(x, y) を二つの独立な変数 x と y の関数として、x と y の増分を h = \delta x および k = \delta y とする。z の増分 \[ \delta z = f(x + h, y + k) - f(x, y) \] を z の x と y に関する微分と h,\ k を使って表すことを考える。 f(x + ht, y + kt) = F(t) とすると、 \[ f(x + h, y + k) - f(x, y) = F(1) - F(0) = F&#39;(\theta) \] となる \theta\ (0 \lt \theta \lt 1) が存在する。一方で §153 からは \[ \begin{aligned} F&#39; (t) &amp; = D_{t} f(x + ht, y + kt)\\ &amp; = hf_{x}&#39;(x + ht, y + kt) + kf_{y}&#39;(x + ht, y + kt) \end{aligned} \] が分かり、二つの式から \[ \begin{aligned} \delta z &amp; = f(x + h, y + k) - f(x, y) \\ &amp; = hf_{x}&#39;(x + \theta h, y + \theta k) + kf_{y}&#39;(x + \theta h, y + \theta k) \end{aligned} \] が得られる。f_{x}&#39; と f_{y}&#39; は x と y の連続関数と仮定しているから、 \[ \begin{aligned} f_{x}&#39;(x + \theta h, y + \theta k) &amp; = f_{x}&#39;(x, y) + \varepsilon_{h, k},\\ f_{y}&#39;(x + \theta h, y + \theta k) &amp; = f_{y}&#39;(x, y) + \eta_{h, k} \end{aligned} \] とすれば h と k が 0 に向かうとき \varepsilon_{h, k} と \eta_{h, k} も 0 に向かう。よって上述の結果は \[ \delta z = (f_{x}&#39; + \varepsilon)\, \delta x + (f_{y}&#39; + \eta)\, \delta y \qquad \text{(1)} \] と書くことができる。ここで \delta x と \delta y が小さいとき \varepsilon と \eta も小さくなる。</description>
    </item>
    <item>
      <title>§155 微分小 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_155_differentials/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_155_differentials/</guid>
      <description>微積分の応用、特に幾何学への応用では、§154 の式 \text{(1)} のような x,\ y,\ z の関数の増分 \delta x,\ \delta y,\ \delta z を使った式を使うよりも、dx,\ dy,\ dz で表される微分小 (differential) と呼ばれるものを使った式の方が便利な場合が多い。 しばらく一つの変数 x の関数 y = f(x) に話を戻す。f&#39;(x) が連続なら、 \[ \delta y = \{f&#39;(x) + \varepsilon\}\, \delta x \qquad \text{(1)} \] とすれば \delta x \to 0 のとき \varepsilon \to 0 が成り立つ。この事実を言い換えれば、等式 \[ \delta y = f&#39;(x)\, \delta x \hphantom{\{{} + \varepsilon\}} \qquad \text{(2)} \] が「近似的に」正しい、ということになる。これまでは dy という単一の記号に意味を与えてこなかったが、ここで次の等式を使って dy を定義する: \[ dy = f&#39;(x)\, \delta x \qquad \text{(3)} \]</description>
    </item>
    <item>
      <title>§156 定積分と面積 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_156_definition_of_areas_of_curves/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_156_definition_of_areas_of_curves/</guid>
      <description>第六章の §145 では、PQ を x の連続関数 f(x) のグラフとしたとき 図 47 における領域 PpqQ に面積と呼ばれる値が定義されることを仮定して話を進めた。Op と Oq を a と x して x を変化させると、明らかにこの面積は x の関数となる。この関数を F(x) と表す。 §145 ではこの仮定の下で F&#39;(x) = f(x) を示し、この結果を使えば特定の曲線の面積を計算できることを示した。しかし面積 F(x) なる値が存在するという最初の仮定はまだ正当化されていない。 長方形には面積が存在し、その値がニ辺の長さの積として得られることを私たちは知っている。またユークリッドによって示された三角形や平行四辺形あるいは多角形の性質を使えば、そういった図形の面積の意味を定められる。しかし現在の私たちは、曲線で囲まれた図形の面積の直接的な定義を知らない。これから F(x) に定義を与え、面積の存在を証明する方法を示す1。</description>
    </item>
    <item>
      <title>§157 定積分 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_157_definite_integral/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_157_definite_integral/</guid>
      <description>f(x) を連続関数とすると、曲線 y = f(x) と x 軸と二つの垂直な直線 x = a と x = b で囲まれる領域は有限の領域となる。第六章の §145 で示したように、F(x) が f(x) の「積分関数」のとき、つまり \[ F&#39;(x) = f(x),\quad F(x) = \int f(x)\, dx \] のとき、この領域の面積は F(b) - F(a) となる。 F(x) を表す式の計算がいつでも可能なわけではないので、F(x) を明示せずに PpqQ の面積を表現する方法があれば便利である。そこで \[ (PpqQ) = \int_{a}^{b} f(x)\, dx \] と書くことにする。 この等式の右辺の式は二つの方法のどちらかで定義されているとみなせる。まず f(x) を積分した関数の一つ F(x) に対する F(b) - F(a) の省略形と考える方法がある。ここで F(x) を示す式が計算できていなくても構わない。あるいは §156 で直接定義される PpqQ の面積と考えてもよい。</description>
    </item>
    <item>
      <title>§158 扇形の面積と三角関数 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_158_area_of_circular_sector_and_trigonometric_function/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_158_area_of_circular_sector_and_trigonometric_function/</guid>
      <description>\cos x や \sin x をはじめとした三角関数の理論が初等三角法の教科書で説明されるときには、証明されない仮定が最初におかれる場合が多い。二つの直線 OA と OP は角度 (angle) を定めるが、この「幾何学的な」定義を純粋に解析的な用語として採用することに問題はない。問題はこの次の、角度は数値として表せるという仮定にある。つまりここでは、図 47 の領域 PpqQ に対応する実数の存在と同じように、二つの直線の位置関係に対応する実数 x の存在が仮定されている。この点さえ認めれば、後は \cos x や \sin x が通常通りに定義でき、以降の理論の構築で行き詰まることもない。つまり唯一の問題は \bm{\cos x} や \bm{\sin x} における \bm{x} とはいったい何なのかにある。この問題を解決するには角度の意味を定める必要があり、私たちはこれからこれを行う。最も自然な定義は次のようになる: O を中心とした半径 1 の円の弧を AP とすれば OA = OP = 1 が成り立つ。そして角度の大きさを表す実数 x を 弧 \bm{AP} の長さと定める。この定義はたいていの教科書で採用されるものであり、&#34;弧度法&#34; の理論がここから展開される。しかし今の目的に照らして考えると致命的な欠陥がある。曲線の長さは面積と同じように詳細な数学的な解析が可能な概念であり、その解析はこれまでの節と似てはいるものの明らかにより難しい。そのため曲線の長さをここで一般的に扱うなどとてもできない。</description>
    </item>
    <item>
      <title>§159 和の極限を使った定義による定積分の計算 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_159_definite_integral_as_limit_of_one_plus_one_over_n_to_n_a_sum/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_159_definite_integral_as_limit_of_one_plus_one_over_n_to_n_a_sum/</guid>
      <description>§156–§157 で示した定義を使って定積分を直接計算できる場合も少数だがある。一般に不定積分を使って計算した方がずっと簡単なことが多いが、いくつか例を計算すれば理解が深まるだろう。 例 64 \displaystyle\int_{a}^{b} x\, dx を計算せよ。分割点 a = x_{0},\ x_{1},\ x_{2},\ \ldots,\ x_{n} = b で [a, b] を n 等分し、 \[ (x_{1} - x_{0})f(x_{0}) + (x_{2} - x_{1})f(x_{1}) + \cdots + (x_{n} - x_{n-1})f(x_{n-1}) \] の n \to \infty における極限として求めること。 [和は \[ \small \begin{aligned} &amp; \frac{b - a}{n}\left[ a + \left(a + \frac{b - a}{n}\right) + \left(a + 2\frac{b - a}{n}\right) + \cdots + \left\{a + (n - 1)\frac{b - a}{n}\right\} \right]\\ &amp; \quad = \frac{b - a}{n}\left[ na + \frac{b - a}{n} \{1 + 2 + \cdots + (n - 1)\} \right]\\ &amp; \quad = (b - a)\left\{a + (b - a)\frac{n(n - 1)}{2n^{2}}\right\} \end{aligned} \] であり、n \to \infty のとき極限 \frac{1}{2} (b^{2} - a^{2}) に向かう。この結果を幾何学的に確認するとよい]</description>
    </item>
    <item>
      <title>補遺 A インストール方法 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/installation/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/installation/</guid>
      <description>本書は Jupyter Notebook で書かれている。Jupyter Notebook はブラウザベースの対話的 Python 環境であり、これを使うと Python コード・文章・数式を一つにまとめることができる──対話的環境がなければカルマンフィルタの理解はほぼ不可能だと私は思う。様々なパラメータを変更してすぐに結果が確認できなければ、パラメータの役割を深く理解するのは難しい。対話的な環境があれば、「～したらどうなる？」のシナリオをすぐに試せる。例えば「\mathbf{Q} をゼロにしたらどうなる？」と疑問に思ったなら、Jupyter Notebook で試してみればいい。</description>
    </item>
    <item>
      <title>§160 定積分の性質 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_160_general_properties_of_the_definite_integral/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_160_general_properties_of_the_definite_integral/</guid>
      <description>定積分は次に示す重要な性質を持つ1。 \displaystyle\int_{a}^{b} f(x)\, dx = -\int_{b}^{a} f(x)\, dx これは F(x) を使った積分の定義から直ちに従う。つまり F(b) - F(a) = -\{F(a) - F(b)\} である。和を使った直接的な定義では上端が下端より大きいことが仮定されており、この定義は a \lt b のときの \displaystyle\int_{b}^{a} f(x)\, dx に適用できない。和を使った定義を基礎的なものとみなすなら、等式 \text{(1)} を右辺の定義とみなして定義を拡張する必要がある。 \displaystyle\int_{a}^{a} f(x)\, dx = 0 \displaystyle\int_{a}^{b}f(x)\, dx + \int_{b}^{c}f(x)\, dx = \int_{a}^{c}f(x)\, dx \displaystyle\int_{a}^{b}kf(x)\, dx = k \int_{a}^{b}f(x)\, dx \displaystyle\int_{a}^{b}\{f(x) + \phi(x)\}\, dx = \int_{a}^{b}f(x)\, dx + \int_{a}^{b}\phi(x)\, dx こういった性質のきちんとした証明を書けば積分の理解が深まるだろう。不定積分を使った定義と和を使った直接的な定義の両方から示すとよい。次の関係も重要である:</description>
    </item>
    <item>
      <title>§161 置換積分と部分積分 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_161_the_fundamental_theorem_of_the_integral_calculus/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_161_the_fundamental_theorem_of_the_integral_calculus/</guid>
      <description>§138 から \[ \int_{a}^{b} f(x)\phi&#39;(x)\, dx = f(b)\phi(b) - f(a)\phi(a) - \int_{a}^{b} f&#39;(x)\phi(x)\, dx \] が分かる。この等式は部分定積分 (integration of a definite integral by parts) の公式という名前で知られる。 同様に §133 からは、f(t) の不定積分が F(t) なら \[ \int f\{\phi(x)\}\phi&#39;(x)\, dx = F\{\phi(x)\} \] だと分かる。よって \phi(a) = c,\ \phi(b) = d とすれば \[ \int_{c}^{d} f(t)\, dt = F(d) - F(c) = F\{\phi(b)\} - F\{\phi(a)\} = \int_{a}^{b} f\{\phi(x)\}\phi&#39;(x)\, dx \] を得る。これは置換 (substitution) を使った定積分の変形公式である。 部分積分と置換積分の公式を使うと、被積分関数の不定積分をわざわざ計算せずとも定積分の値を求められる場合がある。そればかりか、不定積分がそもそも求められない場合でも値が求まることもある。この例を次の例でいくつか示す。不定積分を知らなくても定積分の値が求められる場合があるのは不思議なことではない。不定積分 F(x) の一般的な形が求められなくても、二つの特定の値の差 F(b) - F(a) なら求められる可能性がまだ残っている。ただ一般的に、この方法による計算は現在の私たちが知っているよりも高度な手法を使ってはじめて可能となる。</description>
    </item>
    <item>
      <title>§162 部分積分を使ったテイラーの定理の証明 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_162_alternative_proof_of_taylors_theorem/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_162_alternative_proof_of_taylors_theorem/</guid>
      <description>続いて §147 で予告したテイラーの定理の別証明を示す。 n 次までの導関数が連続な関数を f(x) として、F_{n}(x) を次のように定める: \[ F_{n}(x) = f(b) - f(x) - (b - x)f&#39;(x) - \cdots - \frac{(b - x)^{n-1}}{(n - 1)!} f^{(n-1)}(x) \] このとき \[ F_{n}&#39;(x) = -\frac{(b - x)^{n-1}}{(n - 1)!} f^{(n)}(x) \] であり、ここから \[ F_{n}(a) = F_{n}(b) - \int_{a}^{b}F_{n}&#39;(x)\, dx = \frac{1}{(n - 1)!} \int_{a}^{b} (b - x)^{n-1} f^{(n)}(x)\, dx \] が分かる。b を a + h と書き、x = a + th として積分を変形すると \[ f(a + h) = f(a) + hf&#39;(a) + \cdots + \frac{h^{n-1}}{(n - 1)!} f^{(n-1)}(a) + R_{n} \qquad \text{(1)} \] を得る。ここで R_{n} は次のようになる: \[ R_{n} = \frac{h^{n}}{(n - 1)!} \int_{0}^{1} (1 - t)^{n-1} f^{(n)}(a + th)\, dt \qquad \text{(2)} \]</description>
    </item>
    <item>
      <title>§163 コーシーの剰余項の二項係数への応用 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_163_application_to_binomial_series/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_163_application_to_binomial_series/</guid>
      <description>m が正の整数でないとする。このとき f(x) = (1 + x)^{m} に対するコーシーの剰余項は次のようになる: \[ R_{n} = \frac{m(m - 1)\cdots (m - n + 1)}{1·2\cdots (n - 1)}\, \frac{(1 - \theta )^{n-1} x^{n}}{(1 + \theta x)^{n-m}} \] ここで -1 \lt x \lt 1 なら、x が正でも負でも (1 - \theta)/(1 + \theta x) は 1 より小さい。さらに全ての n に対して (1 + \theta x)^{m-1} は定数 K より小さくなる。具体的には m \gt 1 なら (1 + |x|)^{m-1} より小さく、m \lt 1 なら (1 - |x|)^{m-1} より小さい。したがって \[ |R_{n}| \lt K |m| \left|\binom{m - 1}{n - 1}\right| |x^{n}| = \rho_{n} \] とすれば、例 27.13 より n \to \infty で \rho_{n} \to 0 となる。よって R_{n} \to 0 が分かる。以上で全ての有理数 m と -1 から 1 の間の x に対する二項定理が証明された。ラグランジュの剰余項を使った 例 56.2 では負の x の扱いが困難だったことを思い出してほしい。</description>
    </item>
    <item>
      <title>§164 実変数の複素関数の積分 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_164_integrals_of_complex_functions/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/7_164_integrals_of_complex_functions/</guid>
      <description>ここまで定積分の被積分関数は実関数だとしてきた。実変数 x の複素関数 f(x) = \phi(x) + i\psi(x) の a から b までの間の積分は次のように定義する: \[ \int_{a}^{b} f(x)\, dx = \int_{a}^{b} \{\phi(x) + i\psi(x)\}\, dx = \int_{a}^{b} \phi(x)\, dx + i \int_{a}^{b} \psi(x)\, dx \] この積分がこれまでに考えた実関数の積分と変わらない性質を持つことは明らかに分かる。 そのような性質の中に以降で使うことになるものが一つある。その性質は次の不等式で表される1: \[ \left|\int_{a}^{b} f(x)\, dx\right| \leq \int_{a}^{b} |f(x)|\, dx \qquad \text{(1)} \] この不等式は §156–§157 の定義から容易に示せる。\delta_{\nu} が §156 と同じ意味を持ち、\delta_{\nu} の適当な点における \phi と \psi の値を \phi_{\nu} と \psi_{\nu} とする。さらに f_{\nu} = \phi_{\nu} + i\psi_{\nu} とすれば \[ \begin{aligned} \int_{a}^{b} f\, dx &amp; = \int_{a}^{b} \phi\, dx + i \int_{a}^{b} \psi\, dx \\ &amp; = \lim \sum \phi_{\nu}\, \delta_{\nu} + i \lim \sum \psi_{\nu}\, \delta_{\nu} \\ &amp; = \lim \sum (\phi_{\nu} + i\psi_{\nu})\, \delta_{\nu} = \lim \sum f_{\nu}\, \delta_{\nu} \end{aligned} \] であり、ここから \[ \left|\int_{a}^{b} f\, dx\right| = \left|\lim \sum f_{\nu}\, \delta_{\nu}\right| = \lim \left|\sum f_{\nu}\, \delta_{\nu}\right| \] が分かる。さらに \[ \int_{a}^{b} |f|\, dx = \lim \sum |f_{\nu}|\, \delta_{\nu} \] だから、求めたい不等式は \[ \left|\sum f_{\nu}\, \delta_{\nu}\right| \leq \sum |f_{\nu}|\, \delta_{\nu} \] から容易に示せる。</description>
    </item>
    <item>
      <title>§165 級数の表記 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_165_notation_of_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_165_notation_of_series/</guid>
      <description>第四章で無限級数の収束・発散・振動の意味を説明した。そのとき定義を確認するために示した例は幾何級数 \[ 1 + x + x^{2} + \cdots \] から派生した級数およびこれに近い級数が中心だった。本章ではこの話題をさらに体系的に掘り下げ、解析学で最もよく登場する種類の級数の収束を判定するのに利用できる定理を証明する。 これからは \[ u_{m} + u_{m+1} + \cdots + u_{n} = \sum_{m}^{n} \phi(\nu) \] と表記し、無限級数 u_{0} + u_{1} + u_{2} + \cdots を \sum\limits_{0}^{\infty} u_{n} あるいは単に \sum u_{n} と書く1。 級数の表記を (第四章のように) u_{1} + u_{2} + \cdots としようと (ここでしたように) u_{0} + u_{1} + \cdots としようと、本質的にはもちろん何も変わらない。ただ本章の後半で扱う a_{0} + a_{1}x + a_{2}x^{2} + \cdots という形の級数では後者の方が分かりやすい。そのため u_{0} + u_{1} + \cdots を標準的な記法として採用する。しかしこの表記に固執するわけではなく、初項を u_{1} にした方が考えやすいならそうすることもある。例えば級数 1 + \frac{1}{2} + \frac{1}{3} + \cdots を扱うときには、u_{n} = 1/n として級数が u_{1} から始まるとした方が、u_{n} = 1/(n + 1) として級数が u_{0} から始まるとするよりも考えやすい。この指摘は他に 例 68.4 にも当てはまる。[return]</description>
    </item>
    <item>
      <title>第七章に関するその他の例 - 第七章 微分と積分に関する諸定理 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/misc_examples/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/7_additinal_theorems_in_the_caclulus/misc_examples/</guid>
      <description>次のテイラー級数を確認せよ: \[ \begin{alignedat}{2} &amp; \text{(1)} &amp; \tan x &amp; = x + \dfrac{1}{3} x^{3} + \dfrac{2}{15} x^{5} + \cdots, \\ &amp; \text{(2)} &amp; \sec x &amp; = 1 + \dfrac{1}{2} x^{2} + \dfrac{5}{24} x^{4} + \cdots, \\ &amp; \text{(3)}\quad &amp; x\cosec x &amp; = 1 + \dfrac{1}{6} x^{2} + \dfrac{7}{360} x^{4} + \cdots, \\ &amp; \text{(4)} &amp; x\cot x &amp; = 1 - \dfrac{1}{3} x^{2} - \dfrac{1}{45} x^{4} - \cdots \end{alignedat} \] f(x) とその n + 2 次までの導関数が連続で f^{(n+1)}(0) \neq 0 とする。第 n 項までのテイラー級数のラグランジュの剰余項における \theta の値を \theta_{n} とすると、 \[ \theta_{n} = \frac{1}{n + 1} + \frac{n}{2(n + 1)^{2}(n + 2)} \left\{\frac{f^{(n+2)}(0)}{f^{(n+1)}(0)} + \varepsilon_{x}\right\}x \] が成り立つ。ただし x \to 0 で \varepsilon_{x} \to 0 とする。 [例 55.12 と同じ方法を使う] f(x) = \dfrac{1}{1 + x} として前問の結果を確認せよ。 [(1 + \theta_{n}x)^{n+1} = 1 + x となる]</description>
    </item>
    <item>
      <title>§166 正項級数 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_166_series_of_positive_terms/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_166_series_of_positive_terms/</guid>
      <description>級数の項が全て正の実数だと仮定すると収束の議論が比較的簡単になる1。まずはこの条件を満たす級数を考えるが、その理由は扱いが簡単なためだけではなく、負あるいは複素数の項を含む級数の収束の議論が正の項だけからなる級数の収束の議論に帰着できる場合が多いためでもある。 級数の収束と発散を議論するときには、有限個の項を無視しても構わない。そのため級数に含まれる負あるいは複素数の項が有限個なら、そういった項を除いた残りの部分にこれから説明する正項級数に対する定理を適用できる。 これ以降 &#34;正&#34; には 0 を含める。[return]</description>
    </item>
    <item>
      <title>§167 正項級数の収束判定法 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_167_convergence_of_series_of_positive_terms/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_167_convergence_of_series_of_positive_terms/</guid>
      <description>§77 で証明した重要な定理をここに繰り返しておいた方がいいだろう。 正項級数は収束するか \infty に発散するかのどちらかで、振動することはない。 \sum u_{n} が収束するための必要十分条件は、ある K が存在して全ての n で \[ u_{0} + u_{1} + \cdots + u_{n} \lt K \] となることである。 全ての n に対して v_{n} \leq u_{n} が成り立ち \sum u_{n} が収束するなら、\sum v_{n} は収束して \sum v_{n} \leq \sum u_{n} が成り立つ。より一般的には、定数 K に対して v_{n} \leq Ku_{n} なら \sum v_{n} は収束して \sum v_{n} \leq K \sum u_{n} が成り立つ。また \sum u_{n} が発散して v_{n} \geq Ku_{n} なら \sum v_{n} は発散する1。</description>
    </item>
    <item>
      <title>§168 コーシーの判定法とダランベールの判定法 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_168_cauchys_and_dalemberts_tests_of_convergence/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_168_cauchys_and_dalemberts_tests_of_convergence/</guid>
      <description>現在の私たちが知っている特別なクラスの級数の収束に関する重要な事実の一つに、\sum r^{n} は r \lt 1 なら収束し r \geq 1 なら発散するというものがある1。前節の定理 C を u_{n} = r^{n} に適用するのが自然であり、次の結果が直ちに得られる: r \lt 1 に対して十分大きな n で v_{n} \leq Kr^{n} なら \sum v_{n} は収束する。 K = 1 とすれば、この条件は v_{n}^{1/n} \leq r となる。ここから正項級数の収束に関するコーシーの判定法 (Cauchy&#39;s test) として知られる命題を得る:</description>
    </item>
    <item>
      <title>§169 ディリクレの定理 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_169_dirichlets_theorem/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_169_dirichlets_theorem/</guid>
      <description>収束と発散の判定法についてさらに議論を進める前に、正項級数に関する一般的で重要な定理を一つ証明する。 正項級数の和は項の順序を変えても変化しない1。 正項級数 u_{0} + u_{1} + u_{2} + \cdots が収束するなら、同じ項を並べて変えてできる任意の級数 \[ v_{0} + v_{1} + v_{2} + \cdots \] も収束し、和が元の級数と等しいことをこの定理は意味する。もちろん項を取り除いてはいけない: 全ての u は v のどこかで現れ、その逆も成り立つ。</description>
    </item>
    <item>
      <title>補遺 B 記号と記法 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/symbols_and_notations/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/symbols_and_notations/</guid>
      <description>様々な著者による線形カルマンフィルタを表す数式の表記をここにまとめる。</description>
    </item>
    <item>
      <title>§170 正項級数の積 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_170_multiplication_of_series_of_positive_terms/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_170_multiplication_of_series_of_positive_terms/</guid>
      <description>ディリクレの定理から次の系が直ちに得られる: u_{0} + u_{1} + u_{2} + \cdots と v_{0} + v_{1} + v_{2} + \cdots が収束する正項級数で和が s,\ t なら、級数 \[ u_{0} v_{0} + (u_{1} v_{0} + u_{0} v_{1}) + (u_{2} v_{0} + u_{1} v_{1} + u_{0} v_{2}) + \cdots \] は収束し、その和は st である。 u_{m}v_{n} の積を全て並べた二次元の無限配列 を考える。この配列を並べ替えて得られる通常の無限級数は無数にあるが、それらのうち次の二つに注目する: m + n = 0 となる唯一の項 u_{0}v_{0} を最初に取り、次に m + n = 1 となる二つの項 u_{1}v_{0},\ u_{0}v_{1} を取る。次は m + n = 2 となる三つの項 u_{2}v_{0},\ u_{1}v_{1},\ u_{0}v_{2} と以降同様に取る。こうして得られる級数 \[ u_{0}v_{0} + (u_{1}v_{0} + u_{0}v_{1}) + (u_{2}v_{0} + u_{1}v_{1} + u_{0}v_{2}) + \cdots \] は今考えている級数である。</description>
    </item>
    <item>
      <title>§171 収束の速さ - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_171_speed_of_convergence_of_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_171_speed_of_convergence_of_series/</guid>
      <description>ここまでの例から分かるように、§168 の一般的な判定法では扱えない単純で興味深い正項級数が存在する。u_{n+1}/u_{n} が n \to \infty で極限に向かう最も単純な種類の級数を考えると、§168 の判定法はこの極限が \bm{1} のとき一般に適用できない。例えば 例 67.5 では問題に合わせた個別の方法を使う必要があり、幾何級数ではなく 例 67.4 の級数との比較を使った。 §168 では幾何級数との比較を使って様々な判定法を得たが、実は幾何級数はただ収束するだけではなく非常に速く収束し、この速度は収束に必要な速度よりずっと速い。そのため幾何級数との比較から得られる判定法はかなり大雑把であり、それよりもずっと細かな判定法が必要になる場合も多い。</description>
    </item>
    <item>
      <title>§172 その他の収束判定法 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_172_further_tests_of_convergence/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_172_further_tests_of_convergence/</guid>
      <description>正項級数の収束と発散の判定法をさらに二つ紹介する。それぞれマクローリンの (コーシーの) 積分判定法 (Maclaurin&#39;s (Cauchy&#39;s) Integral Test) およびコーシーの凝集判定法 (Cauchy&#39;s Condensation Test) と呼ばれる。どちらも完全に一般的とはとても言えないが、この章で必要となる程度には一般性を持つ。 二つの判定法を使うにあたって関数 u_{n} に仮定をもう一つ追加する。これまで u_{n} は正であること以外の仮定をしてこなかったが、これからは \bm{u_{n}} は \bm{n} に関して単調減少だとする。つまり u_{n+1} \leq u_{n} が全ての n あるいは十分大きな全ての n で成り立つとする。</description>
    </item>
    <item>
      <title>§173 アーベルの定理 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_173_abels_theorem_of_convergence_of_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_173_abels_theorem_of_convergence_of_series/</guid>
      <description>単調減少の正項級数 \sum u_{n} が収束するなら \lim nu_{n} = 0 が成り立つ。 nu_{n} が 0 に向かわないとする。このときある \delta があって、無限に多くの n で nu_{n} \geq \delta が成り立つ。この条件を満たす最初の n を n_{1} とする。さらにこの条件を満たす n で n_{1} の二倍より大きいものを n_{2} として、n_{2} の二倍より大きいものを n_{3} として以下同様に定める。すると n_{1},\ n_{2},\ n_{3},\ \ldots は n_{2} \gt 2n_{1},\ n_{3} \gt 2n_{2},\ \ldots を満たす。また n_{2} - n_{1} \gt \frac{1}{2}n_{2},\ n_{3} - n_{2} \gt \frac{1}{2}n_{3},\ \ldots および n_{1}u_{n_{1}} \geq \delta,\ n_{2}u_{n_{2}} \geq \delta,\ \ldots も成り立つ。一方 n が増加すると u_{n} は減少するので、次が分かる: \[ \begin{gathered} u_{0} + u_{1} + \cdots + u_{n_{1} - 1} \geq n_{1}u_{n_{1}} \geq \delta,\\ u_{n_{1}} + \cdots + u_{n_{2} - 1} \geq (n_{2} - n_{1})u_{n_{2}} \gt \dfrac{1}{2} n_{2}u_{n_{2}} \geq \dfrac{1}{2} \delta,\\ u_{n_{2}} + \cdots + u_{n_{3} - 1} \geq (n_{3} - n_{2})u_{n_{3}} \gt \dfrac{1}{2} n_{3}u_{n_{3}} \geq \dfrac{1}{2} \delta, \end{gathered} \] 以下同様だから、級数 \sum u_{n} の項を括弧でまとめて得られる級数は次の発散級数よりも真に大きい: \[ \delta + \dfrac{1}{2} \delta + \dfrac{1}{2} \delta + \cdots \] よって \sum u_{n} は発散する。</description>
    </item>
    <item>
      <title>§174 マクローリン・コーシーの積分判定法 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_174_maclaurins_and_cauchys_integral_test/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_174_maclaurins_and_cauchys_integral_test/</guid>
      <description>n が増加するとき u_{n} が単調に減少するなら、u_{n} = \phi(n) とみなして x = n で \phi(n) という値を取る連続単調減少関数 \phi(x) が存在すると仮定できる。すると任意の正の整数 \nu に対して \nu - 1 \leq x \leq \nu で \[ \phi(\nu - 1) \geq \phi(x) \geq \phi(\nu) \] が成り立つ。 \[ v_{\nu} = \phi(\nu - 1) - \int_{\nu-1}^{\nu} \phi(x)\, dx = \int_{\nu-1}^{\nu} \{\phi(\nu - 1) - \phi(x)\}\, dx \] と定めると \[ 0 \leq v_{\nu} \leq \phi(\nu - 1) - \phi(\nu) \] であり、\sum v_{\nu} は正項級数となる。さらに \[ v_{2} + v_{3} + \cdots + v_{n} \leq \phi(1) - \phi(n) \leq \phi(1) \] だから、\sum v_{\nu} は収束する。よって v_{2} + v_{3} + \cdots + v_{n} つまり \[ \sum_{1}^{n-1} \phi(\nu) - \int_{1}^{n} \phi(x)\, dx \] は n \to \infty で正の極限に向かう。</description>
    </item>
    <item>
      <title>§175 級数 \(∑ n^{-s}\) - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_175_series_sum_n_to_minus_s/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_175_series_sum_n_to_minus_s/</guid>
      <description>マクローリン (コーシー) の積分判定法の応用で圧倒的に一番重要なのは、次の級数に対する応用である: \[ 1^{-s} + 2^{-s} + 3^{-s} + \cdots + n^{-s} + \cdots \] s は適当な有理数とする。ここまでに §77 と 例 67.14 と 例 69.1 で s = 1 ならこの級数が発散することを見た。 s \leq 0 なら級数は明らかに発散する。s \gt 0 なら n の増加と共に u_{n} は単調減少するので、積分判定法を適用できる。ここでは s \neq 1 で \[ \Phi(\xi) = \int_{1}^{\xi} \frac{dx}{x^{s}} = \frac{\xi^{1-s} - 1}{1 - s} \] が成り立つ。s \gt 1 なら \xi \to \infty で \xi^{1-s} \to 0 だから \[ \Phi(\xi) \to \frac{1}{(s - 1)} = l \] となる。また s \lt 1 なら \xi \to \infty で \xi^{1-s} \to \infty となる。以上の結果を次にまとめる:</description>
    </item>
    <item>
      <title>§176 コーシーの凝集判定法 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_176_cauchys_condensation_test/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_176_cauchys_condensation_test/</guid>
      <description>§172 で触れた判定法の二つ目を次に示す: u_{n} = \phi(n) が n の単調減少関数なら、\sum \phi(n) は \sum 2^{n}\phi(2^{n}) と同じように収束または発散する。 証明には §77 で \sum(1/n) に対して使ったのと同じ議論を使う。まず \[ \begin{aligned} \phi(3) + \phi(4) &amp; \geq 2\phi(4), \\ \phi(5) + \phi(6) + \cdots + \phi(8) &amp; \geq 4\phi(8), \\ \cdots \cdots \cdots \\ \phi(2^{n} + 1) + \phi(2^{n} + 2) + \cdots + \phi(2^{n+1}) &amp; \geq 2^{n}\phi(2^{n+1}) \end{aligned} \] が成り立つ。\sum 2^{n}\phi(2^{n}) が発散するなら \sum 2^{n+1}\phi(2^{n+1}) および \sum 2^{n}\phi(2^{n+1}) も発散するので、これらの不等式から \sum\phi(n) が発散することが分かる。 一方で \[ \begin{aligned} \phi(2) + \phi(3) &amp; \leq 2\phi(2),\\ \phi(4) + \phi(5) + \cdots + \phi(7) &amp; \leq 4\phi(4),\\ \cdots \cdots \cdots \\ \phi(2^{n} + 1) + \phi(2^{n} + 2) + \cdots + \phi(2^{n+1}) &amp; \leq 2^{n}\phi(2^{n}) \end{aligned} \] からは \sum 2^{n}\phi(2^{n}) が収束するなら \sum \phi(n) も収束すると分かる。示すべき命題はこれで証明された。</description>
    </item>
    <item>
      <title>§177 無限積分 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_177_infinite_integrals/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_177_infinite_integrals/</guid>
      <description>§174 の積分判定法によると、\phi(x) が常に正で x に関して単調減少なら、級数 \sum \phi(n) の収束と発散は積分関数 \Phi(x) が x \to \infty で極限に向かうか無限大に向かうかに一致する。\Phi(x) が極限に向かうとすると、 \[ \lim_{x \to \infty} \int_{1}^{x} \phi(t)\, dt = l \] が成り立つ。このとき積分 \[ \int_{1}^{\infty} \phi(t)\, dt \] が収束して値 l を持つと言うことにする。この積分を無限積分 (infinite integral) と呼ぶ。 上述の定義では \phi(t) が正で単調減少だとしたが、そうでない場合にも自然に定義を拡張できる。さらに積分の下端が 0 であるべき特別な理由もない。こうして次の定義が導かれる:</description>
    </item>
    <item>
      <title>§178 被積分関数が正の無限積分 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_178_infinite_integrals_of_positive_function/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_178_infinite_integrals_of_positive_function/</guid>
      <description>§177 の式 \text{(1)} で定義される無限積分の収束と発散に関して、§167 の定理 A–D と同様の関係を考える。定理 A が級数だけでなく積分でも正しいことは §177 の \text{(ii)} で見た。また定理 B に対応する命題は「無限積分 \text{(1)} が収束するための必要十分条件は、a より大きい全ての x で \[ \int_{a}^{x} \phi(t)\, dt \lt K \] となるよう K を取れること」となる。 同様に定理 C には「\displaystyle\int_{a}^{\infty} \phi(x)\, dx が収束し、a より大きい任意の x で \psi(x) \leq K\phi(x) なら、\displaystyle\int_{a}^{\infty} \psi(x)\, dx も収束して \[ \int_{a}^{\infty} \psi(x)\, dx \leq K\int_{a}^{\infty} \phi(x)\, dx \] が成り立つ」という命題が対応する。発散に対応する判定法の定式化は読者に任せる。</description>
    </item>
    <item>
      <title>§179 置換積分と部分積分の無限積分への応用 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_179_infinite_integration_by_parts_and_substitution/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_179_infinite_integration_by_parts_and_substitution/</guid>
      <description>§161 で議論した定積分の変形公式は無限積分へ拡張できる。 置換積分: 無限積分 \[ \int_{a}^{\infty} \phi(x)\, dx \qquad \text{(1)} \] が収束すると仮定する。さらに a より大きい任意の \xi に対して、§161 と同様に \[ \int_{a}^{\xi} \phi(x)\, dx = \int_{b}^{\tau} \phi\{f(t)\}f&#39;(t)\, dt \qquad \text{(2)} \] が成り立ち、a = f(b),\ \xi = f(\tau) だとする。さらに関係 x = f(t) が x \to \infty で t \to \infty を満たすなら、\text{(2)} で \tau (および \xi) を \infty に向かせることで積分 \[ \int_{b}^{\infty} \phi\{f(t)\}f&#39;(t)\, dt \qquad \text{(3)} \] が収束し、積分 \text{(1)} と等しい値を取ると分かる。 一方で \tau \to -\infty や \tau \to c で \xi \to \infty となる可能性もある。前者の場合には \[ \begin{alignedat}{2} \int_{a}^{\infty} \phi(x)\, dx &amp; = &amp; &amp; \lim_{\tau\to-\infty} \int_{b}^{\tau} \phi\{f(t)\}f&#39;(t)\, dt\\ &amp; = -&amp; &amp; \lim_{\tau\to-\infty} \int_{\tau}^{b} \phi\{f(t)\}f&#39;(t)\, dt = -\int_{-\infty}^{b} \phi\{f(t)\}f&#39;(t)\, dt \end{alignedat} \] が成り立ち、後者の場合には \[ \int_{a}^{\infty} \phi(x)\, dx = \lim_{\tau\to c} \int_{b}^{\tau} \phi\{f(t)\}f&#39;(t)\, dt \qquad \text{(4)} \] が成り立つ。この等式は §181 でもう一度考える。</description>
    </item>
    <item>
      <title>補遺 C 離散データの PDF の計算とプロット - Python で学ぶベイジアンフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/computing_and_plotting_pdfs/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/computing_and_plotting_pdfs/</guid>
      <description>確率分布の計算とプロットについて詳しく調べよう。 まず正規分布に従うデータをいくつか生成する。この処理には numpy.random.normal 関数を使う。この関数のパラメータの名前は少しわかりにくく、loc が分布の平均、scale が標準偏差を表す。呼び出すと、指定した平均と標準偏差を持つ正規分布に従う任意の個数のデータ点が生成される: In [2]import numpy as np import numpy.random as random mean = 3 std = 2 data = random.normal(loc=mean, scale=std, size=50000) print(len(data)) print(data.mean()) print(data.std()) Out [2]50000 2.9947741815932556 2.0063665533914694 出力から分かるように、生成された 5,000 個の点の平均は非常に 3 に近く、標準偏差もほぼ 2 に等しい。</description>
    </item>
    <item>
      <title>§180 その他の無限積分 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_180_other_form_of_infinite_integrals/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_180_other_form_of_infinite_integrals/</guid>
      <description>第七章で与えた有限積分 (&#34;通常の&#34; 積分) の定義では、(1) 積分区間が有限なことおよび (2) 被積分関数が連続なことが仮定されていた。 しかし「定積分」の意味はこういった仮定が成り立たない場合にも拡張できる。例えばここまで議論してきた &#34;無限&#34; 積分は積分区間が無限であるという点で第七章の積分と異なっている。次は満たされないのが (1) ではなく (2) の場合を考えて、そのときにも何らかの意味を持つ定義を考えよう。ここではそのような定義を一つだけ与える。\phi(x) が有限個の点 x = \xi_{1},\ \xi_{2},\ \ldots, を除いて区間 [a, A] で連続であり、例外的な点では x をどちら側から近づけても \phi(x) \to \infty または \phi(x) \to -\infty だとする。</description>
    </item>
    <item>
      <title>§181 無限積分の例 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_181_examples_of_infinite_integrals/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_181_examples_of_infinite_integrals/</guid>
      <description>§179 の式 \text{(4)} を変形すると \[ \int_{a}^{\infty} \phi(x)\, dx = \int_{b}^{c} \phi\{f(t)\}f&#39;(t)\, dt \qquad \text{(1)} \] を得る。右辺の積分は区間 [b, \tau] に対する積分の \tau \to c における極限、つまり第二種無限積分として定義される。もし \phi\{f(t)\}f&#39;(t) が t = c を無限点として持つなら、この積分は本当に無限積分となる。例として 1\ \lt m \lt 2 に対する \phi(x) = (1 + x)^{-m} を考えると、a = 0 および f(t) = 1/(1 - t) とすれば b = 0,\ c = 1 だから、\text{(1)} は \[ \int_{0}^{\infty} \frac{dx}{(1 + x)^{m}} = \int_{0}^{1} (1 - t)^{m-2}\, dt \qquad \text{(2)} \] となる。右辺の積分は確かに第二種無限積分である。</description>
    </item>
    <item>
      <title>§182 置換積分の注意点 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_182_notes_on_infinite_integrals/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_182_notes_on_infinite_integrals/</guid>
      <description>置換を使った積分の変形で注意が必要な点がいくつかある。例を使ってこれを説明する。 J を \[ J = \int_{1}^{7} (x^{2} - 6x + 13)\, dx \] とすれば、J = 48 は直接計算できる。置換 \[ y = x^{2} - 6x + 13 \] を考えると x = 3 ± \sqrt{y - 4} であり、x = 1 で y = 8 および x = 7 で y = 20 となる。ここから \[ J = \int_{8}^{20} y\frac{dx}{dy}\, dy = ±\dfrac{1}{2}\int_{8}^{20} \frac{y\, dy}{\sqrt{y - 4}} \] が得られるように思える。すると不定積分 \[ \dfrac{1}{3}(y - 4)^{3/2} + 4(y - 4)^{1/2} \] から積分が ±\dfrac{80}{3} と計算されるが、どちらの符号を選ぼうとこれは間違っている。</description>
    </item>
    <item>
      <title>§183 項に正負が混じる級数 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_183_series_of_positive_and_negative_terms/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_183_series_of_positive_and_negative_terms/</guid>
      <description>無限級数と第一種および第二種の無限積分は、級数の項や被積分関数の値が正でも負でも定義される。しかし本章で示した収束と発散の特別な判定法とそれを説明するための例では、値が正である場合だけを考えてきた。もちろん項や関数が常に負なら本質な違いはなく、u_{n} を -u_{n} に、\phi(x) を -\phi(x) に変えれば正の場合に帰着できる。 これまで級数を考えるときには、u_{n} に対する条件は有限個の項に対して成り立たなくてもよいと明示的にあるいは暗に仮定してきた。つまり条件 (例えば「全ての項が正」) は有限個の項よりも後ろの全ての項で成り立てば十分だった。同様に積分では条件がある定数より後ろの全ての \bm{x} で満たされる、あるいは a の近くで被積分関数が無限大に向かうなら有限区間 (a, a + \delta) 内の全ての x で満たされることが仮定された。そのため例えば \[ \sum \frac{n^{2} - 10}{n^{4}} \] に対しては、n \geq 4 で n^{2} - 10 \gt 0 だから、前に触れた判定法を適用できる。同様に積分 \[ \int_{1}^{\infty} \frac{3x - 7}{(x + 1)^{3}}\, dx,\quad \int_{0}^{1} \frac{1 - 2x}{\sqrt{x}}\, dx \] に対しても、x \gt \frac{7}{3} なら 3x - 7 \gt 0 および 0 \lt x \lt \frac{1}{2} なら 1 - 2x \gt 0 だから、正の関数に対する判定法を適用できる。</description>
    </item>
    <item>
      <title>§184 級数の絶対収束 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_184_absolutely_convergent_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_184_absolutely_convergent_series/</guid>
      <description>任意の項が正でも負でもあり得る級数 \sum u_{n} を考える。 \[ |u_{n}| = \alpha_{n} \] とすると、u_{n} が正なら \alpha_{n} = u_{n} で u_{n} が負なら \alpha_{n} = -u_{n} となる。さらに新しい数列 v_{n}, w_{n} を、u_{n} が正なら v_{n} = u_{n},\ w_{n} = 0 で、u_{n} が負なら v_{n} = 0,\ w_{n} = -u_{n} と定義する。同じことを言い換えると、u_{n} の正負に応じて v_{n} と w_{n} のどちらかが \alpha_{n} と等しくなり、もう一方が 0 となる。v_{n} と w_{n} は常に正であり、 \[ u_{n} = v_{n} - w_{n},\quad \alpha_{n} = v_{n} + w_{n} \] を満たす。</description>
    </item>
    <item>
      <title>§185 絶対収束する級数に対するディリクレの定理 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_185_dirichlets_theorem_for_absolutely_convergent_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_185_dirichlets_theorem_for_absolutely_convergent_series/</guid>
      <description>§169 のディリクレの定理によると、正項級数の項を並べ替えても和は変わらない。絶対収束する級数もこの性質を持つことは簡単に示せる。\sum u_{n} を並び替えた級数を \sum u&#39;_{n} として、u_{n} から \alpha_{n},\ v_{n},\ w_{n} を作ったように u&#39;_{n} から \alpha&#39;_{n},\ v&#39;_{n},\ w&#39;_{n} を作る。すると \sum \alpha&#39;_{n} は \sum \alpha_{n} を並べ替えた級数なので収束し、\sum v&#39;_{n} と \sum w&#39;_{n} もそれぞれ \sum v_{n} と \sum w_{n} を並べ替えた級数だから収束する。さらにディリクレの定理から \sum v&#39;_{n} = \sum v_{n} と \sum w&#39;_{n} = \sum w_{n} が分かる。したがって \[ \sum u&#39;_{n} = \sum v&#39;_{n} - \sum w&#39;_{n} = \sum v_{n} - \sum w_{n} = \sum u_{n} \] が成り立つ。</description>
    </item>
    <item>
      <title>§186 級数の条件収束 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_186_conditionally_convergent_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_186_conditionally_convergent_series/</guid>
      <description>B: 次に二つ目の場合、つまり絶対値の級数 \sum \alpha_{n} が発散する場合を考える。 \sum u_{n} が収束して \sum |u_{n}| が発散するなら、級数 \sum u_{n} は条件収束する (converge conditionally) と言う。 \sum u_{n} が条件収束なら、§184 の \sum v_{n} と \sum w_{n} は両方とも \infty に発散する。もし両方とも収束するなら \sum(v_{n} + w_{n}) つまり \sum \alpha_{n} が収束してしまう。またどちらか (例えば \sum w_{n}) が収束してもう一方 (\sum v_{n}) が発散するなら、 \[ \sum_{0}^{N} u_{n} = \sum_{0}^{N} v_{n} - \sum_{0}^{N} w_{n} \qquad \text{(1)} \] は N と共に \infty へ向かうが、これは \sum u_{n} が収束するという仮定に反する。</description>
    </item>
    <item>
      <title>§187 条件収束する級数に対する判定法 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_187_tests_for_conditionally_convergent_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_187_tests_for_conditionally_convergent_series/</guid>
      <description>条件収束の判定法が §167 などで見た判定法と同じぐらい簡単で一般的になるとは考えにくい。前節 の \text{(1)} が表すように正の項と負の項が打ち消し合って収束する級数の収束判定は、正項級数の判定法より難しくなると考えるのが自然である。まず、条件収束する級数には比較判定法が使えない。 \sum u_{n} の収束性から \sum v_{n} の収束性を示したいとして、 \[ v_{0} + v_{1} + \cdots + v_{n},\quad u_{0} + u_{1} + \cdots + u_{n} \] を考える。もし任意の添え字 i に対して u_{i} と v_{i} が正で v_{i} が u_{i} より小さいなら \[ v_{0} + v_{1} + \cdots + v_{n} \lt u_{0} + \cdots + u_{n} \] が成り立ち、\sum v_{n} は収束する。そうでなく u_{i} だけが正で、v_{i} が u_{i} の絶対値より小さいなら \[ |v_{0}| + |v_{1}| + \cdots + |v_{n}| \lt u_{0} + \cdots + u_{n} \] であり、\sum v_{n} は絶対収束する。しかし u_{i} と v_{i} の符号に制限がない一般的な場合には \[ |v_{0}| + |v_{1}| + \cdots + |v_{n}| \lt |u_{0}| + \cdots + |u_{n}| \] しか得られない。この不等式からは \sum u_{n} が絶対収束するなら \sum v_{n} も絶対収束すると分かるが、もし \sum u_{n} が条件収束しかしないなら、\sum v_{n} の収束性については何も分からない。</description>
    </item>
    <item>
      <title>§188 交代級数 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_188_alternating_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_188_alternating_series/</guid>
      <description>最も簡単で最もよく表れる条件収束級数は、正の項と負の項が交互に並んだ交代級数 (alternating series) である。この種の最も重要な級数の収束は、次の命題を使うと判定できる: n の正関数 \phi(n) が n \to \infty で単調に 0 に向かうとする。このとき級数 \[ \phi(0) - \phi(1) + \phi(2) - \cdots \] は収束し、和は \phi(0) と \phi(0) - \phi(1) の間にある。 \phi(0),\ \phi(1),\ \ldots を \phi_{0},\ \phi_{1},\ \ldots と書くことにして \[ s_{n} = \phi_{0} - \phi_{1} + \phi_{2} - \cdots + (-1)^{n}\phi_{n} \] と定めると \[ s_{2n+1} - s_{2n-1} = \phi_{2n} - \phi_{2n+1}\geq 0,\quad s_{2n} - s_{2n-2} = -(\phi_{2n-1} - \phi_{2n}) \leq 0 \] が成り立つ。よって s_{0},\ s_{2},\ s_{4},\ \ldots,\ s_{2n},\ \ldots は減少列であり、極限または -\infty に向かう。同様に s_{1},\ s_{3},\ s_{5},\ \ldots,\ s_{2n+1},\ \ldots は増加列であり、極限または \infty に向かう。一方で \lim (s_{2n+1} - s_{2n}) = \lim (-1)^{2n+1} \phi_{2n+1} = 0 が成り立つから、二つの列の極限は同じでなければならない。つまり s_{0},\ s_{1},\ \ldots,\ s_{n},\ \ldots は極限に向かう。s_{0} = \phi_{0} および s_{1} = \phi_{0} - \phi_{1} だから、この極限は明らかに \phi_{0} と \phi_{0} - \phi_{1} の間にある。</description>
    </item>
    <item>
      <title>§189 アーベルとディリクレの収束判定法 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_189_abels_and_dirichlets_tests_of_convergence/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_189_abels_and_dirichlets_tests_of_convergence/</guid>
      <description>§188 の判定法を含むより一般的な判定法を次に示す: ディリクレの判定法: \phi(n) が §188 と同じ仮定を満たし、\sum a_{n} が収束するか有限に振動するなら、級数 \[ a_{0}\phi_{0} + a_{1}\phi_{1} + a_{2}\phi_{2} + \cdots \] は収束する。 次の等式は簡単に確認できる: \[ \begin{aligned} a_{0}\phi_{0} + a_{1}\phi_{1} + \cdots + a_{n}\phi_{n} = s_{0}(\phi_{0} - \phi_{1}) &amp;+ s_{1}(\phi_{1} - \phi_{2}) + \cdots \\ \cdots &amp;+ s_{n-1}(\phi_{n-1} - \phi_{n}) + s_{n}\phi_{n} \end{aligned} \] ここで s_{n} = a_{0} + a_{1} + \cdots + a_{n} である。級数 (\phi_{0} - \phi_{1}) + (\phi_{1} - \phi_{2}) + \cdots を考えると、この級数の第 n 項までの和は \phi_{0} - \phi_{n} で仮定より \lim \phi_{n} = 0 なので、この級数は収束する。またこの級数の全ての項は正である。さらに \sum a_{n} は収束しない場合でも有限に振動しかしないので、全ての \nu で |s_{\nu}| \lt K が成り立つ定数 K を見つけられる。よって級数 \[ \sum s_{\nu}(\phi_{\nu} - \phi_{\nu+1}) \] は絶対収束し、 \[ s_{0}(\phi_{0} - \phi_{1}) + s_{1}(\phi_{1} - \phi_{2}) + \cdots + s_{n-1}(\phi_{n-1} - \phi_{n}) \] は n \to \infty で極限に向かう。加えて \phi_{n} したがって s_{n}\phi_{n} は 0 に向かうので、 \[ a_{0}\phi_{0} + a_{1}\phi_{1} + \cdots + a_{n}\phi_{n} \] も極限に向かう。すなわち級数 \sum a_{\nu}\phi_{\nu} は収束する。</description>
    </item>
    <item>
      <title>補遺 D 反復最小二乗法によるセンサー統合 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/interative_least_squares_for_sensor_fusion/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/interative_least_squares_for_sensor_fusion/</guid>
      <description>カルマンフィルタはセンサー統合 (sensor fusion) の分野で広く利用される。例えば位置センサーと速度センサーを手にしていて、両方のセンサーからのデータを組み合わせて最適な状態推定値を求めるような状況である。この章では異なるケース、具体的には複数のセンサーから同じ種類の観測値が手に入るケースを考える。 グローバル・ポジショニング・システム (Global Positioning System, GPS) は地球上の任意の場所が最低でも六つの衛星から観測できるように設計されている。GPS 受信機は地球から見た衛星の相対位置を知っており、各エポック (時刻) でそれぞれの衛星から信号を受信して衛星への疑似距離 (pseudorange) を計算する。詳しく言うと、GPS 受信機が受け取る衛星からの信号には発信された瞬間のタイムスタンプが含まれる。GPS 衛星に搭載されるのは原子時計なので、このタイムスタンプは精度が非常に高い。理論上は信号の速度は光速であり、光速は真空中で一定なので、GPS 受信機は自身に届くまでにかかった時間を測定することで非常に正確な距離を生成できる。</description>
    </item>
    <item>
      <title>§190 複素級数 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_190_series_of_complex_terms/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_190_series_of_complex_terms/</guid>
      <description>ここまでは全ての項が実数の級数だけを考えてきた。続いて \[ \sum u_{n} = \sum (v_{n} + iw_{n}) \] という形の級数を考える。ここで u_{n} と w_{n} は実数とする。もちろんこういった級数を考えても、何か全く新しい概念が必要になるわけではない。例えば級数が収束するための必要十分条件は、二つの級数 \[ \sum v_{n},\quad \sum w_{n} \] が両方とも収束することである。しかし重要な複素級数のクラスが一つあるので、それについては紙面を割いて説明する。§184 な自然な拡張として、次のように定義する:</description>
    </item>
    <item>
      <title>§191 べき級数 (その 1) - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_191_power_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_191_power_series/</guid>
      <description>初等解析学 (サインとコサインおよび次章で触れる対数関数と指数関数) の理論で最も重要な概念の一つが、\sum a_{n}x^{n} という形の級数への関数の展開である。この級数を x の べき級数 (power series) と呼ぶ。これまでに登場したべき級数としてはテイラー級数とマクローリン級数 (§148) があるが、そこで考えたのは実変数 x のべき級数だった。ここからは複素変数 z のべき級数の一般的な性質をいくつか紹介する。 べき級数 \sum a_{n}z^{n} は全ての z で収束するか、特定の範囲の値で収束するか、z = 0 でだけ収束する。</description>
    </item>
    <item>
      <title>§192 べき級数 (その 2) - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_192_convergence_of_power_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_192_convergence_of_power_series/</guid>
      <description>べき級数 \sum a_{n}z^{n} が特定の z の値 z_{1} = r_{1}(\cos\theta_{1} + i\sin\theta_{1}) で収束するなら、級数は |z| \lt r_{1} を満たす全ての z で絶対収束する。 証明は次の通り。\sum a_{n}z_{1}^{n} の収束より \lim a_{n}z_{1}^{n} = 0 であり、全ての n で |a_{n}z_{1}^{n}| \lt K となる定数 K が存在する。 一方でもし |z| = r \lt r_{1} なら \[ |a_{n}z^{n}| = |a_{n}z_{1}^{n}| \left(\frac{r}{r_{1}}\right)^{n} \lt K \left(\frac{r}{r_{1}}\right)^{n} \] だから、示すべき命題は幾何級数 \sum (r/r_{1})^{n} との比較からすぐに示せる。 この命題を言い換えると「もし級数が P で収束するなら、その級数は \bm{P} より原点に近い任意の点で絶対収束する」となる。</description>
    </item>
    <item>
      <title>§193 べき級数の収束領域 (収束円) - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_193_circle_of_convergence/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_193_circle_of_convergence/</guid>
      <description>z = r を正の実軸上の任意の点とする。べき級数が z = r で収束するなら、その級数は円 |z| = r 内部の全ての点で絶対収束する。特に r より小さい全ての実数の z で収束する。 正の軸軸上の点 r を次のようにして二つのクラスに分ける。一つのクラスには級数が収束する点を入れ、もう一つには収束しない点を入れる。一つ目のクラスは少なくとも一つの点 z = 0 を含むが、級数が全ての z で収束することもあるので、二つ目のクラスは存在しない可能性がある。ただここでは二つ目のクラスが存在し、さらに一つ目のクラスには z = 0 以外の点が含まれると仮定する。すると一つ目のクラスに属する全ての点は二つ目のクラスに含まれる点の左側にある。よって二つのクラスを分ける点が存在し、その点は二つのクラスのどちらかに属する。この点を z = R とすれば、級数は円 \bm{|z| = R} 内部の全ての点で絶対収束する。</description>
    </item>
    <item>
      <title>§194 べき級数の唯一性 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_194_uniqueness_of_power_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_194_uniqueness_of_power_series/</guid>
      <description>べき級数 \sum a_{n} z^{n} が z = 0 以外のとある z で収束するなら、その和 f(z) が次の形で表せることは容易に分かる: \[ a_{0} + a_{1}z + a_{2}z^{2} + \cdots + (a_{n} + \varepsilon_{z})z^{n} \] ここで \varepsilon_{z} は |z| \to 0 のとき \varepsilon_{z} \to 0 を満たす。 証明は次の通り。\mu を収束半径より小さくかつ |z| \lt \mu を満たす実数とすれば、z によらない定数 K に対して |a_{n}| \mu^{n} \lt K が成り立つ (参考: §192)。ここから \[ \begin{aligned} \left|f(z) - \sum_{0}^{n} a_{\nu}z^{\nu}\right| &amp; \leq |a_{n+1}| |z^{n+1}| + |a_{n+2}| |z^{n+2}| + \cdots\\ &amp; \lt K \left(\frac{|z|}{\mu}\right)^{n+1} \left(1 + \frac{|z|}{\mu} + \frac{|z|^{2}}{\mu^{2}} + \cdots\right) = \frac{K |z|^{n+1}}{\mu^{n} (\mu - |z|)} \end{aligned} \] が分かる。例 55.15 からは、絶対値がとある実数 \mu より小さい任意の z に対して \sum a_{n}z^{n} = \sum b_{n}z^{n} なら、全ての n に対して a_{n} = b_{n} だと分かる。今は詳しく説明できないが、この結果は非常に広く一般化でき、一般化した結果から関数 \bm{f(z)} はただ一つのべき級数で表されることが分かる。</description>
    </item>
    <item>
      <title>§195 級数の積 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_195_multiplication_of_series_in_general/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/8_195_multiplication_of_series_in_general/</guid>
      <description>§170 では、二つの正項級数 \sum u_{n} と \sum v_{n} が収束するなら次の w_{n} に対して \sum u_{n} × \sum v_{n} = \sum w_{n} だと示した: \[ w_{n} = u_{0}v_{n} + u_{1}v_{n-1} + \cdots + u_{n}v_{0} \] この結果は \sum u_{n} と \sum v_{n} が絶対収束である場合に拡張できる: 正項級数に対するこの結果の証明はディリクレの定理の簡単な応用であり、絶対収束に対するディリクレの定理は既に証明している。 例 81 |z| が級数 \sum a_{n}z^{n} の収束半径と \sum b_{n}z^{n} の収束半径の両方より小さいなら、二つの級数の積は \sum c_{n}z^{n} であり、c_{n} = a_{0}b_{n} + a_{1}b_{n-1} + \cdots + a_{n}b_{0} となる。</description>
    </item>
    <item>
      <title>§196 対数関数 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_196_logarithmic_function/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_196_logarithmic_function/</guid>
      <description>これまでの章で考えた本質的に異なる関数の数というのはそれほど多くない。ここまでに登場した普通の用途で最も重要な関数をあげれば、多項式・有理関数・陽な代数関数・陰な代数関数・三角関数・三角関数の逆関数となる。 しかし数学で重要な関数がこれで全て揃ったとはとても言えない。数学的な知識の範囲は、新しい関数のクラスを一つずつ解析の対象に加えること段階的に拡張されてきた。新しい関数が対象に加わる一般的な理由は、そのとき数学者の注意を引いていた問題がそれまでに知られていた関数では解けないように思えるためである。この考え方は無理数や複素数を最初に導入した議論とよく似ている。こういった数はとある代数方程式がそれまでに認識されていた数では解けなかったために定義されていた。新しい関数を最も数多く生み出している問題の一つが積分であり、次のようにして新しい関数が導入される: とある関数 f(x) の積分をこれまでに知られた関数を使って計算する試みがなされるも、全て失敗する。失敗が何度も繰り返されるにつれ、積分が解けない可能性が現実性を帯びてくる。ときには解けないことが証明されることもあるが、一般的に言ってそういった命題の厳密な証明はもっと後になってから表れる。普通は数学者が十分に納得した段階でその積分は解けないものだとみなし、新しい関数 F(x) をその性質 F&#39;(x) = f(x) で定義してしまう。数学者はこの定義からはじめて F(x) の様々な性質を調べ、その結果として F(x) には既知の関数を有限回組み合わせた関数が持たない性質を持っていることが判明し、最初の積分の問題がどうやっても解けないという仮定が正当化される。この本にもこういった関数は現れている。第六章では次の等式を使って関数 \log x を定義した: \[ \log x = \int \frac{dx}{x} \]</description>
    </item>
    <item>
      <title>第八章に関するその他の例 - 第八章 無限数列と無限積分の収束 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/misc_examples/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/8_convergence_of_inifinite_serires_and_integrals/misc_examples/</guid>
      <description>\sum n^{k}\{\sqrt{n + 1} - 2\sqrt{n} + \sqrt{n - 1}\} の収束性を議論せよ。k は実数とする。 (Math. Trip. 1890.) 次の級数を考える: \[ \sum n^{r} \Delta^{k}(n^{s}) \] ここで \[ \Delta u_{n} = u_{n} - u_{n+1},\quad \Delta^{2} u_{n} = \Delta(\Delta u_{n}) \] などとする。この級数が収束するのは k \gt r + s + 1 のときに限ると示せ。ただし s が k より小さい正の整数のときは級数が 0 となるので、この場合は除く。 [第七章に関するその他の例 11 の結果から、\Delta^{k}(n^{s}) が一般に n^{s-k} と同じオーダーにあることが分かる] 次を示せ: \[ \sum_{1}^{\infty} \frac{n^{2} + 9n + 5}{(n + 1)(2n + 3)(2n + 5)(n + 4)} = \frac{5}{36} \]</description>
    </item>
    <item>
      <title>§197 対数関数の定義 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_197_definition_of_logarithmic_function/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_197_definition_of_logarithmic_function/</guid>
      <description>x の対数 \log x は次の等式で定義される: \[ \log x = \int_{1}^{x} \frac{dt}{t} \] 例 76.2 からは積分範囲が x = 0 を含むときこの積分が意味を持たないと分かるので、x は正である必要がある。積分の下端は 1 でなくても構わないが、1 とすれば \log 1 = 0 となるので都合がいい。 では x が 0 から \infty まで変化するときの \log x の振る舞いを考えよう。\log x が x の連続関数であり、x に関して単調増加であり、次の導関数を持つことが定義から直ちに従う: \[ D_{x} \log x = \frac{1}{x} \] さらに §175 から x \to \infty のとき \log x が \infty に向かうと分かる。</description>
    </item>
    <item>
      <title>§198 \(\log x\) が満たす関数方程式 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_198_functional_equation_satisfied_by_logx/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_198_functional_equation_satisfied_by_logx/</guid>
      <description>\log x は次の関数方程式を満たす: \[ f(xy) = f(x) + f(y) \qquad \text{(1)} \] 置換 t = yu を使うと \[ \begin{aligned} \log xy &amp; = \int_{1}^{xy} \frac{dt}{t} = \int_{1/y}^{x} \frac{du}{u} = \int_{1}^{x} \frac{du}{u} - \int_{1}^{1/y} \frac{du}{u}\\ &amp; = \log x - \log \dfrac{1}{y} = \log x + \log y \end{aligned} \] となり、この関係が証明される。 例 83 方程式 \text{(1)} を満たす関数であって導関数が存在するものは全て対数関数と本質的に同一であることが示せる。関数方程式を x および y で微分すると \[ yf&#39;(xy) = f&#39;(x),\quad xf&#39;(xy) = f&#39;(y) \] となり、f&#39;(xy) を消去すると xf&#39;(x) = yf&#39;(y) を得る。もしこの等式が全ての x と y ついて正しいなら、定数 C に対して xf&#39;(x) = C すなわち f&#39;(x) = C/x が成り立つ。よって \[ f(x) = \int \frac{C}{x}\, dx + C&#39; = C\log x + C&#39; \] であり、C&#39; = 0 も容易に分かる。つまりこの関数方程式に \log x と本質的に異なる解は存在しない。唯一の例外は C = 0 のときの自明な解 f(x) = 0 である。</description>
    </item>
    <item>
      <title>§199 \(\log x\) が無限大に向かうときの振る舞い - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_199_behaviour_of_logx_as_x_tends_to_infinity/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_199_behaviour_of_logx_as_x_tends_to_infinity/</guid>
      <description>例 36.6 で x の関数が x と共に無限大に向かうときの向かい方を定義した。x が大きいときに一次・二次・三次 \cdots の大きさを持つ関数を区別し、x \to \infty で f(x)/x^{k} が 0 でない極限に向かうとき f(x) は k 次の大きさを持つと定めた。 x と共に無限大に向かう関数で一次より小さい大きさを持つ関数を定義するのは難しくない。例えば \sqrt{x},\ \sqrt[3]{x},\ \sqrt[4]{x},\ \ldots は全て一次より小さい大きさを持つ。有理数 \alpha に対しても x^{\alpha} が \alpha 次の大きさを持つと言うことにすると、好きなだけ小さい \alpha に対する大きさが定義される。例えば .0000001 次の大きさが存在する。これを持って f(x) の &#34;大きさの次元&#34; は有理数の \alpha で全てを表せると考えるかもしれない。つまり x と共に無限大に向かう任意の f(x) に対して、x^{\alpha} が f(x) よりゆっくりと無限大に向かう有理数 \alpha および x^{\beta} が f(x) よりも速く無限大に向かう有理数 \beta が存在すると思っても不思議ではない。</description>
    </item>
    <item>
      <title>メモリとコマンドバッファ - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/memory/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/memory/</guid>
      <description>ちょっと待った 前章では PC 上で 3D レンダリングコマンドが GPU の手に渡るまでに通過する様々なステージを説明した。短くまとめると: あなたが思うよりたくさんある。最後にコマンドプロセッサの名前を出して、細心の注意を払って準備したコマンドバッファを受け取ったコマンドプロセッサがついに何かするのだと説明した。さて、何と言えばいいか──私は嘘をついた。コマンドプロセッサには本章で初めてお目見えすることになるが、コマンドバッファはメモリを通して渡されるという事実を思い出してほしい。そのときは PCI Express (PCIe) でアクセスされるシステムメモリか、ローカルのビデオメモリが使われる。私たちはパイプラインを順番に見ていくことにしているので、コマンドプロセッサを説明する前に、メモリについて少し話をしよう。</description>
    </item>
    <item>
      <title>§200 \(\log x\) の無限大の次元が小さいことの証明 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_200_proof_of_behaviour_of_logx_as_x_tends_to_infinity/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_200_proof_of_behaviour_of_logx_as_x_tends_to_infinity/</guid>
      <description>\beta を任意の正の実数とすると、t \gt 1 に対して \dfrac{1}{t} \lt \dfrac{1}{t^{1-\beta}} が成り立つ。よって \[ \log x = \int_{1}^{x} \frac{dt}{t} \lt \int_{1}^{x} \frac{dt}{t^{1-\beta}} \] であり、ここから x \gt 1 なら \[ \log x \lt \frac{x^{\beta} - 1}{\beta} \lt \frac{x^{\beta}}{\beta} \] だと分かる。\alpha を任意の正の実数とすれば、\alpha より小さい \beta に対して \[ 0 \lt \frac{\log x}{x^{\alpha}} \lt \frac{x^{\beta-\alpha}}{\beta} \quad (x \gt 1) \] となる。一方で \alpha \gt \beta より x \to \infty のとき \dfrac{x^{\beta-\alpha}}{\beta} \to 0 だから、 \[ \frac{\log x}{x^{\alpha}} \to 0 \] が得られる。</description>
    </item>
    <item>
      <title>§201 \(x \to &#43;0\) における \(\log x\) の振る舞い - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_201_behaviour_of_logx_as_x_tends_to_zero/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_201_behaviour_of_logx_as_x_tends_to_zero/</guid>
      <description>x = \dfrac{1}{y} なら \[ \dfrac{\log x}{x^{\alpha}} = -y^{\alpha} \log y \] が成り立つから、前節の結果より \[ \lim_{y\to +0} y^{\alpha} \log y = -\lim_{x\to +\infty} \frac{\log x}{x^{\alpha}} = 0 \] を得る。つまり x が正の値を取りながら 0 に近づくとき \log x は -\infty に、\log(1/x) = -\log x は \infty に向かうが、\log(1/x) が \infty に向かう速度は 1/x の (整数および有理数の) どんなべきよりも遅い。</description>
    </item>
    <item>
      <title>§202 無限大の大きさの尺度としての対数 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_202_logarithmic_scale_of_infinity/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_202_logarithmic_scale_of_infinity/</guid>
      <description>関数の列 \[ x,\quad \sqrt{x},\quad \sqrt[3]{x},\ \ldots,\quad \sqrt[n]{x},\ \ldots \] をもう一度考える。この列に含まれる二つの関数を f(x) と \phi(x) とすれば、x \to \infty のとき f(x) と \phi(x) は両方とも \infty に向かい、f(x)/\phi(x) は f(x) が \phi(x) の右にあるなら 0 に、\phi(x) の左にあるなら \infty に向かう。ここまでの結果を使えば、 上に書かれた列の左に新しい項を追加できると分かる。最初に追加されるのは \log x であり、この関数は最初からある項のどれよりも遅く無限大に向かう。次が \log x よりも遅く \infty に向かう \sqrt{\log x} であり、さらにその次に \sqrt{\log x} よりも遅い \sqrt[3]{\log x} と続く。こうして次の列が得られる: \[ x,\quad \sqrt{x},\quad \sqrt[3]{x},\quad \ldots, \quad \sqrt[n]{x},\quad \ldots, \quad \log x,\quad \sqrt{\log x},\quad \sqrt[3]{\log x},\quad \ldots, \quad \sqrt[n]{\log x},\quad \ldots \] この列は無限の列が二つ並んでいるだけだが、これで終わりではない。\log x の対数を取った関数 \log\log x を考える。任意の正の \alpha で (\log x)/x^{\alpha} \to 0 だから、x = \log y とすると \[ \frac{\log\log y}{(\log y)^{\alpha}} = \frac{\log x}{x^{\alpha}} \to 0 \] を得る。つまり \log\log y は y と共に無限大に向かうが、その速度は \log y の任意のべきより遅い。よってこの列を \[ \begin{gathered} x,\quad \sqrt{x},\quad \sqrt[3]{x},\quad \ldots,\qquad \log x,\quad \sqrt{\log x},\quad \sqrt[3]{\log x},\quad \ldots,\\ \log\log x,\quad \sqrt{\log\log x},\quad \ldots,\quad \sqrt[n]{\log\log x},\quad \ldots \end{gathered} \] とさらに延長できる。\log\log\log x,\ \log\log\log\log x,\ \ldots を使えばこの列をさらに好きなだけ伸ばせるのも明らかだろう。また x = 1/y とすれば、y が正の値を取りながら 0 に向かうときに \infty に向かう関数で異なる無限大の尺度を持つものが得られる1。</description>
    </item>
    <item>
      <title>§203 実数 \(e\) - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_203_the_number_e/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_203_the_number_e/</guid>
      <description>ここでとある実数を新しく定義する。通常 e で表されるこの実数は高等数学において途方もなく重要であり、\pi と同じように解析学の基礎的な定数の一つである。 e を対数が \bm{1} となる実数と定義する。違う表現を使うと、e は \[ 1 = \int_{1}^{e} \frac{dt}{t} \] という等式で定義される。\log x は (§95 の意味で) x の狭義単調増加関数だから、値 1 を一度しか取らない。よってこの定義は一つの実数を確かに定義する。 ここで \log xy = \log x + \log y から \[ \log x^{2} = 2\log x,\quad \log x^{3} = 3\log x,\ \ldots,\quad \log x^{n} = n\log x \] が全ての正の整数 n に対して成り立つと分かる。よって \[ \log e^{n} = n\log e = n \] となる。また p,\ q を正の整数とすれば、e^{p/q} は e^{p} の q 乗根を表す。そして \[ p = \log e^{p} = \log(e^{p/q})^{q} = q\log e^{p/q} \] より \log e^{p/q} = p/q が分かる。よって正の有理数 y に対して e^{y} で e の y 次のべきを表すとすれば \[ \log e^{y} = y \qquad \text{(1)} \] となる。さらに \log e^{-y} = -\log e^{y} = -y が成り立つから、等式 \text{(1)} は正負を問わず全ての有理数 y に対して成り立つ。これを言い換えれば、二つの等式 \[ y = \log x,\quad x = e^{y} \qquad \text{(2)} \] は片方からもう一方を導ける。ただし y は有理数で、e^{y} は正とする。今の段階では指数が無理数のべき e^{y} を定義していないので、e^{y} は有理数の y に対してだけ定義される。</description>
    </item>
    <item>
      <title>§204 指数関数の定義 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_204_definition_of_the_exponential_function/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_204_definition_of_the_exponential_function/</guid>
      <description>続いて全ての実数 y に対する指数関数 (exponential function) e^{y} を対数関数の逆関数として定義する。つまり y = \log x のとき \[ x = e^{y} \] と書く。 前に見たように、x が 0 から \infty に向かって変化すると y は -\infty から \infty へ狭義に単調増加する。よって一つの y の値には一つの x の値が対応し、その逆も成り立つ。同様に y は x の連続関数であり、§109 から x が y の連続関数だと分かる。 指数関数の連続性の直接的な証明は難しくない。x = e^{y} および x + \xi = e^{y + \eta} とすれば \[ \eta = \int_{x}^{x+\xi} \frac{dt}{t} \] だから、|\eta| は \xi \gt 0 なら \xi/(x + \xi) より大きく、\xi \lt 0 なら |\xi|/x より大きい。よって \eta が非常に小さいとき \xi も非常に小さくなる。</description>
    </item>
    <item>
      <title>§205 指数関数の特徴 (その 1) - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_205_values_of_the_exponential_function/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_205_values_of_the_exponential_function/</guid>
      <description>x = e^{y} なら y = \log x であり、このとき dy/dx = 1/x が成り立つ。ここから \[ \frac{dx}{dy} = x = e^{y} \] を得る。つまり指数関数の導関数は指数関数に等しい。より一般には x = e^{ay} なら dx/dy = ae^{ay} となる。 指数関数は次の関数方程式を満たす: \[ f(y + z) = f(y)f(z) \] y と z が有理数なら、この等式は初等的な指数法則から従う。y と z の片方または両方が無理数なら、\lim y_{n} = y および \lim z_{n} = z を満たす二つの有理数列 y_{1},\ y_{2},\ \ldots,\ y_{n},\ \ldots と z_{1},\ z_{2},\ \ldots,\ z_{n},\ \ldots を考えると、指数関数は連続だから \[ e^{y} × e^{z} = \lim e^{y_{n}} × \lim e^{z_{n}} = \lim e^{y_{n}+z_{n}} = e^{y+z} \] を得る。特に e^{y} × e^{-y} = e^{0} = 1 つまり e^{-y} = 1/e^{y} が成り立つ。</description>
    </item>
    <item>
      <title>§206 指数関数の特徴 (その 2) - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_206_properties_of_the_exponential_function/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_206_properties_of_the_exponential_function/</guid>
      <description>y が無限大に向かうときに e^{y} が無限大に向かう速度は y のどんなべきよりも速い。つまり y \to \infty のとき \[ \lim \frac{y^{\alpha}}{e^{y}} = \lim e^{-y}y^{\alpha} = 0 \] がどんなに大きい \alpha に対しても成り立つ。 任意に小さい正の有理数 \beta に対して x \to \infty で (\log x)/x^{\beta} \to 0 だと前に見たので、\alpha = 1/\beta とすれば任意に大きい \beta に対して (\log x)^{\alpha}/x \to 0 が分かり、x = e^{y} とすれば上の式を得る。また e^{\gamma y} は \gamma \gt 0 なら \infty に、\gamma \lt 0 なら 0 に向かい、いずれの場合でもその速度は y の任意のべきより速い。</description>
    </item>
    <item>
      <title>§207 一般の指数 \(a^{x}\) - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_207_general_power_a_to_x/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_207_general_power_a_to_x/</guid>
      <description>関数 a^{x} は a = e の場合を除いて有理数の x に対してしか定義されていない。ここで a が任意の正の実数である場合を考える。x を正の有理数 p/q として、y が y^{q} = a^{p} で与えられる a^{p/q} を表すとする。ここから \[ q\log y = p\log a,\quad \log y = \frac{p}{q}\log a = x\log a \] が分かるので、 \[ y = e^{x\log a} \] が成り立つ。この等式を無理数 x に対する a^{x} の定義として採用する。例えば 10^{\sqrt{2}} = e^{\sqrt{2}\log 10} である。また無理数 x に対する a^{x} は正の a に対してしか定義されず、a^{x} は正の値を取り、\log a^{x} = x\log a を満たすことが確認できる。a^{x} の最も重要な性質を次に示す。</description>
    </item>
    <item>
      <title>§208 極限を使った指数関数の表現 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_208_exponential_limit/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_208_exponential_limit/</guid>
      <description>第四章の §73 では \{1 + (1/n)\}^{n} が n \to \infty のとき極限に向かうと示し、この極限を仮に e と表記した。ここまでの議論で定義した e がこの極限と等しいことを示そう。さらに、次の等式が表すより一般的な結果も得られる: \[ \lim_{n\to\infty} \left(1 + \frac{x}{n}\right)^{n} = \lim_{n\to\infty} \left(1 - \frac{x}{n}\right)^{-n} = e^{x} \qquad \text{(1)} \] この結果は非常に重要なので、二つの証明を示す。 等式 \[ \frac{d}{dt} \log(1 + xt) = \frac{x}{1 + xt} \] から \[ \lim_{h\to 0} \frac{\log(1 + xh)}{h} = x \] が分かる。h = 1/\xi とすれば、h \to \infty および h \to -\infty のとき \[ \lim \xi \log\left(1 + \frac{x}{\xi}\right) = x \] が分かる。指数関数の連続性より \[ \left(1 + \frac{x}{\xi}\right)^{\xi} = e^{\xi\log\{1+(x/\xi)\}} \to e^{x} \] が h \to \infty および h \to -\infty で成り立つ。つまり \[ \lim_{\xi\to\infty} \left(1 + \frac{x}{\xi}\right)^{\xi} = \lim_{\xi\to -\infty} \left(1 + \frac{x}{\xi}\right)^{\xi} = e^{x} \qquad \text{(2)} \] である。</description>
    </item>
    <item>
      <title>§209 極限を使った対数関数の表現 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_209_logarithmic_limit/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_209_logarithmic_limit/</guid>
      <description>§75 の内容を使って次の等式を示そう: \[ \lim n(1 - x^{-1/n}) = \lim n(x^{1/n} - 1) = \log x \] n \to \infty のとき n(x^{1/n} - 1) は極限に向かい (§75) x^{1/n} は 1 に向かう (例 27.10) ので、 \[ n(x^{1/n} - 1) - n(1 - x^{-1/n}) = n(x^{1/n} - 1)(1 - x^{-1/n}) \] は 0 に向かう。よって §208 の不等式 \text{(3)} から結果が得られる。 例 86 §208 の不等式 \text{(4)} で y = 1 および n = 6 とすることで 2.5 \lt e \lt 2.9 を示せ。 t \gt 1 なら \dfrac{t^{1/n} - t^{-1/n}}{t - t^{-1}} \lt \dfrac{1}{n} だと示し、これを使って x \gt 1 で \[ \int_{1}^{x} \frac{dt}{t^{1-(1/n)}} - \int_{1}^{x} \frac{dt}{t^{1+(1/n)}} \lt \frac{1}{n} \int_{1}^{x} \left(t - \frac{1}{t}\right) \frac{dt}{t} = \frac{1}{n} \left(x + \frac{1}{x} - 2\right) \] が成り立つことを示せ。この結果から §209 の結果を導け。</description>
    </item>
    <item>
      <title>§210 一般の対数 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_210_common_logarithms/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_210_common_logarithms/</guid>
      <description>対数が数値計算で使われることを読者は知っているだろう。初等代数では a を底とした x の対数 \log_{a} x を次の等式で定義する: \[ x = a^{y},\quad y = \log_{a} x \] 見過ごされることも多いが、この定義は y が有理数のときしか意味を持たない。 今まで使ってきた対数は底が e であり、数値計算では底が 10 の対数が使われる。ここで \[ y = \log x = \log_{e} x,\quad z = \log_{10} x \] とすれば x = e^{y} かつ x = 10^{z} = e^{z\log 10} となる。よって \[ \log_{10} x = \frac{\log_{e} x}{\log_{e} 10} \] であり、\log_{e} 10 さえ計算されていれば底が異なる対数の間で変換が可能になる。</description>
    </item>
    <item>
      <title>§211 対数を使った収束判定法 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_211_logarithmic_tests_of_convergence/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_211_logarithmic_tests_of_convergence/</guid>
      <description>第八章の §175 と §176 では \[ \sum_{1}^{\infty} \frac{1}{n^{s}},\quad \int_{a}^{\infty} \frac{dx}{x^{s}}\qquad (a \gt 0) \] が s \gt 1 なら収束し、s \leq 1 なら発散すると示した。例えば \sum (1/n) は発散するが、任意の正の実数 \alpha に対する \sum n^{-1-\alpha} は収束する。 しかし §200 で見たように、対数関数を使うと n \to \infty のときに 0 に向かう速度が 1/n よりも速く任意に小さい正の \alpha に対して n^{-1-\alpha} よりも遅い関数を作れる。例えば 1/(n\log n) はそのような関数であり、そのため \[ \sum \frac{1}{n\log n} \] が収束するのか発散するのかという問題には \sum n^{-s} という形をした級数との比較では答えを出せない。</description>
    </item>
    <item>
      <title>§212 指数関数と対数関数に関する級数 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_212_complex_exponential_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_212_complex_exponential_series/</guid>
      <description>指数関数の任意の次数の導関数は指数関数に等しいから、とある \theta (0 \lt \theta \lt 1) で \[ e^{x} = 1 + x + \frac{x^{2}}{2!} + \cdots + \frac{x^{n-1}}{(n - 1)!} + \frac{x^{n}}{n!} e^{\theta x} \] が成り立つ。例 27.12 からは x の値に関わらず n \to \infty で \dfrac{x^{n}}{n!} \to 0 が分かるので、n を \infty に向かわせることで \[ e^{x} = 1 + x + \frac{x^{2}}{2!} + \cdots + \frac{x^{n}}{n!} + \cdots \qquad \text{(1)} \] を得る。 右辺の級数を指数級数 (exponential series) と呼ぶ。特に \[ e = 1 + 1 + \frac{1}{2!} + \cdots + \frac{1}{n!} + \cdots \qquad \text{(2)} \] であり、ここから指数定理 (exponential theorem) として知られる等式 \[ \left(1 + 1 + \frac{1}{2!} + \cdots + \frac{1}{n!} + \cdots\right)^{x} = 1 + x + \frac{x^{2}}{2!} + \cdots + \frac{x^{n}}{n!} + \cdots \qquad \text{(3)} \] を得る。また \[ a^{x} = e^{x\log a} = 1 + (x\log a) + \frac{(x\log a)^{2}}{2!} + \cdots \qquad \text{(4)} \] が全ての正の a に対して成り立つ。</description>
    </item>
    <item>
      <title>§213 対数級数 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_213_logarithmic_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_213_logarithmic_series/</guid>
      <description>関数のべき級数への展開で重要なものにもう一つ \log(1 + x) の展開がある。等式 \[ \log(1 + x) = \int_{0}^{x} \frac{dt}{1 + t} \] と -1 \lt t \lt 1 で成り立つ展開 1/(1 + t) = 1 - t + t^{2} - \cdots から、級数 1 - t + t^{2} - \cdots を項ごとに t = 0 から t = x まで積分した級数 x - \frac{1}{2} x^{2} + \frac{1}{3} x^{3} - \cdots が \log(1 + x) の展開になっていると予想できる。これが実際に正しいことを示そう。 \[ \frac{1}{1 + t} = 1 - t + t^{2} - \cdots + (-1)^{m-1} t^{m-1} + \frac{(-1)^{m} t^{m}}{1 + t} \] が成り立つから、x \gt -1 で \[ \log(1 + x) = \int_{0}^{x} \frac{dt}{1 + t} = x - \frac{x^{2}}{2} + \cdots + (-1)^{m-1} \frac{x^{m}}{m} + (-1)^{m} R_{m} \] が分かる。ここで R_{m} は次の通りである: \[ R_{m} = \int_{0}^{x} \frac{t^{m}\, dt}{1 + t} \]</description>
    </item>
    <item>
      <title>§214 \(\arctan x\) の級数展開 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_214_series_for_arctanx/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_214_series_for_arctanx/</guid>
      <description>同様に -1 \leq x \leq 1 で \[ \begin{aligned} \arctan x = \int_{0}^{x} \frac{dt}{1 + t^{2}} &amp; = \int_{0}^{x}(1 - t^{2} + t^{4} - \cdots)\, dt\\ &amp; = x - \dfrac{1}{3} x^{3} + \dfrac{1}{5} x^{5} - \cdots \end{aligned} \] だと容易に示せる。\log (1 + x) の展開と比べると、この等式の証明の方が簡単になる点が唯一異なる。というのも \arctan x は x の奇関数なので、正の x だけを考えればよい。またこの級数は x = 1 だけでなく x = -1 でも収束する。この級数で表される \arctan x の値は -1 \leq x \leq 1 に対応する -\frac{1}{4}\pi と \frac{1}{4}\pi の間となる。この積分の値は第七章の 例 63.3 で求めた。また x = 1 とすれば次の等式を得る: \[ \dfrac{1}{4}\pi = 1 - \dfrac{1}{3} + \dfrac{1}{5} - \cdots \]</description>
    </item>
    <item>
      <title>§215 二項級数 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_215_binomial_series/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_215_binomial_series/</guid>
      <description>§163 では、二項定理 \[ (1 + x)^{m} = 1 + \binom{m}{1}x + \binom{m}{2}x^{2} + \cdots \] が -1 \lt x \lt 1 と有理数 m に対して成り立つことを見た。m が無理数なら \[ \begin{gathered} (1 + x)^{m} = e^{m\log(1+ x)},\\ D_{x}(1 + x)^{m} = \{m/(1 + x)\} e^{m\log(1 + x)} = m(1 + x)^{m-1} \end{gathered} \] が成り立つので、(1 + x)^{m} の導関数を表す等式は変わらない。よって §163 で示した二項定理の証明をここでも適用できる。本書では x = 1 と x = -1 における収束性は議論しない1。 例 92 -1 \lt x \lt 1 で次の等式が成り立つと示せ: \[ \begin{aligned} \frac{1}{\sqrt{1 + x^{2}}} &amp; = 1 - \frac{1}{2}x^{2} + \frac{1·3}{2·4}x^{4} - \cdots,\\ \frac{1}{\sqrt{1 - x^{2}}} &amp; = 1 + \frac{1}{2}x^{2} + \frac{1·3}{2·4}x^{4} + \cdots \end{aligned} \]</description>
    </item>
    <item>
      <title>§216 対数および指数の理論の異なる構築方法 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_216_alternative_development_of_theory/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/9_216_alternative_development_of_theory/</guid>
      <description>e^{x} と \log x の性質をこれまでとは全く異なる論理展開で調べる方法の概略をここに示す。この方法は指数級数 1 + x + \dfrac{x^{2}}{2!} + \cdots の考察から始まる。この級数が全ての x で収束することは分かっているので、関数 \exp x を次の等式で定義する: \[ \exp x = 1 + x + \frac{x^{2}}{2!} + \cdots \qquad \text{(1)} \] そして 例 81.7 と同様に \[ \exp x × \exp y = \exp(x + y) \qquad \text{(2)} \] を証明する。 さらに \[ \frac{\exp h - 1}{h} = 1 + \frac{h}{2!} + \frac{h^{2}}{3!} + \cdots = 1 + \rho(h) \] とすれば、\rho(h) の絶対値は \[ \left|\dfrac{1}{2}h\right| + \left|\dfrac{1}{2}h\right|^{2} + \left|\dfrac{1}{2}h\right|^{3} + \cdots = \left|\dfrac{1}{2}h \right| \bigg/ \left(1 - |\dfrac{1}{2}h| \right) \] よりも小さい。ここから h \to 0 のとき \rho(h) \to 0 と分かる。よって h \to 0 で \[ \frac{\exp(x + h) - \exp x}{h} = \exp x \left(\frac{\exp h - 1}{h}\right) \to \exp x \] つまり \[ D_{x} \exp x = \exp x \qquad \text{(3)} \] が成り立つ。ここでは \exp x が連続関数であることも同時に証明されている。</description>
    </item>
    <item>
      <title>§217 複素数の関数 (その 1) - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_217_functions_of_a_complex_variable/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_217_functions_of_a_complex_variable/</guid>
      <description>第三章では複素変数 \[ z = x + iy \] を定義し1、多項式 P(z) などの z を使った式のクラスの簡単な性質を考察した。こういった式を z の関数とみなすのが自然であり、実際多項式 P(z) と Q(z) に対する P(z)/Q(z) は「有理関数」と説明されていた。しかし z の関数の一般的な定義は与えていない。 複素変数 z の関数を実変数 x の関数と同様に定義すればいいと思うかもしれない。つまり Z が z の関数であることを、z と Z の間に関係が存在して、全てまたは一部の z に対応する Z が一つまたは複数存在することとして定義するのである。しかし詳しく考察すると、この定義からは何も得られないことが分かる。というのも、z が与えられるとき x と y も与えられ、その逆も成り立つ: z に値を割り当てるとは、x と y の組に値を割り当てるのと等しい。つまりこの定義における &#34;z の関数&#34; は 二つの実変数 \bm{x} と \bm{y} に関する複素関数 \[ f(x, y) + ig(x, y) \] と同じになる。例えば \[ x - iy,\quad xy,\quad |z| = \sqrt{x^{2} + y^{2}},\quad \arg z = \arctan \frac{y}{x} \] はどれも &#34;z の関数&#34; となる。この定義に何も問題はないものの、新しい概念を全く定義しておらず、不毛と言える。よって &#34;複素変数 z の関数&#34; という言葉をもっと制限された意味で使うのが望ましい。つまりこの言葉は二つの実変数 x,\ y の複素関数からなる一般的なクラスではなく、その一部である特別なクラスを表し、そのクラスに含まれる式は何らかの制限を受けるべきである。しかしこの関数の選び方あるいは特別なクラスに選ばれた関数が持つ性質を説明しようとすると、本書の範囲を超えてしまう。そのため一般的な定義は与えずに、直接的に定義される特殊な関数だけをこれから考えることにする。</description>
    </item>
    <item>
      <title>第九章に関するその他の例 - 第九章 実数変数に対する対数関数と指数関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/misc_examples/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/9_the_logarithmic_and_exponential_functions/misc_examples/</guid>
      <description>2^{10} と 3^{21} の桁数がほぼ等しい事実と \log_{10} e = .4343 という近似を使って、\log_{10} 2 と \log_{10} 3 の値を小数点以下第四位まで計算せよ。 (Math. Trip. 1905.) (\frac{1}{2}e)^{\sqrt{3}} と (\sqrt{2})^{\frac{1}{2}\pi} のどちらが大きいか答えよ。 [対数を取って \sqrt{3}/(\sqrt{3} + \frac{1}{4}\pi) \lt \frac{2}{5} \sqrt{3} \lt .6929 \lt \log 2 を使う] \log_{10} n は n が 10 のべきでない限り整数とならない。 [10 の倍数でない n に対して \log_{10}n = p/q が成り立つなら 10^{p} = n^{q} となるが、10^{p} は 0 で終わるのに対して n^{q} はそうでないので、これはあり得ない。また 10 の倍数でない N を使って n = 10^{a}N と書けるなら \[ \log_{10}n = a + \log_{10}N \] は有理数でない]</description>
    </item>
    <item>
      <title>§218 複素数の関数 (その 2) - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_218_complex_logarithm/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_218_complex_logarithm/</guid>
      <description>複素数 z の多項式 (§39)・有理関数 (§46)・根号 (§47) は前に定義した。さらに §26–§27 で数実変数 x に対して定義した陽および陰の代数関数を複素関数に対して拡張するのも難しくない。これらの全ての場合において、複素数 z つまり点 z の引数 (§44) を、関数 f(z) の引数 (argument) と呼ぶ。この章で私たちの注意を引く問題は、z の対数関数・指数関数・三角関数の定義と基本的な性質の導出である。これらの関数がこれまで定義されたのは実数の z に対してだけであり、さらに対数関数では正の値に対してだけだった。</description>
    </item>
    <item>
      <title>§219 線積分 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_219_curvilinear_integrals/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_219_curvilinear_integrals/</guid>
      <description>AB を次の方程式で定義される曲線の弧 C とする: \[ x = \phi(t),\quad y = \psi(t) \] ここで t の関数 \phi と \psi は連続な微分係数 \phi&#39; と \psi&#39; を持ち、t が t_{0} から t_{1} に変化するとき点 (x, y) は A から B へと曲線上を同じ方向に動くとする。 このとき x と y の連続関数 g,\ h に対する線積分 (curvilinear integral) \[ \int_{C} \{g(x, y)\, dx + h(x, y)\, dy\} \qquad \text{(1)} \] を、この積分に対して置換 x = \phi(t),\ y = \psi(t) を形式的に適用して得られる通常の積分 \[ \int_{t_{0}}^{t_{1}} \{g(\phi, \psi) \phi&#39; + h(\phi, \psi) \psi&#39;\}\, dt \] として定義する。C を積分路 (path of integration) と呼ぶ。</description>
    </item>
    <item>
      <title>§220 対数関数の定義 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_220_definition_of_the_comlex_logarithmic_function/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_220_definition_of_the_comlex_logarithmic_function/</guid>
      <description>\zeta = \xi + i\eta を任意の複素数とする。一般的な \zeta の対数 \operatorname{Log} \zeta を次の等式で定義する: \[ \operatorname{Log} \zeta = \int_{C} \frac{dz}{z} \] ここで C は 1 から始まって \zeta で終わる、原点を通らない曲線とする。例えば 図 54 の (a),\ (b),\ (c) はどれもこの積分路として利用できる。\operatorname{Log} z の値は特定の積分路が選ばれたときに定義されるが、今の段階では、こうして定義される \operatorname{Log} z の値が選ばれる積分路によってどう変化するかは明らかでない。例えば \zeta が正の実数 \xi のとき、考えられる積分路の一つとして 1 から \xi への直線がある。方程式 x = t,\ y = 0 で定義されるこの積分路を考えたときの積分は \[ \operatorname{Log} \xi = \int_{1}^{\xi} \frac{dt}{t} \] であり、前章で定義した実数 \xi の対数 \log \xi に等しい。つまり \xi が正の実数なら、\operatorname{Log} \xi の値の一つが \log \xi となる。しかしこのとき、そして一般に、積分路には無数の選択肢がある。全ての \operatorname{Log} \xi が \log \xi に等しい証拠はなく、後で見るように実際のところ等しくない。表記を \log \zeta や \log \xi ではなく \operatorname{Log} \zeta および \operatorname{Log} \xi としたのはこのためである。\operatorname{Log} \xi は多値 (の可能性がある) 関数であり、\log \xi はその値の一つに過ぎない。今の私たちが持っている知識で考えるとき、一般の \operatorname{Log} \zeta の値について次の三つの可能性がある:</description>
    </item>
    <item>
      <title>§221 対数関数の値 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_221_values_of_logarithmic_function/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_221_values_of_logarithmic_function/</guid>
      <description>点 z = \zeta の極座標が (\rho, \phi) で \[ \zeta = \rho(\cos\phi + i\sin\phi) \] が成り立つとして、さらに -\pi \lt \phi \lt \pi で \rho は正とする。このとき \zeta は 0 と負の実数以外の全ての値を取る。 路 C における任意の点の座標 (x, y) は t の関数であり、その極座標 (r, \theta) も t の関数である。また §219 の定義からは \[ \operatorname{Log} \zeta = \int_{C} \frac{dz}{z} = \int_{C} \frac{dx + i\, dy}{x + iy} = \int_{t_{0}}^{t_{1}} \frac{1}{x + iy} \left(\frac{dx}{dt} + i\frac{dy}{dt}\right) dt \] が分かる。一方で x = r\cos\theta,\ y = r\sin\theta だから \[ \begin{aligned} \frac{dx}{dt} + i\frac{dy}{dt} &amp; = \left(\cos\theta\, \frac{dr}{dt} - r\sin\theta\, \frac{d\theta}{dt}\right) + i\left(\sin\theta\, \frac{dr}{dt} + r\cos\theta\, \frac{d\theta}{dt}\right) \\ &amp; = (\cos\theta + i\sin\theta) \left(\frac{dr}{dt} + ir\frac{d\theta}{dt}\right) \end{aligned} \] が成り立つ。よって \[ \operatorname{Log} \zeta = \int_{t_{0}}^{t_{1}} \frac{1}{r}\, \frac{dr}{dt}\, dt + i\int_{t_{0}}^{t_{1}} \frac{d\theta}{dt}\, dt = [\log r] + i[\theta] \] である。ここで [\log r] は t = t_{1} と t = t_{0} に対応する点における \log r の値の差を表し、[\theta] も同様とする。</description>
    </item>
    <item>
      <title>§222 指数関数の定義 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_222_definition_of_the_complex_exponential_function/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_222_definition_of_the_complex_exponential_function/</guid>
      <description>第九章では実数変数 y の関数 e^{y} を y = \log x の逆関数として定義した。ここから複素変数 z の関数 \operatorname{Log} z の逆関数の定義が自然に導かれる: \operatorname{Log} z のいずれかの値が \zeta に等しいなら、z を \zeta の指数 (exponential) と呼び \[ z = \exp \zeta \] と書く。 つまり z = \exp \zeta となるのは \zeta = \operatorname{Log} z が成り立つときとなる。固定された z に対応する \zeta が無限に存在するのは明らかである。ここから逆に、固定された \zeta に対応する z が無限に存在する、つまり \exp \zeta が \zeta の無限多価関数だと考えてもおかしくはない。しかし次の定理が示す通りこの考えは間違っている:</description>
    </item>
    <item>
      <title>§223 指数関数の値 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_223_values_of_the_complex_exponential_function/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_223_values_of_the_complex_exponential_function/</guid>
      <description>\zeta = \xi + i\eta として \[ z = \exp \zeta = r(\cos\theta + i\sin\theta) \] を考える。このとき任意の整数 m に対して \[ \xi + i\eta = \operatorname{Log} z = \log r + i(\theta + 2m\pi) \] が成り立つ。よって \xi = \log r,\ \eta = \theta + 2m\pi であり、これは \[ r = e^{\xi},\quad \theta = \eta - 2m\pi \] を意味する。よって \[ \exp (\xi + i\eta) = e^{\xi} (\cos\eta + i\sin\eta) \] を得る。 \eta = 0 なら §222 で見た通り \exp \xi = e^{\xi} となる。また明らかに、\exp (\xi + i\eta) の実部および虚部は全ての \xi と \eta に対して連続となる。</description>
    </item>
    <item>
      <title>§224 \(\exp ζ\) が満たす関数方程式 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_224_the_functional_equation_that_the_exponential_function_satisfies/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_224_the_functional_equation_that_the_exponential_function_satisfies/</guid>
      <description>\zeta_{1} = \xi_{1} + i\eta_{1} および \zeta_{2} = \xi_{2} + i\eta_{2} とすると \[ \begin{aligned} \exp \zeta_{1} × \exp \zeta_{2} &amp; = e^{\xi_{1}} (\cos\eta_{1} + i\sin\eta_{1}) × e^{\xi_{2}} (\cos\eta_{2} + i\sin\eta_{2}) \\ &amp; = e^{\xi_{1}+\xi_{2}} \{\cos(\eta_{1} + \eta_{2}) + i\sin(\eta_{1} + \eta_{2})\} \\ &amp; = \exp(\zeta_{1} + \zeta_{2}) \end{aligned} \] が成り立つ。つまり指数関数は関数方程式 f(\zeta_{1} + \zeta_{2}) = f(\zeta_{1}) f(\zeta_{2}) を満たす。実数の \zeta_{1} と \zeta_{2} に対するこの方程式は前に (§205 で) 示した。</description>
    </item>
    <item>
      <title>§225 一般的な指数 \(a^{x}\) の定義 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_225_definition_of_the_general_power_a_to_z/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_225_definition_of_the_general_power_a_to_z/</guid>
      <description>実数では \exp \zeta = e^{\zeta} だったから、複素数 \zeta に対してもこの記法を採用して \exp は使わないようにできると思うかもしれない。しかし e^{\zeta} にはより一般的な定義を与えなければならないので、この方針は取らない。これから見るように e^{\zeta} は無限に多くの値を取る関数であり、\exp \zeta はその一つに過ぎない。 これまでの議論で、ときには何種類かの方法を使って次の式に意味を与えた: \[ 3^{1/2},\quad (-1)^{1/3},\quad (\sqrt{3} + \dfrac{1}{2}i)^{-1/2},\quad (3.5)^{1+\sqrt{2}} \] しかし次の式に意味を与える定義は示していない: \[ (1 + i)^{\sqrt{2}},\quad 2^{i},\quad (3 + 2i)^{2+3i} \] 私たちはこれから a^{\zeta} に一般的な定義を与える。この定義は実数および複素数の a と \zeta に適用でき、唯一 a が 0 であってはいけないという制限がある。</description>
    </item>
    <item>
      <title>§226 一般的な指数 \(a^{x}\) の値 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_226_values_of_the_general_power_a_to_z/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_226_values_of_the_general_power_a_to_z/</guid>
      <description>-\pi \lt \psi \leq \pi に対して \[ \zeta = \xi + i\eta,\quad a = \sigma(\cos\psi + i\sin\psi) \] であり、§225 の表記で \sigma = e^{\tau} つまり \tau = \log \sigma だとする。 このとき \[ \zeta \operatorname{Log} a = (\xi + i\eta)\{\log \sigma + i(\psi + 2m\pi)\} = L + iM \] とすれば \[ L = \xi \log \sigma - \eta(\psi + 2m\pi),\quad M = \eta\log \sigma + \xi (\psi + 2m\pi) \] であり、 \[ a^{\zeta} = \exp(\zeta\operatorname{Log} a) = e^{L}(\cos M + i\sin M) \] が成り立つ。よって a^{\zeta} の一般的な値は \[ e^{\xi\log \sigma - \eta(\psi+2m\pi)} [\cos\{\eta\log \sigma + \xi(\psi + 2m\pi)\} + i\sin\{\eta\log \sigma + \xi(\psi + 2m\pi)\}] \] である。 一般に a^{\zeta} は無限多価関数となる。実際 \[ |a^{\zeta}| = e^{\xi\log \sigma - \eta(\psi+2m\pi)} \] は \eta = 0 でなければ全ての m に対して異なる値を持つ。一方でもし \eta = 0 なら、a^{\zeta} の全ての異なる値は大きさが同じになる。二つの a^{\zeta} の値が等しいとき、大きさが等しいのに加えて偏角が等しいか 2\pi の倍数だけ離れる。そのためには異なる整数 m,\ n で \xi(\psi + 2m\pi) と \xi(\psi + 2n\pi) が 2\pi の倍数だけ離れることが必要であり、もし \[ \xi(\psi + 2m\pi) - \xi(\psi + 2n\pi) = 2k\pi \] なら \xi = k/(m - n) は有理数となる。よって \bm{\zeta} が実数の有理数である場合を除いて \bm{a^{\zeta}} は無限個の値を持つと結論できる。この命題の裏「\zeta が実数の有理数なら a^{\zeta} は有限個の値しか取らない」は前に見た。</description>
    </item>
    <item>
      <title>§227 サインとコサインの指数を使った表現 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_227_exponential_representation_of_trigonometrical_functions/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_227_exponential_representation_of_trigonometrical_functions/</guid>
      <description>等式 \[ \exp (\xi + i\eta) = \exp \xi(\cos\eta + i\sin\eta) \] からは重要な公式をいくつも導出できる。\xi = 0 とすると \exp (i\eta) = \cos\eta + i\sin\eta を得る。\eta の符号を変えれば \exp (-i\eta) = \cos\eta - i\sin\eta であり、ここから \[ \cos\eta = \dfrac{1}{2} \{\exp (i\eta) + \exp (-i\eta)\},\quad \sin\eta = -\dfrac{1}{2}i\{\exp (i\eta) - \exp (-i\eta)\} \] が分かる。これを使えば任意の \eta の三角比に対する \exp (i\eta) を使った表現を導ける。</description>
    </item>
    <item>
      <title>§228 \(\sin\) と \(\cos\) の定義 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_228_definition_of_complex_trigonometrical_functions/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_228_definition_of_complex_trigonometrical_functions/</guid>
      <description>前節では実数 \zeta に対して \[ \begin{alignedat}{5} \cos\zeta &amp; = &amp; &amp; \dfrac{1}{2} &amp; &amp; \{\exp (i\zeta) + \exp (-i\zeta)\}, &amp; &amp;\\ \sin\zeta &amp; = -&amp; &amp; \dfrac{1}{2}i&amp; &amp; \{\exp (i\zeta) - \exp (-i\zeta)\} &amp; &amp; \end{alignedat} \] が成り立つことを見た。 二つの等式の左辺は初等三角法で採用される通常の幾何学的な定義で定義されており、実数の \zeta に対してのみ定義される。一方で左辺は実数および複素数の全ての \zeta に対して定義される。よって \text{(1)} を全ての \zeta に対する \cos \zeta と \sin \zeta の定義として自然に採用できる。§227 よりこの定義は実数に対する初等的な定義と一致する。 \cos \zeta と \sin \zeta が定義できれば、他の三角比は次の等式で定義できる: \[ \tan \zeta = \frac{\sin \zeta}{\cos \zeta},\quad \cot \zeta = \frac{\cos \zeta}{\sin \zeta},\quad \sec \zeta = \frac{1}{\cos \zeta},\quad \cosec \zeta = \frac{1}{\sin \zeta} \qquad \text{(2)} \] \cos \zeta,\ \sec \zeta が偶関数であり、\sin \zeta,\ \tan \zeta,\ \cot \zeta,\ \cosec \zeta が奇関数であることが定義から分かる。また \exp (i\zeta) = t とすれば \[ \begin{gathered} \cos \zeta = \dfrac{1}{2} \{t + (1/t)\},\quad \sin \zeta = -\dfrac{1}{2}i \{t - (1/t)\},\\ \cos^{2} \zeta + \sin^{2} \zeta = \dfrac{1}{4}[\{t + (1/t)\}^{2} - \{t - (1/t)\}^{2}] = 1 \end{gathered} \qquad \text{(3)} \] が成り立つと分かる。</description>
    </item>
    <item>
      <title>§229 一般化された双曲線関数 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_229_definition_of_complex_hyperbolic_functions/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_229_definition_of_complex_hyperbolic_functions/</guid>
      <description>例 87.19 で実数 \zeta に対する \cosh \zeta と \sinh \zeta を次の等式で定義した: \[ \cosh\zeta = \dfrac{1}{2} \{\exp \zeta + \exp (-\zeta)\},\quad \sinh\zeta = \dfrac{1}{2} \{\exp \zeta - \exp (-\zeta)\} \qquad \text{(1)} \] ここまでの知識を使えばこの定義を複素数変数に対して拡張できる。つまり \text{(1)} を実数および複素数の全ての \zeta に対する \cosh \zeta と \sinh \zeta の定義とする。次の関係は簡単に確認できるだろう: \[ \cos i\zeta = \cosh \zeta,\quad \sin i\zeta = i\sinh \zeta,\quad \cosh i\zeta = \cos \zeta,\quad \sinh i\zeta = i\sin \zeta \] \cos 2\zeta = \cos^{2} \zeta - \sin^{2} \zeta といった初等的な三角関数の公式は \zeta が複素数でも正しい。よって \cos \zeta を \cos i\zeta として、\sin \zeta を \sin i\zeta として、\cos 2\zeta を \cos 2i\zeta とした式も正しい。言い換えると \cos \zeta を \cosh \zeta として、\sin \zeta を i \sinh \zeta として、\cos 2\zeta を \cosh 2\zeta とした \[ \cosh 2\zeta = \cosh^{2} \zeta + \sinh^{2} \zeta \] が成り立つ。同様の変換は任意の三角関数の恒等式に適用できる。例 87.21 で示した三角関数と双曲線関数の間の対応関係を説明するのはこの事実である。</description>
    </item>
    <item>
      <title>§230 \(\cos(ξ &#43; iη)\) や \(\sin(ξ &#43; iη)\) に関する公式 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_230_properties_of_complex_trigonometrical_functions/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_230_properties_of_complex_trigonometrical_functions/</guid>
      <description>加法定理から \[ \begin{alignedat}{4} \cos (\xi + i\eta) &amp; = \cos\xi \cos i\eta &amp; &amp; - \sin\xi \sin i\eta &amp; &amp; = \cos\xi \cosh \eta &amp; &amp; - i\sin\xi \sinh \eta,\\ \sin (\xi + i\eta) &amp; = \sin\xi \cos i\eta &amp; &amp; + \cos\xi \sin i\eta &amp; &amp; = \sin\xi \cosh \eta &amp; &amp; + i\cos\xi \sinh \eta \end{alignedat} \] が分かる。この等式は全ての \xi と \eta に関して成り立つ。興味深いのは \xi と \eta が実数の場合で、このとき複素数に対する三角関数の実部と虚部を示す公式が得られる。 例 95 \cos\zeta と \sin\zeta が実数あるいは純虚数となる \zeta の値を求めよ。 [例えば \cos \zeta が実数になるのは \eta = 0 または \xi が \pi の倍数のときである] 次が成り立つ: \[ \begin{alignedat}{2} \left|\cos (\xi + i\eta) \right| &amp; = \sqrt{\cos^{2} \xi + \sinh^{2} \eta} &amp; &amp; = \sqrt{\dfrac{1}{2} (\cosh 2\eta + \cos 2\xi)}, \\ \left|\sin (\xi + i\eta) \right| &amp; = \sqrt{\sin^{2} \xi + \sinh^{2} \eta} &amp; &amp; = \sqrt{\dfrac{1}{2} (\cosh 2\eta - \cos 2\xi)} \end{alignedat} \] [等式 \left|\cos(\xi + i\eta)\right| = \sqrt{\cos(\xi + i\eta) \cos(\xi - i\eta)} などを使う]</description>
    </item>
    <item>
      <title>§231 対数関数と逆三角関数の関係 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_231_connection_between_logarithmic_and_inverse_trigonometrical_functions/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_231_connection_between_logarithmic_and_inverse_trigonometrical_functions/</guid>
      <description>第六章で見たように、定数 \alpha,\ \beta,\ \ldots を使った有理関数あるいは代数関数 \phi(x, \alpha, \beta,\ \ldots) の積分は \alpha,\ \beta,\ \ldots の値によって異なる形になる場合がある: 積分が対数関数で表されることもあれば、逆三角関数で表されることもある。例えば a \gt 0 なら \[ \int \frac{dx}{x^{2} + \alpha} = \frac{1}{\sqrt{\alpha}} \arctan \frac{x}{\sqrt{\alpha}} \qquad \text{(1)} \] だが、\alpha \lt 0 なら \[ \int \frac{dx}{x^{2} + \alpha} = \frac{1}{2\sqrt{-\alpha}} \log \left|\frac{x - \sqrt{-\alpha}}{x + \sqrt{-\alpha}}\right| \qquad \text{(2)} \] となる。この事実は対数関数と逆三角関数の間に何らかの関数的な関係があることを示唆する。あるいは三角関数を \exp i\zeta を使って表現でき、対数関数が指数関数の逆関数である事実からもこの関係の存在が導けるだろう。</description>
    </item>
    <item>
      <title>§232 \(\exp z\) のべき級数 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_232_complex_exponential_series/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_232_complex_exponential_series/</guid>
      <description>§212 で見たように、z が実数なら1 \[ \exp z = 1 + z +\frac{z^{2}}{2!} + \cdots \qquad \text{(1)} \] が成り立つ。さらに §191 からは、z が複素数のときにも右辺の級数が収束する (実際には絶対収束する)ことが分かる。よって複素数の z に対しても \text{(1)} が正しいことが自然に予想される。これを示そう。 \text{(1)} の級数の和を F(z) とする。級数は絶対収束するから、級数の積 (例 81.7) を直接考えることで、F(z) が次の関数方程式を満たすことが分かる: \[ F(z) F(h) = F(z + h) \qquad \text{(2)} \] 実数 y を使って z = iy および F(z) = f(y) とすれば \[ f(y) f(k) = f(y + k) \] だから、 \[ \frac{f(y + k) - f(y)}{k} = f(y) \left\{\frac{f(k) - 1}{k}\right\} \] が成り立つ。</description>
    </item>
    <item>
      <title>§233 \(\cos z\) と \(\sin z\) のべき級数展開 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_233_series_for_cosz_and_sinz/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_233_series_for_cosz_and_sinz/</guid>
      <description>前節の結果と §228 の等式 \text{(1)} から、全ての z に対する等式 \[ \cos z = 1 - \frac{z^{2}}{2!} + \frac{z^{4}}{4!} - \cdots,\quad \sin z = z - \frac{z^{3}}{3!} + \frac{z^{5}}{5!} - \cdots \] を得る。実数 z に対するこの結果は 例 56.1 で示した。 例 96 \cos z と \sin z のべき級数を使って \cos i と \sin i を小数点以下第二位まで計算せよ。 |\cos z| \leq \cosh|z| と |\sin z| \leq \sinh|z| を示せ。 |z| \lt 1 なら |\cos z| \lt 2 および |\sin z| \lt \dfrac{6}{5}|z| だと示せ。 \sin 2z = 2\sin z \cos z から \[ (2z) - \frac{(2z)^{3}}{3!} + \frac{(2z)^{5}}{5!} - \cdots = 2\left(z - \frac{z^{3}}{3!} + \cdots\right) \left(1 - \frac{z^{2}}{2!} + \cdots\right) \] が分かる。右辺の二つの級数の積 (§195) を計算し、係数を比較 (§194) することで \[ \binom{2n + 1}{1} + \binom{2n + 1}{3} + \cdots + \binom{2n + 1}{2n + 1} = 2^{2n} \] を得る。この結果を二項定理を使って確認せよ。同様の恒等式を次の等式から導け: \[ \cos^{2}z + \sin^{2}z = 1,\quad \cos2z = 2\cos^{2}z - 1 = 1 - 2\sin^{2}z \]</description>
    </item>
    <item>
      <title>§234 対数級数 (その 1) - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_234_complex_logarithmic_series/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_234_complex_logarithmic_series/</guid>
      <description>§213 では \[ \log(1 + z) = z - \dfrac{1}{2} z^{2} + \dfrac{1}{3} z^{3} - \cdots \qquad \text{(1)} \] が絶対値が 1 より小さい実数 z で成り立つことを見た。右辺の級数は z が絶対値が 1 より小さい複素数であっても収束し、その収束は絶対収束となる。ここから \text{(1)} がそういった複素数の z でも成り立つことが自然に予想されるが、実際それは §213 の議論を変えれば証明できる。これから示すのは、\text{(1)} が |z| \leq 1 を満たす -1 以外の全ての z で成り立つというより強い命題である。 前に定義したように \log(1 + z) は \operatorname{Log}(1 + z) の主値であり、複素変数 u の平面上の点 1 と 1 + z を結ぶ直線 C に対する \[ \log(1 + z) = \int_{C} \frac{du}{u} \] が定義である。実数変数 z 対する \text{(1)} は前に示したので、これから z は実数でないと仮定する。</description>
    </item>
    <item>
      <title>§235 対数級数 (その 2) - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_235_properties_of_logarithmic_series/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_235_properties_of_logarithmic_series/</guid>
      <description>ここまでの議論から次の等式が分かる: \[ \begin{aligned} \log(1 + z) &amp; = \log\{(1 + r \cos\theta) + ir\sin\theta\} \\ &amp; = \dfrac{1}{2} \log(1 + 2r\cos\theta + r^{2}) + i\arctan \left(\frac{r\sin\theta}{1 + r\cos\theta}\right) \end{aligned} \] この等式におけるタンジェントの逆関数は -\frac{1}{2}\pi から \frac{1}{2}\pi の値を取らなければならない。1 + z が -1 から z への直線で表されるので、円 |z| = 1 の内部にある z に対しては \arg(1 + z) の主値は常にこの範囲にある。 z^{m} = r^{m}(\cos m\theta + i\sin m\theta) だから、§234 の等式 \text{(5)} と実部と虚部をそれぞれ比較して \[ \begin{aligned} \dfrac{1}{2} \log(1 + 2r\cos\theta + r^{2}) &amp; = r\cos\theta - \dfrac{1}{2}r^{2} \cos 2\theta + \dfrac{1}{3}r^{3} \cos 3\theta - \cdots, \\ \arctan \left(\frac{r\sin\theta}{1 + r\cos\theta}\right) &amp; = r\sin\theta - \dfrac{1}{2}r^{2} \sin 2\theta + \dfrac{1}{3}r^{3} \sin 3\theta - \cdots \end{aligned} \] を得る。この二つの等式は 0 \leq r \leq 1 で全ての \theta に対して成り立つが、唯一の例外として r = 1 のときは \theta が \pi の倍数であってはならない。</description>
    </item>
    <item>
      <title>§236 対数級数の指数極限への応用 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_236_complex_exponential_limit/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_236_complex_exponential_limit/</guid>
      <description>z を任意の複素数、h を十分小さな実数として、|hz| \lt 1 が成り立つとする。このとき \[ \log(1 + hz) = hz - \dfrac{1}{2}(hz)^{2} + \dfrac{1}{3}(hz)^{3} - \cdots \] であり、 \[ \frac{\log(1 + hz)}{h} = z + \phi(h, z) \] とすれば \[ \begin{gathered} \phi(h, z) = -\dfrac{1}{2}hz^{2} + \dfrac{1}{3}h^{2}z^{3} - \dfrac{1}{4}h^{3}z^{4} + \cdots,\\ |\phi(h, z)| \lt |hz^{2}| (1 + |hz| + |h^{2}z^{2}| + \cdots) = \frac{|hz^{2}|}{1 - |hz|} \end{gathered} \] が分かる。h \to 0 で \phi(h, z) \to 0 だから、次が成り立つ: \[ \lim_{h\to 0} \frac{\log(1 + hz)}{h} = z \qquad \text{(1)} \] 特に正の整数 n を使って h = 1/n と書けば \[ \lim_{n\to \infty} n\log \left(1 + \frac{z}{n}\right) = z \] を得る。よって \[ \lim_{n\to \infty} \left(1 + \frac{z}{n}\right)^{n} = \lim_{n\to \infty} \exp\left\{n\log\left(1 + \frac{z}{n}\right)\right\} = \exp z \qquad \text{(2)} \] が成り立つ。これは §208 で実数 z に対して示した命題の一般化である。</description>
    </item>
    <item>
      <title>§237 二項定理の一般形 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_237_complex_binomial_series/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/10_237_complex_binomial_series/</guid>
      <description>§215 では級数 \[ 1 + \binom{m}{1} z + \binom{m}{2} z^{2} + \cdots \] の和が (1 + z)^{m} = \exp\{m\log(1 + z)\} であり、全ての実数 m と -1 から 1 の全ての実数 z で成り立つことを示した。a_{n} を z^{n} の係数とすれば \[ \left|\frac{a_{n+1}}{a_{n}}\right| = \left|\frac{m - n}{n + 1}\right| \to 1 \] が実数および複素数 m で成立する。よって (例 53.3 より) この級数は大きさが 1 より小さい任意 z で収束することが分かる。その和が \exp\{m\log(1 + z)\} つまり (1 + z)^{m} の主値で変わらないことをこれから証明しよう。 §236 から実数 t に対して \[ \frac{d}{dt}(1 + tz)^{m} = mz(1 + tz)^{m-1} \] だと分かる。ここで z と m は任意の実数または複素数であり、両辺は主値を考える。よって \phi(t) = (1 + tz)^{m} とすれば \[ \phi^{(n)}(t) = m(m - 1) \cdots (m - n + 1)z^{n} (1 + tz)^{m-n} \] を得る。これは t = 0 でも成り立つので \[ \frac{\phi^{n}(0)}{n!} = \binom{m}{n} z^{n} \] が分かる。</description>
    </item>
    <item>
      <title>第十章に関するその他の例 - 第十章 複素数に対する対数関数・指数関数・三角関数 - 純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/misc_examples/</link>
      <pubDate>Sun, 01 Mar 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/10_the_general_theory_of_the_elementary_functions/misc_examples/</guid>
      <description>i^{\log(1+i)} の実部が \[ e^{(4k+1)\pi^{2}/8 } \cos \{\dfrac{1}{4}(4k + 1)\pi\log 2\} \] だと示せ。k は任意の整数を表す。 c^{2} \gt a^{2} + b^{2} を満たす実数 a,\ b,\ c で a\cos\theta + b\sin\theta + c = 0 が成り立つなら \[ \theta = m\pi + \alpha ± i\log \frac{|c| + \sqrt{c^{2} - a^{2} - b^{2}}}{\sqrt{a^{2} + b^{2}}} \] となる。m は c が正なら任意の奇数であり、c が負なら任意の偶数となる。\alpha はコサインが a/\sqrt{a^{2} + b^{2}} でサインが b/\sqrt{a^{2} + b^{2}} である角度を表す。 \theta が実数で \sin\theta \sin\phi = 1 なら \[ \phi = (k + \dfrac{1}{2})\pi ± i\log \cot \dfrac{1}{2}(k\pi + \theta) \] だと示せ。k は \sin\theta が正なら任意の偶数を表し、\sin\theta が負なら任意の奇数を表す。</description>
    </item>
    <item>
      <title>頂点プロセッシング - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/overview/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/overview/</guid>
      <description>現時点で、アプリケーションが発したドローコールは様々なドライバレイヤーを経てコマンドプロセッサに到達した。そしてついに、ドローコールに対応する何らかのグラフィックス処理が開始される！ この章では頂点パイプラインについて説明する。ただその前に... アルファベットスープを召し上がれ！ これから正真正銘の 3D パイプラインを見ていく。3D パイプラインは複数のステージから構成され、それぞれのステージが一つの特定の仕事を行う。このシリーズで解説する全てのステージの名前と省略形を次に示す──ほとんどは D3D10/11 の &#34;公式な&#34; 名前に従っている。この周遊旅行で各ステージをいずれ説明するが、全てをカバーするにはしばらく (数章分の) 時間がかかるだろう──真面目な話、私はカバーしたい話題に関して簡単なアウトラインを作ったのだが、それによると私はこのシリーズに最低でも二週間は取り組むことになるようだ！ ともかく、見てほしい。各ステージの処理の簡単な説明も示した:</description>
    </item>
    <item>
      <title>テクスチャサンプラー - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/texture-samplers/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/texture-samplers/</guid>
      <description>やぁおかえり。前章では頂点シェーダーについて説明し、GPU のシェーダーユニットにも一般的に軽く触れた。シェーダーユニットは基本的にただのベクトルプロセッサだが、他のベクトルプロセッサが持たないとあるリソースへのアクセスを持つ: テクスチャサンプラーである。テクスチャサンプラーは GPU パイプラインに欠かせない要素であり、記事一つを使った説明が正当化される程度の複雑さ (そして面白さ！) を持つ。それでは説明を始めよう。 テクスチャステート 実際のテクスチャリング操作を考える前に、まずテクスチャリングを制御する API ステートを見ていく。D3D11 では三つの異なる要素がある:</description>
    </item>
    <item>
      <title>プリミティブアセンブリ - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/primitive-assembly/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/primitive-assembly/</guid>
      <description>テクスチャサンプラーに関する章が終わり、私たちは 3D フロントエンドに戻ってきた。これで頂点シェーディングが完了したから、これでやっとレンダリングが始まるはずだ... いや、そうはいかない。なぜって、プリミティブのラスタライズを始める前に必要な処理がたっぷりある。どれくらいあるかと言うと、この章ではラスタライズを一切説明できないぐらいたくさんある──ラスタライズは次章まで待たなければならない。 プリミティブアセンブリ 頂点パイプラインに戻ると、シェーディングの終わった頂点のブロックがシェーダーユニットから返ってくる。そのブロックには整数個のプリミティブが含まれるという暗黙の約束がある──つまり、一つの三角形・直線・パッチが複数のブロックにまたがることはない。この約束があると各ブロックを完全に独立に扱うことができ、頂点シェーダーから出力されるブロックは一つだけバッファすれば済むようになるので、非常に重要である。二つ以上のブロックをバッファすることは当然できるが、する必要があるわけではない。</description>
    </item>
    <item>
      <title>ラスタライズ - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/resterization/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/resterization/</guid>
      <description>やぁおかえり。今回は三角形が実際にラスタライズされる様子を見ていく──やっとだ！ しかしラスタライズを始める前に、まず三角形セットアップが必要になる。そして三角形セットアップを議論する前に、まず何をセットアップするのかを説明しなければならない。というわけで、まずはハードウェアに優しいラスタライズアルゴリズムについて話そう。 三角形を描画する下手な方法 まず、この村に長くいて最適化されたソフトウェアテクスチャマッパーを自分で書いたことがある人に向けて少し注意事項がある。そういった人はおそらく三角形のラスタライズを様々な処理を一度に行う巨大な処理と捉えることに慣れているだろう: 三角形の形状のトレース、u, v の補間 (透視的に正しくするなら u/z, v/z, 1/z の補間)、Z バッファテスト (透視的に正しいマッピングでは代わりに 1/z バッファを使ったテスト)、そして実際のテクスチャリングおよびシェーディング、こういった処理を全て細心の注意を払ってスケジュールした一つの大きなループで、おそらくは利用可能なレジスタを全て使って実行したはずだ。私の言っていることが分かるだろう？ だが、今はそれを忘れてほしい。これはハードウェアだ。ハードウェアでは設計とテストを個別に行えるよう機能を小さくて小奇麗なモジュールにパッケージ化する。ハードウェアにおける「三角形ラスタライザ」は三角形が被覆する (サブ) ピクセルを伝えるブロックである。場合によっては三角形に含まれるピクセルの座標を重心座標系で返したりもするが、それで終わりだ。u や v は出てこない──1/z も、テクスチャやシェーディングも存在しない。最後の二つに関しては専用のテクスチャユニットとシェーダーユニットが存在するので、驚くことでもないだろう。</description>
    </item>
    <item>
      <title>Z/ステンシル - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/z-stencil/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/z-stencil/</guid>
      <description>この章では (アーリー) Z パイプラインとそれがラスタライズとどう関わるかについて話をする。前章と同様、説明は実際のパイプラインと同じ順序では進まない: 最初に内部で使われるアルゴリズムを説明し、何が起こるかを理解してからパイプラインステージを (説明の都合により逆順で) 埋めていく。 補間される値 Z は三角形に渡って補間される。頂点シェーダーから出力される任意のアトリビュートも同様である。そこで少し紙面を割いて、この補間がどう動作するかを説明する。元々は補間で使われる数式の導出や透視補間が正しく動く理由についての節を一つ書くつもりだった。余談なので一つか二つの段落で説明しようと数時間にわたって取り組んだのだが、結局きちんと説明するにはもっと紙面が必要で、図も少なくとも一つか二つ必要ということが分かった。「百聞は一見に如かず」なのだが、きちんとした図を一つ描くのには千単語の文章を書くのと同じぐらいの時間がかかるので、私からするとあまり違いがない :) ともかくこれは脱線した話題なので、私の「いつかきちんとした記事を書くグラフィックス関係の話題」のリストに積んでおく。ここではエグゼクティブサマリを示そう:</description>
    </item>
    <item>
      <title>ピクセルプロセッシング ── フォークフェーズ - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/pixel-fork/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/pixel-fork/</guid>
      <description>この章ではピクセルプロセッシングの前半部分、ディスパッチと実際のピクセルシェーディングを片付ける。実は、たいていのグラフィックスプログラマーがピクセルプロセッシングについて話をするとき実際に思い浮かべているのはこの部分である。次の章で触れるアルファブレンドとレイト Z/ステンシルのステージは最後に付く簡単な処理のように思える。しかしこれから見るように、ハードウェアでは話がもう少し複雑になる──ピクセルプロセッシングを二つの章に分けたのには理由がある。ただこの話はまだ早い。さて、このステージに入る時点で、シェーディングを行うピクセル (正確にはクアッド) の座標と対応するカバレッジマスクがラスタライザ/アーリー Z ユニットから到着する──このとき前章で説明したように、三角形はアプリケーションが送信したのと全く同じ順序で並ぶ。ここで行うべきなのは、その線形に並んだ仕事の列を数百個のシェーダーユニットに振り分けて実行し、結果が返ってきたらメモリ更新操作の線形ストリームとして一つにまとめるという処理である。</description>
    </item>
    <item>
      <title>ピクセルプロセッシング ── ジョインフェーズ - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/pixel-join/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/pixel-join/</guid>
      <description>おかえり！ この章ではピクセルプロセッシングの後半部分である「ジョインフェーズ」を扱う。前章では少数の入力ストリームを受け取ってそれを大量の独立したシェーダーユニット用タスクに変換する部分について話をした。この後は起動した大量の独立した計算を (正しく順序付いた) メモリ操作のストリームとして一つにまとめなければならない。ラスタライズとアーリー Z を説明したときと同じように、行うべき処理を一般的なレベルで最初に説明してから、それがハードウェアにどう対応付くかを説明する。</description>
    </item>
    <item>
      <title>目次 - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/mokuji/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/mokuji/</guid>
      <description>目次 このドキュメントの総目次です。ブラウザの検索機能を使ってご利用ください。</description>
    </item>
    <item>
      <title>500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/</guid>
      <description>翻訳について これは Michael DiBernardo 編 500 Lines or Less の翻訳です。英語版は Creative Commons Attribution 3.0 Unported ライセンスで公開されています。 この翻訳は Creative Commons Attribution 3.0 Unported ライセンスの許諾に基づいて公開されます。 PDF/EPUB 版について この翻訳の PDF/EPUB 版を BOOTH で販売しています。 コードについて 本書で解説されるプロジェクトのコードは https://github.com/aosabook/500lines/ で公開されています。 謝辞 英語版の編集者 Michael DiBernardo 氏および各章の著者に感謝します。</description>
    </item>
    <item>
      <title>本書について - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/introduction/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/introduction/</guid>
      <description>本書は Architecture of Open Source Applications シリーズの第四巻である。シリーズで初めて、タイトルに「オープンソースアプリケーション」が含まれていない。 本シリーズではこれまで大規模なプログラムが直面する大規模な問題を議論してきた。ただ、経験の浅いエンジニアが数千行を大きく上回る巨大なプログラムを理解してそこから何かを学ぶのは難しいかもしれない。つまり、大きな問題に関する議論は興味深い読み物であるものの、学習用の素材としては十分でない可能性がある。</description>
    </item>
    <item>
      <title>1. はじめに - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/preface/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/preface/</guid>
      <description></description>
    </item>
    <item>
      <title>索引 - コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/sakuin/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/sakuin/</guid>
      <description>「コンピューターネットワーク: システム的アプローチ (翻訳)」の索引です。</description>
    </item>
    <item>
      <title>ジオメトリシェーダー - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/geometry-shaders/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/geometry-shaders/</guid>
      <description>やぁおかえり。前章で私たちはピクセルパイプラインの終端まで到達した。この章ではパイプラインの中央部分に戻って、D3D10 でおそらく最も目立つ追加機能を見ていく: ジオメトリシェーダーである。ただまずは、このシリーズにおけるグラフィックスパイプラインの分解方法について、それが API が示す視点とどう異なるかを説明しよう。 パイプラインは複数ある/パイプラインステージの解剖 これは三章でも触れたことだが、繰り返しておくに値する: 例えば D3D10 のドキュメントを見ると、アクティブにできるステージが全て表示された &#34;D3D10 パイプライン&#34; の図がある。この &#34;D3D10 パイプライン&#34; にはジオメトリシェーダーが設定していなくても含まれるものとして描かれており、ストリームアウトに関しても同様である。D3D10 を純粋に機能モデルとして見るとき、ジオメトリシェーディングステージは必ず存在している。例えばジオメトリシェーダーを設定しなくても、それはジオメトリシェーディングステージの処理がたまたま非常に単純 (かつ退屈) になっただけである: このステージでデータは変更されず、そのまま次のパイプラインステージ (ラスタライズまたはストリームアウト) に渡される。</description>
    </item>
    <item>
      <title>索引 - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/sakuin/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/sakuin/</guid>
      <description>Julia 1.5.4 ドキュメントに含まれる識別子全てのリストです。</description>
    </item>
    <item>
      <title>この本について - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/about/</link>
      <pubDate>Sat, 23 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/about/</guid>
      <description>大工仕事には高い技術が必要であり、その技術の向上に生涯をかけることもできます。しかし大工仕事は建築 (architecture) ではありません。誰かがピッチボードとマイタージョイントから目を離し、建物全体を設計しなければなりません。建物の設計に必要なのは手先の器用さと知識だけではなく、職人技が必要になります。 プログラミングにも高い技術が必要であり、その技術の向上に生涯をかけることもできます。しかし、プログラミングはソフトウェアアーキテクチャ (software architecture) ではありません。多くのプログラマーはプログラム全体に関する問題を何年もかけて考え、取り組みます。「このアプリケーションは拡張可能であるべきだろうか？ もしそうだとしたら、プラグインのようなメカニズムを使ったスクリプトによるインターフェースがいいだろうか、それとも全く違った方法がいいだろうか？」 「クライアントですべきことは何で、何をサーバーにやらせるべきだろうか、いやそもそもこのアプリケーションに“クライアント・サーバー”モデルを使うべきなのだろうか？」 階段をどこに設置するかという問題が大工仕事とは関係ないように、こういった質問はプログラミングとは関係ありません。</description>
    </item>
    <item>
      <title>前書き - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/preface/</link>
      <pubDate>Sun, 30 Dec 2018 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/preface/</guid>
      <description>Incipit prologus in libro alghoarismi de practica arismetrice. ――Ioannis Hispalensis [John of Seville?], Liber algorismi de pratica arismetrice (c.1135) 友人であるあなたに、それを理解する方法を教えましょう。 それについての本を書くといい。 ――Henry Home, Lord Kames (1696–1782), Sir Gilbert Elliot への手紙 個人は常に間違っている。彼は多くのものをデザインし、他人を助手として引き込み、そのいくらかあるいは全てと口論し、大きく失敗し、そして何かを成す。全体としてみれば多少の進歩があるが、その個人は常に間違っている。彼が幾分新しいことをしていたとしても、それが彼の意図通りであることはほとんどない。</description>
    </item>
    <item>
      <title>inzkyk.xyz</title>
      <link>https://inzkyk.xyz/</link>
      <pubDate>Wed, 05 Sep 2018 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/</guid>
      <description>英語の記事や書籍の翻訳を公開するサイトです。</description>
    </item>
    <item>
      <title>1.1. 本書について - 1. はじめに - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/preface/what-is-this/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/preface/what-is-this/</guid>
      <description>本書はグラフ理論 (graph theory) に関する講義ノートである ── グラフは非常に基礎的な数学的概念 (実際には密接に関連するいくつかの概念の集合体) であり、数学の様々な分野で姿を現す。本書では様々な種類のグラフ (単純グラフ、多重グラフ、有向グラフなど) の特徴・性質を学ぶ。具体的には、グラフの路・歩道、グラフのマッチング、ネットワーク (追加情報を持ったグラフ) のフローといった概念や、木・トーナメントといった特別な種類のグラフの話題に触れる。</description>
    </item>
    <item>
      <title>1. 序論 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/introduction/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/introduction/</guid>
      <description>2020 年、ワールドワイドウェブはユビキタスであり、ウェブに接続された数十億のデバイスから十億を超えるウェブサイトにアクセスできる。そういったデバイスではウェブブラウザあるいはそれに似たプログラムが実行され、それがウェブサイトから受け取ったページを処理して画像として表示する。ウェブサイトが配信するページの大多数には JavaScript というプログラミング言語で書かれたソースコード (あるいはそれを読み込む命令) が含まれる。JavaScript が世界で最も多くデプロイされたプログラミング言語であることはまず間違いない。Stack Overflow [2018] の調査によると JavaScript は世界で最も広く利用されるプログラミング言語であり、職業開発者の 71.5% が利用する。</description>
    </item>
    <item>
      <title>第 1 部 JavaScript の起源 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/origins_of_javascript/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/origins_of_javascript/</guid>
      <description></description>
    </item>
    <item>
      <title>マニュアル - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/manual/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/manual/</guid>
      <description>マニュアル</description>
    </item>
    <item>
      <title>かんたん微積分 (翻訳)</title>
      <link>https://inzkyk.xyz/calculus_made_easy/</link>
      <pubDate>Thu, 30 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/calculus_made_easy/</guid>
      <description>翻訳について これは Silvanus P. Thompson 著 Calculus Mady Easy. Second Edition (1914) の翻訳です。底本は Internet Archive と Poject Gutenberg で入手できます。 底本の著作権について 2020 年現在、1916 年に死去した Silvanus P. Thompson 氏の著作の日本における著作権保護期間は終了しています。 PDF 版について この翻訳の PDF 版を BOOTH (https://inzkyk.booth.pm/items/2163137) で販売しています。学生版は無料です。 謝辞 底本をウェブで公開している Project Gutenberg と Internet Archive に感謝します。</description>
    </item>
    <item>
      <title>Asterisk - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/asterisk/</link>
      <pubDate>Sat, 23 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/asterisk/</guid>
      <description>Asterisk1 はオープンソースの電話通信アプリケーションであり、GPLv2 で配布されています。短くまとめてしまえば、Asterisk とは通話の発信、受信、およびその他のカスタムされた処理を行うためのアプリケーションです。 Asterisk プロジェクトは Mark Spencer によって 1999 年に開始されました。Mark は当時 Linux Support Services という会社を経営しており、ビジネスを管理するための電話システムが必要だったのです。他の会社からシステムを買うだけの大金を持っていなかったので、彼は自分で作ってしまいました。Asterisk が成長するにしたがって Linux Support Services は事業を Asterisk に集中し、社名は Digium, Inc. に変更されました。</description>
    </item>
    <item>
      <title>イントロダクション - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/introduction/</link>
      <pubDate>Wed, 02 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/introduction/</guid>
      <description>Hinc incipit algorismus. Haec algorismus ars praesens dicitur in qua talibus indorum fruimur bis quinque figuris 0. 9. 8. 7. 6. 5. 4. 3. 2. 1. ――Friar Alexander de Villa Dei, Carmen de Algorismo (c. 1220) 自分の作品に集中するよう芸術家に言うのは間違いではない。しかしあなたは、問題を解決することと問題を正しく提示することを混同している。 ――Anton Chekhov, A. S. Suvorin への手紙 (October 27, 1888) 低いレベルで体を機械のように扱うと、それだけ高いレベルで使う力が自由になる。 ――Anna C. Brackett, The Technique of Rest (1892) そして現在午前 2:30 で、私はテクニックについて書いている。しかし私には、人がテクニックについて話し始めるのはアイデアが尽きた瞬間であるという強い確信がある。</description>
    </item>
    <item>
      <title>1.2. 数学記号 - 1. はじめに - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/preface/notation/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/preface/notation/</guid>
      <description>本書で利用される数学記号を次に示す: \mathbb{N}=\left\{0,1,2,\ldots\right\} と定める。つまり 0\in\mathbb{N} が成り立つ。 有限集合 S の大きさ (濃度) を \left\vert S\right\vert と表記する。 集合 S の冪集合 (powerset) とは、S の部分集合全体からなる集合を意味する。集合 S の冪集合を \mathcal{P}\left( S\right) と表記する。 さらに、集合 S と整数 k に対して、k 個の要素を持つ S の部分集合全体からなる集合を \mathcal{P}_{k}\left( S\right) と表す。例えば、次の等式が成り立つ: \[ \mathcal{P}_{2}\left( \left\{1,2,3\right\} \right) =\left\{\left\{1,2\right\} ,\ \left\{1,3\right\} ,\ \left\{2,3\right\}\right\} \] 任意の実数 n と任意の k\in\mathbb{N} に対して、二項係数 (binomial coefficient) と呼ばれる値 \dbinom{n}{k} を次のように定める:</description>
    </item>
    <item>
      <title>2. 前史 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/origins_of_javascript/prehistory/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/origins_of_javascript/prehistory/</guid>
      <description>ワールドワイドウェブの概念と基礎技術は 1989 年から 1991 年にかけて CERN の Tim Berners-Lee [2003] によって考案された。Berners-Lee のウェブ技術は数年で高エネルギー物理学コミュニティ内に広まったものの、その外側ではあまり注目されずにいた。しかしイリノイ大学アーバナ・シャンペーン校の学部生 Marc Andreessen と同校米国立スーパーコンピューター応用研究所 (NCSA) 勤務の Eric Bina が 1992 年から 1993 年の間に Mosaic語 (NCSA Mosaic) を開発すると話が一変する。 Mosaic は簡単にインストールできて簡単に使える、グラフィカルユーザーインターフェースを備えたウェブクライアントだった。これは事実上「ウェブブラウザ」というソフトウェアのカテゴリを定義したソフトウェアであり、ワールドワイドウェブの概念を物理学コミュニティの外に普及させた。Mosaic は広く配布され、1994 年初頭にはブラウザの熱狂で一儲けすることを考えた人々が Mosaic をライセンスするか Mosaic に触発されたブラウザを一から作ろうと躍起になっていた。Silicon Graphics Inc. の創業者 Jim Clark はベンチャーキャピタルからの出資を獲得して Marc Andreessen と Eric Bina を雇い入れ、後に Netscape Communications Corporation となる会社を 1994 年 4 月に共同創業した。Netscape は Mosaic を置き換える世界で最も利用されるブラウザを作ることを目標に掲げた。Netscape は機能を拡張した次世代の Mosaic 風ブラウザ Netscape Navigator語 を一から開発し、1994 年 10 月に広く配布を開始した。1995 年初頭までに Netscape Navigator は当初の目標を達成し、Mosaic を急速に置き換えていった。</description>
    </item>
    <item>
      <title>Julia Base ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/base/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/base/</guid>
      <description>Julia Base ライブラリ</description>
    </item>
    <item>
      <title>純粋数学講義 (翻訳)</title>
      <link>https://inzkyk.xyz/pure_math/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/pure_math/</guid>
      <description>翻訳について これは G. H. Hardy 著 A Course of Pure Mathematics. Third Edition (1921) の翻訳です。底本は Internet Archive と Project Gutenberg で入手できます。 底本の著作権について 2020 年現在、1947 年に死去した G. H. Hardy 氏の著作の日本における著作権保護期間は終了しています。 PDF 版について この翻訳の PDF 版を BOOTH (https://booth.pm/ja/items/1934439) で販売しています。 謝辞 底本をウェブで公開している Project Gutenberg と Internet Archive に感謝します。</description>
    </item>
    <item>
      <title>Audacity - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/audacity/</link>
      <pubDate>Wed, 27 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/audacity/</guid>
      <description>Audacity は多くのユーザーを持つサウンドレコーダ・エディタであり、機能は豊富でありながらも操作は簡単です。ユーザーの多くは Windows ですが、ソースコードは Linux と Mac でもコンパイル・実行できます。 Audacity のオリジナルのバージョンは当時カーネギーメロン大学の研究生だった Dominic Mazzoni によって 1999 年に書かれました。もともとは音声処理アルゴリズムを開発・デバッグするためのプラットフォームとして開発されましたが、現在の Audacity はそれ以外の様々な用途にも使うことができます。</description>
    </item>
    <item>
      <title>3. JavaScript 1.0 と JavaScript 1.1 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/origins_of_javascript/javascript_1_0_and_1_1/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/origins_of_javascript/javascript_1_0_and_1_1/</guid>
      <description>1995 年 12 月 4 日、Netscape Communications Corporation と Sun Microsystems は共同のプレスリリースで JavaScript を発表した [Netscape and Sun 1995; 補遺 F]。このプレスリリースでは JavaScript が「オブジェクトスクリプト言語」であり、動的に「Java オブジェクトのプロパティや振る舞いを改変する」スクリプトを書くのに利用できると説明されている。また JavaScript は「オンラインアプリケーションの容易な開発のために Java を補完する」ともある。Java と JavaScript の技術的な設計は表面的に似ているだけにもかかわらず、Netscape と Sun は二つの言語の間に強い結び付きを構築しようとしていた。Java と JavaScript の名前が似ていて密接に関係しているような印象を与えることは、現在でも混乱の元となっている。</description>
    </item>
    <item>
      <title>標準ライブラリ - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/stdlib/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/stdlib/</guid>
      <description>標準ライブラリ</description>
    </item>
    <item>
      <title>The Bourne-Again Shell (bash) - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/bash/</link>
      <pubDate>Mon, 01 Apr 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/bash/</guid>
      <description>導入 Unix シェルは、ユーザーとオペレーティングシステムとの間でコマンドによる対話を行うためのインターフェースを提供します。シェル自体も豊富な機能を持ったプログラミング言語であり、実行制御、変数の書き換え、ループ、条件文、基本的な数学演算、名前付き関数、文字列変数、シェルと起動したコマンドの間の双方向通信といった処理のための構文が用意されています。 シェルはターミナルや xterm のようなターミナルエミュレータを通して対話的に使うことができます。また非対話的に使うことも可能であり、そのときはコマンドがファイルから読み込まれます。bash を含む現代的なシェルにはコマンドライン編集機能が付いており、emacs あるいは vi と似たコマンドを使ってコマンドラインを編集できるほか、様々な形でコマンドの履歴を利用できます。</description>
    </item>
    <item>
      <title>アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/</link>
      <pubDate>Fri, 11 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/</guid>
      <description>翻訳について これは Jeff Erickson 著 Algorithms. 1st paperback edition (2019) の翻訳です。英語版は Creative Commons Attribution 4.0 International ライセンスで配布されており、配布ページから無料で入手できます。 この翻訳は Creative Commons Attribution 4.0 International の許諾に基づいて公開されます。 PDF 版について この翻訳の PDF 版を BOOTH (https://booth.pm/ja/items/1633486) で販売しています (学生版は無料)。 謝辞 英語版をウェブで公開している Jeff Erickson 氏に感謝します。</description>
    </item>
    <item>
      <title>4. Microsoft JScript - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/origins_of_javascript/microsoft_jscript/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/origins_of_javascript/microsoft_jscript/</guid>
      <description>Netscape と Sun が一般に JavaScript を発表したのと同じ週に Microsoft も発表を行い、「Visual Basic Script を通じて、ワールドワイドウェブベースのアプリケーションを作成するときの標準」を Visual Basic にする意思を表明した1 [Wingfield 1995]。それに先立つ 1996 年 5 月 29 日、Microsoft は Internet Explorer 3.0 Beta のプレスリリース [Microsoft 1996] で JavaScript のサポートを発表している: ActiveX Script. Visual Basic® Script と JavaScript のネイティブサポートにより、Microsoft Internet Explorer 3.0 は最も包括的かつ言語非依存なスクリプト機能を提供する。Microsoft Internet Explorer は REXX, CGI, PERL といった追加のスクリプト言語をサポートするよう拡張できる。ウェブページの設計者は好きなスクリプト言語を HTML コードに組み入れ、ActiveX コントロールや Java Applets などのソフトウェアコンポーネントを繋ぎ合わせる対話的なページを作成できる。</description>
    </item>
    <item>
      <title>開発者向けドキュメント - Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/devdocs/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/devdocs/</guid>
      <description>開発者向けドキュメント</description>
    </item>
    <item>
      <title>Berkeley DB - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/berkeley_db/</link>
      <pubDate>Sat, 06 Apr 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/berkeley_db/</guid>
      <description>Conway の法則によると、システムの設計には作った組織の構造が表れるといいます。この考えを敷衍すれば、二人の人間によって設計・作成されたソフトウェアには、組織の構造だけではなくて、二人が持つバイアスと哲学が表れるのかもしれません。私たちの一人 (Seltzer) はファイルシステムとデータベース管理システムの研究にキャリアを費やしてきました。彼女に言わせればこの二つは本質的に同じものであり、さらに言えばオペレーティングシステムとデータベース管理システムだって同じです。両方ともリソースの管理と便利な抽象化を提供する点で同じであり、違いは実装の詳細 “だけ” です。もう一人 (Bostic) がシステムを作るときに重要視しているのは、ツールベースのソフトウェア工学のアプローチ、そして単純なブロックを使ってコンポーネントを組み立てる手法です。なぜならモノリシックなアーキテクチャと比べたとき、こういったシステムは重要な“...可能性 (-bility)”に優れているからです。つまり、理解可能性 (understandability)、拡張可能性 (extensibility)、保守可能性 (maintainability)、テスト可能性 (testability)、変更可能性 (flexibility) に優れます。</description>
    </item>
    <item>
      <title>オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/</link>
      <pubDate>Wed, 27 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/</guid>
      <description>翻訳について これは Amy Brown, Greg Wilson 編 The Architecture of Open Source Applications. Volume I (2012) の翻訳です。英語版は Creative Commons Attribution 3.0 Unported でライセンスされており、http://aosabook.org/en/intro1.html から無料で閲覧できます。 この翻訳は Creative Commons Attribution 3.0 Unported の許諾に基づいて公開されます。 謝辞 英語版の執筆に関わった全ての人に感謝します。</description>
    </item>
    <item>
      <title>5. Mocha から SpiderMonkey まで - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/origins_of_javascript/from_mocha_to_spider_monkey/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/origins_of_javascript/from_mocha_to_spider_monkey/</guid>
      <description>1995 年では通年、1996 年ではほぼ通年、Brendan Eich は Netscape で JavaScript エンジン語1にフルタイムで取り組む唯一の開発者だった。1996 年 8 月にリリースされた Netscape 3.0 に付属する JavaScript 1.1 は、依然としてほとんどが 1995 年 5 月に 10 日間で作られたプロトタイプのコードから構成されていた。Netscape 3.0 リリースの後、Eich はそろそろエンジン語の技術的負債2を返済し、JavaScript を「よりクリーンな」言語にする作業を始める時だと感じていた。一方で Netscape の経営層は彼が言語仕様に取り組むことを望んだ。経営層は仕様が無いことに関する Microsoft からの批判を気にしており、目前に迫った標準化活動には入力として仕様が必要になるだろうと見ていた。しかし Eich は反対し、Mocha の再実装から始めることを望んだ。仕様を書くには Mocha の実装を注意深くレビューする必要がある。Mocha を書き直しながらレビューを行うのが最も効率的だろうと彼は考えた。そうすれば仕様を正式に決める前にオリジナルの Mocha に含まれる設計ミスを訂正することもできる。</description>
    </item>
    <item>
      <title>CMake - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/cmake/</link>
      <pubDate>Wed, 17 Apr 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/cmake/</guid>
      <description>1999 年、アメリカ国立医学図書館が Kitware という小さな会社と契約し、異なるプラットフォームにおいて複雑なソフトウェアを構成、ビルド、デプロイするためシステムの刷新を決定しました。これは Insight Segmentation and Registration Toolkit (ITK1) の一部であり、Kitware はこのプロジェクトにおいてエンジニアリングを指揮していました。Kitware に課されたのは ITK の研究者と開発者が使うためのビルドシステムの作成であり、簡単に使うことができて利用者がプログラミングに費やす時間を最大限効率化できるシステムが求められました。CMake はこの目標を達成するために作られたツールであり、autoconf/libtool を使ったソフトウェアビルドの古いアプローチを置き換えるものです。既存のツールの強みを保ちつつも弱点を補うように設計されています。</description>
    </item>
    <item>
      <title>6. 余談: 批判 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/interlude_critics/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/interlude_critics/</guid>
      <description>JavaScript は開発された当初から厳しい批判の的になってきた。動的型付けの利用などの基礎的な設計判断に向けられた批判もあれば、型強制規則などの設計の詳細に向けられた批判もあった。JavaScript と HTML の統合の仕方に全く納得がいかないと批判した者もいるし、JavaScript がブラウザのセキュリティ脆弱性を暴露することを批判した者もいる [Fair 1998]。Robert Cailliau [Wikinews 2007] は JavaScript を「コンピューティングの歴史の中で最もひどいその場しのぎ」と呼び、「C より劣るプログラミング言語は一つしか知らない。それは Javascriptママ だ」と発言した。Bret Bos [2005] は W3C ワークショップで、JavaScript は「歴史上で最悪の発明」だと述べた。</description>
    </item>
    <item>
      <title>主要サイトの文字の大きさの調査</title>
      <link>https://inzkyk.xyz/post/char_size/</link>
      <pubDate>Sun, 21 Apr 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/post/char_size/</guid>
      <description>気になったので調べた。 計測環境 計測日時は項目ごとに異なる。 Windows 10、Chrome 最新版で計測。 Windows のディスプレイ拡大機能は使用しない (100% に設定)。 Chrome のフォント設定は「中」で、拡大機能は使用しない。 フル HD のデスクトップでブラウザを最大化した状態で計測。 計測したもの 本文の要素の font-size, line-height, width の値を計測し、さらにその指定方法 (絶対/相対) も調べた。 計測する値が JavaScript で動的に決まる場合もあるが、考えだすときりがないので気にしないことにした。 計測するサイトは独断と偏見で選んだ。Top Websites in Japan - SimilarWeb Website Ranking も参考にした。 計測結果 サイト font-size 指定方法 line-height 指定方法 width 指定方法 width / font-size (参考) Google 検索 13px small 20.02px 相対 592px 絶対 45.5 Yahoo! 検索 13px small 20.8px 相対 566px 絶対 43.5 gihyo.jp 15.1632px 相対 28.8108px 相対 495px 絶対 32.6 ねとらぼ 16px 相対 (1rem) 27.2px 相対 640px 絶対 40.0 Qiita 16px 相対 30.4px 相対 (1.9) 804px グリッド 50.3 4Gamer.net 16px 相対 (100%) 24px 相対 (1.5em) 534px 絶対 33.4 Twitter 14px 絶対 20px 絶対 506px 絶対 36.1 Wikipedia 15.104px 相対 (94.4%) 24.1664px 相対 (1.6) 1678px 指定なし 111.1 小説家になろう 16px 絶対 28.8px 絶対 600px 絶対 37.5 Medium Japan 21px 絶対 33.18 相対 (1.58) 700px 絶対 33.33 note 18px 絶対 36px 絶対 620px 絶対 34.4 SICP 27.2px 相対 (170%) 34.272 相対 (126%) 781px 相対 (67ex) 28.7 指定方法が相対にもかかわらず数字が書かれていないマスは、値の指定方法が複雑で表のマスに書ききれなかったことを表す。値は省略した。 width の指定方法が絶対であるとは、幅が絶対値で指定された何らかの要素から p 要素の幅が決まっていることを表す。 p 要素に width が直接設定されたわけでは必ずしもない。 観察 &#34;モダン&#34; なサイトは文字がでかい。 トリビア 4Gamer.net の記事の本文は div 要素で書かれている。 gihyo.jp の記事の本文には text-align: justify が指定されている。 小説家になろう では段落の先頭に一文字空白があるように表示されるが、ここには実際に全角スペースが入っている。</description>
    </item>
    <item>
      <title>Eclipse - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/eclipse/</link>
      <pubDate>Fri, 19 Apr 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/eclipse/</guid>
      <description>ソフトウェアを上手くモジュール化して実装することの難しさは誰もが知っています。多様なコミュニティによって書かれた巨大なコードベースの相互運用の管理もまた困難です。Eclipse において、私たちはこの両方を成し遂げました。2010 年 6 月には Helios という名前のリリースが Eclipse Foundation によって公開されましたが、このリリースには 39 のプロジェクトが含まれ、40 以上の会社から 490 人のコミッターが同じアーキテクチャ基盤の上にプログラムを作成しました。この Eclipse アーキテクチャは初期バージョンにおいてどのようなものだったのでしょうか？どのように進化してきたのでしょうか？アプリケーションのアーキテクチャがどのようにしてコミュニティの管理と成長を助けてきたのでしょうか？まずはその起源を見ましょう。</description>
    </item>
    <item>
      <title>7. 舞台の模索 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/creating_a_standard/finding_avenue/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/creating_a_standard/finding_avenue/</guid>
      <description>1995 年に Mocha プロジェクトが始まったときから、異なるウェブブラウザの間でウェブページの相互運用性を保証するために JavaScript の規格がいずれ必要になることは明らかだった。これは Netscape と Sun による JavaScript の発表 [Netscape and Sun 1995] でも公式に言及されている: Netscape と Sun は、W3 Consortium (W3C) と Internet Engineering Task Force (IETF) にインターネット用のオープンなスクリプト言語規格として JavaScript を提案することを計画しております。 しかし W3C と IETF はどちらもベンダー非依存の JavaScript 仕様を作成するのに適した場所ではなかった。IETF はインターネット用のプロトコルとデータフォーマットを主な対象としていており、プログラミング言語は扱わない。また W3C は新しい組織で、技術的指導者層が命令的プログラミング言語をウェブの技術スイートに追加することに興味を持っていなかった。Berners-Lee の協力者である Robert Cailliau はインタビュー [Wikinews 2007] で次のように述懐している:</description>
    </item>
    <item>
      <title>Graphite - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/graphite/</link>
      <pubDate>Sat, 11 May 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/graphite/</guid>
      <description>Graphite1 が行う処理は二つだけで、ごく単純です: 時間とともに変化する値を保存し、それをグラフにします。この処理を行うためのソフトウェアはこれまでにいくつも作成されてきましたが、その中でも Graphite が特別なのは、この処理をネットワークサービスとして使うことができ、しかもそれが簡単かつスケーラブルな点です。Graphite にデータを与えるのに使われるプロトコルは単純であり、数分もあれば自分で処理を書くことができるでしょう (実際に書く必要はありませんが、それぐらい単純だということです)。グラフのレンダリングとデータポイントの取得は URL のフェッチと同じぐらい簡単であり、Graphite を他のソフトウェアと組み合わせて、Graphite の上にパワフルなアプリケーションを構築するのも簡単です。よくある Graphite の使用例の一つは、ウェブから利用できるモニタリングと解析のためのダッシュボードです。Graphite は大量の顧客を抱える E コマース環境で誕生しており、設計にはこのことが表れています。つまり、スケーラビリティとリアルタイムアクセスが Graphite における重要な目標となっています。</description>
    </item>
    <item>
      <title>8. 第 1 回 TC39 会合 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/creating_a_standard/the_first_tc39_meeting/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/creating_a_standard/the_first_tc39_meeting/</guid>
      <description>TC39 の第 1 回会合 (組織会合) は 1996 年 11 月 21–22 日にカリフォルニア州マウンテンビューの Netscape オフィスで開かれた。議事録 [TC39 1996] には 30 人の参加者が記録されている (図 11)。会合は Ecma を代表する Jan van den Beld と Netscape コアテクノロジ部門のバイスプレジデント David Stryker からの歓迎挨拶から始まった。Stryker は、委員会が現在使われている実装からの乖離が最小限の仕様を作成し、それ以上の言語拡張は将来に回すことを望むという意見を表明した。 仮議長 Mr. J. van den Beld 書記 Mr. J. van den Beld (SG ECMA) 参加者 Mr.&amp;nbsp;Cargill (Netscape), Ms.&amp;nbsp;Converse (Netscape), Mr.&amp;nbsp;Eich (Netscape), Mr.&amp;nbsp;Fisher (NIST), Mr.&amp;nbsp;Gardner (Borland), Mr.&amp;nbsp;Krull (Borland), Mr.&amp;nbsp;Ksar (HP), Mr.&amp;nbsp;Lenkov (HP), Mr.&amp;nbsp;Lie (W3C), Mr.&amp;nbsp;Luu (Mainsoft), Mr.&amp;nbsp;Mathis (Pithecanthropus, JTC1/SC22), Mr.&amp;nbsp;Matzke (Apple), Mr.&amp;nbsp;Murarka (Spyglass), Ms.&amp;nbsp;Nguyen (Netscape), Mr.&amp;nbsp;Noorda (Nombas), Mr.&amp;nbsp;Palay (Silicon Graphics), Mr.&amp;nbsp;Reardon (Microsoft), Mr.&amp;nbsp;Robinson (Sun), Mr.&amp;nbsp;Singer (IBM), Mr.&amp;nbsp;Smilonich (Unysis), Mr.&amp;nbsp;Smith (Digital), Mr.&amp;nbsp;Stryker (Netscape), Ms.&amp;nbsp;Thompson (Unisys), Mr.&amp;nbsp;Urquhart (Sun), Mr.&amp;nbsp;Veale (Borland), Mr.&amp;nbsp;Welland (Microsoft), Mr.&amp;nbsp;White (AAC Group, Microsoft), Mr.&amp;nbsp;Willingmyre (GTW Associates, Microsoft), Mr.&amp;nbsp;Wiltamuth (Microsoft) 欠席者 Mr. Huffadine (Callscan) 図 11. 第&amp;nbsp;1 回 TC39 会合の参加者 ── 会合議事録 [TC39 1996] より。 Microsoft の Internet Explorer 開発チームのリーダー Thomas Reardon から、「二度手間を避ける」ために、この委員会では HTML オブジェクトモデルに対する組み込みライブラリに関しては議論しないようにして、この部分は W3C に回すべきだという提言があり、委員会はこの提言を受理した。これは初期の TC39 が成功する上で非常に重要だった。Netscape と Microsoft のコア言語機能は非常に似ていたのに対して、HTML の API は大きく異なっていたためである。TC39 がプラットフォームやホストから独立した規格だけを策定することを決定した判断は、現在まで続く TC39 の中心的な運営指針の一つとなった。Reardon は JScript を完全な Netscape 互換にするまでに Microsoft が経験した苦労を語り、言語仕様の定式化の必要性を強調した。しかし彼は、作成される仕様は競争し合う実装が価値を加えられるだけの余白を持つべきだとも主張した。</description>
    </item>
    <item>
      <title>The Hadoop Distributed File System (HDFS) - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/hdfs/</link>
      <pubDate>Mon, 13 May 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/hdfs/</guid>
      <description>Hadoop 分散ファイルシステム (Hadoop Distributed File System, HDFS) は非常に大規模なデータを高い信頼性で保存し、そのデータセットをユーザーアプリケーションに広帯域でストリームできるように設計されています。数千台のサーバーが存在する大きなクラスターであっても、ダイレクトアタッチストレージの管理とユーザーアプリケーションのタスクの実行を同時に行うことが可能です。ストレージと計算を多数のサーバーに分散させることで、リソースを必要に応じて追加しながらもサイズに関わらず無駄なく使うことができます。この章では HDFS のアーキテクチャを説明し、さらに Yahoo! において HDFS を使って 40 ペタバイトのエンタープライズデータを管理した実例についても紹介します。</description>
    </item>
    <item>
      <title>9. 仕様の作成 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/creating_a_standard/crafting_the_specification/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/creating_a_standard/crafting_the_specification/</guid>
      <description>Michael Gardner と Randy Solton は 11 月の会合が終わった後すぐに仕様の第 1 ドラフトに取り掛かり、それから六週間で驚くべき進捗を生んだ。Gardner と Solton の他に、第 1 ドラフトは技術的貢献者として Brendan Eich (Netscape), C. Rand McKinney (Netscape), Donna Converse (Netscape), Shon Katzenberger (Microsoft), Robert Welland (Microsoft) を挙げている。 Robert Welland はレドモンド1に戻り、自身が書いた JScript 0.1 仕様を Shon Katzenberger に渡して JavaScript の意味論を記述する作業を進めるよう伝えた [Welland et al. 2018, +12:02]。数学の Ph. D. を持つ Katzenberger は形式的な記法の扱いに慣れており、疑似コード (補遺 Q) という概念を使って上手く JavaScript の意味論を記述した。完成した文書は相互運用性を十分保証できると彼が思えるだけの詳細さを持っていた。Katzenberger は JavaScript 規格の作成における Microsoft の主任技術貢献者となる。彼は実際の実装を実行して仕様と合っているかどうかを確認し、Welland と Smith の徹夜仕事が見つけていなかった詳細を疑似アルゴリズムに追加していくことで仕様を改善した。彼は改訂された新しい仕様を Borland の編集者に渡し、彼らが公式のドラフトを完成させた。Katzenberger は 2018 年のインタビュー [Welland et al. 2018, +21:16] で、編集上の変更が意図せずアルゴリズムを壊すことがあって感心しなかったと語っている。編集者を Guy Steele が務めることになったとき Katzenberger は非常に喜んだ。</description>
    </item>
    <item>
      <title>gokuro デモページ</title>
      <link>https://inzkyk.xyz/software/gokuro/demo/</link>
      <pubDate>Wed, 01 Jul 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/gokuro/demo/</guid>
      <description>gokuro の解説はこちら。C, Go, Node.js の実装が GitHub レポジトリにあります。 入力 これは gokuro 言語のデモページです。ここにある文字列の処理結果が「出力」の欄に表示されます。 gokuro 言語では次のようにマクロを定義します: #+MACRO: language_name gokuro マクロは次のように呼び出します: hello &amp;lt;&amp;lt;&amp;lt;language_name&amp;gt;&amp;gt;&amp;gt;! マクロの呼び出しは本体で置き換わります。 マクロでは引数が使えます。マクロの本体に $1, $2, ... $9 が含まれると、その部分は対応する引数で置き換わります。つまり $1 は一番目の引数、$2 は二番目の引数などとなります。マクロの呼び出しへ引数を渡すには &amp;lt;&amp;lt;&amp;lt;NAME(arg1,arg2,...)&amp;gt;&amp;gt;&amp;gt; とします: #+MACRO: greeting hello $1! &amp;lt;&amp;lt;&amp;lt;greeting(gokuro)&amp;gt;&amp;gt;&amp;gt; $0 は引数として渡される文字列全体で置き換わります: #+MACRO: explain Arguments are $0. &amp;lt;&amp;lt;&amp;lt;explain(x,y,z)&amp;gt;&amp;gt;&amp;gt; &#34;#+MACRO: NAME BODY&#34; という形の行が定義するのは &#34;グローバルな&#34; マクロであり、それ以降の文書内のどこからでも利用可能になります。 これに対して &#34;#+MACRO_LOCAL: NAME BODY&#34; という形の文は &#34;ローカルな&#34; マクロを定義します。ローカルなマクロは次の行でのみ有効になります: #+MACRO: greeting &amp;lt;&amp;lt;&amp;lt;LEFT&amp;gt;&amp;gt;&amp;gt;hello gokuro!&amp;lt;&amp;lt;&amp;lt;RIGHT&amp;gt;&amp;gt;&amp;gt; #+MACRO_LOCAL: LEFT LLL #+MACRO_LOCAL: RIGHT RRR &amp;lt;&amp;lt;&amp;lt;greeting&amp;gt;&amp;gt;&amp;gt; #+MACRO_LOCAL: LEFT -&gt; &amp;lt;&amp;lt;&amp;lt;greeting&amp;gt;&amp;gt;&amp;gt; &amp;lt;&amp;lt;&amp;lt;greeting&amp;gt;&amp;gt;&amp;gt; 以上が gokuro の持つ特別な構文の全てです。 gokuro の実行は高速です。ここにテキストを入力するとすぐに出力が更新されます。 出力</description>
    </item>
    <item>
      <title>継続的インテグレーション - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/ci/</link>
      <pubDate>Sat, 25 May 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/ci/</guid>
      <description>継続的インテグレーション (continuous integration, CI) システムとは、ソフトウェアのビルドとテストを定期的に自動で行うシステムのことです。CI システムの一番のメリットはビルドとテストの間にある長い時間を無くせることですが、それだけではなく面倒なタスクを単純化および自動化できるというメリットもあります。例えばクロスプラットフォームのテスト、低速なテスト、大量のデータが必要なテスト、構成が難しいテスト、レガシープラットフォームにおける正確なパフォーマンスの検証、稀にしか落ちないテストの検出、最新のリリースの定期的な生成などがそうです。さらに継続的インテグレーションを実装する上でビルドとテストの自動化が不可欠なことから、CI は継続的デプロイフレームワークに向けた最初の一歩となります。ここで継続的デプロイ (continuous deployment) とは、テストが済んだソフトウェアのアップデートを素早く本番システムにデプロイする仕組みのことです。</description>
    </item>
    <item>
      <title>再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/</link>
      <pubDate>Mon, 07 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/</guid>
      <description>孫子曰わく、およそ衆を治むること寡を治むるがごとくなるは、分数これなり。 ――孫武, 『孫氏』 (紀元前 400 年ごろ) 人生はこまごましたことで削られていく... 単純に、単純に。 ――Henry David Thoreau, Walden (1854) Voom が何かなんて聞かないでくれ、分かりっこないんだから。 でも待った、雪を掃除することは知ってるぞ！ ――Dr. Seuss [Theodor Seuss Geisel], The Cat in the Hat Comes Back (1958) 難しい仕事を先にやれ。簡単な仕事は放っておいても消えていく。 ――Dale Carnegie 帰着 帰着 (reduction) はアルゴリズムを設計するときに最もよく使われるテクニックです。問題 X を問題 Y に帰着させると言った場合、それは Y を解くアルゴリズムをブラックボックス (サブルーチン) として使いながら X を解くことを意味します。帰着を考えるときに重要なのが、帰着の結果として出来上がる X を解くアルゴリズムの正しさを、ブラックボックスがどう問題 Y を解くかに依存させてはいけない点です。仮定してよいのは、ブラックボックスが Y を正しく解くということだけです。中で起こっていることは私たちには関係なく、誰か別の人の問題です。ブラックボックスが文字通り魔法によって動くと考えるとよいでしょう。</description>
    </item>
    <item>
      <title>1. Blockcode: ビジュアルプログラミングツールキット - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/blockcode/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/blockcode/</guid>
      <description>ブロックベースのプログラミング言語では、プログラムの構成要素を表すブロック同士をマウスのドラッグで接続することでプログラムが作成される。単語や記号をタイプする伝統的なプログラミング言語とブロックベースのプログラミング言語は大きく異なる。 通常のプログラミング言語は打ち間違いに全く寛容でない。これが理由でプログラミングの学習が難しくなっている可能性がある。多くのプログラミング言語は大文字と小文字を区別し、奇妙な構文を持ち、セミコロンを間違った位置に配置しただけで ── もっと厄介なのは、セミコロンを一つ忘れただけで ── 実行できなくなる。さらに、多くのプログラミング言語は英語をベースに作成されており、その構文はローカライズできない。</description>
    </item>
    <item>
      <title>10. 規格の命名 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/creating_a_standard/naming_the_standard/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/creating_a_standard/naming_the_standard/</guid>
      <description>標準化プロセスが開始されたときから、言語の名前が問題になることは理解されていた。Netscape が最初に付けた「LiveScript」という名前は Sun との戦略的連携の一環として「JavaScript」に変更された。当時は Sun が「JavaScript」を商標登録し、その商標を Netscape にライセンスするという状況である。Sun は Netscape が作成するスクリプト言語の標準化活動に協力的であったものの、Java に関連する商標の保護に積極的だった。そのため Sun が「JavaScript」という商標の管理を標準化組織に譲渡することはないだろうと思われていた。</description>
    </item>
    <item>
      <title>最小限の機能を持ったマークアップ言語 gokuro</title>
      <link>https://inzkyk.xyz/software/gokuro/</link>
      <pubDate>Wed, 01 Jul 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/gokuro/</guid>
      <description>gokuro はこのサイト (https://inzkyk.xyz/) のために作った簡単なマークアップ言語です。このサイトおよび BOOTH にある PDF は全て gokuro を使って書かれています。仕様が固まったので公開します。 $ cat greeting.org #+MACRO: greeting hello $1! &amp;lt;&amp;lt;&amp;lt;greeting(gokuro)&amp;gt;&amp;gt;&amp;gt; $ gokuro &amp;lt; greeting.org hello gokuro! すぐに試したい方のためにデモページがあります。GitHub リポジトリには C, Go, Node.js の実装があります。このページでは gokuro の仕様や設計を説明します。 2024/7/18 追記: 現在 gokuro は使われておらず、代わりに後継の gokurai が使われています。gokuro を使用した最後の翻訳は『JavaScript: 最初の 20 年』です。 gokuro の特徴 機能が最小限 gokuro が持つ特別な構文はマクロの定義と呼び出しだけで、非常に簡単です。</description>
    </item>
    <item>
      <title>Jitsi - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/jitsi/</link>
      <pubDate>Thu, 30 May 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/jitsi/</guid>
      <description>Jitsi はビデオ通話、ボイス通話、デスクトップの共有、ファイルやメッセージの交換を行うためのアプリケーションです。Jitsi にとってこういった機能よりも重要なのは、様々なプロトコルが利用できる点です。利用可能なプロトコルは XMPP (Extensible Messaging and Presence Protocol) や SIP (Session Initiation Protocol) といった標準化されているものから、Yahoo! Messenger や Windows Live Messenger (MSN) といったプロプライエタリなものまであります。Jitsi は Microsoft Windows、Apple Mac OS X、Linux、FreeBSD で動作します。ほとんどが Java で書かれていますが、一部にはネイティブのコードも含まれます。この章では Jitsi の OSGi を使ったアーキテクチャ、プロトコルの実装・管理方法を説明し、開発を通じて私たちが学んだことを振り返ります1。</description>
    </item>
    <item>
      <title>11. ISO ファストトラック - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/creating_a_standard/iso_fast_track/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/creating_a_standard/iso_fast_track/</guid>
      <description>初期の JavaScript 標準化における最後のステップは、Ecma で作成された仕様を国際標準化機構 (ISO) に提出して ISO 規格として承認を受けることだった。ECMA-262 第 1 版は 1997 年 9 月に ISO/IEC のファストトラック (迅速承認) プロセスへ提出された。その後 Guy Steele はプロジェクトの編集者を退任し、IBM の Mike Cowlishaw が役職を受け継いだ。 ISO/IEC で行われた投票では、デンマーク、フランス、日本、オランダ、米国の国家標準化団体から 27 ページに渡るコメントが出された [TC39 1998e]。この文書には TC39 からの誤記の指摘 [TC39 1998b] も含まれている。コメントの多くは ECMA-262 を急いで作成する中で見過ごされた細かな編集上の問題を指摘するものだったが、Date オブジェクトの 2000 年への遷移のサポートや Unicode の言語への統合など、技術上の重要な問題についてもいくつか報告があった。</description>
    </item>
    <item>
      <title>週末レイトレーシング (翻訳)</title>
      <link>https://inzkyk.xyz/ray_tracing_in_one_weekend/</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ray_tracing_in_one_weekend/</guid>
      <description>翻訳について これは Peter Shirley 著 Ray Tracing in One Weekend シリーズの翻訳です。英語版は CC0 ライセンスで公開されています。 PDF 版について この翻訳の PDF 版を BOOTH で販売しています。学生版は無料です。 謝辞 英語版の著者 Peter Shirley 氏、そしてウェブ版のコントリビューターに感謝します。 ボリュームレンダリングの節にある訳注の誤りを指摘して頂いた Shota Kawajiri 氏 (https://github.com/estshorter) に感謝します。</description>
    </item>
    <item>
      <title>LLVM - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/llvm/</link>
      <pubDate>Mon, 03 Jun 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/llvm/</guid>
      <description>この章では LLVM1 を形作った設計上の判断について議論します。LLVM は各要素が密接な結び付きを持つ低レベルツールチェイン (アセンブラ、コンパイラ、デバッガなど) の包括的プロジェクトであり、Unix システムでよく使われている既存のツールと互換性を保つように設計されています。“LLVM”という名前はかつては頭字語でしたが、現在ではプロジェクト全体を指すブランド名となっています。LLVM はユニークな機能を持ち、素晴らしいツールが揃っていることで知られています2が、LLVM と他のコンパイラの一番重要な違いはその内部アーキテクチャです。</description>
    </item>
    <item>
      <title>12. ECMAScript 3 の定義 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/creating_a_standard/defining_ecmascript_3/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/creating_a_standard/defining_ecmascript_3/</guid>
      <description>TC39 の初回会合では JavaScript 1.0 および JavaScript 1.1 に対する様々な言語拡張が提案され、一部は言語仕様の第 1 ドラフトに取り込まれた。しかし TC39 の技術的ワーキンググループは基礎的な言語の仕様が完成するまで新しい機能を一切考慮しないことで合意した。第 1 版の作成のほぼ全体を通じて、追加の可能性がある言語拡張は仕様ドラフトの補遺に追いやられた [TC39 1997a, Appendix B]。 1997 年 7 月の TC39 会合 [TC39 1997g] までの間に仕様の第 1 版は完成に近づいていたので、この会合では仕様の次の版で取り入れるべき新機能が主に議論された。Netscape は JavaScript 1.2 の機能を実装する SpiderMonkey エンジンを搭載した Netscape 4.0 を出荷することで既に方向を示していた。Scott Wiltamuth は Microsoft が作成した「ECMAScript 2.0」の初期提案 [Microsoft 1997] を示した。この提案には switch 文、do-while 文、ラベル付き文、ラベルへの break/continue、=== 演算子、!== 演算子、そして引数オブジェクトの caller プロパティが含まれる。それとは別に、Microsoft の Andrew Clinick は条件付きコンパイルのサポートの追加を提案した [Clinick 1997]。「バージョン 2」のスタート地点は 10 月に Microsoft が Internet Explorer 4.0 のコンポーネントとして JScript 3.0 を出荷したときに固まった。 1997 年末の時点で Netscape [1997c] と Microsoft [2009b] のブラウザが実装していた ECMAScript 第 1 版に対する主な言語拡張を図 17 に示す。</description>
    </item>
    <item>
      <title>第 2 部 規格の作成 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/creating_a_standard/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/creating_a_standard/</guid>
      <description></description>
    </item>
    <item>
      <title>Mercurial - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/mercurial/</link>
      <pubDate>Fri, 07 Jun 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/mercurial/</guid>
      <description>Mercurial はモダンな分散型バージョン管理システム (VCS) であり、多くの部分が Python で、一部が高速化のために C で書かれています。この章では Mercurial のアルゴリズムとデータ構造を設計するうえで生じた判断を議論します。まずはバージョン管理システムの簡単な歴史を見ていきながら、これからの説明に必要なコンテキストを説明しましょう。 バージョン管理の簡単な歴史 この章では主に Mercurial のソフトウェアアーキテクチャについて説明しますが、登場する概念の多くは他のバージョン管理システムでも見られるものです。そこで Mercurial について実りの多い議論を行うために、まずは異なるバージョン管理システムで見られる概念や操作に名前を付けるところから始めます。また広い視野を持って分野を見渡せるように、VSC の歴史も簡単に説明します。</description>
    </item>
    <item>
      <title>13. 余談: JavaScript に Java は必要ない - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/interlude_javascript_doesnt_need_java/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/interlude_javascript_doesnt_need_java/</guid>
      <description>元々 JavaScript は Java の弟分のスクリプト言語とみなされ、高度なプログラミングタスクは全て Java で行われることになっていた。しかし JavaScript の経験を積むにつれ、ウェブ開発者たちは自身が本当に必要とするのは JavaScript であることに気が付き始めた。 13.1 エバンジェリスト JavaScript の利用が広まるにつれ、JavaScript の教育者とエバンジェリスト1が現れた。最も大きな影響力を持っていた人物の一人が Douglas Crockford である。「JavaScript: 世界で最も誤解されたプログラミング言語」という短いオンラインエッセイ [Crockford 2001a] に始まり、彼はソフトウェア開発コミュニティが持つ JavaScript へのイメージを変えるというタスクに取り組んだ。別のエッセイで Crockford [2001e] は次のように説明している:</description>
    </item>
    <item>
      <title>NoSQL エコシステム - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/nosql/</link>
      <pubDate>Sun, 28 Jul 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/nosql/</guid>
      <description>この本に出てくる他の多くのプロジェクトとは異なり、NoSQL は一つのツールの名前ではありません。NoSQL はエコシステムであり、互いに補い合いながらも競い合ういくつかのツールからなります。NoSQL と名の付くツールは SQL を使ったリレーショナルデータベースシステムの代替を提供します。NoSQL を理解するには、利用可能なツールを見渡し、それぞれのツールの設計がどのようにデータの保存という機能を捉えているかを理解する必要があります。</description>
    </item>
    <item>
      <title>14. 成功への不満 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/failed_reformations/dissatisfaction_with_success/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/failed_reformations/dissatisfaction_with_success/</guid>
      <description>1990 年代の終わりが近づくにつれ、インターネット (特にワールドワイドウェブ) が世界に驚異的な影響をもたらしていることは明白になった [Miniwatts Marketing Group 2019]。ウェブの高速な成長は Netscape や Microsoft などのブラウザ開発者によるブラウザ技術のインクリメンタルな功利的改善によって可能になってきた。ウェブが成功したという事実と進行中の進化を調整する必要性から、Ecma TC39 や W3C ワーキンググループといった標準化団体が生まれた。そういった団体の参加者の一部はブラウザ開発に直接は関与しない内容領域専門家であり、彼らが興味を持っていたのは将来のウェブを理想的なものにすることだった。彼らの視点から見れば、功利的に開発された既存のウェブ技術は将来への障害だった。</description>
    </item>
    <item>
      <title>Python のパッケージング - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/python_packaging/</link>
      <pubDate>Sat, 17 Aug 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/python_packaging/</guid>
      <description>はじめに アプリケーションのインストール方法には二つの流儀があります。一つ目の流儀は Windows と Mac OS X で一般的なもので、アプリケーションは必要なものを全て含むべきであり、インストールするときには何にも依存してはいけないという考え方です。この考え方ではアプリケーションの管理が単純になります: アプリケーションはスタンドアローンの“ツール”であり、インストールおよびアンインストールで OS の他の部分がめちゃくちゃになることもありません。もしアプリケーションが一般的でないライブラリを必要とするなら、そのライブラリはアプリケーションのディストリビューションに含まれます。</description>
    </item>
    <item>
      <title>15. ES4 テイク 1 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/failed_reformations/es4_take1/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/failed_reformations/es4_take1/</guid>
      <description>TC39 では最初の会合 ── Borland International [1996] がクラスを定義する機能の追加を提案した会合 ── から、大規模なプログラムの複雑性を管理するのに役立つ機能を JavaScript に追加することへの関心は存在した。Netscape の JavaScript 1.2 は暗号学的署名付きスクリプトと import と export の宣言を通じたそれらの統合をサポートした [Netscape 1997a]。また Microsoft の JScript 3 は条件付きコンパイルの機能を持っていた [Clinick 1997]。1998 年 2 月バージョンの ECMAScript 機能リスト [TC39 1998c] は「パッケージの概念」を V2 で追加される可能性がある要素として挙げている。こういった大規模プログラミング用の機能は比較的早期に ES3 の機能セットから取り除かれたものの、TC39 内での取り組みは続いた。</description>
    </item>
    <item>
      <title>Riak と Erlang/OTP - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/riak/</link>
      <pubDate>Tue, 20 Aug 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/riak/</guid>
      <description>Riak は分散型で障害体制を備えたオープンソースのデータベースであり、Erlang/OTP を使った大規模システム構築の好例です。大規模でスケーラブルな分散システムに対する Erlang のサポートのおかげで、Riak は容量とスループットの両方に対する線形スケーラビリティや高可用性といったデータベースではあまり見られない特徴を持っています。 Erlang/OTP ではノード間通信、メッセージキュー、障害検出機構、クライアント-サーバーの抽象化といったものが最初から利用可能なので、Riak のようなシステムを開発するのには理想的なプラットフォームとなっています。その上、Erlang において頻繁に使われるパターンは OTP ビヘイビアと呼ばれるライブラリモジュールで実装されています。OTP ビヘイビアは並列処理とエラー対応のための汎用コードフレームワークであり、並列プログラミングを単純化し、陥りがちな落とし穴から開発者を守ります。ビヘイビアはスーパーバイザ (supervisor) によって監視され、監視ツリー (supervision tree) にまとめられます (スーパーバイザ自身もビヘイビアです)。監視ツリーはパッケージ化されてアプリケーションとなり、Erlang プログラムの構成単位のとなります。</description>
    </item>
    <item>
      <title>16. その他の袋小路 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/failed_reformations/other_dead_ends/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/failed_reformations/other_dead_ends/</guid>
      <description>1990 年代の中盤から後半にかけてソフトウェアコンポーネントという概念に大きな関心が集まり、ソフトウェアコンポーネントモデルがいくつか提案、実装された。例えば Object Management Group (OMG) の CORBA, Microsoft の COM, Sun の JavaBeans がある。一般的に言うとソフトウェアコンポーネントモデルはモジュール化スキームであり、オブジェクトベースのソフトウェアモジュールを記述、発見、利用する手段を提供する。1997 年 7 月の TC39 会合 [1997g] では、Oracle の代表者 Jim Tressa が OMG によるコンポーネントスクリプト言語の RFP (request for proposal) プレゼンテーションを行った。その会合では IBM, Netscape, Oracle などが ECMAScript ベースの提案に応じることに興味を持ったと報告されているものの、最終的に OMG が作成した仕様は ECMAScript ベースではなかった。</description>
    </item>
    <item>
      <title>Selenium WebDriver - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/selenium/</link>
      <pubDate>Thu, 29 Aug 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/selenium/</guid>
      <description>Selenium はブラウザ自動化ツールであり、ウェブアプリケーションの end-to-end テストによく使われます。ブラウザ自動化ツールはその名の通りのことを行います: ブラウザの制御を自動化し、反復的なタスクを自動的に行います。単純な問題に見えるかもしれませんが、この章でこれから見る通り、裏で様々なことをしなければ上手く動きません。 Selenium のアーキテクチャを説明する前に、プロジェクトの各部分がどのように組み合わさっているかを見た方が分かりやすいでしょう。高いレベルで見ると、Selenium は三つツールの集合体です。一つ目のツールは Selenium IDE で、これはユーザーがテストを録画・再生するための Firefox 用の拡張機能です。録画・再生という考え方が使えないことも多いので、そのような場合には二つ目のツール Selenium WebDriver がより細かな制御や通常のソフトウェア開発への統合のための様々な言語用の API を提供します。最後のツール Selenium Grid を使うと、Selenium API でグリッドコンピューター上で複数のブラウザインスタンスを制御し、テストを並列に実行できます。プロジェクト内ではこの三つのツールはそれぞれ IDE, WebDriver, Grid と呼ばれています。この章が扱うのは Selenium WebDriver のアーキテクチャです。</description>
    </item>
    <item>
      <title>17. Flash と ActionScript - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/failed_reformations/flash_and_actionscript/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/failed_reformations/flash_and_actionscript/</guid>
      <description>Macromedia (後に Adobe が買収) の Flash語 はリッチインターネットアプリケーションを構築するための言語の選択肢として 2000 年代初頭には Java と JavaScript に並ぶ人気を持っていた。元々 Flash はタイムラインベースのアニメーションソフトであり、その基礎は Jonathan Gay [2006] によって開発された。Flash はアニメーションベースのアプリケーションをバイナリファイルにコンパイルするビジュアルオーサリングツールとして構成され、そのバイナリファイルは Flash Player によって解釈される。Flash Player はブラウザのプラグイン拡張 API を使ってブラウザに組み込まれるプレイヤーコンポーネントである。最も広く普及した時期には、事実上全てのブラウザユーザーが Flash Player をインストールしていた [Adobe 2013]。</description>
    </item>
    <item>
      <title>Sendmail - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/sendmail/</link>
      <pubDate>Wed, 11 Sep 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/sendmail/</guid>
      <description>電子メールと聞いたときに多くの人が思い浮かべるのは、メールを読み書きするときにユーザーとの対話を行うプログラムです。これはメールクライアント、正確には Mail User Agent (MUA) と呼ばれます。しかし電子メールにはもう一つ重要な部分があります。それはメールを送信者から受信者へ実際に転送するソフトウェアであり、Mail Transfer Agent (MTA) と呼ばれます。インターネットを使う最初の MTA にして現在最もよく使われている MTA でもあるのが sendmail です。 sendmail が最初に作られたときインターネットは正式には存在していませんでしたが、インターネットはその後とてつもない成功を収めました。1981 年にはインターネットは数百のホストをつないだ学術的な実験に過ぎず、それ以上のものになるのかは全く分からない状況でした。しかし 2011 年 1 月の時点でインターネットのホストは 8 億を超えます1。このような状況の中で、sendmail はインターネット上で最もよく使われる SMTP 実装の地位を保っています。</description>
    </item>
    <item>
      <title>18. ES4 テイク 2 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/failed_reformations/es4_take2/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/failed_reformations/es4_take2/</guid>
      <description>ES41 の策定作業は 2003 年に停止したものの、ウェブにおける JavaScript の利用は広がり続けた。それから一年もしないうちに、TG1 のメンバーは彼らが「ES4」と呼ぶ新しいバージョンの ECMAScript の設計について再び話し始めた。 18.1 TC39-TG1 の再始動 Macromedia は 2003 年 11 月に Ecma の会員となり、Jeff Dyer が TC39 における Macromedia の代表者の一人となった。ES4 仕様を作成する TG1 の一度目の試みが ActionScript 3 に大きな影響を与えたことを考えればこれは明らかな動きと言える。ActionScript の設計が将来の ECMAScript 仕様の策定作業と足並みを揃えること、そして ActionScript の要件と前例を TG1 に考慮させることが Macromedia にとって重要だった。</description>
    </item>
    <item>
      <title>第 3 部 失敗した改革 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/failed_reformations/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/failed_reformations/</guid>
      <description></description>
    </item>
    <item>
      <title>SnowFlock - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/snowflock/</link>
      <pubDate>Wed, 11 Sep 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/snowflock/</guid>
      <description>クラウドコンピューティングは魅力的な価格で計算プラットフォームを提供します。ユーザーは物理サーバーの購入と設定にかかる時間・金銭的な初期投資なしに、何回かクリックするだけでクラウド上にある「サーバー」を一時間あたり 10 セントという価格で借りることができます。クラウドのプロバイダがコストを低く保てている鍵は物理的なコンピューターではなく仮想マシン (virtual machine, VM) を使っていることであり、ここでは仮想マシンモニタ (virtual machine monitor, VMM) と呼ばれる物理マシンのエミュレートを行う仮想化ソフトウェアが重要な役割を果たします。ユーザーは「ゲスト」VM に安全に隔離され、「ホスト」物理マシンを他のユーザーと共有していることを忘れて自分の仕事に集中できます。</description>
    </item>
    <item>
      <title>19. 余談: JavaScript を真剣に受け止める - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/interlude_taking_javascript_seriously/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/interlude_taking_javascript_seriously/</guid>
      <description>TC39 のメンバーは 1990 年代の後半から JavaScript を職業的プログラマのための真剣な言語として再設計する試みを始めた。ブラウザおよび関連するプラットフォームの開発者も 2000 年代の後半には JavaScript が彼らのプラットフォームの一部であり、真剣なエンジニアリングが必要なことを認識した。 19.1 JavaScript の性能革命 1995 年 5 月に Brendan Eich が Mocha を作ったとき、性能は懸念でもなければ目標でもなかった。JavaScript で書かれたプログラムがこの世に存在しなかった上に、書かれると予想されたプログラムは効率に優れる他の言語で書かれたオブジェクトを簡単に操作するものだったからである。多少でも複雑なアルゴリズムを JavaScript でコーディングすることは想定されていなかった。初期の JavaScript エンジンは単純なバイトコードインタープリタあるいはパースツリー評価器を使って JavaScript を直接評価し、単純なメモリ管理手法を使っていた。Lisp, Smalltalk, Self といった動的言語向けに 1980 年代から 1990 年代の初頭にかけて開発された手の込んだ高性能実装テクニックは初期の JavaScript エンジンで一切使われていなかった。Netscape/Mozilla の SpiderMonkey と Microsoft の JScript エンジンの基本的なアーキテクチャは 10 年にわたってほぼそのままだった。その間に新しい ES3 レベルの言語機能が追加されセキュリティの問題は解決したものの、この時期の性能向上はムーアの法則 [Moore 1975] に従ってハードウェア性能が向上した結果だと言える。このころブラウザの JavaScript エンジンのメンテナンスはたいてい一人のソフトウェア開発者が片手間に担当する仕事だった。</description>
    </item>
    <item>
      <title>SocialCalc - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/socialcalc/</link>
      <pubDate>Tue, 05 Nov 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/socialcalc/</guid>
      <description>スプレッドシートは 30 年以上の歴史を持ちます。最初のスプレッドシートプログラム VisiCalc は Dan Bricklin によって 1978 年に構想され、1979 年に完成しました。根本的な考え方はとても単純です: 二次元に無限に広がる表があり、各マス (セル) にテキスト・数・式が入るというものです。式では基本的な算術演算やたくさんのビルトイン関数が利用でき、他のセル要素を値として参照できます。 スプレッドシートの考え方は単純ですが、応用は多岐にわたります: 会計、物品管理、リスト管理などはその一例です。その可能性は事実上無限であり、VisiCalc は個人用コンピューターにおける最初の「キラーアプリ」となりました。</description>
    </item>
    <item>
      <title>2. 継続的インテグレーションシステム - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/ci/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/ci/</guid>
      <description>2.1 継続的インテグレーションシステムとは何か？ ソフトウェア開発では、新しい機能やバグフィックスが期待通りに動作し新たなバグを生まないことの検証が求められる。この検証はコードに対するテストを実行することで行われる。開発者自身がローカルでテストを実行して自身の変更がバグを生まないことを検証する場合もあるものの、開発しているソフトウェアが実行される全てのシステムでコードをテストする時間を開発者が持たない可能性がある。さらに、テストが増えればそれだけテストの実行時間も延びるので、ローカルでテストを実行することは現実的でなくなる。この問題に対処するために継続的インテグレーションシステムが作成されてきた。</description>
    </item>
    <item>
      <title>20. ES3.1 (ES5) の策定 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/modernizing_javascript/developing_es3_es5/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/modernizing_javascript/developing_es3_es5/</guid>
      <description>2007 年のほぼ全体を通して、ES42 ワーキンググループは ES3.1 の活動が ES42 を脱線させるための敵対的行為に過ぎず、技術的重要性は何もないと考えていた。しかし Douglas Crockford, Pratap Lakshman, Allen Wirfs-Brock は ES3 仕様に最新の情報を反映させて相互運用性の問題の原因を修正するためのインクリメンタルな改善に取り組んでいた。彼らは初期目標の提示と機能レベルの変更の提案 [Lakshman et al. 2007] を行った後、最初のステップとして当時のブラウザにおける JavaScript の状況、そして Web Reality が ES3 仕様からどの程度離れているかを詳しく調査した。</description>
    </item>
    <item>
      <title>Telepathy - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/telepathy/</link>
      <pubDate>Thu, 07 Nov 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/telepathy/</guid>
      <description>Telepathy1 は音声・動画・テキスト・ファイルなどを転送するためのリアルタイム通信フレームワークです。Telepathy がユニークなのは様々なインスタントメッセージプロトコルを抽象化する点ではなく、サービスとしての通信 (communications as a service) というアイデアを採用する点です。これは印刷がサービスであるのとちょうど同じで、様々な応用を可能にします。Telepathy は D-Bus メッセージングとモジュール化された設計を大いに利用してこれを達成しています。</description>
    </item>
    <item>
      <title>21. Harmony から ECMAScript 2015 まで - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/modernizing_javascript/from_harmony_to_ecmascript_2015/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/modernizing_javascript/from_harmony_to_ecmascript_2015/</guid>
      <description>ES42 の中止により、TC39 は将来の JavaScript が歩む進化的な道を比較的先入観を持たずに計画する機会を 1999 年以来初めて手にした。もはや TC39 はより良い言語を作るために最初から設計をやり直そうとは考えていなかった。TC39 は成功への道を歩み始めており、取り組みが実を結ぶまでにかかった時間はわずか 7 年だった。 21.1 Harmony の始まり TC39 の Harmony プロジェクトは二度の ES4 の取り組みで決定された事項に縛られなかったものの、利用できる部分は利用した。また TC39 は ES5 プロジェクトの中で決定された事項には縛られたものの、ES5 が向かった方向は一般に Harmony が向かうと期待された方向と同じだった。実際 2008 年の後半および 2009 年のほとんどにおいて、TC39 会合の時間の多くは ES5 を完了させる作業に使われた。このため TC39 全体が安心感を持って ES5 仕様をベースラインとした Harmony の取り組みを始めることができた。</description>
    </item>
    <item>
      <title>第 4 部 JavaScript の現代化 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/modernizing_javascript/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/modernizing_javascript/</guid>
      <description></description>
    </item>
    <item>
      <title>Thousand Parsec - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/thousandparsec/</link>
      <pubDate>Tue, 12 Nov 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/thousandparsec/</guid>
      <description>百の世界を支配し、千パーセクにも及ぶ広大な銀河帝国。銀河の他の部分とは違い、そこにいるのは柄の悪い輩ではない。文化的で学術的な伝統を持った知的な人々がそこには暮らしている。偉大な科学技術大学が次々に作られる彼らの輝かしい惑星は、現在の平和と繁栄の象徴である。宇宙域の遥か彼方から宇宙船がやってきては、一流の研究者を遠くから連れてくる。彼らは、衆生が試みた中で最も高い目標を持つプロジェクトに自身の技能を捧げに来たのである。そのプロジェクトとは、全ての言語、文化、法体系をまたいだ銀河全体を結ぶ分散コンピューターネットワークの開発である...。</description>
    </item>
    <item>
      <title>バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/</link>
      <pubDate>Mon, 07 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/</guid>
      <description>しかしもし、その曖昧性が信仰によっても文脈によっても解消されないのなら、私たちは考え付く好きな方法を使って文章に点を打っても構わない。 ――Augustine of Hippo, De doctrina Christiana (397CE), Marcus Dods による翻訳 (1892) 私は夕食をひっくり返して研究室に駆け戻った。すっかり興奮しながら、全てのビーカーの中身と机の上で乾燥している食べ物の味を確かめた。腐食性の液体や毒性の液体が入っていなかったのは幸運だった。 ――Constantin Fahlberg, サッカリンの発見について, Scientific American (1886) 思想家にとって最も難しいのは、答えが見つかるような問題を見つけることだ。</description>
    </item>
    <item>
      <title>22. 結論 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/conclusion/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/conclusion/</guid>
      <description>JavaScript が作成されたときの期待度は低かった。元々はブラウザの中で動作する Java の弟分として作られた言語であり、想定されたユーザーはウェブページ開発の初心者とアルバイトのプログラマだった。しかし JavaScript は対話的なウェブページ用の言語としてすぐに Java を追い越した。JavaScript の最初の 20 年には JavaScript を拡張、改善、再設計、置換しようとして失敗した試みが数多く散乱している。しかしそれでも、20 年が経過するころには JavaScript は世界で最も使われる言語となった ── その用途はウェブページにとどまらない。Node.js をはじめとしたホストを使って作られるサーバーアプリケーションに加えて、JavaScript はデスクトップアプリケーション、モバイルデバイスアプリケーション、フィットネストラッカー、ロボット、そして数えきれない数の組み込みシステムを構築するのに使われている。ジェイムズ・ウェッブ宇宙望遠鏡さえオンボードの制御ソフトウェアの一部として Nombas による ES1 レベルの組み込み JavaScript を使っている [Dashevsky and Balzano 2008]。</description>
    </item>
    <item>
      <title>Violet - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/violet/</link>
      <pubDate>Mon, 18 Nov 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/violet/</guid>
      <description>2002 年、私はオブジェクト指向を使ったデザインとパターンに関する学部生向けの教科書 [Hor05] を執筆しました。多くの本と同様、この本を書いた理由は現在支配的なカリキュラムに不満があったからです。コンピューターサイエンスを学ぶ学生によくあるのは、最初のプログラミングの講義で単一クラスの設計方法を学んだら、その後は上級ソフトウェアエンジニアリングの講義までオブジェクト指向デザインの訓練を受けないという状況です。最初の講義では UML やデザインパターンを数週間でさっと触れるだけであり、学生には何となくの理解しか残りません。私が書いた本は Java プログラミングと基本的なデータ構造 (Java を使った CS1/CS2 講義に相当)の知識を持つ学生に向けた一セメスター分の講義で使えるようになっていて、馴染みある例を使ってオブジェクト指向のデザイン原則やデザインパターンを取り上げます。例えばデザインパターンの Decorator の紹介には Swing の JScrollPane が使われ、よくある Java ストリームを使った例よりも分かりやすくなるよう工夫がしてあります。</description>
    </item>
    <item>
      <title>謝辞 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/acknowledgments/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/acknowledgments/</guid>
      <description>HOPL-IV プログラム委員会のメンバーはシェファーディング、\LaTeX ハッキング、詳細なレビュー、本稿のドラフトに対する有益なフィードバックを通して著者らをサポートした。 JavaScript と ECMAScript の作成に関わった次の仲間たちは本稿で議論された出来事や技術に関する情報を提供した: Douglas Crockford, Jeff Dyer, Richard Gabriel, Bill Gibbons, Gary Grossman, Lars T. Hansen, Dave Herman, Graydon Hoare, Yehuda Katz, Shon Katzenberger, Peter Kukol, Pratap Lakshman, Mark S. Miller, István Sebestyén, MikeShaver, Brian Terlson, Tom Van Cutsem, Herman Venter, Rick Waldron, Robert Welland. 執筆の様々な段階において原稿の一部あるいは全てに対する編集上のフィードバックを提供したベータ版の読者は次の通りである: Jory Burson, Douglas Crockford, Jeff Dyer, Richard Gabriel, Lars T. Hansen, Dave Herman, Pratap Lakshman, Mathias Bynens, Axel Rauschmayer, Jonathan Sampson, Jon Steinhart, Tom Van Cutsem, Herman Venter, Rick Waldron, Rebecca Wirfs-Brock, Joseph Yoder.</description>
    </item>
    <item>
      <title>VisTrails - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/vistrails/</link>
      <pubDate>Wed, 20 Nov 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/vistrails/</guid>
      <description>VisTrails1 はデータの探索と可視化をサポートするオープンソースシステムであり、科学ワークフローシステムと可視化システムが持つ便利な機能を大きく拡張した形で持ちます。Kepler や Taverna といった科学ワークフローシステムと同様、VisTrails を使った計算プロセスの記述が可能であり、このプロセスには既存のアプリケーション、互いに結び付いたリソース、あるいはライブラリを規則に沿って追加できます。AVS や ParaView といった可視化システムと同様、VisTrails では高度な科学情報可視化技術が利用可能であり、ユーザーは自身のデータの異なる表現を探索・比較できます。こういった機能を使えば、データの収集や生成から複雑な解析、そして可視化という科学的発見の重要なステップを全て含んだ複雑なワークフローを作成でき、それが一つのシステムに統合されます。</description>
    </item>
    <item>
      <title>A. 登場人物 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/a_dramatis_persona/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/a_dramatis_persona/</guid>
      <description>「JavaScript: 最初の 20 年 (翻訳)」で言及される人物のまとめです。</description>
    </item>
    <item>
      <title>VTK - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/vtk/</link>
      <pubDate>Mon, 25 Nov 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/vtk/</guid>
      <description>Visualization Tookit (VTK) は広く使われているソフトウェアシステムです。データの処理と可視化が可能であり、科学計算、医療画像解析、計算幾何学、レンダリング、画像処理、インフォマティクスといった分野で利用されています。この章では VTK を概観し、VTK を成功に導いた基本的なデザインパターンなどを説明します。 ソフトウェアシステムを本当に理解するには、そのシステムが解決する問題だけではなく、そのシステムが生まれた文化を理解することが重要です。VTK の場合であれば、このソフトウェアシステムはもともと科学データの 3D 可視化システムとして開発されました。しかし生まれ着いた文化的背景を見ればそこにはたくさんの物語があり、それらは VTK が現在の形に設計、開発された理由を理解する助けとなります。</description>
    </item>
    <item>
      <title>B. 登場団体 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/b_dramatis_corporationes/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/b_dramatis_corporationes/</guid>
      <description>「JavaScript: 最初の 20 年 (翻訳)」で言及される団体のまとめです。</description>
    </item>
    <item>
      <title>補遺 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/</guid>
      <description>※ 諸般の事情により、次の補遺は翻訳されていません。英語版もしくは直接ソースをご覧ください: 補遺 F. 1995 年 12 月 4 日の JavaScript の発表 [Netscape and Sun 1995, 1–2 ページ] 補遺 I. E3 ドラフトのステータスレポートからの抜粋 [Cowlishaw 1999b] 補遺 L. 2007 年 9 月時点で承認されていた ES42 提案 [TC39 ES4 2007e] 補遺 M. ECMAScript Harmony の発表 [Eich 2008b] 補遺 N. 2011 年 5 月時点における Harmony ストローマン提案の状況 [TC39 Harmony 2011c] 補遺 O. 2011 年 5 月のトリアージ後の Harmony 提案 Wiki ページ [TC39 Harmony 2011b] 補遺 P. ポスト ES6 における TC39 プロセスの定義 [Weinstein and Wirfs-Brock 2013]</description>
    </item>
    <item>
      <title>Battle for Wesnoth - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/wesnoth/</link>
      <pubDate>Fri, 29 Nov 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/wesnoth/</guid>
      <description>プログラミングは問題解決の手段だと単純に考えられがちです。開発者は自身が抱える要件の解決法をコードにするのだというこの考え方では、コードの素晴らしさは技術的実装の美しさや効率の良さによって判断されます: この本には優れた例がたくさんあるでしょう。しかし計算という直接的な機能を越えて、コードが人々の暮らしに大きく影響する場合もあります。つまりコードを見た人を、プロジェクトに参加して新しいコンテンツを制作しようという気分にさせることができます。一方で残念ながら、一般の人々がプロジェクトに参加するには大きな障壁が存在します。</description>
    </item>
    <item>
      <title>C. 用語集 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/c_glossary/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/c_glossary/</guid>
      <description>「JavaScript: 最初の 20 年 (翻訳)」で言及される専門用語の解説です。</description>
    </item>
    <item>
      <title>参考文献 - オープンソースアプリケーションのアーキテクチャ (翻訳)</title>
      <link>https://inzkyk.xyz/aosa/bibliography/</link>
      <pubDate>Sat, 23 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/aosa/bibliography/</guid>
      <description>[AF94] Rick Adams and Donnalyn Frey: !%@:: A Directory of Electronic Mail Addressing &amp;amp; Networks. O&#39;Reilly Media, Sebastopol, CA, fourth edition, 1994. [Ald02] Gaudenz Alder: The JGraph Swing Component. PhD thesis, ETH Zurich, 2002. [BCC+05] Louis Bavoil, Steve Callahan, Patricia Crossno, Juliana Freire, Carlos E. Scheidegger, Cláudio T. Silva, and Huy T. Vo: “VisTrails: Enabling Interactive Multiple-View Visualizations”. Proc. IEEE Visualization, pages 135–142, 2005. [Bro10] Frederick P. Brooks, Jr.: The Design of Design: Essays from a Computer Scientist. Pearson Education, 2010. [CDG+06] Fay Chang, Jeffrey Dean, Sanjary Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, and Robert E. Gruber: “BigTable: a Distributed Storage System for Structured Data”. Proc. 7th USENIX Symposium on Operating Systems Design and Implementation (OSDI&#39;06). USENIX Association, 2006. [CIRT00] P. H. Carns, W. B. Ligon III, R. B. Ross, and R. Thakur: “PVFS: A Parallel File System for Linux Clusters”. Proc. 4th Annual Linux Showcase and Conference, pages 317–327, 2000.</description>
    </item>
    <item>
      <title>D. 略語と頭字語 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/d_abbreviations_and_acronyms/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/d_abbreviations_and_acronyms/</guid>
      <description>AJAX Asynchronous JavaScript and XML API Application Program Interface CC Co-Ordinating Committee ── Ecma International の調整委員会 CLR Microsoft .NET の Common Language Runtime コンポーネント CSP Content Security Policy CSS Cascading Style Sheets DHTML Dynamic HTML DOM Document Object Model GA General Assembly ── 全 Ecma メンバーが出席する年二回の会合 GCC GNU C Compiler GWT Google Web Toolkit HTML Hypertext Markup Language IE Microsoft の Internet Explorer ブラウザ IIFE 即時実行関数式 (Immediately Invoked Function Expression) I18N 国際化 (Internationalization, &#34;I&#34; と &#34;n&#34; の間が 18 文字) JIT Just In Time コンパイラ JVM Java Virtual Machine MOP Metaobject Protocol NCSA National Center for Supercomputing Applications OCAP Object Capability OMG Object Management Group POSIX Portable Operating System Interface modeled on UNIX RFP Request For Proposal SES Secure ECMAScript TC Ecma International の Technical Committee (技術委員会) TDZ Temporal Dead Zone TG Ecma International TC 内の Task Group (作業部会) VM Virtual Machine WG ワーキンググループ (Working Group) ── Ecma TC あるいは TG 内のアドホックなグループ</description>
    </item>
    <item>
      <title>E. 年表 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/e_timelines/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/e_timelines/</guid>
      <description>「JavaScript: 最初の 20 年 (翻訳)」で解説される、JavaScript の誕生と進化の過程をまとめた年表です。</description>
    </item>
    <item>
      <title>G. 初回 TC39 会合の検討事項リスト - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/g_issues_list_from_first_tc39_meeting/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/g_issues_list_from_first_tc39_meeting/</guid>
      <description>JavaScript 規格の初版で解決する必要があるとされた問題のリストを次に示す。1996 年 11 月 11–22 日に開催された TC39 組織会合の議事録 [TC39 1996] より。 Unicode サポート (機能Feature) delete の意味論 (意味論Semantics) 添え字アクセスの意味論 (S) 束縛のコンテキスト: 継承プロパティ ── &#34;...&#34; のスコープ ── ホストオブジェクトモデルと言語 (S) ストレージモデルに関する統一された議論が無い (S) argument 配列: 配列の意味論が意味すること (argument がキーワードになる); 再帰関数で重要 現在の引数は非常にコストが高い ── パフォーマンス関連 全てのオブジェクトに対する EVAL は良いアイデアに思えない caller は省略可能であるべき ブロックがスコープを共有する ── プログラムが大規模になったとき問題になる 暗黙のグローバル変数は良くない。ローカル変数とグローバル変数の違いをプログラマに指定させた方が良い ユーザー定義のコンストラクタにおけるオブジェクトプロトタイプ。プロトタイプは何のために存在するのか？ 不明瞭であり、もっと明確な定義が必要。Netscape はバグだと言っている。 ワイド空白文字としての CTL Z のサポート NULL は型なのか、それとも個別のオブジェクト参照なのか Array に対する length = 0 は不当 スロット vs プロパティ 関数内で「this」は未定義なのか、well-defined なのか グローバルオブジェクトは存在するのか メソッド呼び出しにおける「this」 &amp;&amp; 演算子と || 演算子の型と値 「For/in」ループはプロパティを well-defined な順序で列挙する 実行時とコンパイル時 ポインタ: どこで定義される？ バージョン付け Java キーワードを予約する理由は？ 識別子の再定義はエラーか、それとも最後の定義が勝つのか？ new f() に先立つ f.prototype？ new f が許されないコンストラクタに対する文法？ トップレベルの評価順序 &#39;\0&#39; は文字列に現れていいのか？ バイト vs 文字 (一般的な「長さ」の問題)</description>
    </item>
    <item>
      <title>3. 合意によるクラスター構築 - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/cluster/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/cluster/</guid>
      <description>本章では、高信頼の分散計算をサポートするために設計されたネットワークプロトコルの実装を議論する。ネットワークプロトコルの正しい実装は難度が高いことから、バグを最小化する手法、そして残りの少数のバグを検出・修正する手法を見る。高信頼なソフトウェアの作成でも特殊な開発・デバッグ手法が必要となる。 3.1 現実世界の例 本章はプロトコルの実装に焦点を当てる。ただ、読者のモチベーションを上げるための例として最初は単純な銀行口座管理サービスを考えよう。このサービスでは口座番号で特定される各口座が残高を持つ。ユーザーは「引き出し」「振り込み」「残高照会」といった操作のリクエストを通して口座にアクセスする。「振り込み」操作は二つの口座が関わる操作であり、振り込み元口座の残高が少なすぎる場合は実行できない。</description>
    </item>
    <item>
      <title>H. ECMAScript バージョン 2 に向けて最初に提案された新機能リスト - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/h_initial_proposed_new_feature_list/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/h_initial_proposed_new_feature_list/</guid>
      <description>1997 年 10 月に行われた TC39 技術的ワーキンググループの会合で、ECMAScript 仕様の「バージョン 2」で追加される可能性がある新機能候補のリストがまとめられた。この 10 月の会合の議事録は見つかっていない。このリストを更新したものとして 1998 年 2 月 19 日の会合の報告書 [TC39 1998c] に次のリストが記されている。 バージョン 2 に向けて合意された事項 caller (V1 で切られていた) do while ラベルへの break ラベルへの continue switch regexp === 演算子 (厳密な等価性) 条件付きコンパイル リテラル記法 関数クロージャ (式/入れ子) __parent__ と __photo__ママ を露出させる 引数オブジェクト 例外処理 toSource (オブジェクトを永続化する手段が望まれている) Function.prototype.apply instanceof V2 に向けて検討されている他の事項</description>
    </item>
    <item>
      <title>J. 1999 年 1 月におけるモジュール関連の機能に関するコンセンサス - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/j_consensus_on_mudularity_futures/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/j_consensus_on_mudularity_futures/</guid>
      <description>1999 年 1 月 11–12 日の TC39 ワーキンググループ会合では、ECMAScript の将来の版における「大規模プログラミング」のサポートに関する目標と技術的困難について長い議論があった。会合の報告書 [Raggett 1999b] には合意があった次の点が記録されている。 合意があった目標 ロバストなライブラリと大規模プログラミング ライブラリ間、および異なるコード単位間では干渉が起きない それなりの効率 ── 事前コンパイルが可能 既存の ECMAScript およびそのユーザーとの連続性 (既存のコードを壊さない) 対象 ── ナイーブなユーザーと経験を積んだスクリプターに適する (例えば非常に重要なバリデーションパッケージに使える) 言語の拡張性 利便性 クラス</description>
    </item>
    <item>
      <title>動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/</link>
      <pubDate>Sun, 20 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/</guid>
      <description>Potes enim videre in hac margine, qualiter hoc operati fuimus, scilicet quod iunximus primum numerum cum secundo, videlicet 1 cum 2; et secundum cum tercio; et tercium cum quarto; et quartum cum quinto, et sic deinceps.... [これまでの処理をここに示す。最初の数 1 と二番目の数 2 を足し、二番目と三番目を足し、三番目と四番目を足し、四番目と五番目を足し、以下同様に続く...] ――Leonardo Pisano, Liber Abaci (1202) 過去を記憶しないものは過去を繰り返すよう運命付けられている。 ――Jorge Agustín Nicolás Ruiz de Santayana y Borrás, The Life of Reason, Book I: Introduction and Reason in Common Sense (1905) 学習とは何か分かっているか？</description>
    </item>
    <item>
      <title>K. ES4 参照実装の発表 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/k_es4_reference_implementation_announcement/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/k_es4_reference_implementation_announcement/</guid>
      <description>次の発表文は Dave Herman [2007] によって 2007 年 6 月 8 日にブログ Lambda the Ultimate へ投稿された。 ECMAScript 第 4 版の参照実装 ECMAScript 第 4 版 (別名 JavaScript 2) の参照実装の初めての事前リリースが利用可能になった。ECMAScript 仕様と参照実装に関する情報を提供する新しいウェブサイトが作成された。参照実装のソースとバイナリ形式をダウンロードできる。 ここ LtU でも前に議論したように、現在 ECMAScript の参照実装は Standard ML で書かれている。この選択には様々な利点がある。例えば: 仕様をこれまでの疑似コードを使ったものより明確にする 振る舞いを比較できる実行可能なフレームワークを実装者に与える 仕様に含まれるバグを早期に発見する機会を提供する 研究者およびユーザーコミュニティを刺激し、フィードバックを誘発させる 言語の性質 (様々な形の型健全性など) を証明する興味深いプログラム解析の土台となる 言語の興味深い拡張の試験台となる この事前リリースは私たちの最初のマイルストーンに過ぎない。つまり「早く頻繁に」行われるたくさんのリリースの一つ目だということだ。仕様と参照実装はどちらもまだ完成しておらず、この早期の実装には多くのバグが含まれる。興味を持ったなら、ぜひバグデータベースに目を通して未発見のバグを報告してほしい。</description>
    </item>
    <item>
      <title>Q. ECMAScript で使われる疑似コードの進化 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/appendix/q_the_evolution_of_ecmascript_pseudo_code/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/appendix/q_the_evolution_of_ecmascript_pseudo_code/</guid>
      <description>ES1 から始まり、ECMA-262 は番号の付いたステップからなる疑似コードで書かれたアルゴリズムで規定されてきた。例えば条件演算子の意味論は ES1 [Steele 1997] で次のように規定される: 生成規則 ConditionalExpression: LogicalORExpresion ? AssignmentExpression : AssignmentExpresion は次のように評価される: LogicalORExpression を評価する。 GetValue(Result(1)) を呼ぶ。 ToBoolean(Result(2)) を呼ぶ。 もし Result(3) が false なら、ステップ 8 に行く。 一つ目の AssignmentExpression を評価する。 GetValue(Result(5)) を呼ぶ。 Result(6) を返す。 二つ目の AssignmentExpression を評価する。 GetValueResult(8) を呼ぶ。 Result(9) を返す。 ES1–ES3 の疑似コード この形式では疑似コードを説明するヘッダーの後に番号付きのステップが並ぶ。これは機械語スタイルの疑似コードと特徴付けることができ、機械語でのコーディングと同様の利便性の問題を持つ。goto に似た制御スタイルと中間的な結果に対する数値ラベルの利用はコードの理解と保守を困難にする。ES1 では大部分のアルゴリズムが上記の例より短かったので、この形式でも問題は起こらなかった。しかし ES3 では込み入った制御フローを持つ長いアルゴリズムを必要とする複雑なライブラリ関数がいくつか追加されたので、問題が発生した。</description>
    </item>
    <item>
      <title>参考文献 - JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/references/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/references/</guid>
      <description>[Adobe 2007] Adobe. 2007. ActionScript Virtual Machine 2 (AVM2) Overview. Adobe Systems Incorporated., 45 Park Avenue San Jose, CA95110(May). 非アーカイブリンク: http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/actionscript/articles/avm2overview.pdf (リンク切れ; Internet Archive 11 Aug. 2014 23:15:28 から閲覧可能). [Adobe 2013] Adobe. 2013. Flash Player penetration. Web page. 非アーカイブリンク: http://solutionpartners.adobe.com/products/player_census/flashplayer/ (リンク切れ; Internet Archive 15 March 2013 11:45:33 から閲覧可能). このウェブページのオリジナルの日付は不明. データは 2011&amp;nbsp;年のもの. [ADsafe 2007] ADsafe. 2007. Making JavaScript Safe for Advertising. Web site. 非アーカイブリンク: http://adsafe.org/ (Internet Archive 5 Jan. 2009 15:53:30 から閲覧可能, リンクはこのサイトのアーカイブの中で最も古いバージョン. 後の時刻のアーカイブを見ると追加された情報が確認できる.</description>
    </item>
    <item>
      <title>4. Contingent: 完全に動的なビルドシステム - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/contingent/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/contingent/</guid>
      <description>4.1 はじめに ビルドシステムがコンピュータープログラミングの世界で標準的なツールとなって久しい。 代表的なビルドシステムに make がある。後に開発者が ACM ソフトウェアシステム賞を受賞する make は 1976 年に開発された。make では出力ファイルが (一つ以上の) 入力ファイルに依存することを宣言できるだけではなく、その宣言を再帰的に行うことができる。例えば、プログラムがいくつかのオブジェクトファイルに依存し、それぞれのオブジェクトファイルは対応するソースコードに依存するとしよう。この依存関係は make で次のように表される:</description>
    </item>
    <item>
      <title>貪欲アルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/greedy_algorithm/</link>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/greedy_algorithm/</guid>
      <description>重要なのは、みなさん、貪欲は良いということです。貪欲であれば万事が上手く行く。貪欲であることは正しい。貪欲であれば物事は明確になり、道は開かれ、発展精神の本質が手に入る。命、金、愛、知識、全ての物事に対する貪欲さが、人類をここまで発展させました。そして貪欲さは、いいですか、Telbar Paper を救うだけではなく、機能不全に陥っているもう一つの企業 USA をも救うのです。 ――Gordon Gekko [Michael Douglas], Wall Street (1987) 人間が抱えるどんな問題にも必ず簡単な答えがある ――</description>
    </item>
    <item>
      <title>5. asyncio コルーチンを利用したウェブクローラ - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/crawler/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/crawler/</guid>
      <description>5.1 はじめに 古典的な計算機科学は計算を可能な限り早く完了させる効率的なアルゴリズムに焦点を当ててきた。しかし、ネットワークを利用する多くのプログラムが実行時間を費やすのは計算ではなく、オープンした大量の接続 (それも低速だったり、イベントの頻度が低かったりする接続) を保持する処理である。そういったプログラムは計算の高速化とは大きく異なる問題に直面する: 大量のネットワークイベントを待つ処理を効率的に行わなければならない。この問題に対する現代的なアプローチとして async (asynchronous I/O, 非同期 I/O) がある。</description>
    </item>
    <item>
      <title>基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/</link>
      <pubDate>Sun, 03 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/</guid>
      <description>知識が分かれ互いに関連する様子を描いたとしたら、それは一つの角度と点で交わる線分の集まりのようにはならず、一つの幹でつながる無数の木の枝のようになる。知識は初め連続的に全体に広がっており、そうでなくなった知識が大枝となる。 ――Francis Bacon, The Advancement of Learning (1605) ですから、お分かりになるでしょう。この種の問題は数学とほとんど関係がないのです。なぜあなたが他でもない数学者に答えをお求めになるのか、私には理解できません。</description>
    </item>
    <item>
      <title>深さ優先探索 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/depth_first_search/</link>
      <pubDate>Thu, 07 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/depth_first_search/</guid>
      <description>And, for the hous is crinkled to and fro, And hath so queinte weyes for to go―― For hit is shapen as the mase is wroght―― Therto have I a remedie in my thoght, That, by a clewe of twyne, as he hath goon, The same wey he may returne anoon, Folwing alwey the threed, as he hath come. ――Geoffrey Chaucer, The Legend of Good Women (c. 1385) &#34;Com&#39;è bello il mondo e come sono brutti i labirinti!&#34; dissi sollevato. &amp;quot;Come sarebbe bello il mondo se ci fosse una regola per girare nei labirinti,&amp;quot; rispose il mio maestro. [「世界の美しさよ、迷宮の醜さよ！」安心して私は言った。 「迷宮を通り抜ける手続きがある世界の美しさよ」師は答えた。] ――Umberto Eco, Il nome della rosa (1980), William Weaver による英訳 (The Name of the Rose, 1983) 前章では有向・無向両方のグラフに使える一般的な走査アルゴリズム ――何か優先探索―― を考えました。この章では、深さ優先探索 (depth first search, DFS) というこのアルゴリズムのインスタンスの一つと、この探索アルゴリズムの有向グラフに対する振る舞いに焦点を当てます。</description>
    </item>
    <item>
      <title>6. dagoba: インメモリグラフデータベース - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/dagoba/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/dagoba/</guid>
      <description>何かを単体で取り出そうとすると、それが宇宙に存在するあらゆるものと結びつき、決して断ち切れない透明な無数の糸で固く結ばれていることに我々は気が付く。 ── ジョン・ミューア 自己でない何かを求めて世界の果てへと歩みを進めたもの ── 神、太陽、シェイクスピア、旅する商人 ── は、現実の世界を自力で歩んだという事実によって「自己」となる。 ── ジェームス・ジョイス 太古の時代、まだ世界が若かったころ、全てのデータは一つのファイルに幸せに収まっていた。データをフェンスの向こうに移動させるときは、フェンスを下ろして、データを一つずつ移動させればそれで済んだ。パンチカードが一枚入り、パンチカードが一枚出ていく。人生は単純で、プログラミングは楽な仕事だった。</description>
    </item>
    <item>
      <title>最小全域木 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/minimum_spanning_trees/</link>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/minimum_spanning_trees/</guid>
      <description>みなさん、我々はみな団結しなければなりません。 さもなければ、我々は別々に吊るし首にされるでしょう。 ――Benjamin Franklin, 独立宣言の壇上で (July 4, 1776) その論文を投稿すべきかどうかについて誰かからのアドバイスを求めていた ――いったいそんなアドバイスをできる人がいたのでしょうか？―― ことを覚えています。その論文の議論はとても簡単でしたから...。彼が投稿するように言ってくれて良かったです。それから何年もたっていますが、このとても単純な論文と同じぐらい有名になった私の論文は他にありません。</description>
    </item>
    <item>
      <title>7. DBDB: ドッグベッドデータベース - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/data-store/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/data-store/</guid>
      <description>DBDB (Dog Bed Database) は単純なキーバリューデータベースを実装する Python ライブラリである。DBDB はキーをバリューに結び付け、その結び付きを後から読み込める形でディスクに保存する機能を持つ。 DBDB はマシンのクラッシュやエラーが発生した場合でもデータを破損させずに保持できる。また、全てのデータを一度に RAM に読み込まないので、DBDB は RAM 容量より大きいデータを管理できる。 7.1 メモリ どうしても理解できないバグに初めて直面したときのことを私は今でも覚えている。BASIC プログラムを入力して実行すると、スクリーンにチカチカした奇妙なピクセルが表示されてプログラムが途中で終了してしまう。さらに、その後コードを編集しようとするとプログラムの最後の数行が消去されている！</description>
    </item>
    <item>
      <title>最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/shortest_path/</link>
      <pubDate>Wed, 13 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/shortest_path/</guid>
      <description>私はリンゴを収穫するように聖書を研究する。最初に木全体をゆすってみる。そうすれば、最も熟れた実が落ちるかもしれない。それから私は木に登って大枝をゆすり、枝をゆすり、小枝をゆすり、そして葉の下を覗く。 ――Martin Luther (c. 1500) 人生は一歩ずつ広がる。遠くに進めばそれだけ、多くの真実を理解できるようになる。 我々の足元にあるものを理解することが、その先にあるものを理解するための一番の準備である。 ――Hypatia of Alexandria (c. 400), Elbert Hubbard 著 Little Journeys to the Homes of Great Teachers (1908) より リラックスすることを覚えたなら、あとは答えを待っていればほとんどの問題はあなたの頭が答えてくれる。</description>
    </item>
    <item>
      <title>8. イベント駆動ウェブフレームワーク - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/event-web-framework/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/event-web-framework/</guid>
      <description>2013 年、私はカードゲームとボードゲームに対応したウェブベースのプロトタイプ作成ツール House を作成した。こういった種類のゲームでは、一人のプレイヤーが手を選ぶまで別のプレイヤーが待機する状況がある。そのプレイヤーが手を決定したときは、その手を他のプレイヤーに瞬時に伝えなければならない。 これは見た目より複雑な問題となった。本章では、この種の対話を HTTP を使って実装するときに発生する問題を解説し、そういった問題を解決できるウェブフレームワークを Common Lisp で作成する。</description>
    </item>
    <item>
      <title>全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/</link>
      <pubDate>Sun, 17 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/</guid>
      <description>合抱の木も毫末より生じ、九層の台も累土より起こり、千里の行も足下より始まる。 ――老子, 『老子道徳経』 64 章 (紀元前六世紀) And I would walk five hundred miles, And I would walk five hundred more, Just to be the man who walks a thousand miles To fall down at your door. [五百マイル歩き、 また五百マイル歩く。 ただ千マイル歩いて、 君の家の前で倒れる男になるために。] ――The Proclaimers, &#34;I&#39;m Gonna Be (500 Miles)&#34;, Sunshine on Leith (2001) もう少し...もう少し... ――Red Leader [Drewe Henley], Star Wars (1977) 導入 前章では単一の頂点 s から他の全ての頂点への最短路を s を根とした最短路木を作ることで見つけるアルゴリズムについて議論しました。最短路木はグラフの各頂点 v に対して二つの情報を割り当てます:</description>
    </item>
    <item>
      <title>9. フローショップスケジューラ - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/flow-shop/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/flow-shop/</guid>
      <description>9.1 フローショップスケジューラ フローショップスケジューリング問題 (flow shop scheduling problem) はオペレーションリサーチの分野で最も挑戦的で最も研究されてきた問題の一つである。挑戦的な最適化問題でよくあるように、現実的なサイズのフローショップスケジューリング問題では最適解がまず求まらない。本章では局所探索法 (local search) と呼ばれるテクニックを利用するソルバの実装を紹介する。局所探索法を使うと、最適解を求められない状況でも「非常に優れた」解を見つけることができる。このソルバは指定された時間だけ新しい解を探索・評価し、最終的に得られた中で最も優れた解を返す。</description>
    </item>
    <item>
      <title>最大フローと最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/</link>
      <pubDate>Thu, 21 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/</guid>
      <description>処理を止めてしまってはそれを理解することはできない。処理の理解はその流れとともに形を変え、流れと共に流れなければならない。 ――The First Law of Mentat, Frank Herbert 著 Dune より (1965) 予想に反して、フローは余暇や娯楽でリラックスしているときには起きない。精神的・肉体的な能力が試されるような難しい仕事に積極的に取り組んでいるときにこそ、フローは訪れる...フローを努力無しに達成するのは難しい。フローは &#34;時間の無駄&#34; ではない。 ――Mihaly Csíkszentmihályi, Flow: The Psychology of Optimal Experience (1990) 道を知っていても、道を歩いたことにはならない。</description>
    </item>
    <item>
      <title>10. 考古学的データベース - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/functionalDB/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/functionalDB/</guid>
      <description>10.1 はじめに ソフトウェア開発は仕様を受け取って動作する製品を生成する厳格なプロセスだとみなされることが多い。しかしソフトウェア開発者は人であり、彼らが持つ考え方やバイアスによって開発されるソフトウェアには様々な特徴が加わる。 本章では、一般的なものとは異なる考え方を持ったときにデータベースという深く研究されてきたソフトウェアの設計と実装がどのように変化するかを見る。 データベースシステムはデータの格納と取得を可能にする。これは情報を扱う全ての労働者が行う操作である。しかし設計するのは計算機科学者なので、現代的なデータベースシステムは計算機科学者が考える「データ」の定義とデータに対する操作の定義に影響を受けている。</description>
    </item>
    <item>
      <title>ストリームアウト - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/stream-out/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/stream-out/</guid>
      <description>おかえり！ 今回はストリームアウト (SO) に焦点を当てる。これはジオメトリシェーダーステージの出力を以降のパイプラインに渡すのではなくメモリに格納するための機能である。例えばスキン済みの頂点データをキャッシュしたり、D3D10 レベルのハードウェアで D3D10 API を使った貧者のコンピュートシェーダーを実行したりするのに SO は利用できる (なお D3D11 では D3D10 ハードウェアでも CS 4.0 が使える)。前章で触れた GS インスタンシングと同様に、SO に関連する機能の一部は API ドキュメントがかなり乏しい。そこで正確にはシリーズの意図とは外れてしまうのだが、この章では API の使い方に関してもいくつかコメントを入れることにする。</description>
    </item>
    <item>
      <title>フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/</link>
      <pubDate>Mon, 25 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/</guid>
      <description>あんなにも高額で、あんなにも最先端の技術を使っているものが、あんなにも役立たずなのはなぜなのか？ 長い間疑問だったのだが、ふと思ったことがある。コンピューターというのはとても賢いことをする能力を持った馬鹿な機械で、コンピュータープログラマーというのはとても馬鹿なことをする能力を持った賢い人物なのではないかと。つまり、この二つは完璧なタッグなのだ。 ――Bill Bryson, Notes from a Big Country (1999) &#34;鉄のカーテン&#34; が上がって間もない 1990 年、兵器の開発をしていたアメリカ人とロシア人が面会した。アメリカ人は尋ねた「爆弾の開発に必要な膨大な量の計算を、あなたの国の低性能なコンピューターでどうやって行ったのですか？」ロシア人は答えた 「良いアルゴリズムを使ったのです」</description>
    </item>
    <item>
      <title>11. 自分だけの画像フィルタ - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/image-filters/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/image-filters/</guid>
      <description>11.1 素晴らしい (ように思えた) アイデア 中国を旅行していたとき、同じ場所から見た四季の景色を描いた絵をよく見かけた。四つの季節を視覚的に特徴付けていたのは色 ── 冬は白、春は薄い色、夏は濃い緑色、秋は赤色と黄色 ── だった。2011 年ごろ、私は素晴らしいアイデアを思いついた: たくさんの写真を色が少しずつ変わるように視覚化すれば、四季の移ろいを表現できるのではないだろうか？ しかし、私は画像の支配色 (dominant color, ドミナントカラー) を計算する方法を知らなかった。画像を 1x1 に縮小したときの色を使う方法も考えたものの、正しい方法でない気がした。ただ、画像をどのように並べたいかは分かっていた: sunflower layout と呼ばれるレイアウトである。sunflower layout を使うと、複数の円を最も効率良く並べることができる。</description>
    </item>
    <item>
      <title>NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/</link>
      <pubDate>Fri, 01 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/</guid>
      <description>短い取っ散らかった論文の中で、彼 [アリストテレス] は不変的な意味を持つ手本を示した。それは何かの法則の手本ではないし、何かの方法論の手本でもない ――方法論はとても高度に発展した知性によってのみ作られるからだ。彼が示したのは、感覚を鋭く分析して原則あるいは定義を引き出すという、知性そのものの手本である。 ――T. S. Eliot, &#34;The Perfect Critic&#34;, The Sacred Wood (1921) 規格の何が良いかというと、選択肢が増えることだ。さらに、今ある規格のどれも気に入らないなら、来年のモデルを待つこともできる。</description>
    </item>
    <item>
      <title>12. Python で書かれた Python インタープリタ - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/interpreter/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/interpreter/</guid>
      <description>12.1 はじめに Byterun は Python で実装された Python インタープリタである。Byterun に取り組む中で、Python インタープリタの基礎的な構造が 500 行のサイズ制限に軽々と収まることに私は驚き、満足した気分になった。本章では Byterun の構造を説明しつつ、さらに詳しく理解するために必要な背景知識を読者に与える。目標はインタープリタに関して知っておくべき全ての事項を説明することではない ── プログラミングと計算機科学の様々な興味深い分野と同じように、このテーマを深く理解するために何年もの時間かけることができるだろう。</description>
    </item>
    <item>
      <title>13. 3D モデラー - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/modeller/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/modeller/</guid>
      <description>13.1 はじめに 人間は生まれながらにして創造的な生き物である。私たちは有用で、新奇で、興味深いものを絶え間なく設計・構築してきた。現代では、設計と製造のプロセスを補助するソフトウェアが作成されるようになった。CAD (computer-aided design, コンピューター支援設計) ソフトウェアを利用すれば、建築物、橋、ゲームのグラフィック、映画のモンスター、3D プリント可能な物体といった様々なものを物理的なバージョンを作成する前に設計できる。 CAD ツールの核にあるのは、三次元の設計を抽象化して二次元の画面上で確認・編集できるようにする仕組みである。この仕組みのために CAD ツールが提供しなければならない基礎的な機能が三つある。第一に、設計対象のオブジェクトを表現するデータ構造が必要になる。このデータ構造を通して、コンピューターはユーザーが構築しようとする三次元世界を理解する。第二に、三次元の設計をユーザーの画面に表示する手段が必要になる。ユーザーが設計するのは三次元空間に存在する物理的なオブジェクトであるのに対して、コンピューターのスクリーンは二つの次元しか持たない。CAD ツールは人間がオブジェクトを認識する仕組みをモデル化し、そのモデルを利用してユーザーが三次元的に理解できる形でオブジェクトをスクリーンに描画しなければならない。第三に、設計対象のオブジェクトと対話する手段が必要となる。ユーザーが設計を追加・修正して自身の望む結果を得ることが可能でなければならない。さらに、全てのツールはディスクを使った設計の保存・読み込みをサポートする必要がある。この機能をツールが持たないと、ユーザーは自身の作業を保存・共有・利用できない。</description>
    </item>
    <item>
      <title>14. シンプルなオブジェクトモデル - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/objmodel/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/objmodel/</guid>
      <description>14.1 はじめに オブジェクト指向プログラミングは現在使われている中で最も有名なプログラミングパラダイムの一つであり、多くの言語が何らかの形でオブジェクト指向の仕組みを提供する。異なるオブジェクト指向プログラミング言語がプログラマーに提供する仕組みは一見すると非常によく似ていても、詳細は大きく異なる場合がある。ほとんどの言語はオブジェクトと継承の一種を持つのに対して、クラスに関しては直接サポートしない言語が少なくない。例えば Self や JavaScript といったプロトタイプベースの言語はクラスの概念を持たず、オブジェクトは他のオブジェクトを直接継承する。</description>
    </item>
    <item>
      <title>15. 光学文字認識 (OCR) - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/ocr/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/ocr/</guid>
      <description>15.1 はじめに あなたのコンピューターが皿洗いをして、洗濯をして、夕食を作って、部屋の掃除までしてくれたら？ 家事の手伝いは誰もが歓迎することに違いない！ しかし、コンピューターが人間と同じように家事を行うには何が必要になるだろうか？ 高名な計算機科学者アラン・チューリングは、機械が人間と区別不能なレベルの知性を持つかどうかを判定するためのチューリングテストと呼ばれる手続きを考案した。チューリングテストでは人間の判定者が姿の見えない二つの存在 (一つは人間、もう一つは機械) と対話し、どちらが人間でどちらが機械かを見分けるよう指示される。もし判定者が機械と人間を見分けられなかったら、機械は人間レベルの知性を持つとみなされる。</description>
    </item>
    <item>
      <title>16. 実際に動作する歩数計 - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/pedometer/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/pedometer/</guid>
      <description>16.1 完璧な世界 多くのソフトウェアエンジニアは、初学者だったころに感じた完璧な世界で物事を扱う高揚感を覚えているだろう。理想的なドメインにおいて厳密に定式化された問題を解く方法を最初に学んだはずである。 しかし勉強が終わって現実の世界に飛び込むと、そこら中に存在する厄介な問題や複雑性に嫌でも気が付く。そんな現実の世界で発生する問題を解くことができたなら、本当に人々の役に立つソフトウェアが作れたということになる。 本章では、一見すると簡単に見えるものの、現実の世界と現実の人間を考えると途端に難しくなる問題を考える。</description>
    </item>
    <item>
      <title>17. 同一オリジンポリシー - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/same-origin-policy/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/same-origin-policy/</guid>
      <description>17.1 はじめに 同一オリジンポリシー (same-origin policy, SOP) は全てのモダンブラウザが備える重要なセキュリティ機構である。SOP はブラウザで実行されるスクリプトが他のスクリプトと通信できる条件 (簡単に言えば「同じウェブサイトから取得されていること」) を定める。Netscape Navigator に初めて搭載された SOP はウェブアプリケーションのセキュリティにおいて非常に重要な役割を果たしている。SOP が存在しないとしたら、アップロード者だけが閲覧できる設定で Facebook にアップロードされた他人の写真を取得したり、メールを盗み見たり、銀行講座を空にしたりといった行為が悪意あるハッカーにとって格段に簡単になるだろう。</description>
    </item>
    <item>
      <title>18. 確率分布のサンプラー - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/sampler/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/sampler/</guid>
      <description>18.1 はじめに 計算機科学と計算機工学では、数式を使って解決できない問題に直面することがよくある。そういった問題には複雑なシステムやノイズの含まれる入力が関係する。正確な解析解を持たない現実世界の問題の例をいくつか示す: 航空機のコンピューターモデルを作成し、様々な気象条件で航空機がどの程度安定するかを計算する。 建設予定の工場から漏出する化学物質が周辺地域の水道水に及ぼす影響を、地下水の拡散モデルを利用して計算する。 カメラで取得したノイズの含まれる画像から、そこに写っている物体の三次元形状を復元する。 チェスで特定の手を打ったときの勝率を計算する。 正確な解を求められない問題でも、モンテカルロ法 (Monte Carlo method) と呼ばれる手法を使うと近似解を求められる場合がある。モンテカルロ法の基本的な考え方は「大量のサンプル (sample) を生成し、そのサンプルを使って解を推定する」というものである1。</description>
    </item>
    <item>
      <title>19. ウェブスプレッドシート - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/spreadsheet/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/spreadsheet/</guid>
      <description>本章では、HTML, JavaScript, CSS というウェブブラウザでネイティブにサポートされる三つの言語を使って 99 行で書かれたウェブスプレッドシートを解説する。 本プロジェクトの ES5 バージョンは jsFiddle で公開されている。 19.1 はじめに Tim Berners-Lee が 1990 年にウェブを考案したとき、ウェブページは HTML で書かれるものとされた。HTML では山括弧で囲まれたタグを使ってテキストに印をつけることで、ドキュメントの論理的な構造を表現できる。例えば、&amp;lt;a&amp;gt;...&amp;lt;/a&amp;gt; の印で囲まれたテキストはハイパーリンクであり、ウェブ上の他のページにユーザーを導く。</description>
    </item>
    <item>
      <title>20. 静的解析 - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/static-analysis/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/static-analysis/</guid>
      <description>20.1 はじめに コンパイルできないコードを書いたときに間違っている部分に赤い下線を引く機能を持つ IDE を使っている読者も多いだろう。フォーマットやスタイルに関する問題を検出するリンターを自分のコードに対して実行したこともあるだろうし、全ての警告を有効化した極端に神経質なモードでコンパイラを実行したこともあるかもしれない。これらはどれも静的解析を応用したツールである。 静的解析 (static analysis) とは、コードの問題を実行することなく検出する手法を言う。「静的」とは問題の検出をコードの実行時ではなくコンパイル時に実行することを意味する。上述したツールを使った経験があるなら、そのツールの動作が魔法のように感じられたかもしれない。しかしどんなツールもプログラムに過ぎない ── あなたのような人間のプログラマーによって書かれたソースコードから作られている。本章では、静的解析を使ってコードの性質をチェックする処理の実装方法を解説する。このためには、チェックしたい性質とその理由をまず理解する必要がある。</description>
    </item>
    <item>
      <title>テッセレーション - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/tessellation/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/tessellation/</guid>
      <description>おかえり！ この章で見ていくのは D3D11/シェーダーモデル 5.x 世代のハードウェアで導入された機能の中でおそらく &#34;広告塔&#34; 的なポジションにある機能、テッセレーションである。テッセレーションが興味深いのは、面白い話題である上に、ユーザーから見える大規模なコンポーネントが追加されてしかもそれがプログラム不可能というのは久しぶりであるためだ。 概念的にはとても簡単だったジオメトリシェーダー (頂点ではなく完全なプリミティブに対するシェーダーというだけだった) と異なり、「テッセレーション」というトピックはいくらかの説明を必要とする。ジオメトリをテッセレートする方法はいくらでもある──有名なものを挙げるだけでも、たくさんの亜種を持つスプラインパッチ、様々なサブディビジョンサーフェス、そしてディスプレースメントマッピングがある。つまり機能リストに「テッセレーション」と書いてあったとしても、 GPU が提供するサービスやその実装は全く明らかでない。</description>
    </item>
    <item>
      <title>21. テンプレートエンジン - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/template-engine/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/template-engine/</guid>
      <description>21.1 はじめに 典型的なプログラムには大量のロジックと少量のテキストデータが含まれる。プログラミング言語はそういった特徴を持つプログラムの書きやすさを重視して設計されている。しかし、少量のロジックと大量のテキストデータを扱うプログラミングのタスクも存在する。そういったタスクでは、テキスト中心の問題に適したツールが求められる。テンプレートエンジン (template engine) はそういったツールの一つである。本章ではシンプルなテンプレートエンジンを作成する。</description>
    </item>
    <item>
      <title>22. 単純なウェブサーバー - 500 行のコードで作るプチアプリケーション (翻訳)</title>
      <link>https://inzkyk.xyz/500-lines/web-server/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/500-lines/web-server/</guid>
      <description>22.1 はじめに 過去二十年の間に、ウェブは途方もない変化を社会にもたらした。しかしウェブの核にある技術はそれほど変化しておらず、多くのシステムは Tim Berners-Lee が四半世紀前に考案した原則に従っている。具体的に言えば、ほとんどのウェブサーバーは原初のウェブと同様のメッセージを同様の方法でやり取りしている。 本章では典型的なウェブサーバーがメッセージをやり取りする仕組みを解説し、新しい機能を追加するとき書き直しが必要にならないソフトウェアシステムの設計方法を議論する。</description>
    </item>
    <item>
      <title>コンピュートシェーダー - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/compute-shaders/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/compute-shaders/</guid>
      <description>このシリーズの &#34;公式な&#34; 最終章となるはずの章へようこそ──GPU に関する記事はこれからも書くつもりだが、このシリーズはもう十分長くなっている。ここまではグラフィックスパイプラインに通常含まれる全てのモジュールを巡りながら、ときには細かくときには大まかに各モジュールの説明を行ってきたが、後は DX11 で導入された主要な機能が一つ残るだけとなった: コンピュートシェーダーである。 実行環境 このシリーズを通して注目してきたのはアーキテクチャレベルでの全体的なデータフローであり、シェーダーの実行ではない (シェーダーの実行は他の場所で分かりやすく説明されている)。ここまで見てきたステージにおいて、これは各ステージにおける入力がどのように出力へつながるかに焦点を当てることを意味した: 内部の動作は入出力データの形状に支配されるのが普通だった。しかしコンピュートシェーダーでこれは正しくない──このモジュールはグラフィックスパイプラインの一部としてではなく、それ自身で実行される。そのためコンピュートシェーダーの表面的なインターフェースはずっと小さい。</description>
    </item>
    <item>
      <title>2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/</guid>
      <description></description>
    </item>
    <item>
      <title>2.1. グラフの定義 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/definition/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/definition/</guid>
      <description>本書では単純グラフと呼ばれる種類のグラフを最初に考える。名前の通り、単純グラフは非常に単純な定義を持つ: 定義 2.1.1 有限集合 V と \mathcal{P}_{2}\left( V\right) の部分集合 E の組 \left( V,E\right) を単純グラフ (simple graph) と呼ぶ。 復習しておくと、\mathcal{P}_{2}\left( V\right) は二つの要素を持つ V の部分集合全体からなる集合を表す。つまり単純グラフとは組 \left( V,E\right) であり、V は有限集合、E は V の異なる二要素からなる V の部分集合をいくつか集めた集合を表す。これから本章では「単純グラフ」を単に「グラフ」と呼ぶ。ただし、以降の章 (第 3 章) では単純グラフより高度で一般的な「グラフ」の概念を学ぶ。</description>
    </item>
    <item>
      <title>2.2. グラフの描画 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/drawing/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/drawing/</guid>
      <description>グラフを視覚的に表現する広く知られた方法がある: グラフは平面上の点の集合と点同士をつなぐ線の集合を使って描画できる。 正確に言えば次の通りである: 定義 2.2.1 単純グラフ G は平面上に描画 (draw) することで視覚的に表現できる。グラフを描画するには次のようにする。まず、G の各頂点に対応する点を書き、それぞれに識別用のラベルを書き添える。次に、G の辺 uv ごとに u に対応する点と v に対応する点を結ぶ曲線を書く。点の位置と曲線の形状はグラフ G の構造が曖昧にならない (描画を見た読者が曖昧さなく G を再構築できる) 限り自由に決めて構わない。 [例えば、辺 uv に対応する曲線は u でも v でもない頂点に対応する点を通ってはいけない。]</description>
    </item>
    <item>
      <title>アルゴリズムとは何か？ - イントロダクション - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/introduction/what_is_an_algorithm/</link>
      <pubDate>Thu, 03 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/introduction/what_is_an_algorithm/</guid>
      <description>アルゴリズムとは、明示的で、精確で、曖昧さを持たない、機械で実行できる簡単な命令を並べたものです。アルゴリズムは通常何らかの目的を念頭において作られます。例えば次のアルゴリズムは、&#34;99 Bottles of Beer on the Wall&#34; という歌の 99 の部分を任意の値にした歌を歌います: procedure \texttt{BottlesOfBeer}(n) for i \leftarrow n downto 1 do &#34; i bottles of beer on the wall i,&#34; と歌う &#34;Take one down, pass it around, i - 1 bottles of beer on the wall.&#34; と歌う &#34;No bottles of beer on the wall, no bottles of beer,&#34; と歌う &#34;Go to the store, buy some more, n bottles of beer on the wall.&#34; と歌う アルゴリズム恐怖症の古典学者は「アルゴリズム (algorithm)」という語がギリシャ語の「数 (arithmos, \acute{\alpha} \varrho \iota \theta \acute{o} \varsigma)」と「痛み (algos, \ddot{\alpha} \lambda \gamma o \varsigma)」の派生語であると思うかもしれませんが、そうではありません。「アルゴリズム」 という語は九世紀のペルシャ人科学者 Abū &#39;Abdallāh Muḥammad ibn Mūsā al-Khwārizmī1 (アブー・アブドゥッラー・ムハンマド・イブン・ムーサー・アル＝フワーリズミー) に由来します。</description>
    </item>
    <item>
      <title>2.3. 最初の事実: ラムゼー数 R(3,3) = 6 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/intro-ramsey-number-33/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/intro-ramsey-number-33/</guid>
      <description>定義はもう十分だろう。続いて本書で最初の命題を証明する: 命題 2.3.1 G は単純グラフで \left| \operatorname{V}\left( G \right) \right| \geq6 を満たすとする (つまり、G は 6 個以上の頂点を持つとする)。このとき、次の二つの命題の少なくとも一方が成り立つ: 命題 1: 辺 ab, bc, ca が全て G に存在するような G の頂点 a, b, c が存在する。 命題 2: 辺 ab, bc, ca がいずれも G に存在しないような G の頂点 a, b, c が存在する。 言い換えれば、命題 2.3.1 は「G が少なくとも 6 個の頂点を持つなら、相互に隣接する三頂点1または相互に非隣接な (どの二頂点も隣接していない) 三頂点 (あるいはその両方) を見つけられる」と主張している。この命題は「六人以上が集まると、知り合い同士の三人組または初対面同士の三人組 (あるいはその両方) を必ず見つけられる」とも言い換えられる。ここでは初対面でない人は知り合いだと仮定されている。</description>
    </item>
    <item>
      <title>掛け算 - イントロダクション - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/introduction/multiplication/</link>
      <pubDate>Fri, 04 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/introduction/multiplication/</guid>
      <description>アルゴリズムが正式な学術研究の対象となってまだ数十年しか経っていませんが、人類は文明が始まった頃からアルゴリズムを使ってきました。計算手順の詳細な説明は人類が言語を書き留めた最も古い例の一つです。それは Fibonacci や al-Khwārizmī よりもずっと前のことで、彼らが広めた位取り記数法よりもさらに前のことです。 格子掛け算 少なくとも多くのアメリカ人の学生にとって、大きな整数を掛け算する方法として一番なじみ深いのは格子掛け算 (lattice multiplication) です。このアルゴリズムは Fibonacci の著作 Liber Abaci によって広まりました。</description>
    </item>
    <item>
      <title>2.4. グラフの頂点の次数 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/degree/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/degree/</guid>
      <description>単純グラフの頂点の次数とは、その頂点を含む辺の個数を言う: 定義 2.4.1 G=\left( V,E\right) を単純グラフとする。G の頂点 v \in V の次数 (degree) は次のように定義される: \[ \begin{aligned} v\colonequals &amp;amp; \ \left( v \text{ を含む辺 } e\in E \text{ の個数} \right) \\ = &amp;amp; \ \left( v \text{ の隣接頂点の個数}\right) \\ = &amp;amp; \ \left\vert \left\{ u\in V\mid uv\in E\right\} \right\vert \\ = &amp;amp; \ \left\vert \left\{ e\in E\mid v\in e\right\} \right\vert \end{aligned} \] 定義 2.4.1 の最後に示した変形の正しさは非常に簡単に確認できる: 頂点 v を含む辺 e \in E は v の隣接頂点をちょうど一つ含む。逆に、v の隣接頂点と v からなる辺は v の隣接頂点ごとにちょうど一つ存在する。ただし、この変形が可能なのは単純グラフを考えているときだけであり、多重グラフを考えるときは行えない。</description>
    </item>
    <item>
      <title>議会の議席配分 - イントロダクション - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/introduction/congressional_apportionment/</link>
      <pubDate>Sat, 05 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/introduction/congressional_apportionment/</guid>
      <description>現実世界のアルゴリズムの例をもう一つ示しましょう。このアルゴリズムは政治的に非常に重要です。アメリカ合衆国憲法第 1 条第 2 節は次のことを定めています: 下院議員と直接税はこの連邦に加入することを認められた州の人口に比例して各州で配分される。 ... 下院議員の定数は人口3万人に対し1人を超えてはならないが、各州は少なくとも1人の下院議員を持たなくてはならない。 ... 下院議会の議席は有限なので、議席を完全に人口に比例して配分するには複数の州に所属する議員あるいは州に部分的に所属する議員が必要です。しかしどちらも許されていないので、議席の小数部分を公平に配分するためのアルゴリズムが憲法が施行されてから数十年間に渡っていくつも提案されました。</description>
    </item>
    <item>
      <title>2.5. グラフの同型 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/isomorphism/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/isomorphism/</guid>
      <description>異なる二つのグラフが「頂点の名前を無視すれば同じ」ということがある。例えば次の二つのグラフがそうである: この概念を定式化しよう: 定義 2.5.1 G と H を単純グラフとする。 全単射 \phi\colon\operatorname*{V}\left( G\right) \rightarrow\operatorname*{V}\left( H\right) が辺を保存するとき、\phi を G から H へのグラフ同型写像 (graph isomorphism) と呼ぶ。言い換えれば、次の性質を持つ全単射 \phi をグラフ同型写像と呼ぶ: G の任意の二頂点 u, v に対して次の関係が成り立つ: \[ \left( uv\in\operatorname*{E}\left( G\right) \right) \Longleftrightarrow \left( \phi\left( u\right) \phi\left( v\right) \in\operatorname*{E} \left( H\right) \right) \] グラフ同型写像は単に同型写像 (isomorphism) とも呼ぶ。</description>
    </item>
    <item>
      <title>悪い例 - イントロダクション - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/introduction/a_bad_example/</link>
      <pubDate>Sun, 06 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/introduction/a_bad_example/</guid>
      <description>アルゴリズムでない命令列の分かりやすい例として、次の Martin (マーティン) のアルゴリズム1を考えます: procedure \texttt{BeAMillionaireAndNeverPayTaxes}() 百万ドル手に入れる if 徴税人がきて 「税金を払っていませんよ！」 と言う then 「忘れてた」 と言う このアルゴリズムは単純ですが、一行目が絶望的に実行困難です！ 大富豪の CEO、シリコンバレーのベンチャー投資家、ニューヨークのやり手不動産家などにとっては一行目はすぐに実行できる些細な2問題なので、この手続きはアルゴリズムかもしれません。しかしそれ以外の貧しい一般庶民に対しては処理がはっきりと示されておらず、Martin の手続きがアルゴリズムであるとは言えません。</description>
    </item>
    <item>
      <title>2.6. 特別なグラフ - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/complete/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/complete/</guid>
      <description>本節では特に重要なグラフの族をいくつか定義する。 2.6.1 完全グラフと空グラフ 最も簡単なグラフの族は、完全グラフと空グラフである: 定義 2.6.1 V を有限集合とする。 単純グラフ \left( V,\ \mathcal{P}_{2}\left( V\right) \right) を V 上の完全グラフ (complete graph on V) と呼ぶ。これは頂点集合が V で、任意の相異なる二頂点が隣接する単純グラフである。 ある n\in\mathbb{N} で V=\left\{ 1,2,\ldots,n\right\} が成り立つとき、この V 上の完全グラフを K_{n} と表記する。 単純グラフ \left( V,\ \varnothing\right) を V 上の空グラフ (empty graph on V) と呼ぶ。これは頂点集合が V で辺を持たないグラフである。 集合 \left\{ 1,2,3,4,5\right\} 上の完全グラフと空グラフを次の図に示す:</description>
    </item>
    <item>
      <title>アルゴリズムの説明 - イントロダクション - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/introduction/describing_algorithms/</link>
      <pubDate>Mon, 07 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/introduction/describing_algorithms/</guid>
      <description>アルゴリズムを正しく設計そして解析するためのスキルは、アルゴリズムを分かりやすく説明するためのスキルと結びついています。少なくとも私の講義において、アルゴリズムを完全に説明するために必要な要素は次の四つです: What: アルゴリズムが解く問題の明確な仕様 How: アルゴリズムの明確な説明 Why: アルゴリズムが解くべき問題を解くという証明 How fast: アルゴリズムの実行時間の解析 四つの要素をこの順番で開発する必要はありません (というより、そうしない方がいいかもしれません)。問題の仕様、アルゴリズムの説明、正しいことの証明、そして実行時間の解析は同時に発展します。例えば速いアルゴリズムを得るために問題をいじったり、正しさの証明におけるトリッキーなケースに対処するためにアルゴリズムを変更したりするかもしれません。ただしそうだとしても、四つの要素を別々に示すのが読者にとって普通は最も分かりやすいでしょう。</description>
    </item>
    <item>
      <title>2.7. 部分グラフ - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/subgraph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/subgraph/</guid>
      <description>定義 2.7.1 G=\left( V,E\right) を単純グラフとする。 G の部分グラフ (subgraph) とは、頂点集合 W\subseteq V と辺集合 F\subseteq E からなる単純グラフ H=\left( W,F\right) を言う。言い換えれば、G の部分グラフとは頂点が G の頂点で辺が G の辺である単純グラフを言う。 S を V の部分集合とする。単純グラフ \left( S,\ \ E\cap\mathcal{P}_{2}\left( S\right) \right) を集合 S に関する G の誘導部分グラフ (induced subgraph of G on the set S) と呼ぶ。言い換えれば、この単純グラフは G の部分グラフであり、頂点は S の要素、辺は両端が S に含まれる G の辺からなる。</description>
    </item>
    <item>
      <title>アルゴリズムの解析 - イントロダクション - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/introduction/analyzing_algorithms/</link>
      <pubDate>Tue, 08 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/introduction/analyzing_algorithms/</guid>
      <description>アルゴリズムをただ書き下して「見よ！」というだけでは不十分で、アルゴリズムがすべきことを効率良く行うことを聴衆 (および自分自身) に納得させなければなりません。 正しさ アプリケーションが置かれる環境によっては、プログラムが「常識的な」入力の全てに対してほとんどの場合に正しく動けばそれで OK とされることもあります。しかし、この本では違います。アルゴリズムは全ての可能な入力に対して常に正しいことを要求されます。加えて、アルゴリズムが正しいことは証明されなければなりません。直感に頼ったり、テストケースをいくつか通すだけでは不十分です。</description>
    </item>
    <item>
      <title>2.8. グラフの非交和 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/disjoint-union/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/disjoint-union/</guid>
      <description>既知のグラフから新しいグラフを構築するもう一つの方法として非交和 (disjoint union) がある。非交和のアイデアは簡単に理解できる: いくつかの単純グラフ G_{1},G_{2},\ldots,G_{k} の非交和 G_{1}\sqcup G_{2}\sqcup\cdots\sqcup G_{k} とは、全てのグラフを並べて一つの大きなグラフとみなしたものを言う。これを数学的に厳密な定義とするには、グラフ G_{i} の各頂点 v を (i,v) に変更して各グラフの頂点集合に含まれる同じ要素を区別する必要がある。例えば、二つの閉路グラフ C_{3} と C_{4} の非交和 C_{3}\sqcup C_{4} は次の「グラフ」であってはならない:</description>
    </item>
    <item>
      <title>練習問題 - イントロダクション - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/introduction/exercises/</link>
      <pubDate>Wed, 09 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/introduction/exercises/</guid>
      <description>通常のチェスボード上に並べられた通常のチェスの駒の配置がルールに反していない場合に、どちらのプレイヤーが勝つかを判定する効率の良いアルゴリズムを説明、解析してください。両プレイヤーは完璧に駒を進めるものとします。[ヒント: 一行で書ける自明な答えがあります！] ❤ 最初の n バースを歌うのに時間が \Theta(n^{3}) かかる歌を見つけて (または作って) ください。 最初の n バースを歌うのに時間が \Theta(n \log n) かかる歌を見つけて (または作って) ください。</description>
    </item>
    <item>
      <title>2.9. グラフの歩道と路 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/walk/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/walk/</guid>
      <description>本節ではついに歩道と路を定義する ── どちらもグラフに関連する最も基礎的な概念の一つである。グラフに初めて言及した Euler による 1736 年の論文は、とある特徴を持つ歩道を議論した。 2.9.1 定義 グラフが道路ネットワークを表すと想像してほしい。頂点は街に、辺は (双方向の) 道に対応する。いくつかの道を経由すれば、ある街から隣接していない別の町に移動できる。これを数学的に定義すると歩道となる: 定義 2.9.1 G を単純グラフとする。 G における歩道 (walk) とは、G の頂点の有限列 \left( v_{0},v_{1},\ldots,v_{k}\right) (k \geq 0) であって、v_{0}v_{1}, v_{1}v_{2}, v_{2}v_{3}, ..., v_{k-1}v_{k} が全て G の辺であるものを言う (k = 0 のとき後半の条件は空虚な真となる)。</description>
    </item>
    <item>
      <title>2.10. グラフの閉歩道と閉路 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/cycle/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/cycle/</guid>
      <description>特別な歩道を二つ定義する: 定義 2.10.1 G を単純グラフとする。 G の閉歩道 (closed walk) とは、始点と終点が同じ歩道を言う。言い換えれば、w_{0}=w_{k} を満たす歩道 \left( w_{0},w_{1},\ldots,w_{k}\right) を閉歩道と呼ぶ。本書では閉歩道を回路 (circuit) とも呼ぶ (ただし、回路を閉歩道と少しだけ異なる歩道として定義する文献も多い)。 G の閉路 (cycle) とは、閉歩道 \left( w_{0},w_{1},\ldots,w_{k}\right) であって「k \geq 3」と「頂点 w_{0}, w_{1}, \ldots, w_{k-1} が相異なる」を満たすものを言う。 例 2.10.2 G を次の単純グラフとする:</description>
    </item>
    <item>
      <title>帰着 - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/reductions/</link>
      <pubDate>Mon, 07 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/reductions/</guid>
      <description>帰着 (reduction) はアルゴリズムを設計するときに最もよく使われるテクニックです。問題 X を問題 Y に帰着させると言った場合、それは Y を解くアルゴリズムをブラックボックス (サブルーチン) として使いながら X を解くことを意味します。帰着を考えるときに重要なのが、帰着の結果として出来上がる X を解くアルゴリズムの正しさを、ブラックボックスがどう問題 Y を解くかに依存させてはいけない点です。仮定してよいのは、ブラックボックスが Y を正しく解くということだけです。中で起こっていることは私たちには関係なく、誰か別の人の問題です。ブラックボックスが文字通り魔法によって動くと考えるとよいでしょう。</description>
    </item>
    <item>
      <title>2.11. 最長路を使ったトリック - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/longest-path-trick/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/longest-path-trick/</guid>
      <description>特定の状況でグラフの閉路の存在を保証する命題をもう一つ示す。命題そのものより重要なこととして、この命題の証明で利用されるテクニックはグラフが関係する様々な議論で有用となる: 命題 2.11.1 G を少なくとも一つの頂点を持つ単純グラフ、d &amp;gt; 1 を整数とする。G の全ての頂点が d 以上の次数を持つとき、G は長さが d + 1 以上の閉路を持つ。 [証明] \mathbf{p}=\left( v_{0},v_{1},\ldots,v_{m}\right) を G における最長の路とする。 [G が最長の路を持つと言えるのはどうしてだろうか？ 考えてみよう: 路に含まれる頂点は相異なるので、G における路の長さは最大でも \left\vert \operatorname*{V}(G)\right\vert -1 である。加えて、G は少なくとも一つの頂点を持つので、G における路は少なくとも一つ存在する。整数の非空有限集合には最大要素が存在するので、G は最長の路を持つ。]</description>
    </item>
    <item>
      <title>単純にして任せる - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/simplify_and_delegate/</link>
      <pubDate>Tue, 08 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/simplify_and_delegate/</guid>
      <description>再帰 (recursion) は特に強力な帰着です。大雑把に言うと、次のように説明できます: もし問題のインスタンスを直接解くことができるなら、直接解く。 そうでなければ、問題を同じ問題のよりシンプルなインスタンスに帰着させる。 自分自身を参照する部分が分かりにくいなら、他の帰着と同じように、小さいインスタンスを別の人が解いてくれると想像するとよいでしょう (この別の人のことを再帰の妖精 (Recursion Fairy)と呼ぶのが私のお気に入りです)。問題を解くためにすべきなのは、問題を単純にする、あるいはそれが不必要/不可能な場合には直接解く、それだけです。小さくなった問題は再帰の妖精が解いてくれます。どうやって解くかは私たちの知ったことではありません1。数学をよく知っている読者は再帰の妖精のことをもっと正式な名前で呼ぶかもしれません: 帰納法の仮定と。</description>
    </item>
    <item>
      <title>2.12. グラフの橋 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/bridges/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/bridges/</guid>
      <description>後に重要となる質問がひとつある: グラフから辺を一つ除去すると、何が起こるだろうか？ この操作を表す記法をまずは定義しよう: 定義 2.12.1 G=\left( V,E\right) を単純グラフ、e を G の辺とする。このとき G から辺 e を除去して得られるグラフを G\setminus e と表記する。言い換えれば、次のように G\setminus e を定める: \[ G\setminus e\colonequals \left( V,\ E\setminus\left\{ e\right\} \right) \] G\setminus e を G-e と表記する文献もある。 定理 2.12.2 G を単純グラフ、e を G の辺とする。このとき: e を含む G の閉路が存在するなら、G \setminus e の成分と G の成分は一致する。 [成分は頂点の集合であることに注意してほしい。一致すると主張しているのは成分という頂点の集合であって、成分に関する誘導部分グラフではない。]</description>
    </item>
    <item>
      <title>Hanoi の塔 - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/tower_of_hanoi/</link>
      <pubDate>Tue, 08 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/tower_of_hanoi/</guid>
      <description>Hanoi (ハノイ) の塔は 1883 年1にフランス人教師で娯楽数学者でもあった Éduoard Lucas (エドゥアール・リュカ) によって2最初に発表されました ――実際に遊べるパズルとして！ その次の年、Henri de Parville (アンリ・ド・パルヴィル) はこのパズルを次のストーリーと共に紹介しています3: Benares (ベナレス) にある大寺院4...世界の中心にあるドームには、三つのダイアモンドの棒が刺さった真鍮のプレートがある。棒の高さは 1 キュービット (約 50 cm) であり、太さはハチの体ほどである。この世を創生するときに、神は 64 個の金の円盤を棒の一つに通して置いた。そのとき神は一番大きな円盤が真鍮のプレートと接するように、そして上に行けば行くほど円盤が小さくなるようにした。これが Bramah (ブラマー) の塔である。司祭たちは昼夜とめどなく円盤をひとつの棒から他の棒に移動させる。円盤を移動させるとき、司祭たちは絶対の Bramah の法に従う。つまり、円盤は必ずひとつずつ移動させなければならず、ある円盤の下にそれよりも小さい円盤があるようにすることはできない。 64 個の円盤を神が創生のときに使った棒から別の棒に全て移動させることができたならば、塔、寺院、そして Brahmin (バラモン) は塵となり、雷鳴と共に世界は消えてしまうという。</description>
    </item>
    <item>
      <title>2.13. グラフの支配集合 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/dominationg-set/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/dominationg-set/</guid>
      <description>2.13.1 定義と基本的な性質 単純グラフに対して定義できる概念をもう一つ示す: 定義 2.13.1 G=\left( V,E\right) を単純グラフとする。 V の部分集合 U が条件「任意の頂点 v \in V \setminus U が U に属する隣接頂点を少なくとも一つ持つ」を満たすとき、U は G に対して支配的 (dominating) と言う。 G に対して支配的な V の部分集合を G に対する支配集合 (dominating set for G) と呼ぶ。単に G の支配集合 (dominating set of G) とも呼ぶ。 例 2.13.2 次の閉路グラフ C_{5} を考える: \[ C_{5}=\left( \left\{ 1,2,3,4,5\right\} ,\ \ \left\{ 12,\ 23,\ 34,\ 45,\ 51\right\} \right) \] 集合 \left\{ 1,3\right\} は C_{5} の支配集合である。実際、\left\{ 1,3\right\} に属さない三つの頂点 2,4,5 はいずれも \left\{ 1,3\right\} に属する隣接頂点を持つ。集合 \left\{ 1,5\right\} は C_{5} の支配集合ではない。なぜなら、頂点 3 が \left\{ 1,5\right\} に属する隣接頂点を持たないためである。G に要素数が 0 または 1 の支配集合は存在しない。要素数が 2 の支配集合はいくつか存在し、要素数が 3 以上の頂点集合の部分集合は全て支配集合となる。</description>
    </item>
    <item>
      <title>マージソート - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/mergesort/</link>
      <pubDate>Wed, 09 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/mergesort/</guid>
      <description>マージソート (mergesort) はプログラム内蔵式の汎用コンピューター用に作られた最も古いアルゴリズムの一つです。このアルゴリズムは John von Neumann (ジョン・フォン・ノイマン) によって 1945 年に開発され、 1947 年に Herman Goldstine (ハーマン・ゴールドスタイン) との共著で発表されました。このプログラムは EDVAC 用に作られた計算用途ではないプログラムのうち最初期のものでもあります1。マージソートは次のステップからなります: 入力の配列をほぼ同じ長さの二つの小配列に分割する。 二つの小配列に再帰的にマージソートを行う。 ソートされた二つの小配列をひとつの配列に組み合わせる (マージする)。 \[ \begin{array}{rc} \text{入力} :&amp; \texttt{S O R T I N G E X A M P L} \\ \text{分割} :&amp; \texttt{S O R T I N | G E X A M P L} \\ \text{左の再帰} :&amp; \texttt{I N O R S T | G E X A M P L} \\ \text{右の再帰} :&amp; \texttt{I N O R S T | A E G L M P X} \\ \text{マージ} :&amp; \texttt{A E G I L M N O P R S T X} \end{array} \] 図 1.5マージソートの例 最初のステップは配列の長さを 2 で割るだけで済むので簡単です。二つ目のステップは再帰の妖精に任せることができます。そのため本当の作業と呼べるのは最後のマージのステップだけです。</description>
    </item>
    <item>
      <title>2.14. ハミルトン路とハミルトン閉路 - 2. 単純グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/simple-graph/hamiltonian-path-and-cycle/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/simple-graph/hamiltonian-path-and-cycle/</guid>
      <description>2.14.1 定義 話題を変えよう。次の問題を考えてほしい: 単純グラフ G が与えられたとき、G の全ての頂点を含む閉歩道を見つけられるのはどんなときだろうか？ 答えは簡単に見つかるだろう: 「G が連結なとき」である。実際、単純グラフ G の頂点を v_{1},v_{2},\ldots,v_{n} とすれば、G が連結より v_{1} から v_{2} への歩道、v_{2} から v_{3} への歩道、…、v_{n-1} から v_{n} への歩道が全て存在する。加えて v_{n} から v_{1} への歩道も存在するから、これらの歩道を全て連結すれば G の全ての頂点を含む閉歩道が得られる。逆に、G が連結でなければ条件を満たす閉歩道は存在しない。</description>
    </item>
    <item>
      <title>クイックソート - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/quicksort/</link>
      <pubDate>Thu, 10 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/quicksort/</guid>
      <description>クイックソート (quicksort) もまた再帰的なソートアルゴリズムです。Tony Hoare (トニー・ホーア) によって 1959 年に発見され、1961 年に発表されました。このアルゴリズムの各ステップを次に示します。クイックソートにおいて本当の作業と呼べるのは再帰呼び出しの前に配列を小配列に振り分ける部分であり、この振り分けによって最後のマージ処理が必要なくなります。 配列からピボット (pivot) を選ぶ。 配列を三つの小配列に分ける。三つの配列にはそれぞれピボットよりも小さい要素、ピボットと等しい要素、ピボットよりも大きい要素を入れる。 一番目と三番目の小配列を再帰的にクイックソートする。 \[ \begin{array}{rc} \text{\small 入力}: &amp; \texttt{ S O R T I N G E X A M P L} \\ \text{\small ピボットの選択}: &amp; \texttt{ S O R T I N G E X A M }{\color{#B52F1B}{\texttt{P}}}\texttt{ L} \\ \text{\small 分割}: &amp; \texttt{ A G O E I N L M }{\color{#B52F1B}{\texttt{P}}}\texttt{ T X S R} \\ \text{\small 左の再帰}: &amp; \texttt{ A E G I L M N O }{\color{#B52F1B}{\texttt{P}}}\texttt{ T X S R} \\ \text{\small 右の再帰}: &amp; \texttt{ A E G I L M N O }{\color{#B52F1B}{\texttt{P}}}\texttt{ R S T X} \end{array} \] 図 1.7クイックソートの例 クイックソートの詳細な手順を次の疑似コードに示します。\textsc{Partition} サブルーチンの入力 p はソートされてない配列におけるピボット要素の添え字であり、出力はピボットの新しい添え字です。効率良く配列を分割するアルゴリズムはいくつか知られていますが、ここに示したのは Nico Lomuto によるものです1。変数 l がピボットよりも小さい要素の数を保持します。</description>
    </item>
    <item>
      <title>パターン - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/the_pattern/</link>
      <pubDate>Fri, 11 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/the_pattern/</guid>
      <description>マージソートとクイックソートで見てきた三段階のパターンは分割統治 (devide-and-conquer)と呼ばれます: 与えられた問題のインスタンスを同じ問題の独立したより小さいインスタンスに分割する (devide)。 小さいインスタンスを再帰の妖精に任せる (delegate)。 小さいインスタンスの答えを元のインスタンスの答えになるよう組み合わせる (combine)。 インスタンスのサイズがある定数よりも小さくなったら、再帰的な処理をやめ、問題を直接解きます。問題を直接解くのは総当たりで、定数時間で行われます。</description>
    </item>
    <item>
      <title>再帰木 - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/recursion_tree/</link>
      <pubDate>Sat, 12 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/recursion_tree/</guid>
      <description>先ほどから何度も出てきている再帰木 (recursion tree) を説明しましょう。再帰木とは分割統治法で出てくる再帰方程式を解くためのツールであり、単純で、多くの問題に適用でき、視覚的に理解が簡単です。 再帰木では根につながっている頂点が再帰的な小問題を表します。頂点の値 (value) とは、その頂点が表す小問題を解くのにかかる時間から再帰呼び出しの分の時間を除いたものです。この定義から、アルゴリズムの実行時間は木に含まれる全ての頂点の値の和であることが分かります。</description>
    </item>
    <item>
      <title>♥ 線形選択 - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/linear_time_selection/</link>
      <pubDate>Mon, 14 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/linear_time_selection/</guid>
      <description>クイックソートに関する議論の中で、ソートされていない配列から中央値を見つける処理が線形時間で行えると説明しました。この操作のためのアルゴリズムは 1970 年代に Manuel Blum (マヌエル・ブラム)、Bob Floyd (ボブ・フロイド)、Vaughan Pratt (ヴォーン・プラット)、Ron Rivest (ロン・リベスト)、Robert Tarjan (ロバート・タージャン) によって発見されました。彼らのアルゴリズムが扱ったのは n 要素の配列と整数 k を受け取って配列から k 番目に小さい要素を取り出すというもっと一般的な問題であり、この問題を解くアルゴリズムはクイックセレクト (quickselect)あるいは片腕のクイックソート (one-armed quicksort) と呼ばれます。クイックセレクトは Tony Hoare (トニー・ホーア) によって 1961 年に最初に発表されましたが、それは彼がクイックソートを発表した論文のクイックソートを説明したまさにそのページでのことでした。</description>
    </item>
    <item>
      <title>高速乗算 - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/fast_multiplication/</link>
      <pubDate>Tue, 15 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/fast_multiplication/</guid>
      <description>前章では、n 桁の数の乗算を O(n^{2}) で行う古くからあるアルゴリズムをいくつか紹介しました。小学校で習う格子アルゴリズムや、エジプト人農民の乗算アルゴリズムです。 桁ごとの数を収めた配列を分割して、さらに次の等式を使えばもっと効率の良いアルゴリズムが作れそうです: \[ (10^{m}a + b)(10^{m}c + d) = 10^{2m}ac + 10^{m}(bc + ad) + bd \] この再帰方程式から以下に示す分割統治法を使ったアルゴリズムが作れます。n 桁の整数 x と y の積を計算するアルゴリズムであり、ac, bd, ad, bd という部分積を再帰的に計算しています。最後の行の乗算は再帰的になっていませんが、10 を掛ける処理は桁をひとつずらすことに対応するので、O(n) 時間で行えます。</description>
    </item>
    <item>
      <title>べき乗 - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/exponentiation/</link>
      <pubDate>Wed, 16 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/exponentiation/</guid>
      <description>与えられた実数 a と正の整数 n について、a^{n} を計算する問題を考えましょう。標準的でナイーブな実装は単純な for ループを使うものです。n - 1 回の a による乗算が行われます: procedure \texttt{SlowPower}( a,n ) x \leftarrow a for i \leftarrow 2 to n do x \leftarrow x \cdot a return x 入力パラメータ a は整数でも、有理数でも、浮動小数点数でも構いません。さらに言えば、乗算の方法さえ分かっていれば数でなくても構いません。例えば同じアルゴリズムを使って底が有限のモジュロ演算 (暗号アルゴリズムでよく使われる演算) や、行列積 (再帰方程式の評価やグラフの最短路の計算に使われる演算) に関するべき乗を計算できます。何を掛けているのかわからないので、乗算の実行時間は分かりません。そのため実行時間の解析は乗算の数を基準にして行います。</description>
    </item>
    <item>
      <title>練習問題 - 再帰 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/recursion/exercises/</link>
      <pubDate>Thu, 17 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/recursion/exercises/</guid>
      <description>Hanoi の塔 以下に示す再帰的でないアルゴリズムがそれぞれ上述した再帰的なアルゴリズムと全く同じ操作を行うことを示してください。同じ円盤を、同じ杭から同じ杭に、同じ順番で動かすことを示してください。三つの杭を 0, 1, 2 で表し、n 個の円盤を 0 から 2 に移動させるとします (図 1.1 参照)。 n が偶数ならば、杭 1 と 2 の名前を交換する。i 番目のステップにおいて、杭 i \text{ mod } 3 を使わないで行える唯一の操作を行う。もし行える操作がないならば、全ての円盤が杭 i \text{ mod } 3 にあるので、パズルは解けている。 最初の操作として、n が偶数なら円盤 1 を杭 1 に、n が奇数なら円盤 1 を杭 2 に移動させる。それ以降は可能な操作のうち直前の操作で使わなかった円盤を使う (唯一の) ものを行う。もし可能な操作が存在しない場合、パズルは解けている。</description>
    </item>
    <item>
      <title>N クイーン - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/n_queens/</link>
      <pubDate>Tue, 08 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/n_queens/</guid>
      <description>バックトラッキングを使うアルゴリズムとして分かりやすいのが、有名な \pmb n クイーン問題を解くアルゴリズムです。通常の 8 x 8 のチェス盤に対するこの問題はドイツ人チェス愛好家 Max Bezzel (マックス・ベッツェル) によって (&#34;Schachfreund&#34; という偽名で) 1848 年に発表され、1869 年には一般的な n \times n の盤に対する問題が François-Joseph Eustache Lionnet (フランソワ=ジョゼフ・ウスターシュ・ライオネット) によって提案されました。 n クイーン問題とは、n \times n のチェス盤に n 個のクイーンをお互いを攻撃できないように置くという問題です。チェスを知らない読者のために言っておくと、クイーンがお互いを攻撃できないとは、どのクイーンも同じ列、行、対角線上に無いことを意味します。</description>
    </item>
    <item>
      <title>ゲーム木 - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/game_tree/</link>
      <pubDate>Wed, 09 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/game_tree/</guid>
      <description>正方形のマス目からなる n \times n の格子を使った次の単純な二人対戦ゲームを考えます1。このゲームは二人のプレイヤー Horace Fahlberg-Remsen (ホレース・ファールベルグ・レムセン) と Vera Rebaudi (ベラ・レバウディ)2が n 個の駒を盤の反対側に向かって移動させるゲームです。Horace の駒は左端の列に一列に並んだ状態でスタートし、水平方向に (horizontally) 右へ移動します。同じように Vera の駒は一番上の行に一列に並んだ状態からスタートし、一番下の列を目指して垂直に (vertically) 移動します。Horace は各ターンで二つの操作のうち一つを行うことができます。つまり、ある駒を一つ右の空のマスに移動させる move か、ある駒を Vera の駒をちょうど一つ飛び越して二つ隣の空のマスに移動させる jump です。全ての駒が move も jump もできない場合 Horace はパスとなります。同様に Vera は駒を一つ選んで下方向に move か jump を行うことができ、そのような操作ができなければパスです。最初に全ての駒を反対側まで移動させたプレイヤーの勝ちです (駒が盤の上にある限りプレイヤーのどちらかは合法的な手を打ち続けることができ、最終的に必ずどちらかのプレイヤーが勝つことを示すのは難しくありません) 。</description>
    </item>
    <item>
      <title>部分和 - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/subset_sum/</link>
      <pubDate>Thu, 10 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/subset_sum/</guid>
      <description>\textsc{SubsetSum} というもっと複雑な問題を考えましょう。正の整数の集合 X とターゲットとなる整数 T が与えられたときに、和が T となる X の部分集合を求める問題です。 条件を満たす部分集合が複数存在しても構わないことに注意してください。例えば X = \lbrace 8,6,7 ,5,3,10, 9 \rbrace で T = 15 のとき、答えは \textsc{True} であり、和が 15 になる部分集合は \lbrace 8, 7 \rbrace, \lbrace 7,5,3 \rbrace, \lbrace 6, 9 \rbrace の三つです。一方 X = \lbrace 11, 6, 5, 1, 7, 13, 12 \rbrace で T = 15 のとき、答えは \textsc{False} です。 自明なケースが二つあります。一つは T = 0 のときで、この場合すぐに \textsc{True} を答えることができます。なぜなら空集合は任意の集合 X の部分集合であり、要素の和が 0 だからです1。もう一つは &#34;T &amp;lt; 0&#34; または &#34;T \neq 0 かつ X が空集合&#34; のときで、この場合は答えが \textsc{False} であるとすぐに分かります。</description>
    </item>
    <item>
      <title>共通するパターン - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/the_general_pattern/</link>
      <pubDate>Fri, 11 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/the_general_pattern/</guid>
      <description>バックトラッキングを使ったアルゴリズムはどれも、特定の制約を満たす再帰的に定義された構造の構築を目標として決断の列 (decision sequence) を作っていきます。目標となる構造そのものが求める決断の列であることもありますが、常にそうだというわけではありません。これまでの例でいうと: n クイーン問題では、目標は各列におけるクイーンの配置の列であり、どの二つのクイーンもお互いを攻撃できてはいけないという制約がありました。アルゴリズムは各列について、クイーンをどこに置くかを決断します。</description>
    </item>
    <item>
      <title>分かち書き (Interpunctio Verborum) - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/string_segmentation/</link>
      <pubDate>Sat, 12 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/string_segmentation/</guid>
      <description>空白も句読点もない外国語の文章を単語ごとに区切りたいとします。例えば次の文章は、Lucius Licinius Murena (ルシウス・リキニウス・ムレナ) を弁護するために Cicero (キケロ) が紀元前 62 年に行った有名な演説を、古典ラテン語の標準的な記法 scriptio continua で表したものです1: PRIMVSDIGNITASINTAMTENVISCIENTIANONPOTESTESSERESENIMSVNTPARVAEPROPEINSINGVLISLITTERISATQVEINTERPVNCTIONIBUSVERBORVMOCCVPATAE ラテン語が流暢な読者は、この文字列を (現代的な正書法で) Primus dignitas in tam tenui scientia non potest esse; res enim sunt parvae, prope in singulis litteris atque interpunctionibus verborum occupatae とパースできるでしょう2。 このような文字列の分割のことを &#34;分かち書き&#34; と言います。分かち書きの問題は古典ラテン語と古典ギリシャ語だけが持つ問題ではなく、バリ語、ビルマ語、中国語、日本語、ジャバ語、クメール語、ラオス語、タイ語、チベット語、ベトナム語などの現代の言語でも同様の問題が発生します。似たような問題は他にも、句読点のない英語の文章の文への分割3、段落ごとに分割された文章を組版するときの行への分割、音声認識、手書き文字認識、曲線の単純化、そして一部の時系列解析などで生じます。ここでは可視化のしやすさを考えて、現代英語のアルファベットからなる文字列を英単語ごとに分割する問題を考えます。</description>
    </item>
    <item>
      <title>最長増加部分列 - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/longest_increasing_subsequence/</link>
      <pubDate>Sun, 13 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/longest_increasing_subsequence/</guid>
      <description>任意の列 S に対して、S からゼロ個以上の要素を削除してできる列を部分列 (subsequence) と言います。このとき残った要素の順番は変更せず、部分列の要素は S で隣り合っている必要はありません。 例えば街の大通りを車で通って信号の列 S を通り過ぎるとき、あなたが車を停めるのは赤になっている信号からなる S の部分列です。運が良ければ信号で全く停まらずに済みますが、その場合に対応する空列も S の部分列です。また運が悪くて全ての信号につかまった場合に対応する S 自身も S の部分列となります。</description>
    </item>
    <item>
      <title>最長増加部分列 テイク 2 - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/longest_increasing_subsequence_take_2/</link>
      <pubDate>Mon, 14 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/longest_increasing_subsequence_take_2/</guid>
      <description>最長増加部分列を見つけるのに使えるバックトラッキングを使ったアルゴリズムはこれだけではありません。入力配列を一つずつ走査していくのではなくて、出力配列を一つずつ構築していくこともできます。つまり、「A[i] は出力配列に含まれるか？」ではなく「出力配列における次の要素は何か？ そもそも存在するか？」を直接考えるということです。 この戦略を処理している途中に放り込まれた場合、次のような図を目にすることになります。黒いバーのすぐ左にある 6 がちょうど出力配列に入れられた要素であり、黒いバーより右にある要素のうちどれを次に出力配列に含まれるかをこれから決断することになります。</description>
    </item>
    <item>
      <title>最適二分探索木 - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/optimal_binary_search_trees/</link>
      <pubDate>Tue, 15 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/optimal_binary_search_trees/</guid>
      <description>この章で最後に説明するのは、再帰的なバックトラッキングと分割統治法を組み合わせた例です。 二分探索木の探索が成功した場合、その実行時間は探索する頂点の祖先1の数に比例することを思い出してください。このため探索の最悪実行時間は木の深さに等しくなります。したがって探索処理の最悪計算時間を小さくするには、木の高さは最小であるべきであり、理想は完璧にバランスの取れた木です。 しかし二分探索木が使われる多くの場合においては、重要となるのは最悪の場合の計算時間ではなくて、何度か行われる探索の平均実行時間であることが多いです。もし x が y よりも頻繁に探索されるのであれば、x を y よりも木の上の方に配置することで (たとえそれで木の深さが大きくなったとしても) 時間を節約できます。ある要素が他の要素に比べて格段に多く探索される場合、完全二分木は最適な形ではありません。深さが \Omega(n) の全くバランスの取れていない木が最適である可能性だってあります！</description>
    </item>
    <item>
      <title>練習問題 - バックトラッキング - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/backtracking/exercises/</link>
      <pubDate>Wed, 16 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/backtracking/exercises/</guid>
      <description>\textsc{SubsetSum} を一般化した次の問題に対する再帰的なアルゴリズムを説明してください。 正の整数からなる配列 X[1..n] と整数 T が与えられたときに、和が T となる X の部分集合の数を求める。 正の整数からなる二つの配列 X[1..n] と W[1..n] と T が与えられ、W[i] が X[i] の重さ (weight) を表しているときに、和が T となる X の部分集合の中で重さが最大となるものの重さを求める。和が T となる X の部分集合がない場合には - \infty を返す。 次にあげる文字列分割問題の変種に対する再帰的なアルゴリズムを説明してください。文字列を受け取ってそれが &#34;単語&#34; を表す場合に限って \textsc{True} を返すサブルーチン \textsc{IsWord} が使えると仮定してください。</description>
    </item>
    <item>
      <title>Mātrāvṛtta - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/matravrtta/</link>
      <pubDate>Sun, 20 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/matravrtta/</guid>
      <description>人類が再帰処理を使った一番古い例は、2000 年以上前のインドにおける詩の歩格と韻律に関する研究に見ることができます。古典サンスクリット語の詩では、音節 (akṣara) を軽い (laghu) 音節と重い (guru) 音節の二つに区別していました。mātrāvṛtta (マトラブラッタ)、 mātrāchandas (マトラチャンダス) などと呼ばれる歩格の詩では各行が同じ数の拍 (mātrā) を持ち、軽い音節は一拍、重い音節は二拍の長さを持ちます。</description>
    </item>
    <item>
      <title>♥ 余談: さらに高速な Fibonacci 数 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/aside_even_faster_fibonacci_numbers/</link>
      <pubDate>Mon, 21 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/aside_even_faster_fibonacci_numbers/</guid>
      <description>先ほど示したアルゴリズムは単純で魅力的でしたが、Fibonacci 数を計算する最速のアルゴリズムではありません。Fibbonacci 数を定義する再帰方程式を次のように行列の式として表すと、これまでより速いアルゴリズムが作れます: \[ \begin{bmatrix} 0 &amp; 1 \\ 1 &amp; 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} y \\ x + y \end{bmatrix} \] この式を言い換えると、二次元ベクトルに行列 \begin{bmatrix} 0 &amp; 1 \\ 1 &amp; 1 \end{bmatrix} を掛けることが \textsc{IterFibo2} の for ループを一回進めるのとちょうど同じ効果を持っているということです。よって行列を n 回掛ければ for ループを n 回反復できます: \[ \begin{bmatrix} 0 &amp; 1 \\ 1 &amp; 1 \end{bmatrix}^n \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} F_{n-1} \\ F_{n} \end{bmatrix} \] つまり n 個目の Fibonacci 数を計算する問題は \begin{bmatrix} 0 &amp; 1 \\ 1 &amp; 1 \end{bmatrix} の n 乗を計算する問題となります。二乗を反復して用いれば1、n 乗の計算には O(\log n) 回の &#34;乗算&#34; しか必要になりません。今の問題では &#34;乗算&#34; が 2 \times 2 の行列乗算であり、この行列乗算は定数回数の整数乗算と整数加算からなるので、F_{n} は \pmb{O(\log n)} 回の整数演算で計算できます。</description>
    </item>
    <item>
      <title>分かち書き (Interpunctio Verborum) 再訪 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/interpunctio_verborum_redux/</link>
      <pubDate>Tue, 22 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/interpunctio_verborum_redux/</guid>
      <description>次に考える動的計画法の例は、前章で触れた文字列分割の問題です。この問題の入力は文字列が (何らかの意味で) 単語かどうかを判定するサブルーチン \textsc{IsWord} と検査する文字列 A[1..n] であり、出力は A を単語列に分割できるかどうかでした。 この問題を解いたときに使ったのは接尾部分 A[i..n] が分割できる場合に限って \textsc{True} を返す関数 \mathit{Splittable}(i) であり、\mathit{Splittable}(1) を計算することで問題を解きました。この関数は次の再帰方程式を満たします: \[ \mathit{Splittable}(i) = \begin{cases} \textsc{True} &amp; \text{if } i &gt; n \\ \bigvee\limits_{j = i}^{n}(\mathit{IsWord} (i, j) \land \mathit{Splittable}(j + 1)) &amp; \text{それ以外} \end{cases} \] ここで \mathit{IsWord}(i, j) は \mathit{IsWord}(A[i..j]) を省略して書いたものです。この再帰方程式はバックトラッキングを使った再帰的なアルゴリズムに直接書き換えることができ、その場合 \mathit{IsWord} は最悪ケースで O(2^{n}) 回呼ばれます。</description>
    </item>
    <item>
      <title>パターン: 賢い再帰 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/the_pattern_smart_recursion/</link>
      <pubDate>Wed, 23 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/the_pattern_smart_recursion/</guid>
      <description>簡潔に言ってしまえば、動的計画法とは無駄のない再帰です。 たしかに動的計画法を使ったアルゴリズムは、途中で解く小問題の答えを配列や表などのデータ構造に保存します。しかしアルゴリズムを学ぶ生徒 (そして教師と教科書) は、この表を強調しすぎるという間違いを犯しています。表なら誰でも知っていて簡単に理解できるからそうするのでしょうが、こうするとはるかに重要な (そしてはるかに難しい) 問題である、正しい再帰方程式を見つける部分が軽視されてしまいます。正しい再帰方程式をメモ化している限り表が絶対に必須というわけではありませんが、もし再帰方程式が間違っていたら、アルゴリズムは絶対に正しく動きません。</description>
    </item>
    <item>
      <title>警告: 貪欲は愚か - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/warning_greed_is_stupid/</link>
      <pubDate>Thu, 24 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/warning_greed_is_stupid/</guid>
      <description>本当に運が良ければ、再帰方程式や表などを何も考えない貪欲な (greedy)アルゴリズムで問題が解けてしまうことがあります。貪欲なアルゴリズムはバックトラッキングを使ったアルゴリズムと同じように決断を積み重ねることで解を作りますが、再帰的な小問題を解くことなく愚直に一度だけ決断を行います。このアプローチはとても自然に見えるかもしれませんが、上手く行くことはまずありません。貪欲なアルゴリズムによって解ける最適化問題はとても稀です。にもかかわらず、多くの学生はバックトラッキングや動的計画法を使って解くべき問題の多くに対して貪欲な戦略を最初にひらめきます。</description>
    </item>
    <item>
      <title>最長増加部分列 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/longest_increasing_subsequence/</link>
      <pubDate>Fri, 25 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/longest_increasing_subsequence/</guid>
      <description>前の章で考えた問題の中に、与えられた数値の配列 A[1..n] に含まれる一番長い増加部分列の長さを求めるという問題があり、この問題に対するバックトラッキングを使ったアルゴリズムを二つ説明しました。どちらも最悪ケースの実行時間が O(2^{n}) でしたが、両方とも動的計画法を使うことで著しい高速化が可能です。 一つ目の再帰方程式: これは次？ 一つ目のバックトラッキングを使ったアルゴリズムが評価するのは、全ての要素が A[i] よりも大きい A[j..n] の増加部分列で一番長いものの長さを返す関数 \mathit{LISBigger}(i, j) です。この関数に対しては次の再帰方程式が成り立っていました: \[ \mathit{LISBigger}(i, j) = \begin{cases} 0 &amp; \text{if } j &gt; n \\ \mathit{LISBigger}(i, j + 1) &amp; \text{if } A[i] \geq A[j] \\ \max \left\lbrace \begin{array}{c} \mathit{LISBigger} (i, j + 1) \\ 1 + \mathit{LISBigger}(j, j + 1) \end{array} \right\rbrace &amp; \text{それ以外} \end{cases} \] 元の問題を解くには、門番 A[0] = -\infty を入力配列に追加した上で \mathit{LISBigger}(0, 1) を計算します。</description>
    </item>
    <item>
      <title>編集距離 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/edit_distance/</link>
      <pubDate>Sat, 26 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/edit_distance/</guid>
      <description>二つの文字列の間の編集距離 (edit distance)とは、一方の文字列をもう片方と同じ文字列に変形するために必要となる、文字の挿入、削除、置換の最小回数です。例えば \color{maroon}{\texttt{FOOD}} は次のように \color{maroon}{\texttt{MONEY}} に変形できるので、\color{maroon}{\texttt{FOOD}} と \color{maroon}{\texttt{MONEY}} の間の編集距離が最大でも 4 であることが分かります: \[ {\color{maroon}\texttt{FOOD}} \rightarrow {\color{maroon}\texttt{MOOD}} \rightarrow {\color{maroon}\texttt{MOND}} \rightarrow {\color{maroon}\texttt{MONED}} \rightarrow {\color{maroon}\texttt{MONEY}} \] この距離関数は暗号理論を研究していた Vladimir Levenshtein (ウラジミール・レーベンシュタイン) によって 1965 年に、音声認識を研究していた Taras Vintsyuk (タラス・ヴィンチュク) によって 1968 年に、そして生物学的配列を研究していた Stanisław Ulam (スタニスワフ・ウラム) によって 1972 年に、それぞれ独立に提案されました。そのため編集距離は Levenshtein 距離あるいは Ulam 距離と呼ばれることがあります (なぜか &#34;Vintsyuk 距離&#34; と呼ばれることはありません)。</description>
    </item>
    <item>
      <title>部分和問題 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/subset_sum/</link>
      <pubDate>Sun, 27 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/subset_sum/</guid>
      <description>前章で触れた部分和問題とは、正の整数の配列 X[1..n] と整数 T を受け取って X の部分集合で和が T となるものがあるかどうかを答える問題です。前章ではこの問題に対する再帰的なアルゴリズムを次の真偽値関数 SS(i,t) を使って定式化しました。この式では入力 X[1..n] と T が固定されています: \[ SS(i, t) = \textsc{True} \Leftrightarrow X[i..n] \text{ の部分集合で和が }t \text{ になるものが存在する} \] 計算すべきは SS(1,T) です。この関数は次の再帰方程式を満たしました: \[ SS(i, t) = \begin{cases} \textsc{True} &amp; \text{if } t = 0 \\ \textsc{False} &amp; \text{if } t &amp;lt; 0 \text{ or } i &gt; n \\ SS(i + 1, t) \lor SS(i + 1, t - X[i]) &amp; \text{それ以外} \end{cases} \]</description>
    </item>
    <item>
      <title>最適二分探索木 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/optimal_binary_search_trees/</link>
      <pubDate>Mon, 28 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/optimal_binary_search_trees/</guid>
      <description>前章で最後に考えたのは最適二分探索木の問題でした。入力は探索のためのソートされた鍵 A[1..n] と頻度 f[1..n] であり、f[i] が A[i] に対する探索の回数を表します。出力は入力の鍵に対する二分探索木であって全ての探索の合計時間を最小にするものです。 頻度を表す配列 f を固定し、A[i..k] の最適探索時間を \mathit{OptCost}(i,k) とすると、次の再帰方程式が成り立つことを前章で見ました: \[ \mathit{OptCost}(i, k) = \begin{cases} 0 &amp; \text{if } i &gt; k \\ \displaystyle \sum_{j=i}^{k}f[j] + \min\limits_{i \leq r \leq k} \left \lbrace \begin{array}{l} \mathit{OptCost}(i, r-1) \\ \ + \mathit{OptCost}(r+1, k) \end{array} \right \rbrace &amp; \text{それ以外} \end{cases} \] これから何をするのか想像がつくと思いますが、まずは和をどうにかします。</description>
    </item>
    <item>
      <title>木の上の動的計画法 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/dynamic_programming_on_trees/</link>
      <pubDate>Tue, 29 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/dynamic_programming_on_trees/</guid>
      <description>今まで見てきた動的計画法の例はどれも、再帰的な小問題の答えを格納するのに多次元配列を使っていました。しかし次の例が示すように、配列が常に一番良いデータ構造であるとは限りません。 グラフの独立集合 (independent set) とは、頂点の部分集合であってどの頂点の間にも辺がないものを言います。任意のグラフの最大独立集合を見つけるのは極端に難しい問題であり、実際これは十二章で扱う NP 困難な問題の中でも有名なものです。しかしグラフがある特別なクラスに属している場合には、最大独立集合を高速に求めることができます。例えばグラフが n 個の頂点からなる木ならば、最大独立集合は次に説明する方法を使って O(n) 時間で求められます。</description>
    </item>
    <item>
      <title>練習問題 - 動的計画法 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/dynamicprogramming/exercises/</link>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/dynamicprogramming/exercises/</guid>
      <description>ここにあげられた練習問題を解くときには ――さらに言えば動的計画法を使うアルゴリズムを新しく作るときにはどんなときでも――、 以前に示したステップを踏むことを強く勧めます。特に、準備が完了するまでは表や for ループについて考え始めないでください。ここで言う準備とは、実際に解くことになる再帰的な小問題の英語で書かれた明解な仕様と、それを使った元の問題に対する完全な解のことです1。 まず動くようにせよ。それから速くせよ。 列/配列 あなたの前世は南極大陸植民地 Nadiria 州で働くレジ係で、一日の大半を客にお釣りを渡す仕事に費やしていました2。南極では紙がとても貴重で高価なので、レジ係がお釣りを渡すときにはなるべく少ない紙幣を使わなければならないと法律で定められていました。植民地の創立者の一人が数秘術的な嗜好を持っていたおかげで、夢ドル (dream dollar) と呼ばれる Nadira で流通する紙幣は $1, $4, $7, $13, $28, $52, $91, $365 という金額です。</description>
    </item>
    <item>
      <title>テープへのファイルの保存 - 貪欲アルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/greedy_algorithm/stroing_files_on_tape/</link>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/greedy_algorithm/stroing_files_on_tape/</guid>
      <description>磁気テープ1に n 個のファイルを保存したいとします。テープに保存したファイルは後でユーザーが読み込みますが、テープからのファイルの読み込みはディスクからの読み込みのようにはいきません。磁気テープを読み込むときには、まず目的のファイルがあるところまでテープを送る必要があるからです。 L[1..n] でファイルの長さを表すことにして、i 番目のファイルの長さが L[i] だとします。ファイルが 1 から n という順番で保存されていたとすると、k 番目のファイルにアクセスするコストは次の式で表されます: \[ \mathit{cost}(k) = \sum_{i=1}^{k} L[i] \] k 番目のファイルを読むには k 番目までのファイルを送らなくてはいけないということが、この関数で表されています。それぞれのファイルに対する探索の頻度が同じだと仮定すれば、ランダムなファイルに対する探索コストの期待値を求められます: \[ E[\mathit{cost}] = \sum_{k=1}^{n} \frac{\mathit{cost}(k)}{n} = \sum_{k=1}^{n} \sum_{i=1}^{k} \frac{L[i]}{n} \]</description>
    </item>
    <item>
      <title>講義のスケジューリング - 貪欲アルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/greedy_algorithm/scheduling_classes/</link>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/greedy_algorithm/scheduling_classes/</guid>
      <description>次の例はもう少し複雑です。あなたは情報科学をドロップアウトして応用カオス理論を専攻することに決めたとします。応用カオス理論専攻では全ての講義が毎週同じ日に開校されており、この日は学生から「Soberday (素面日)」と呼ばれていました (興味深いことに、学部はこの名前を使いませんでした)。講義はそれぞれ異なった開始時刻と終了時刻を持ちます: 例えば AC 101 (トイレットペーパー景観設計 &#34;Toilet Paper Landscape Architecture&#34;) は 10:27 pm に始まって 11:51 pm に終わり、AC 666 (終末の内在化 &#34;Immanentizing the Eschaton&#34;) は 4:18 pm に始まって 4:22 pm に終わる、などです。できるだけ早く卒業したいあなたは、なるべく多くの講義を取りたいとします (応用カオス理論専攻の講義では履修さえすれば何もしなくても単位が取得できます)。大学の履修登録用コンピューターは時間が被っている講義を取らせてくれず、この &#34;機能&#34; を書き換えてくれる友達も見当たりません。取るべき講義はどれでしょうか？</description>
    </item>
    <item>
      <title>共通するパターン - 貪欲アルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/greedy_algorithm/general_pattern/</link>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/greedy_algorithm/general_pattern/</guid>
      <description>講義のスケジューリングに対する貪欲アルゴリズムの正しさの証明は、テープをソートするアルゴリズムの正しさの証明と同じ構造を持っています。つまり、帰納法を使った交換の議論 (exchange argument) です: 貪欲な解と異なる最適な解の存在を仮定する。 二つの解の &#34;最初の&#34; 違いを見つける。 最適な選択と貪欲な選択を交換しても解が悪くならないことを示す (良くならなくても構わない)。 この議論と帰納法を組み合わせると最適な解が貪欲な解を含むことを示すことができ、貪欲な解の性質からその二つが等しいことが言えます。スケジュールの問題のように、貪欲な解を狭義に改善する最適解が存在しないことを示すのに追加のステップが必要になることもあります。</description>
    </item>
    <item>
      <title>Huffman 符号 - 貪欲アルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/greedy_algorithm/huffman_codes/</link>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/greedy_algorithm/huffman_codes/</guid>
      <description>二進符号 (binary code) は 0 と 1 からなる文字列 (符号) をアルファベットに対応させます。任意の符号が他の符号の接頭語になっていないとき、その二進符号は接頭独立 (prefix-free) であると言います (紛らわしいのですが、接頭独立な符号は接頭符号 (prefix code) と呼ばれることが多いです)。例えば 7 ビット ASCII コードと Unicode の UTF-8 はどちらも接頭独立な二進符号です。一方モールス信号は \cdot と - から構成されるものの、\color{maroon}{\texttt{E}} (・) が \color{maroon}{\texttt{I}} (・・) と \color{maroon}{\texttt{S}} (・・・) と \color{maroon}{\texttt{H}} (・・・・) の接頭語なので接頭独立ではありません1。</description>
    </item>
    <item>
      <title>安定マッチング - 貪欲アルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/greedy_algorithm/stable_matching/</link>
      <pubDate>Thu, 31 Jan 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/greedy_algorithm/stable_matching/</guid>
      <description>毎年数千人の新米医師が合衆国中の病院のインターンとなります。 二十世紀の最初の 50 年の間に良い医師を求める病院同士の競争は激しさを増していき、医学学校にいる生徒へのインターンシップの勧誘はどんどん早くなっていきました。時には二年生の生徒にまで締め切りの短い勧誘が来ることがあったといいます。このような状況を受けて、1940 年代に全国の医学校は生徒が 4 年生の特定の日になるまではインターンの情報を解禁しないということで合意しました。</description>
    </item>
    <item>
      <title>練習問題 - 貪欲アルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/greedy_algorithm/exercises/</link>
      <pubDate>Fri, 01 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/greedy_algorithm/exercises/</guid>
      <description>読者への注意: 貪欲アルゴリズムを使って解けない問題が混じっています！ また貪欲アルゴリズムを説明、解析するときには正しさの証明を必ず付けてください。証明は通常交換の議論の形をしているはずです。普通の問題では正しさの証明を要求しない (私の担当しているような) 講義において、この証明は特に重要となります。 講義のスケジューリング問題に対する \textsc{GreedySchedule} アルゴリズムは、この問題に対する唯一の貪欲アルゴリズムであるというわけではありません。このアルゴリズムとは異なる貪欲な戦術をいくつか次に示します。それぞれについて、その戦術が常に最適なスケジュールを生成するならそのことを証明し、そうでないなら最適なスケジュールが出力されない入力のうちできる限り小さいものを示してください。アルゴリズムの途中で同着の講義が生じた場合にはランダムに選択する (あなたが選択を管理することはできない) と仮定してください。 [ヒント: 正しいアルゴリズムは三つだけです。]</description>
    </item>
    <item>
      <title>導入と歴史 - 基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/introduction_and_history/</link>
      <pubDate>Sun, 03 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/introduction_and_history/</guid>
      <description>グラフとは組 (pair) を集めたものです ――整数の組、人の組、都市の組、星の組、国の組、科学論文の組、ウェブページの組、ゲームの配置の組、再帰的な小問題の組、さらにグラフの組だって考えます。グラフを図示するときに一番よく使われる方法と対応して、組にされるオブジェクトは頂点 (vertex) あるいはノード (node) と呼ばれ、組そのものは辺 (edge) あるいは弧 (arc) と呼ばれます。しかしもちろん、オブジェクトと組はどんなものでも構いません。 人類が初めてグラフを使った例の一つは、道路ネットワークを表した地図です。ローマ帝国時代、ローマの技師たちはヨーロッパ、西アジア、中央アジア、北アフリカを横断する 400,000km 以上に及ぶ道路ネットワークを構築しました。この道路を利用する旅人はイティネラリア (itineraria) と呼ばれる、道路沿いにある目印や道路の長さを図示した巻物を携帯していました。ポイティンガー図 (Tabula Peutingeriana) はローマのクルスス・プブリクス (Cursus publicus、 ローマ帝国の駅伝制度) を図示した十三世紀の巻物ですが、これのもとになったのは一世紀のアウグストゥス・カエサルの治世中に作成されたイティネラリア・ピクタム (itinerarium pictum) を五世紀に改訂したものであると広く信じられています。ポイティンガー図は地理的に正しい地図ではありません ――歴史家の間にはそもそもこれを地図と呼んでもいいのかという議論さえあります！―― が、道路ネットワークを抽象的に表現しており、その意味では現代の地下鉄の地図と同じと言えます。</description>
    </item>
    <item>
      <title>基本的な定義 - 基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/basic_definitions/</link>
      <pubDate>Sun, 03 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/basic_definitions/</guid>
      <description>きちんと述べると、 (単純) グラフとは集合の組 (V, E) であって、 V が任意の空でない有限の集合で、E が V の要素の組の集合であるものです。ここで V の要素は 頂点 (vertex)1 またはノード (node) と呼ばれ、E の要素は辺 (edge) と呼ばれます。無向グラフ (unordered graph) では辺は順序の無い組、つまり大きさ 2 の集合です。これからは頂点 u と v の間の無向辺を \lbrace u, v\rbrace ではなく uv と書きます。また u から v へ向かう有向辺は (u, v) ではなく u \rightarrow v と書きます。</description>
    </item>
    <item>
      <title>グラフの表現と例 - 基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/representations_and_examples/</link>
      <pubDate>Sun, 03 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/representations_and_examples/</guid>
      <description>グラフを可視化する最も簡単な方法は描くことです。描いたグラフのことを、グラフの描画 (drawing) と呼びます。グラフの描画は各頂点を平面上の (普通小さい円などで表される) 点に、各辺を頂点間の直線 (または曲線) に対応させます。どの辺も交わらないようにグラフを描画できるとき、グラフは平面 (planar) であると言い、そのような描画を埋め込み (embedding) と呼びます1。同じグラフでも描画はいくつもあり得るので、特定の描画とグラフを混同しないようにしてください。特に、平面グラフにも平面的でない描画があり得ます！ 図 5.413 個の頂点と 18 個の辺、2 つの成分を持つ非連結な平面グラフの二つの描画 (埋め込みなのは左の描画だけ) しかし、グラフを上手く表現できるのは描画だけというわけではありません。例えば幾何学的なオブジェクトを使えば交差グラフ (intersection graph) が定義できます。交差グラフの頂点はその幾何学的なオブジェクトであり、その間に辺があるのはオブジェクト同士が交差するときだけです。特定のグラフが交差グラフとして表せるかどうかは頂点としてどんなオブジェクトを考えているかによって変化し、異なる幾何学的オブジェクト (線分、長方形、円など) は異なるグラフのクラスを定義します。特に有用な交差グラフは頂点が数直線上の区間に対応する区間グラフ (interval graph) であり、区間グラフの辺は二つの区間が重なるときに限って存在します。</description>
    </item>
    <item>
      <title>データ構造 - 基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/data_structure/</link>
      <pubDate>Mon, 04 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/data_structure/</guid>
      <description>実際のプログラムでグラフを扱うときは、たいていは隣接リストと隣接行列という二つのよく知られたデータ構造のどちらかを使ってグラフを表現することになります。高いレベルで抽象的に言うと、どちらのデータ構造も頂点を添え字とした配列です。各頂点に 1 から V のユニークな整数を割り当てて、この整数と頂点を同一視します。 隣接リスト グラフの格納に使われる最も一般的なデータ構造は隣接リスト (adjacency list) です。隣接リストはリストの配列であり、配列の各要素が一つの頂点に隣接する全ての頂点 (有向グラフの場合は出隣接点1) を保持します。無向グラフでは、全ての辺 uv は隣接リストに二度格納されます: 一度は u の隣接リストに、もう一度は v の隣接リストに格納されるからです。これに対して無向グラフでは、辺 u \rightarrow v はその尾 u の隣接リストに一度だけ格納されます。無向グラフと有向グラフの両方において、隣接リストに必要になる空間量は O(V+E) です。</description>
    </item>
    <item>
      <title>何か優先探索 - 基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/whatever_first_search/</link>
      <pubDate>Mon, 04 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/whatever_first_search/</guid>
      <description>ここまではグラフに対する局所的な操作のみを考えてきましたが、ここからはグラフ全体に関する操作や性質を考えます。グラフ全体に関係する最も基礎的な性質は到達可能性 (reachablity) です。到達可能性問題では、グラフ G と頂点 s が与えられたときにどの頂点が s から到達可能か、つまり s からの路が存在する頂点はどれかを考えます。まずは無向グラフを考え、有向グラフは節の終わりで軽く触れることにします。無向グラフでは、s から到達可能な頂点は s の成分に含まれる頂点に等しくなります。</description>
    </item>
    <item>
      <title>重要な変種 - 基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/important_variants/</link>
      <pubDate>Mon, 04 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/important_variants/</guid>
      <description>スタック: 深さ優先 &#34;袋&#34; としてスタックを使って何か優先探索を実装した場合、以前に紹介した深さ優先探索となります。スタックでは挿入 (プッシュ) と削除 (ポップ) をそれぞれ O(1) 時間で行えることから、アルゴリズム全体の実行時間は \pmb{O(V + E)} です。親へ向かう辺を集めることで形成される全域木は深さ優先全域木 (depth-first spanning tree) と呼ばれます。この全域木の正確な形は探索を始める頂点と for ループにおいて辺を選ぶ順番に依存しますが、一般的に言って、深さ優先全域木は細長い形になります。深さ優先探索の重要な特徴と応用については六章で見ます。</description>
    </item>
    <item>
      <title>グラフへの帰着 - 基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/graph_reductions/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/graph_reductions/</guid>
      <description>塗りつぶし (Flood Fill) 何か優先探索の現代的な例のうち最も古いものの一つは、Edward Moore (エドガー・ムーア) によって 1950 年代中ごろに提案された、ピクセルマップに対する塗りつぶし (flood fill) 演算です。ピクセルマップ (pixel-map) とは各要素が色を表す二次元配列であり、配列の要素は picture elements (画素) を省略してピクセル (pixel) と呼ばれます1。ピクセルマップの連結領域 (connected region) とは同じ色を持つピクセルの連結な部分集合のことです。ここで二つのピクセルが連結であるとは、それらが垂直または平行に隣り合っていることを言います。塗りつぶし演算とは連結領域内の全てのピクセルの色を新しい色に変更する操作であり、多くのラスタグラフィックス編集ソフトウェアでは絵具の缶で表されています。塗りつぶし演算の入力は対象の領域に含まれるピクセルの一つを表す添え字 i, j と新しい色です。</description>
    </item>
    <item>
      <title>練習問題 - 基本的なグラフアルゴリズム - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/basic_graph_algorithms/exercises/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/basic_graph_algorithms/exercises/</guid>
      <description>グラフ 次の定義が全て同値なことを示してください。 木とは連結な非巡回グラフである。 木とは一成分からなる森である (森は非巡回グラフ)。 木とは辺が V-1 個以下の連結グラフである。 木とは最小連結グラフである: 任意の辺を削除するとグラフが非連結となる。 木とは辺が V-1 個以上の非巡回グラフである。 木とは最大非巡回グラフである: 任意の二つの頂点の間に辺を追加すると閉路ができる。 n&gt;2 個の頂点を持つ任意の連結非巡回グラフには少なくとも二つの次数 1 の点が存在することを示してください。 &#34;木&#34; あるいは &#34;葉&#34; という単語、および木のよく知られた性質を使わずに、&#34;連結&#34; と &#34;非巡回&#34; の定義だけを使って示してください。</description>
    </item>
    <item>
      <title>行きがけ順と帰りがけ順 - 深さ優先探索 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/depth_first_search/preorder_and_postorder/</link>
      <pubDate>Wed, 06 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/depth_first_search/preorder_and_postorder/</guid>
      <description>根付き木に対する深さ優先探索によって行きがけ順 (preorder) および帰りがけ順 (postorder) が定義できることは知っているはずです。同じような走査順序は任意の (連結であるとは限らない) 有向グラフに対しても定義できます。次のようにカウンターを使います: procedure \texttt{DFSAll}(G) \color{#2D2F91}{\mathit{clock} \leftarrow 0} for 頂点 v do v の印を消す for 頂点 v do if v に印が付いていない then \mathit{clock} \leftarrow\texttt{DFS}(v, \mathit{clock}) procedure \texttt{DFS}(v, \mathit{clock}) v に印を付ける \color{red}{\mathit{clock} \leftarrow \mathit{clock} + 1;\ \mathit{v.pre} \leftarrow \mathit{clock}} for v \rightarrow w の形をした辺 do if w に印が付いていない then</description>
    </item>
    <item>
      <title>閉路の検出 - 深さ優先探索 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/depth_first_search/detecting_cycles/</link>
      <pubDate>Fri, 08 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/depth_first_search/detecting_cycles/</guid>
      <description>閉路を含まない有向グラフを有向非巡回グラフ (directed acyclic graph, DAG)と呼びます。ある頂点に向かう辺が無い場合、その頂点をソース (source) と言い、ある頂点から出る辺が無い場合、その頂点をシンク (sink) と言います。辺が一つも付いていない孤立した頂点はソースかつシンクです。任意の DAG には少なくとも一つのソースとシンクがありますが、複数あることもあります: 例えば辺が無いグラフでは全ての頂点がソースかつシンクです。 図 6.6有向非巡回グラフ (頂点 e, f, j がソース、頂点 b,c,p がシンク) 前節で示した、\mathit{u.post} &amp;lt; \mathit{v.post} を満たす任意の辺 u \rightarrow v には v から u への有向路があるという事実を思い出してください。この事実を使えば、頂点を帰りがけ順に並べてから全ての辺を総当たりで調べることで与えられた有向グラフが DAG かどうかを O(V+E) 時間で判定できます。</description>
    </item>
    <item>
      <title>トポロジカルソート - 深さ優先探索 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/depth_first_search/topological_sort/</link>
      <pubDate>Fri, 08 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/depth_first_search/topological_sort/</guid>
      <description>有向グラフ G のトポロジカル順序とは、頂点の間の全順序 \prec であって全ての辺 u \rightarrow v に対して u \prec v が成り立つものを言います。くだけて言うと、トポロジカル順序とは全ての辺が右から左に行くように頂点を一列に並べたものです。G が有向閉路を持っている場合にはトポロジカル順序が存在しないのは定義から明らかです ――閉路に含まれる頂点のうち一番右にある頂点からは左に向かう辺が出てしまいます！ 有向グラフ G の任意の帰りがけ順序を考えます。前述の解析より、\mathit{u.post} &amp;lt; \mathit{v.post} を満たす任意の辺 u \rightarrow v に対して G には v から u への有向路が含まれます。したがってもし G が非巡回ならば、全ての辺 u \rightarrow v に対して \mathit{u.post} &gt; \mathit{v.post} です。ここから任意の有向非巡回グラフ G がトポロジカル順序を持つことが言えます。具体的には、G の任意の帰りがけ順序を逆にしたものが G のトポロジカル順序です。</description>
    </item>
    <item>
      <title>メモ化と動的計画法 - 深さ優先探索 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/depth_first_search/memoization_and_dynamic_programming/</link>
      <pubDate>Fri, 08 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/depth_first_search/memoization_and_dynamic_programming/</guid>
      <description>トポロジカルソートを使うと多くの動的計画法のアルゴリズムを表現できます。ここでは例として依存グラフを考えます。以前触れた通り、再帰方程式の依存グラフ (dependency graph) とは、頂点が再帰的な小問題に対応する有向グラフであって、小問題同士を結ぶ辺があるのは始点の問題を解くときに終点の問題の答えが必要になるときだけであるものです。依存グラフに閉路があるとナイーブな再帰的アルゴリズムが停止しなくなるので、依存グラフは必ず非巡回です。</description>
    </item>
    <item>
      <title>強連結性 - 深さ優先探索 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/depth_first_search/strong_connectivity/</link>
      <pubDate>Sat, 09 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/depth_first_search/strong_connectivity/</guid>
      <description>有向グラフにおける連結性の正式な定義に戻りましょう。有向グラフ G の頂点 u が他の頂点 v に到達するとは、G に u から v への有向路があることを言い、\mathit{reach}(u) で u から到達できる頂点全体の集合を表しました。二つの頂点 u, v が強連結 (strongly connected) であるとは、u が v に到達し、かつ v が u に到達することを言います。有向グラフが強連結であるとは全ての頂点の組が強連結であることと同値です。</description>
    </item>
    <item>
      <title>線形時間で強連結成分を求める - 深さ優先探索 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/depth_first_search/strong_components_in_linear_time/</link>
      <pubDate>Sat, 09 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/depth_first_search/strong_components_in_linear_time/</guid>
      <description>有向グラフの強連結成分を O(V+E) 時間で計算するアルゴリズムはいくつかありますが、どれも突き詰めれば次の観察に基づいています: 命題 6.2 任意の有向グラフ G の深さ優先走査を一つ固定する。G の任意の強連結成分 C には C の中に親を含まない頂点がちょうど一つ含まれる (この頂点の親は他の強連結成分に含まれるか、そうでなければ親を持たない)。 証明 G の任意の強連結成分を C とする。適当な頂点 v \in C から w \in C への任意の路を考える。この路上の全ての頂点は w に到達でき、したがって C の全ての頂点に到達できる。対称的に、この路上の全ての頂点は v から到達でき、したがって C の全ての頂点から到達できる。よってこの路上の全ての頂点も C に属する。</description>
    </item>
    <item>
      <title>練習問題 - 深さ優先探索 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/depth_first_search/exercises/</link>
      <pubDate>Sun, 10 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/depth_first_search/exercises/</guid>
      <description>深さ優先探索・トポロジカルソート・強連結成分 有向グラフ G の逆 \mathit{rev}(G) を O(V+E) 時間で計算するアルゴリズムを説明してください。 任意の有向グラフ G について、強連結成分グラフ \mathit{scc}(G) が非巡回であることを示してください。 任意の有向グラフ G について、\mathit{scc}(\mathit{rev}(G)) = \mathit{rev}(\mathit{scc}(G)) を示してください。 有向グラフ G を固定します。G の任意の頂点 v について、S(v) で v を含む G の強連結成分を表すことにします。G の任意の頂点 u, v について、G において v が u に到達可能なことと \mathit{scc}(G) において S(v) が S(u) に到達可能なことが同値だと示してください。</description>
    </item>
    <item>
      <title>辺の重みが異なる場合 - 最小全域木 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/minimum_spanning_trees/distinct_edge_weights/</link>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/minimum_spanning_trees/distinct_edge_weights/</guid>
      <description>最小全域木問題が厄介なのは、グラフに重みが同じ最小全域木が複数存在することがあり得る点です。例えば G の全ての辺の重みが 1 の場合、G の全ての全域木が重み V-1 の最小全域木です。最小全域木が複数あるとアルゴリズムの開発が複雑になるので、最小全域木が一つだけだと仮定できれば話が単純になります。 幸いにも、最小全域木が唯一であることを保証する簡単な条件があります。 命題 7.1 連結グラフ G の辺の重みが全て異なる場合、G は唯一の最小全域木を持つ1。</description>
    </item>
    <item>
      <title>唯一の全域最小木アルゴリズム - 最小全域木 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/minimum_spanning_trees/the_only_minimum_spanning_tree_algorithm/</link>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/minimum_spanning_trees/the_only_minimum_spanning_tree_algorithm/</guid>
      <description>最小全域木を計算するアルゴリズムはたくさんありますが、そのほとんどはこれから説明する一般的な戦略のインスタンスと言うことができます。これはグラフ探索アルゴリズムにおいて、たくさんの異なるアルゴリズムが何か優先探索という一般的なアルゴリズムの変種だったことに似ています。 一般的な最小全域木アルゴリズムは入力グラフ G の非巡回部分グラフ F を管理します。F は中間全域森 (intermediate spanning forest) と呼ばれ、アルゴリズムの各時点において次の不変条件を満たします: F は G の最小全域木の部分グラフである。</description>
    </item>
    <item>
      <title>Borůvka のアルゴリズム - 最小全域木 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/minimum_spanning_trees/boruvka_algorithms/</link>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/minimum_spanning_trees/boruvka_algorithms/</guid>
      <description>最も古くそしておそらくは最も単純な最小全域木アルゴリズムは、チェコ人数学者 Otakar Borůvka (オタカール・ブルーフカ) によって 1926 年に発見されました。彼がこのアルゴリズムを発見したのは、いくつかの都市を最小の電線で結ぶ電気ネットワークを作るにはどうすればよいかと Jindřich Saxel という人物に尋ねられてから約一年後のことでした1。このアルゴリズムは Gustav Choquet (グスタフ・ショケ) によって 1938 年に、Józef Łukaszewicz (ヨゼフ・ウカセビッチ) を代表とするポーランド人数学者らによって 1951 年に、George Sollin (ジョージ・ソリン) によって 1961 年に再発見されています。Sollin は再発見を公表することはありませんでしたが、このアルゴリズムを詳しく説明したグラフアルゴリズムの最初期の教科書が彼を発見者だとしていたので、このアルゴリズムは &#34;Sollin のアルゴリズム&#34; と呼ばれることがあります。</description>
    </item>
    <item>
      <title>Jarník の (Prim の) アルゴリズム - 最小全域木 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/minimum_spanning_trees/jarkins_prims_algorithm/</link>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/minimum_spanning_trees/jarkins_prims_algorithm/</guid>
      <description>次に古い最小全域木アルゴリズムはチェコ人数学者 Vojtěch Jarník (ヴォイチェフ・ヤルニク) によって 1925 年に、Borůvka に送った手紙の中で初めて示されました。Jarník は翌年にこの発見を公表しています。同じアルゴリズムは Joseph Kruskal (ジョゼフ・クラスカル) によって 1956 年に、(おそらくは) Robert Prim (ロバート・プリム) によって 1957 年に、Harry Lobermand (ハリー・ロバーマンド) と Arnold Weinberger (アーノルド・ワインバーガー) によって 1957 年に、そして Edsger Dijkstra (エドガー・ダイクストラ) によって 1958 年にそれぞれ独立に再発見されました。Prim, Lobermand, Weinberger, Dijkstra は後に Kruskal の論文のことを知り、引用もしていますが、Kruskal は同じ論文で他に二つの最小全域木アルゴリズムを提案していたので、このアルゴリズムは &#34;Prim のアルゴリズム&#34; あるいは &#34;Prim/Dijkstra のアルゴリズム&#34; と呼ばれることが多いです (1958 年当時 Dijkstra には自分の名前が (事実に反する形で) 付けられた別のアルゴリズムが既にあったのですが)。</description>
    </item>
    <item>
      <title>Kruskal のアルゴリズム - 最小全域木 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/minimum_spanning_trees/kruskals_algorithms/</link>
      <pubDate>Wed, 13 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/minimum_spanning_trees/kruskals_algorithms/</guid>
      <description>最後に紹介する最小全域木アルゴリズムは Joseph Kruskal (ジョセフ・クラスカル) によって 1956 年に、彼が Jarník のアルゴリズムを再発見したのと同じ論文で発表されました。Kruskal がこの論文を書いた動機は、プリンストンの数学部門中を &#34;飛び回って&#34; いた &#34;起源が曖昧な&#34; Borůvka の原著論文の、&#34;タイプライターを使った翻訳&#34; を作ることでした。Kruskal は Borůvka のアルゴリズムを &#34;不必要に難解&#34; だと思っていたようです1。</description>
    </item>
    <item>
      <title>練習問題 - 最小全域木 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/minimum_spanning_trees/exercises/</link>
      <pubDate>Wed, 13 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/minimum_spanning_trees/exercises/</guid>
      <description>G = (V, E) を辺に重みの付いた任意の接続グラフとします。 G の任意の閉路に対して、G の最小全域木がその閉路で最大の重みを持つ辺を含まないことを示してください。 証明または反証してください:「G の任意の閉路に対して、G の最小全域木にはその閉路で最小の重みを持つ辺が含まれる」 この章では入力グラフの辺が同じ重みを持たないと仮定し、これによって最小全域木の唯一性を保証してきました。実は、より弱い条件を使っても MST の唯一性を保証できます。</description>
    </item>
    <item>
      <title>最短路木 - 最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/shortest_path/shortest_path_trees/</link>
      <pubDate>Wed, 13 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/shortest_path/shortest_path_trees/</guid>
      <description>ある頂点から別の頂点への最短路を計算するほとんど全てのアルゴリズムが実際に解いているのは、次に説明する単一ソース最短路 (single source shortest path, SSSP) 問題です。これは s からグラフに含まれる他の全ての頂点への最短路を求める問題であり、通常は s を根とする最短路木 (shortest path tree) を見つけることで解かれます。最短路木には求めるべき全ての最短路が含まれます。 各頂点への最短路がユニークならばそれらの最短路を合わせると木になるというのはすぐに分かります。このような場合には、最短路の任意の部分路もまた最短路となるためです。またいずれかの頂点に対する最短路が複数ある場合でも、全ての頂点への最短路の和集合が木になるように各頂点への最短路を必ず選ぶことできます。つまり、もし s から u への最短路と s から v への最短路が最初の部分で一致していて、途中で離れ、最後にまた一致するようになっている場合には、路を改変することで二つの最短路が一度だけ一致するようにできます。</description>
    </item>
    <item>
      <title>唯一の SSSP アルゴリズム - 最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/shortest_path/the_only_sssp_algorithm/</link>
      <pubDate>Thu, 14 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/shortest_path/the_only_sssp_algorithm/</guid>
      <description>グラフの探索問題や最小全域木問題と同じように、多くの異なる SSSP アルゴリズムは次に示す一般的なアルゴリズムの特殊ケースとして表現できます。このアルゴリズムは Lester Ford (レスター・フォード) によって 1956 年に、そして Geroge Dantzig (ジョージ・ダンツィグ) によって 1957 年に、George Minty (ジョージ・ミンティ) によって 1958 年にそれぞれ独立に発見されました1。このアルゴリズムではグラフの各頂点 (v) が次の二つの値を保存し、これらの値によって (s) から (v) への暫定的な最短路が表されます: \mathit{dist}(v) は暫定的な最短路 s \rightsquigarrow v があればその長さを表す。暫定的な最短路が無いなら \infty である。</description>
    </item>
    <item>
      <title>重み無しグラフ: 幅優先探索 - 最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/shortest_path/unweighted_graphs_bredadth_first_search/</link>
      <pubDate>Thu, 14 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/shortest_path/unweighted_graphs_bredadth_first_search/</guid>
      <description>最も単純な最短路問題は全ての辺の重みが 1 で、路の長さが辺の数に等しい場合です。この特殊ケースではこれまでに説明したグラフ探索アルゴリズムの一つ幅優先探索 (breadth-first search, BFS) を使って答えを見つけられます。 幅優先探索は Edward Moore (エドワード・ムーア) によって発見されたとされることが多いです。実際彼は幅優先探索を (&#34;Algorithm A&#34; として) 1957 年に発表しており、これは初めて公表された迷路の最短路を見つけるための手続きです1。VLSI の配線やロボットの経路計画の文脈では、幅優先探索が Chin Yang Lee (チン・ヤン・リー) によって発見されたとされることもあります。彼が 1961 年に Moore の &#34;Algorithm A&#34; の応用を (きちんと Moore に言及して) いくつか発表しているためです。しかし Konrad Zuse (コンラート・ツーゼ) は 1945 年、Moore が迷路について考えを巡らせる十年以上前に、非連結グラフの成分を数えてラベルを付ける処理の幅優先探索の実装を提案しています3。</description>
    </item>
    <item>
      <title>有向非巡回グラフ: 深さ優先探索 - 最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/shortest_path/dag_depth_first_search/</link>
      <pubDate>Fri, 15 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/shortest_path/dag_depth_first_search/</guid>
      <description>有向非巡回グラフの最小路を計算するのは簡単であり、辺に重みが付いていても、その重みが負であったとしても簡単です (負閉路を気にする必要ありません。定義により、閉路が無いのですから！)。実はこれは完全に標準的な動的計画法のアルゴリズムです。 G を辺に重みの付いた有向非巡回グラフ、s を固定された開始頂点とします。任意の頂点 v に対して、\mathit{dist}(v) で G における s から v への最短路の長さを表すことにします。するとこの関数は次の単純な再帰方程式を満たします: \[ \mathit{dist}(v) = \begin{cases} 0 &amp; \text{if } v = s \\ \min\limits_{u \rightarrow v} (\mathit{dist}(u) + w(u \rightarrow v)) &amp; \text{それ以外} \end{cases} \] 実は、この等式は全ての有向グラフについて成り立ちます。しかしこの式が再帰方程式として定義されるのは有向非巡回グラフに対してだけです (入力グラフ G が閉路を持っているとき、この関数は無限ループに入ってしまうため)。G が DAG ならば、全ての再帰的な呼び出しはトポロジカル順序で前にある頂点を訪れるだけで必ず評価できます。こうして出来上がるアルゴリズムを次に示します:</description>
    </item>
    <item>
      <title>最良優先: Dijkstra のアルゴリズム - 最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/shortest_path/best_first_dijkstras_algorithm/</link>
      <pubDate>Fri, 15 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/shortest_path/best_first_dijkstras_algorithm/</guid>
      <description>幅優先探索では FIFO を使っていましたが、この FIFO を頂点 v に対する鍵が暫定的な距離 \mathit{dist}(v) であるような優先度付きキューで置き換えると、別の最短路アルゴリズムが手に入ります。1957 年にこのアルゴリズムを初めて &#34;出版&#34; したのは Michael Leyzorek (マイケル・レイゾレク) を中心とするケース工科大学の研究者チームで、米陸軍電子機器性能証明実験場の戦闘開発部署に対する定期報告書でのことでした。同じアルゴリズムは Edsger Dijkstra (エドガー・ダイクストラ) によって 1956 年に独立に発見され (1959 年に出版され)、1960 年には George Minty (ジョージ・ミンティ) によって、同じく 1960 年には P.D. Whiting (P・D・ホワイティング) と J.A. Hillier (J・A・ヒラー) によっても独立に発見されています。また 1958 年には George Dantzig (ジョージ・ダンツィグ) がほとんど同じアルゴリズムを示しています。古い文献ではこのアルゴリズムが &#34;Minty のアルゴリズム&#34; と呼ばれることもありますが、現在では世界中で &#34;Dijkstra のアルゴリズム&#34; と呼ばれており、スティグラーの法則に完全に従っています1。Dijkstra のアルゴリズムの疑似コードを次に示します:</description>
    </item>
    <item>
      <title>スベテの辺を緩和する: Bellman-Ford - 最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/shortest_path/relax_all_the_edges_bellman_ford/</link>
      <pubDate>Fri, 15 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/shortest_path/relax_all_the_edges_bellman_ford/</guid>
      <description>Ford の一般的な最短路アルゴリズムの一番単純な実装のアイデアは、1954 年に Alfonso Shimbel (アルフォンソ・シンベル) によって提案され、1957 年に Edward Moore (エドワード・ムーア) によってより詳細に示されました。同じアルゴリズムは 1957 年には Max Woodbury (マックス・ウッドベリー) と George Dantzig (ジョージ・ダンツィグ) によって、1958 年には Richard Bellman (リチャード・ベルマン) によって、同じく 1958 年に Geroge Minty (ジョージ・ミンティ) によってそれぞれ独立に発見されています (Woodbury も Dantzig も Minty もアルゴリズムを発表することはありませんでした)。スティグラーの法則に完璧に従って、このアルゴリズムは Bellman-Ford のアルゴリズム1 として世界中に知られています。こう呼ばれているのは、1956 年に Ford によって発表された辺の緩和を使った定式化について Bellman がはっきりと言及していたためです。ただし &#34;Bellman-Kalaba&#34; という名前2を使う著者もいますし、古い文献には &#34;Bellman-Shimbel&#34; という名前も出てきます。</description>
    </item>
    <item>
      <title>練習問題 - 最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/shortest_path/exercises/</link>
      <pubDate>Sat, 16 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/shortest_path/exercises/</guid>
      <description>辺に任意の重みが付いた、負閉路が含まれないとは限らない有向グラフを G とし、s を G の適当な頂点とします。 全ての頂点 v が \mathit{dist}(v) を保持しているとします (前者へのポインタは保持していません)。このとき全ての v について \mathit{dist}(v) が s から v への最短路の長さかどうかを判定するアルゴリズムを説明、解析してください。 全ての頂点 v \neq s が G の他の頂点へのポインタ \mathit{pred}(v) を保持しているとします (距離は保持していまません)。このとき前者へのポインタ全体が s を根とする単一ソース最短路木を定義するかどうかを判定するアルゴリズムを説明、解析してください。</description>
    </item>
    <item>
      <title>導入 - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/introduction/</link>
      <pubDate>Sun, 17 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/introduction/</guid>
      <description>前章では単一の頂点 s から他の全ての頂点への最短路を s を根とした最短路木を作ることで見つけるアルゴリズムについて議論しました。最短路木はグラフの各頂点 v に対して二つの情報を割り当てます: s から v への最短路の長さを表す \mathit{dist}(v) s から v への最短路における最後から二つ目の頂点を表す \mathit{pred}(v) この章で扱うのは、もっと一般的な全組最短路問題 (all pairs shortest path problem, APSP) です。これは任意のソース頂点から任意の目標頂点への最短路を求める問題であり、この問題を解くアルゴリズムは G の全ての頂点の組 u, v に対して次の情報を計算します:</description>
    </item>
    <item>
      <title>たくさんの単一ソース - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/lots_of_single_sources/</link>
      <pubDate>Mon, 18 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/lots_of_single_sources/</guid>
      <description>全組最短路問題の明らかな解法は、単一ソース最短路問題を各頂点に対して一回ずつ、合計で V 回解くというものです。具体的に言うと、単一ソース最短路問題を解くたびに一次元の部分配列 \mathit{dist}[s, \cdot] が埋まります: procedure \texttt{ObviousAPSP}(V, E, w) for 頂点 s do \mathit{dist}[s, \cdot] \leftarrow \texttt{SSSP}(V, E, w, s) このアルゴリズムの実行時間が用いる単一ソース最短路アルゴリズムに依存しているのも明らかです。単一ソースのときと同じように、グラフの構造と辺の重みに依存する四種類の選択肢があります:</description>
    </item>
    <item>
      <title>重みの変更 - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/reweighting/</link>
      <pubDate>Mon, 18 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/reweighting/</guid>
      <description>負の辺があると実行が非常に遅くなります: どうにかして削除できないでしょうか？ たくさんの人が思い浮かべる単純なアイデアは、全ての辺の重みを同じだけ増加させることで全ての辺の重みを正にして、Bellman-Ford の代わりに Dijkstra を使うというものです。残念ながら、この単純なアイデアは上手く行きません ――こうすると、多くの辺を持つ路の重みが少ない辺しか持たない路よりも多く増加してしまうからです。次の図に示すように、全ての辺を同じ比率で増加させると、辺をたくさん持つ路は辺を少ししか持たない路よりも速いペースで大きくなります。そのため二つの頂点の間の最短路が変化してしまう可能性があります。</description>
    </item>
    <item>
      <title>Johnson のアルゴリズム - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/johnsons_algorithm/</link>
      <pubDate>Mon, 18 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/johnsons_algorithm/</guid>
      <description>Johnson (ジョンソン) の全組最短路アルゴリズムは全ての辺の重みが非負となるように各頂点に価値 \pi(v) を割り当て、その後 Dijkstra のアルゴリズムを使って新しい重みに対する最短路を計算します。 まずグラフの全ての頂点に到達できる頂点 s が存在すると仮定します。Johnson のアルゴリズムは最初 s から他の全ての頂点に対する最短路を (負辺があっても正しく動く) Bellman-Ford のアルゴリズムを使って計算し、それから価値関数を \pi(v) = \mathit{dist}(s, v) と定義します。こうした上で、新しい辺の重みを \[ w^{\prime}(u \rightarrow v) = \mathit{dist}(s, u) + w(u \rightarrow v) - \mathit{dist}(s, v) \] と定義します。Bellman-Ford が停止しているので、この新しい辺の重みは非負です！ 辺 u \rightarrow v が緊張しているとは \mathit{dist}(s, u) + w(u \rightarrow v) &amp;lt; \mathit{dist}(s, v) が成り立つことであり、単一ソース最短路アルゴリズムは緊張している辺を全て取り除くことを思い出してください (Bellman-Ford が負閉路を検出した場合には最短路が well-defined でないので、Johnson のアルゴリズムはエラーを出して終了します)。</description>
    </item>
    <item>
      <title>動的計画法 - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/dynamic_programming/</link>
      <pubDate>Mon, 18 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/dynamic_programming/</guid>
      <description>単一ソース最短路アルゴリズムの代わりに動的計画法を使っても全組最短路問題を解くことができます。E = \Theta(V^{2}) であるような密なグラフに対しては、動的計画法を使ったアプローチの方が Johnson のアルゴリズムよりも単純で (少しだけ) 速いアルゴリズムとなります。 この章ではこれから、入力グラフに負閉路が無いことを仮定します。 まずは動的計画法のアルゴリズムに付き物の再帰方程式を考えます。単一ソースと同様に、&#34;明らかな&#34; 再帰的定義 \[ \mathit{dist}(u, v) = \begin{cases} 0 &amp; \text{if } u = v \\ \min\limits_{x \rightarrow v} (\mathit{dist}(u, x) + w(x \rightarrow v)) &amp; \text{それ以外} \end{cases} \] は入力グラフが DAG であるときにしか正しくありません。有向閉路があると無限ループになってしまうためです。</description>
    </item>
    <item>
      <title>分割統治 - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/divide_and_conquer/</link>
      <pubDate>Mon, 18 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/divide_and_conquer/</guid>
      <description>1971 年に Michael Fischer (マイケル・フィッシャー) と Albert Meyer (アルバート・マイヤー) によって提案された方法を使うと、さらに格段な高速化が可能です。Bellman の再帰方程式は最短路を少しだけ短い路と一つの辺に分けて考え、目標頂点の全ての前者を考えることで最短路を求めていました。こうする代わりに、最短路をその中間地点にある頂点で分けて二つの路にしてみましょう。こうすると、先ほど定義した \mathit{dist}(u, v, l) に対する異なる再帰方程式が手に入ります。中間の頂点が存在するのは l = 2 までなので、ベースケースは l = 0 ではなく l = 1 です。また再帰方程式を簡単にするために、全ての頂点 v に対して w (v \rightarrow v) = 0 と定義しておきます。 \[ \mathit{dist}(u, v, l) = \begin{cases} w(u \rightarrow v) &amp; \text{if } l = 1 \\ \min\limits_{x} (\mathit{dist}(u, x, l/2) + \mathit{dist}(x, v, l/2)) &amp; \text{それ以外} \end{cases} \]</description>
    </item>
    <item>
      <title>おかしな行列積 - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/funny_matrix_multiplication/</link>
      <pubDate>Mon, 18 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/funny_matrix_multiplication/</guid>
      <description>有向グラフの最短路の計算と正方行列のべき乗の計算の間には密接な関係があります。この関係は Alfonso によって最初に発見され、後に Bellman も独立に発見しました。n \times n の行列の二乗を求めるアルゴリズムを次に示します。これを \textsc{FischerMeyerAPSP} の内側のループと比べてみてください (似ていることが分かりやすいように二つ目のアルゴリズムの記法を少し変えています)。 procedure \texttt{MatrixSquare}(A) for i \leftarrow 1 to n do for j \leftarrow 1 to n do A^{\prime}[i, j] \leftarrow 0 for k \leftarrow 1 to n do A^{\prime}[i, j] \leftarrow A^{\prime}[i, j] + A[i, k] \cdot A[k, j] procedure \texttt{FischerMeyerInnerLoop}(D)</description>
    </item>
    <item>
      <title> (Kleene-Roy-) Floyd-Warshall (-Ingerman) - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/kleene-roy-floyd-warshall-ingerman/</link>
      <pubDate>Mon, 18 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/kleene-roy-floyd-warshall-ingerman/</guid>
      <description>Johnson のアルゴリズムのフィボナッチヒープを使った実装と比べると、高速な方の動的計画法アルゴリズムでさえ最悪ケースの計算時間が O(\log V) 倍低速です。最短路問題の異なる定式化を使うとこの対数部分を改善できます。この定式化を使ったアルゴリズムは 1962 年に Robert Floyd (ピーター・フロイト) と Peter Ingerman (ピーター・インガーマン) によってぞれぞれ独立に発見され、両者とも同年の前半に Stephen Warshall (ステファン・ワーシャル) によって発表されたアルゴリズムを一般化したと記しています。また正確に言えば、この Warshall のアルゴリズムは 1959 年には Bernand Roy (バーナード・ロイ) によって、そして同じ再帰パターンは 1951 年に Stephen Kleene (スティーヴン・クリーネ)1 によって発見されています。</description>
    </item>
    <item>
      <title>練習問題 - 全組最短路 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/exercises/</link>
      <pubDate>Tue, 19 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/all_pairs_shortest_paths/exercises/</guid>
      <description>\textsc{LeyzorekAPSP} を改変して、最短路の長さの配列だけはなく前者へのポインタの配列も計算するようにしてください。実行時間は O(V^{3}\log V) のままであるようにしてください。 \textsc{FloydWarshall} を改変して、最短路の長さの配列だけはなく前者へのポインタの配列も計算するようにしてください。実行時間は O(V^{3}) のままであるようにしてください。 この章で議論した全てのアルゴリズムは負閉路が含まれるグラフに対して正しい答えを計算できません。グラフに負閉路が含まれている場合、Johnson のアルゴリズムでは最初の Bellman-Ford が負閉路を検出して実行がそこで終了し、動的計画法のアルゴリズムでは間違った答えが計算されます。</description>
    </item>
    <item>
      <title>フロー - 最大フロー最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/flow/</link>
      <pubDate>Thu, 21 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/flow/</guid>
      <description>\pmb{(s, t)}-フロー (ソースとシンクが明らかな場合には単にフロー) とは、関数 f:E \rightarrow \mathbb{R} であって s,t 以外の全ての頂点 v において次の保存条件 (conservation constraint) が満たされるものを言います: \[ \sum_{u} f(u \rightarrow v) = \sum_{w} f(v \rightarrow w) \] 保存条件を言葉を使って言い換えれば、全ての頂点 v に対して v に入るフローと v から出るフローが等しいということです。記法を単純にするために、辺 u \rightarrow v が存在しない場合には f(u \rightarrow v) = 0 と定義します。フロー f の値 (value) |f| とはソース頂点 s から出るフローの和です: \[ |f| := \sum_{w} f(s \rightarrow w) - \sum_{u} f(u \rightarrow s) \]</description>
    </item>
    <item>
      <title>カット - 最大フロー最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/cut/</link>
      <pubDate>Thu, 21 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/cut/</guid>
      <description>\pmb{(s, t)}-カット (ソースとシンクが明らかな場合は単にカット) とは、頂点集合の互いに素な二つの部分集合 S, T への分解であって s \in S かつ t \in T を満たすものを言います。S と T が互いに素とは S \cup T = V かつ S \cap V = \varnothing ということです。 容量関数 c:E \rightarrow \mathbb{R}_{\geq 0} が与えられたとき、カットの容量 (capacity) が S から T に向かう辺の容量の和として定義されます: \[ \| S, T \| = \sum_{s \in S} \sum_{t \in T} c(s \rightarrow t) \] (ここでも辺 v \rightarrow w が存在しない場合には c(v \rightarrow w) = 0 とします) この定義が非対称なことに注意してください。T から S に向かう辺はカウントしません。</description>
    </item>
    <item>
      <title>最大フロー最小カット定理 - 最大フロー最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/the_maxflow_mincut_theorem/</link>
      <pubDate>Thu, 21 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/the_maxflow_mincut_theorem/</guid>
      <description>意外なことに、任意のフローネットワークは |f| = \| S, T \| を満たす (s,t)-フロー f と (s,t)-カット (S, T) を必ず持ちます。これが有名な最大フロー最小カット定理 (Maxflow-Mincut Theorem) です。この定理は Lester Ford (レスター・フォード、最短路アルゴリズムで知られる) と Delbert Fulkerson (デルバート・ファルカーソン) によって 1954 年に初めて証明され、1956 年には Peter Elias (ピーター・イライアス) と Amiel Feinstein (アミエイ・ファインスタイン) と Claude Shannon (クロード・シャノン、迷路を解くロボットと情報理論で知られる) によって独立に証明されています。</description>
    </item>
    <item>
      <title>Ford と Fulkerson の増加路アルゴリズム - 最大フロー最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/ford_and_fulkerson_algorithm/</link>
      <pubDate>Thu, 21 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/ford_and_fulkerson_algorithm/</guid>
      <description>Ford と Fulkerson が示した最大フロー最小カット定理の証明から、最大フローを計算するアルゴリズムが直ちに手に入ります: 空のフローから始め、残余グラフにおける s から t への任意の増加路を使ってフローを増加させる処理を増加路が無くなるまで繰り返すというものです。 このアルゴリズムについての次の系は簡単に示せますが、重要です: 整数性定理 フローネットワークの辺の容量が全て整数ならば、全ての辺に流れるフローが整数の最大フローが存在する。</description>
    </item>
    <item>
      <title>フローの合成と分解 - 最大フロー最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/combining_and_decomposing_flows/</link>
      <pubDate>Thu, 21 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/combining_and_decomposing_flows/</guid>
      <description>フローの定義は頂点における保存条件が満たされるグラフの辺を入力とする関数であるのが普通ですが、他の定式化もあります。この定式化の方がより自然で有用なこともあります。 任意のグラフ G とソース頂点 s とシンク頂点 t が与えられたとして、G の適当な (s,t)-フロー f, g と実数 \alpha, \beta を取り、次の関数 h: E \rightarrow \mathbb{R} を考えます: \[ h(u \rightarrow v) := \alpha \cdot f(u \rightarrow v) + \beta \cdot g(u \rightarrow v) \] ここで u \rightarrow v は任意の辺です。この定義は単純に h = \alpha f + \beta g とも書けます。定義を追っていくと、h もまた (s,t)-フローでありその値は |h| = \alpha |f| + \beta |g| であることが分かります。これをより一般的に言うと、(s,t)-フローの線形結合は (s,t)-フローだということです。</description>
    </item>
    <item>
      <title>Edmonds と Karp のアルゴリズム - 最大フロー最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/edmonds_and_karps_algorithms/</link>
      <pubDate>Fri, 22 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/edmonds_and_karps_algorithms/</guid>
      <description>Ford と Fulkerson のアルゴリズムは残余グラフのどの路を増加させるかを指定しません。このアルゴリズムの最悪計算時間がひどいのは、増加路の選び方をいくらでも悪くできるのが原因です。1970 年代前半、Jack Edmonds (ジャック・エドモンズ) と Richard Karp (リチャード・カープ) は増加路を選ぶための二つの自然な方法を解析し、どちらを使った場合でもより効率の良いアルゴリズムが得られることを示しました。 最幅増加路 Edmonds と Karp が解析した一つ目の規則を次に示します。この規則を使ったアルゴリズムは本質的に貪欲アルゴリズムとなります:</description>
    </item>
    <item>
      <title>さらなる進展 - 最大フロー最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/further_progress/</link>
      <pubDate>Sat, 23 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/further_progress/</guid>
      <description>最大フローアルゴリズムの物語はこれで終わりでは決してありません。何十年にも渡る高速なアルゴリズムの研究の成果を次の表にまとめます1。ここにあるアルゴリズムは全て反復によって最大フローを計算するものであり、ほとんどのアルゴリズムには二つのバージョンがあります: 一つは各反復で総当たりを使う単純なバージョンで、もう一つは洗練されたデータ構造を使ってフローネットワークの全域木を管理することで反復と全域木の更新を対数時間で行うバージョンです。これまでに知られている最速のアルゴリズムが最適であると思ってはいけません。最大フローは現在でも活発に研究が行われている領域です。</description>
    </item>
    <item>
      <title>練習問題 - 最大フロー最小カット - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/exercises/</link>
      <pubDate>Sat, 23 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/maximum_flows_minimum_cuts/exercises/</guid>
      <description>有向グラフ G = (V, E) と二つの頂点 s, t と容量関数 c: E \rightarrow \mathbb{R}^{+} と f: E \rightarrow \mathbb{R} が与えられたとします。f が G の最大 (s,t)-フローであるかを判定するアルゴリズムを説明してください。 フローネットワーク G の実現可能な (s,t)-フローを二つ取って f, f^{\prime} (|f^{\prime}| &gt; |f|) とします。残余グラフ G_{f} に実現可能な (s,t)-フローであって値が |f^{\prime}| - |f| であるものが存在することを示してください。 G を適当なフローネットワーク、u \rightarrow v を G の適当な辺とします。最小 (s,t)-カット (S, T) であって u \in S かつ v \in T となるものが存在するならば、最小カット (S^{\prime}, T^{\prime}) であって u \in T^{\prime} かつ v \in S^{\prime} となるものは存在しないことを証明してください。</description>
    </item>
    <item>
      <title>辺素路 - フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/edge_disjoint_paths/</link>
      <pubDate>Mon, 25 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/edge_disjoint_paths/</guid>
      <description>最初に発見された最大フローの応用の一つは、有向グラフ G の特定の頂点 s と t を結ぶ辺素な路集合の大きさの最大値の計算です。ここで G の路の集合が辺素 (edge-disjoint) であるとは、その集合に含まれる路の中に G の任意の辺が最大でも一回しか現れないことを言います。同じ頂点は複数回通っていても構いません。 任意のグラフを考えたとき、辺の重みが全て 1 ならば、s から t への最大フローは各辺に 0 または 1 単位のフローを流します。フロー分解定理から、飽和した辺を集めた部分グラフ S は互いに素な路または閉路の和として表すことができ、さらに分解に含まれる路の数は最大フローの値と等しいことが分かります。また S から実際の路を取り出すことも簡単です ――S において s から t への適当な路を見つけ、取り除き、再帰すればそれで終わりです。</description>
    </item>
    <item>
      <title>頂点容量と頂点素路 - フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/vertex_capacities_and_vertex_disjoint_paths/</link>
      <pubDate>Mon, 25 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/vertex_capacities_and_vertex_disjoint_paths/</guid>
      <description>入力グラフ G が辺だけではなく頂点にも容量を持つとします。この設定では関数 f: E \rightarrow \mathbb{R}_{\geq 0} がフローであるための条件に新しい制約が加わります。その制約とは、s, t 以外の全ての頂点 v について v に入るフローの和が非負の定数 c(v) 以下でなければならないというものです (保存条件からこの値は v から出るフローの和と等しくなります): \[ \sum_{u \rightarrow v} f(u \rightarrow v) \leq c(v) \] この新しい制約があったとしても最大フローを計算できるでしょうか？ Ford と Fulkerson は 1962 年、この問題を辺だけに容量を持ったグラフ \tilde{G} に帰着させる方法を示しました。ここで \tilde{G} の頂点は G の頂点 v を v_{\text{in}} と v_{\text{out}} に分けた頂点であり、\tilde{G} の辺は全ての G の頂点 v に対する v_{\text{in}} から v_{\text{out}} への容量 c(v) の辺と全ての G の辺 u \rightarrow v に対する容量 c(u \rightarrow v) の u_{\text{out}} \rightarrow v_{\text{in}} という辺です。いつも通り定義を追っていくと、\tilde{G} における任意の実現可能な (s_{\text{out}}, t_{\text{in}})-フローに対応する G の実現可能な (s,t)-フローが存在し、両者は同じ値を持つことが分かります。つまり、\tilde{G} の最大フローが G の最大フローに対応します。</description>
    </item>
    <item>
      <title>二部マッチング - フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/bipartite_matching/</link>
      <pubDate>Mon, 25 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/bipartite_matching/</guid>
      <description>もう一つのよく知られた最大フローの応用は、二部グラフの最大マッチング (maximum matching) の計算です。グラフのマッチングとは全ての頂点の次数が最大でも 1 であるような部分グラフのことであり、同じ頂点を共有しない辺の集合としても定義できます。ここで考える問題はマッチングであって辺の数が最大のものを計算する問題です。 例えば何人かの医師が職を探していて、いくつかの病院が医師を探しているとしましょう。各医師は働きたい病院をいくつか提示し、各病院は雇いたい医師を何人か提示しているときに、お互いが納得するような医師と病院の雇用関係をなるべく多く作りたいとします1。この問題は医師と病院を頂点とし、互いに雇用関係を結べる場合に限って辺があるような二部グラフに対する最大マッチングを求める問題と考えることができます。</description>
    </item>
    <item>
      <title>タプル選択 - フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/tuple_selection/</link>
      <pubDate>Mon, 25 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/tuple_selection/</guid>
      <description>二部グラフの最大マッチングは私がタプル選択 (tuple selection)1 と呼ぶ問題クラスの一番簡単な例です。タプル選択問題の入力は要素に重複がない有限集合 X_{1}, X_{2}, \ldots, X_{d} であり、出力は容量に関する次の条件を満たす最大の d-タプルの集合です: 全ての添え字 i に対して、各 x \in X_{i} がタプルに現れていいのは c(x) 回まで。 全ての添え字 i に対して、各 x \in X_{i} と y \in X_{i+1} がタプルに現れていいのは c(x,y) 回まで。 上界 c(x) と c(x,y) は (通常は小さな) 非負整数あるいは \infty です。</description>
    </item>
    <item>
      <title>素路被覆 - フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/disjoint_path_covers/</link>
      <pubDate>Mon, 25 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/disjoint_path_covers/</guid>
      <description>有向グラフ G の路被覆 (path cover) とは、G の有向路の集合であって G の全ての辺が少なくとも一つの路に含まれるものを言います。G の素路被覆 (disjoint-path cover) とは、G の路被覆であってどの頂点もちょうど一つの路に含まれるものを言います。 任意の有向グラフには長さがゼロの路だけからなる自明な素路被覆がありますが、これは面白くありません。そうではなくて、なるべく少ない路を使った素路被覆を見つける問題を考えましょう。この問題は一般的なグラフに対しては NP 困難です ――有向グラフが大きさが 1 の素路被覆を持つことはハミルトン路を持つことと同値だからです―― が、有向非巡回グラフに対してはフローを使った効率の良いアルゴリズムが存在します。</description>
    </item>
    <item>
      <title>ペナントレースにおける敗退 - フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/baseball_elimination/</link>
      <pubDate>Tue, 26 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/baseball_elimination/</guid>
      <description>毎年何百万人という野球ファンが熱心に試合を観戦し、贔屓チームがプレーオフそしてワールドシリーズに進むことを期待します。しかし非情なことに、シーズンが終わる数日前あるいは数週間前の時点で、ほとんどのチームはペナントレースから &#34;数学的に&#34; 敗退します。通常はあるチームが敗退したかどうかを判断するのは簡単です ――現在地区トップのチームに追いつけるほど試合数が無ければ敗退です―― が、状況がもっと複雑になることもあります。次に示すのは 1996 年 8月 30 日のアメリカンリーグ東地区で実際に起こった順位です: \[ \begin{array}{ccc|ccccc} \hline \text{チーム} &amp; \text{勝-敗} &amp; \text{残り試合数} &amp; \text{NYY} &amp; \text{BAL} &amp; \text{BOS} &amp; \text{TOR} &amp; \text{DET} \\ \hline \text{New York Yankees} &amp; 75-59 &amp; 28 &amp; &amp; 3 &amp; 8 &amp; 7 &amp; 3 \\ \text{Boltimore Orioles} &amp; 71-63 &amp; 28 &amp; 3 &amp; &amp; 2 &amp; 7 &amp; 4 \\ \text{Boston Red Sox} &amp; 69-66 &amp; 27 &amp; 8 &amp; 2 &amp; &amp; 0 &amp; 0 \\ \text{Toronto Blue Jays} &amp; 63-72 &amp; 27 &amp; 7 &amp; 7 &amp; 0 &amp; &amp; 0 \\ \text{Detroit Tigers} &amp; 49-86 &amp; 27 &amp; 3 &amp; 4 &amp; 0 &amp; 0 &amp; \\ \hline \end{array} \] 明らかに Detroit は後れを取っていますが、それでも粘り強いファンは希望を捨てていませんでした。もし Detroit が残りの 27 試合に全て勝利すれば合計で 76 勝となって現在のどのチームよりも勝利数が多くなるからです。その上で他のチームが全ての試合に敗北すれば...。</description>
    </item>
    <item>
      <title>プロジェクト選択 - フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/project_selection/</link>
      <pubDate>Tue, 26 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/project_selection/</guid>
      <description>最後の例として、与えられた n 個のプロジェクトの中から実際に行うものを選択する問題を考えます。いくつかのプロジェクトは他のプロジェクトが終わるまで開始できず、その依存関係が有向非巡回グラフ G で表されているとします。 G の頂点はプロジェクトを表し、辺 u \rightarrow v はプロジェクト v が完了するまでプロジェクト u に取り掛かれないことを表します (6.4 節 で考えた依存グラフと同じ形式です)。そして各プロジェクトには完了したときに入手できる利益 \$(v) が設定されており、負の利益を持つ (正のコストがかかる) プロジェクトも存在します。あなたが選ぶことができるのはプロジェクト集合の部分集合 X であって、X に含まれる任意のプロジェクトが依存するプロジェクトもまた X に含まれるという条件を満たすものです。条件を満たすプロジェクトの部分集合であって利益の合計を最大化するものを見つけるのが目標です。例えば全てのプロジェクトに負の利益が設定されているなら、何も選ばないことを表す空集合が答になります。</description>
    </item>
    <item>
      <title>練習問題 - フローとカットの応用 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/exercises/</link>
      <pubDate>Tue, 26 Feb 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/apps_of_flows_and_cuts/exercises/</guid>
      <description>G = (V,E) を有向グラフとし、各頂点の入次数と出次数が等しいとします。G が u から v への大きさ k の辺素路集合を含むとき、G は v から u への大きさ k の辺素路集合を含みますか？ 証明または反例とその説明を示してください。 無向グラフ G = (V,E) と三つの頂点 u,v,w が与えられたとします。u から w への v を通る路があるかどうかを判定するアルゴリズムを説明、解析してください。 [ヒント: G が有向グラフだとこの問題は NP 困難です！]</description>
    </item>
    <item>
      <title>勝てないゲーム - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/a_game_you_cant_win/</link>
      <pubDate>Fri, 01 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/a_game_you_cant_win/</guid>
      <description>赤いスーツに身を包んだ、Tom Waits よろしくいかつい顔をしたセールスマンが、n 個のスイッチと一つの電球の付いた黒い金属の箱をあなたに見せてきました。セールスマンによると、箱の中にはブール回路 ――たくさんの \textsc{And}, \textsc{Or}, \textsc{Not} を繋いだもの―― が入っており、その回路の入力が n 個のスイッチで、出力が電球であるとのことです。 そして彼は次の質問をしました: 「電球を灯らせる入力は存在するか？」もし質問に正しく答えることができたら、あなたはその箱と 一億 一兆ドルを入手でき、答えが間違っていた場合および答えを出すことなくあなたが死亡した場合には、彼があなたの魂を奪うと言います。</description>
    </item>
    <item>
      <title>P 対 NP - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/p_versus_np/</link>
      <pubDate>Fri, 01 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/p_versus_np/</guid>
      <description>アルゴリズムが &#34;効率的である&#34; ための最低条件は、実行時間が入力サイズの多項式で抑えられることです。つまり入力サイズを n としたときにある定数 c が存在して、実行時間が O(n^{c}) となるということです1。研究者達は全ての問題が高速に解けるわけではないことに早くから気付いていましたが、どの問題が早く解けてどの問題がそうでないのかを見極めるのに苦労していました。NP 困難 (NP-hard) と呼ばれる問題は誰もが多項式時間で解けないと信じているものの、実行時間の下限が超多項式的になることは誰も証明できていません。 判定問題 (decision problem) とは出力が一つの真偽値 (\textsc{Yes} か \textsc{No}) であるような問題のことです。判定問題のクラスを三つ定義します:</description>
    </item>
    <item>
      <title>NP 困難・NP 容易・NP 完全 - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/np_hard_easy_complete/</link>
      <pubDate>Sat, 02 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/np_hard_easy_complete/</guid>
      <description>問題 \Pi がNP 困難 (NP-hard) であるとは、\Pi に対する多項式時間合アルゴリズムが NP に属する全ての問題に対する多項式時間アルゴリズムを意味することを言います。言い換えると: \pmb{\Pi} が NP 困難 \iff \pmb{\Pi} が多項式時間で解けるなら P=NP 分かりやすく言うと、ある NP 困難な問題 \Pi が一つでも高速に解ければ、 \Pi を解くサブルーチンを使うことで、答えが簡単に検証できる種類の問題全てを高速に解くことができるということです。NP 困難な問題は少なくとも NP に属する全ての問題以上に難しいと言えます。</description>
    </item>
    <item>
      <title>♥ きちんとした定義 (HC SVNT DRACONES) - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/formal_definitions/</link>
      <pubDate>Sat, 02 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/formal_definitions/</guid>
      <description>複雑性クラス P, NP, co-CP をきちんと定義するには、言語 (language) と Turing 機械を使った議論が必要です。言語とは有限アルファベット \Sigma 上の文字列の集合であり、\Sigma = \lbrace {\color{maroon}{0}}, {\color{maroon}{1}} \rbrace と仮定しても一般性は失われません。Turing 機械とは機能が極端に制限されたコンピューターであり、その詳細な定義は計算能力を考えるときには驚くほど重要ではありません。 P は決定性単一テープ Turing 機械を使って多項式時間 (polynomial time) で判定できる言語の集合として定義されます。同様に NP は非決定性 Turing 機械を使って多項式時間で判定できる言語の集合として定義されます。NP は Nondeterminitic Plynomial-time (非決定性多項式時間) の略です。</description>
    </item>
    <item>
      <title>帰着と SAT - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/reductions_and_sat/</link>
      <pubDate>Sat, 02 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/reductions_and_sat/</guid>
      <description>回路充足性問題以外の全ての問題に対する NP 困難性を証明するには、帰着を使った議論が必要になります。問題 A を別の問題 B に帰着させる (reduce problem A to anther problem B) とは、問題 B へのアルゴリズムが手に入っているという仮定の下で問題 A を解くアルゴリズムを説明することを言います。帰着はこの本を読み始める前にも何度も行ってきたはずですが、そのときには帰着のことを「サブルーチンを書く」あるいは「ユーティリティ関数を書く」または「モジュール性の高いプログラムを書く」ときには「電卓を使う」などと呼んでいたでしょう。ある問題が NP 困難であることを示すときにもこれと同じような問題の間の変形を行いますが、ほとんどの人が想像する方向とは逆方向の変形を行います。</description>
    </item>
    <item>
      <title>3 SAT (CircuitSAT からの帰着) - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/3sat_from_sat/</link>
      <pubDate>Sat, 02 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/3sat_from_sat/</guid>
      <description>様々な問題の NP 困難性を証明するのに特に便利な \textsc{SAT} の特殊ケースがあり、\textsc{3CNF-SAT} あるいは \textsc{3SAT} と呼ばれます。 ブール式が連言標準形 (conjunctive normal form, CNF) であるとは、式がいくつかの節 (clause) の連言 (disjunction, \textsc{Or}) であり、それぞれの節がリテラルの選言からなる (conjunction, \textsc{And}) ことを言います。ここでリテラルは一つの変数またはその否定です。例えば: \[ \overbrace{(a \lor b \lor c \lor d)}^{\text{節 (clause)}} \land (b \lor \overline{c} \lor \overline{d}) \land (\overline{a} \lor c \lor d) \land (a \lor \overline{b}) \] は CNF 式です。3CNF 式とは 全ての節が三つのリテラルからなる CNF 式のことです。上の式では最初の節にはリテラルが 4 つ、最後の節にはリテラルが 2 つあるので 3SAT ではありません。3CNF 式が与えられたときに、その式が \textsc{True} に評価されるような変数への真偽値割り当ては存在するでしょうか？</description>
    </item>
    <item>
      <title>最大独立集合 (3SAT からの帰着) - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/maximum_independent_set_from_3sat/</link>
      <pubDate>Sun, 03 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/maximum_independent_set_from_3sat/</guid>
      <description>これから考えるいくつかの問題において、入力は単純重み無し無向グラフ、出力は何らかの構造的な特徴を持つ部分グラフのうち最大または最小のものです。 G を任意のグラフとします。G の独立集合 (independent set) とは、G の頂点の集合でどの頂点の組の間にも辺が無いものを言います。最大独立集合問題、略して \textsc{MaxIndSet} は与えられたグラフに含まれる最大の独立集合の大きさを求める問題です。これから \textsc{MaxIndSet} が NP 困難であることを \textsc{3SAT} からの帰着を使って示します:</description>
    </item>
    <item>
      <title>共通するパターン - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/general_pattern/</link>
      <pubDate>Sun, 03 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/general_pattern/</guid>
      <description>NP 困難性の証明、そして一般的には全ての多項式時間帰着には、共通するパターンがあります。問題 X から問題 Y への多項式時間帰着には次のステップが必要です: X の任意のインスタンス x を Y の特殊なインスタンス y に変換する多項式時間アルゴリズムを示す。 x が X の &#34;良い&#34; インスタンスならば y は Y の &#34;良い&#34; インスタンスであると示す。 y が Y の &#34;良い&#34; インスタンスならば x は X の &#34;良い&#34; インスタンスであると示す (通常最も難しくなるのはこの部分)。</description>
    </item>
    <item>
      <title>クリークと頂点被覆 (最大独立集合からの帰着) - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/clique_and_vertex_cover/</link>
      <pubDate>Sun, 03 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/clique_and_vertex_cover/</guid>
      <description>クリーク (clique) とはグラフに含まれる完全グラフ、つまり任意の頂点の組の間に辺がある部分グラフのことであり、\textsc{MaxClique} 問題とはグラフに含まれる最大のクリークの大きさを求める問題です。頂点被覆 (vertex cover) とはグラフの全ての辺に触れるような頂点の集合であり、\textsc{MinVertexCover} 問題とはグラフに含まれる最小の頂点被覆の大きさを求める問題です。 \textsc{MaxClique} が NP 困難であることは \textsc{MaxIndSet} からの簡単な帰着によって示せます。任意のグラフ G の辺の有無を反転させたものを辺補グラフ (edge-complement graph) \overline{G} と言います ―― \overline{G} の頂点は G と同じで、uv \in \overline{G} \iff uv \notin G です。G における最大独立集合は辺補グラフ \overline{G} における (同じサイズの) 最大クリークとなるので、帰着は簡単に作れます。</description>
    </item>
    <item>
      <title>グラフの彩色 (3SAT からの帰着) - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/graph_coloring/</link>
      <pubDate>Sun, 03 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/graph_coloring/</guid>
      <description>グラフ G = (V,E) の真の \pmb{k}-彩色 (proper \pmb{k}-coloring) とは、各頂点に k 個ある色のどれかを割り当てる関数 C: V \rightarrow \lbrace 1, 2, \ldots, k \rbrace であって辺でつながれた任意の頂点に違う色が割り当てられるものを言います (&#34;色&#34; は適当なラベルであり、ここでは整数とします。電磁スペクトル、CMYK ベクトル、Pantone の色番号などは使いません)。グラフ彩色問題とは与えられたグラフを彩色するのに必要となる色の数の最小値を計算する問題です。</description>
    </item>
    <item>
      <title>ハミルトン閉路 - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/hamiltonian_cycle/</link>
      <pubDate>Sun, 03 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/hamiltonian_cycle/</guid>
      <description>ハミルトン閉路 (Hamiltonian cycle) とはグラフの全ての頂点をちょうど一回ずつ訪れる閉路のことです (オイラー閉路 (Eulerian cycle) とは異なります。オイラー閉路は全ての辺をちょうど一回ずつ使う閉じた歩道であり、深さ優先探索を使って線形時間で簡単に見つけられます)。ここでは有向グラフに対するハミルトン閉路問題が NP 困難であることの証明を二つ示します。 頂点被覆からの帰着 ハミルトン閉路問題の NP 困難性の証明の一つ目は、判定バージョンの頂点被覆問題からの帰着を使うものです。この証明では与えられた無向グラフ G と整数 k から、有向グラフ H であって H にハミルトン閉路が存在するときに限って G に大きさ k の頂点被覆が存在するようなものを構成します。一つ前の帰着と同じように、出力のグラフ H はいくつかのガジェットからなり、それぞれのガジェットが入力のグラフ G と整数 k の特徴を反映します。</description>
    </item>
    <item>
      <title>部分和 (最小頂点被覆からの帰着) - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/subset_sum/</link>
      <pubDate>Mon, 04 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/subset_sum/</guid>
      <description>次に NP 困難性を示す問題は二章で登場した \textsc{SubsetSum} です。この問題では正の整数の集合 X と整数 T が与えられ、X の部分集合で要素の和が T となるものが存在するかどうかを判定します。 ここでも \textsc{VertexCover} からの帰着を作ります。つまり任意の無向グラフ G と整数 k から整数の集合 X と整数 T を構築し、G に大きさ k の頂点被覆が存在するときに限って和が T の X の部分集合があるようにするということです。ここで説明する帰着には二種類のガジェットがあり、それぞれ G の頂点と辺に対応します。</description>
    </item>
    <item>
      <title>その他の便利な NP 困難問題 - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/other_useful_np_hard_problems/</link>
      <pubDate>Mon, 04 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/other_useful_np_hard_problems/</guid>
      <description>文字通り数千もの問題が NP 困難であると示されています。ここでは帰着を導くときに有用な NP 困難問題をいくつか紹介します。それぞれについて NP 困難性の証明の詳細を述べることはしませんが、ほとんどの問題に対する証明は Garey と Johnson による NP 完全性についての恐ろしい黒本1に載っています。ここまでに紹介した問題の全て、そしてこのリストにある問題のほとんどは、1972 年の Richard Karp (リチャード・カープ) による一つの画期的な論文で NP 困難であることが示されました2。 \textsc{PlanarCircuitSAT}:「配線を交差させることなく平面に埋め込むことができるブール回路が与えられる。出力が \textsc{True} となるような入力が存在するか？」NP 困難性の証明は一般の回路充足問題からの帰着で行われる。帰着は一般の回路に含まれる交差するゲートをいくつかのゲートに置き換えることで平面回路に変換する。</description>
    </item>
    <item>
      <title>正しい問題を選ぶ - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/choosing_the_right_problem/</link>
      <pubDate>Mon, 04 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/choosing_the_right_problem/</guid>
      <description>問題の NP 困難性を証明するうえで最も難しいステップの一つは、帰着元となるのに適した問題を選ぶ部分です。Cook-Levin の定理からは、ある NP 困難な問題から問題 X への帰着があるならば、任意の NP 困難な問題から問題 X への帰着が存在することが言えます。しかしそうは言っても帰着のしやすさは問題によって異なります。問題を選ぶ機械的な方法というのは存在しませんが、役に立つであろう経験則をいくつかあげます: 問題がオブジェクトにビットを割り当てたり、集合の部分集合を選んだり、集合を二つに分割したりしていたら、\textsc{SAT} あるいは \textsc{Partition} の何らかのバージョンからの帰着を試してみる。</description>
    </item>
    <item>
      <title>ちょっとした現実世界の例 - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/a_frivolous_real_world_example/</link>
      <pubDate>Mon, 04 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/a_frivolous_real_world_example/</guid>
      <description>ドラフツ (draughts) は何千年にもわたって遊ばれているボードゲームです。ドラフツには様々なバージョンがありますが、アメリカ人の多くにとってはチェッカー (checker) あるいはイングリッシュドラフツ (English draughts) と呼ばれるものが一番身近でしょう。しかし世界で一番知られているバージョンは国際ドラフツ (international draughts) あるいはポーランドドラフツ (Polish draughts) と呼ばれるものであり、16 世紀のオランダに起源を持ちます。完全なルールについては Wikipedia に譲り、英米バージョンとの主な違いをここに示します:</description>
    </item>
    <item>
      <title>♥ 縞模様を超えて - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/on_beyond_zebra/</link>
      <pubDate>Tue, 05 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/on_beyond_zebra/</guid>
      <description>P と NP は複雑性クラスの巨大な階層における最初の二ステップでしかありません。この章 (そしてこの本) の締めくくりとして、興味深い複雑性クラスをいくつか紹介します。 多項式空間 PSPACE は多項式空間を使って解ける判定問題の集合です。NP に属する全ての問題 (したがって P に属する全ての問題) は PSPACE に属します。NP \neq PSPACE であることが広く信じられていますが、P \neq PSPACE さえ証明できた人はいません。 問題 \Pi がPSPACE 困難 (PSPACE-hard) であるとは、多項式空間を使って解ける任意の問題 \Pi^{\prime} について \Pi^{\prime} から \Pi への多項式時間多対一帰着が存在することを言います。PSPACE 困難な問題が一つでも NP に属すれば PSPACE=NP であり、同様に PSPACE 困難な問題が一つでも P に属すれば P=PSPACE です。</description>
    </item>
    <item>
      <title>練習問題 - NP 困難性 - アルゴリズム (翻訳)</title>
      <link>https://inzkyk.xyz/algorithms/np_hardness/exercises/</link>
      <pubDate>Wed, 06 Mar 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/algorithms/np_hardness/exercises/</guid>
      <description>\textsc{Partition} を O(nM) 時間で解くアルゴリズムを説明、解析してください。ここで n は入力の集合の大きさ、M は入力の集合の要素の和を表します。 このアルゴリズムが P=NP を意味しないのはなぜですか？ \textsc{BoxDepth} と呼ばれる次の問題を考えます:「辺が x, y 軸に平行な n 個の長方形の集合が与えられる。共通する点が存在するようなこの集合の部分集合で最大のものの大きさはいくつか？」 \textsc{BoxDepth} から \textsc{MaxClique} への多項式時間帰着を説明してください。 \textsc{BoxDepth} に対する多項式時間アルゴリズムを説明、解析してください。 [ヒント: 簡単に得られるのは O(n^{3}) 時間のアルゴリズムですが、O(n\log n) 時間のアルゴリズムもあります。]</description>
    </item>
    <item>
      <title>3. 多重グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/multi-graph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/multi-graph/</guid>
      <description></description>
    </item>
    <item>
      <title>3.1. 多重グラフの定義 - 3. 多重グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/multi-graph/definition/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/multi-graph/definition/</guid>
      <description>ここまでは単純グラフだけを考えてきた。以降では単純グラフと異なる種類のグラフをいくつか定義する。最初に定義されるのは多重グラフである: 定義 3.1.1 集合 V に対して、要素数が 1 または 2 であるような V の部分集合全体の集合を \mathcal{P}_{1,2}\left( V\right) と表す。言い換えれば、次のように定める: \[ \begin{aligned} \mathcal{P}_{1,2}\left( V\right) \colonequals &amp;amp; \left\{ S\subseteq V\ \mid \ \left\vert S\right\vert \in\left\{ 1,2\right\} \right\} \\ = &amp;amp; \left\{ \left\{ u,v\right\} \mid u,v\in V\ \left(u=v\text{ でも構わない}\right)\right\} \end{aligned} \] 例えば、次の等式が成り立つ: \[ \mathcal{P}_{1,2}\left( \left\{ 1,2,3\right\} \right) =\left\{ \left\{ 1\right\} ,\ \left\{ 2\right\} ,\ \left\{ 3\right\} ,\ \left\{ 1,2\right\} ,\ \left\{ 1,3\right\} ,\ \left\{ 2,3\right\} \right\} \] \mathcal{P}_{1,2}(V) を使って多重グラフを定義する:</description>
    </item>
    <item>
      <title>3.2. 単純グラフと多重グラフ間の変換 - 3. 多重グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/multi-graph/conversion/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/multi-graph/conversion/</guid>
      <description>任意の多重グラフは単純グラフに変換できる。ただし、この変換では一部の情報が失われる: 定義 3.2.1 G=\left( V,E,\varphi\right) を多重グラフとする。 G の台単純グラフ (underlying simple graph) G^{\operatorname*{simp}} とは、次の単純グラフを意味する: \[ \left( V,\ \left\{ \varphi\left( e\right) \mid e\in E \ \ \wedge\ \ e \text{ はループでない}\right\} \right) \] 言い換えれば、G^{\operatorname*{simp}} の頂点集合は G と同じ V であり、G^{\operatorname*{simp}} の異なる二頂点 u, v は G で隣接するとき、かつそのときに限って隣接する。つまり、G^{\operatorname*{simp}} は G からループを除去して平行な辺を一つに「まとめる」ことで得られる。</description>
    </item>
    <item>
      <title>3.3. 単純グラフから多重グラフへの一般化 - 3. 多重グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/multi-graph/generalization/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/multi-graph/generalization/</guid>
      <description>それでは先述したように、第 2 章で示した単純グラフに関する様々な結果が多重グラフでも成り立つかどうかを見ていこう。 3.3.1 ラムゼー数 R\left( 3,3\right) 本書で最初に証明した単純グラフの性質の一つは次の命題 (定理 2.3.1) だった: 命題 3.3.1 G は単純グラフで \left| \operatorname{V}\left( G \right) \right| \geq6 を満たすとする (つまり、G は 6 個以上の頂点を持つとする)。このとき、次の二つの命題の少なくとも一方が成り立つ: 命題 1: 辺 ab, bc, ca が全て G に存在するような G の頂点 a, b, c が存在する。 命題 2: 辺 ab, bc, ca がいずれも G に存在しないような G の頂点 a, b, c が存在する。</description>
    </item>
    <item>
      <title>3.4. オイラー歩道とオイラー回路 - 3. 多重グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/multi-graph/eulerian-circuit-and-walk/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/multi-graph/eulerian-circuit-and-walk/</guid>
      <description>3.4.1 定義 続いて多重グラフの新しい性質を紹介する。この性質は本書で初めて登場する (単純グラフに対しては考えてこなかった)。 ハミルトン (閉) 路とは、グラフの全ての頂点を含む (閉) 路を言うのだった。路と閉路の定義より、ハミルトン (閉) 路はグラフの全ての頂点をちょうど一度ずつ含む (ただしハミルトン閉路では始点と終点だけが一致する)。 では、グラフの全ての辺を含む歩道あるいは閉歩道を考えてもいいのではないだろうか？ これはオイラー歩道あるいはオイラー回路と呼ばれる概念であり、数学的には次のように定義される:</description>
    </item>
    <item>
      <title>4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/</guid>
      <description></description>
    </item>
    <item>
      <title>4.1. 有向グラフの定義 - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/definition/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/definition/</guid>
      <description>これまで本書には単純グラフと多重グラフという二つのグラフの概念が登場した。 単純グラフと多重グラフには異なる点が多いものの、共通点もある: 辺の端点が区別されない。例えば、歩道の定義では全ての辺が「両方向の」道として機能した。そのため、こういったグラフを使うと対称的な関係を上手くモデル化できる。 本章では辺が方向を持つ新しい種類の「グラフ」を二つ定義する。これらのグラフは有向グラフ (directed graph または digraph) と呼ばれる。有向グラフでは各辺が始点 (source) と終点 (target) を別々に持つ。これに対応して、有向グラフの描画では辺を矢印の付いた曲線で表し、有向グラフの頂点を動き回ることを考えるときは辺を一方向 (始点から終点に向かう方向) にしか移動できないとされる。数学的な定義は次の通りである:</description>
    </item>
    <item>
      <title>4.2. 有向グラフの入次数と出次数 - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/outdegrees-and-indegree/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/outdegrees-and-indegree/</guid>
      <description>有向グラフで何ができるだろうか？ これまでに本書で説明してきたグラフに関する概念や性質の多くは、適切に改変すれば有向グラフに対しても考えることができる。例えば、グラフの頂点の次数に対応する概念として有向グラフには入次数と出次数がある: 定義 4.2.1 D を有向グラフ、V を D の頂点集合とする (D は単純有向グラフと多重有向グラフのどちらでも構わない)。v \in V を D の頂点とする。このとき: v の出次数 (outdegree) とは、始点が v である D の弧の個数を意味する。v の出次数は \deg^{+}v と表記される。</description>
    </item>
    <item>
      <title>4.3. 部分有向グラフ - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/subdigraph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/subdigraph/</guid>
      <description>多重グラフの部分グラフを定義したのと同じように、有向グラフの部分有向グラフ (正確に言うなら部分多重有向グラフ) も定義できる: 定義 4.3.1 D=\left( V,A,\psi\right) を多重有向グラフとする。 D の部分多重有向グラフ (submultidigraph) とは、W\subseteq V, B\subseteq A, \chi=\psi |_{B} が成り立つような多重有向グラフ E=\left( W,B,\chi\right) を言う。部分多重有向グラフは単に部分有向グラフ (subdigraph) とも呼ぶ。 S を V の部分集合とする。集合 S に関する D の誘導部分有向グラフ (induced subdigraph of D on the set S) とは、次に示す D の部分有向グラフを言う: \[ \left( S,\ \ A^{\prime},\ \ \psi|_{A^{\prime}}\right) \] ここで A^{\prime} は次のように定義される:</description>
    </item>
    <item>
      <title>4.4. 有向グラフへの変換 - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/conversion/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/conversion/</guid>
      <description>4.4.1 多重有向グラフから多重グラフへの変換 任意の多重有向グラフ D は「矢印」を除去することで (無向) 多重グラフ G に変換できる。この操作を「弧の向きを無視する」と呼ぶこともある: 定義 4.4.1 D を多重有向グラフとする。D の任意の弧 a を a の始点と終点を端点に持つ辺で置き換えることで得られる多重グラフを D^{\operatorname*{und}} と表記する。数学的に言えば、D^{\operatorname*{und}} は次のように定義できる: 多重有向グラフ D=\left( V,A,\psi\right) に対して D^{\operatorname*{und}}\colonequals \left( V,A,\varphi\right) と定める。ここで、写像 \varphi\colon A\rightarrow\mathcal{P}_{1,2}\left( V\right) は弧 a\in A のそれぞれを \psi\left( a\right) の要素からなる集合に移す (つまり、\varphi\left( a\right)  は a の始点と a の終点からなる集合である)。</description>
    </item>
    <item>
      <title>4.5. 歩道・路・閉歩道・閉路 - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/walk-path-closed-walk-cycle/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/walk-path-closed-walk-cycle/</guid>
      <description>4.5.1 定義 続いて単純有向グラフと多重有向グラフにおける様々な種類の歩道を定義する。 単純有向グラフにおける定義では、第 2.9 節と第 2.10 節で示した単純グラフにおける定義を参考にできる。通過する辺の向きが正しいことを要求する点だけに気を付ければよい: 定義 4.5.1 D を単純有向グラフとする。このとき: D における歩道 (walk) とは、D の頂点の有限列 \left( v_{0},v_{1},\ldots,v_{k}\right) (k \geq 0) であって、組 v_{0}v_{1},\ v_{1}v_{2},\ v_{2}v_{3},\ \ldots ,\ v_{k-1}v_{k} が全て D の弧であるものを言う (k = 0 のとき後半の条件は空虚な真となる)。</description>
    </item>
    <item>
      <title>4.6. 有向グラフの強接続性と弱接続性 - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/connectedness-strong-and-weak/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/connectedness-strong-and-weak/</guid>
      <description>無向グラフの頂点に対する「路連結性」という関係は路の存在を使って定義された (定義 2.9.8)。しかし有向グラフでは、二頂点 u, v に対する「u から v への歩道が存在する」と「v から u への歩道が存在する」が (一般に) 関係として等価でないので、路連結性が対称性を持たない。そのため、この関係を表すのに \simeq_{D} のような対称性を示唆する記号を使うのは避けたい。そこで、両方の歩道の存在を意味する強路連結性という関係を定義する: 定義 4.6.1 D を多重有向グラフとする。集合 \operatorname*{V}\left( D\right) 上の二項関係 \simeq_{D} を次のように定義する: D の頂点 u, v に対して、u から v への歩道と v から u への歩道が両方とも存在するとき、かつそのときに限って u\simeq_{D}v と定める。</description>
    </item>
    <item>
      <title>4.7. オイラー歩道とオイラー回路 - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/eulerian-walk-and-circuit/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/eulerian-walk-and-circuit/</guid>
      <description>無向多重グラフのオイラー歩道とオイラー回路は第 3.4 節で学んだ。多重有向グラフでも同様の概念を定義しよう: 定義 4.7.1 D を多重有向グラフとする。 D のオイラー歩道 (Eulerian walk) とは、D の全ての弧をちょうど一度ずつ含む歩道を意味する。 [言い換えれば: D の歩道 \left( v_{0},a_{1},v_{1},a_{2},v_{2},\ldots ,a_{k},v_{k}\right) が「任意の D の弧 a に対して、a=a_{i} を満たす i\in\left\{ 1,2,\ldots,k\right\} がちょうど一つ存在する」を満たすなら、その歩道をオイラー歩道と呼ぶ。] D のオイラー回路 (Eulerian circuit) とは、オイラー歩道である回路 (つまり閉歩道) を意味する。</description>
    </item>
    <item>
      <title>4.8. ハミルトン路とハミルトン閉路 - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/hamiltonian-cycle-and-path/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/hamiltonian-cycle-and-path/</guid>
      <description>単純有向グラフに対するハミルトン路とハミルトン閉路は単純グラフの場合と同様に定義できる: 定義 4.8.1 D=\left( V,A\right) を単純有向グラフとする。 D のハミルトン路 (Hamiltonian path) とは、D の各頂点をちょうど一度ずつ含む歩道を言う。明らかに、ハミルトン路は路である。 D のハミルトン閉路 (Hamiltonian cycle) とは、D の閉路 \left( v_{0},v_{1},\ldots,v_{k}\right) であって D の各頂点が v_{0},v_{1},\ldots,v_{k-1} にちょうど一度ずつ含まれるものを言う。 有向グラフにおけるハミルトン路とハミルトン閉路に関して何が言えるだろうか？ Ore の定理 (定理 2.14.4) に対応する事実は存在するだろうか？ この質問への答えは「存在する」である。しかし、その証明は格段に難しい:</description>
    </item>
    <item>
      <title>4.9. グラフの反転と補グラフ - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/reverse-and-complement-digraph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/reverse-and-complement-digraph/</guid>
      <description>ハミルトン (閉) 路からは一度離れて、単純有向グラフに対する新しい操作を二つ定義する。 定義 4.9.1 D=\left( V,A\right) を単純有向グラフとする。このとき: \left( V\times V\right) \setminus A の要素を D の非弧 (non-arc) と呼ぶ。 組 \left( i,j\right) \in V\times V の反転 (reversal) とは組 \left( j,i\right) を意味する。 D^{\operatorname*{rev}} を単純有向グラフ \left( V,A^{\operatorname*{rev}}\right) と定義する。ここで A^{\operatorname*{rev}} は次のように定義される: \[ A^{\operatorname*{rev}}=\left\{ \left( j,i\right) \mid \left( i,j\right) \in A\right\} \] つまり、D の弧を反転させて (始点と終点を入れ替えることで) 得られる単純有向グラフが D^{\operatorname*{rev}} である。D^{\operatorname*{rev}} を D の反転 (reversal) と呼ぶ。</description>
    </item>
    <item>
      <title>4.10. トーナメント - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/tournament/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/tournament/</guid>
      <description>4.10.1 定義 続いて、特別な種類の単純有向グラフを定義する。 定義 4.10.1 有向グラフ D がループを持たないとき、D はループレス (loopless) と言う。 定義 4.10.2 ループレスな単純有向グラフ D が次の条件を満たすとき、D をトーナメント (tournament) と呼ぶ: トーナメント公理: D の任意の異なる二頂点 u, v に対して、\left( u,v\right) と \left( v,u\right) のちょうど一方のみが D の弧である。 例 4.10.3 次の有向グラフはトーナメントである: 次の有向グラフもトーナメントである:</description>
    </item>
    <item>
      <title>4.11. トーナメントに関する練習問題 - 4. 有向グラフと多重有向グラフ - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/digraph-and-multidigraph/exercise-on-tournament/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/digraph-and-multidigraph/exercise-on-tournament/</guid>
      <description>トーナメントに関する話題は当然これだけではない。[Moon13] では様々な話題が解説されている。これまでに触れていない話題の簡単な紹介として、練習問題をいくつか示す。 次の三つの練習問題は「3-閉路」の概念を利用する。 定義 4.11.1 トーナメント D=\left( V,A\right) に含まれる 3-閉路 (3-cycle) とは、V に属する頂点からなる三つ組 \left( u,v,w\right) であって組 \left( u,v\right) , \left( v,w\right) , \left( w,u\right) が全て A に属するものを言う。 例えば、例 4.10.4 で示したトーナメントは 9 個の異なる 3-閉路を持つ:</description>
    </item>
    <item>
      <title>5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/</guid>
      <description>木 (tree) は特に興味深いグラフである。木を特徴付ける性質の一例を示す: 与えられた頂点集合を持つ最小の連結グラフ 与えられた頂点集合を持つ最大の非閉路 (閉路を持たない) グラフ 有向木 (arborescence) は有向グラフにおいて木に最も近い概念である。 本章では木の理論を説明し、木の応用にも少し触れる。木のさらなる応用は理論的情報科学の講義で解説されることが多い。ただし、そういった場面では木の概念が本書のものと多少異なる。</description>
    </item>
    <item>
      <title>5.1. 成分と閉路の性質 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/property-of-component-and-cycle/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/property-of-component-and-cycle/</guid>
      <description>5.1.1 バックトラックフリー歩道: 再考 木を説明する前に、一般的な多重グラフに関する事実をいくつか復習・学習する。まず、定理 2.10.7 の証明で登場したバックトラックフリー歩道を思い出してほしい: 定義 5.1.1 G を多重グラフとする。G のバックトラックフリー歩道 (backtrack-free walk) とは、G の歩道であって任意の隣り合う辺が異なるものを言う。 この概念は次の性質を持つ: 命題 5.1.2 G を多重有向グラフ、\mathbf{w} を G のバックトラックフリー歩道とする。このとき \mathbf{w} は路であるか、そうでなければ閉路を含む。</description>
    </item>
    <item>
      <title>5.2. 森と木の定義と性質 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/forest-and-tree/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/forest-and-tree/</guid>
      <description>5.2.1 定義 それでは、本章の主人公二人を紹介しよう: 定義 5.2.1 閉路を持たない多重グラフを森 (forest) と呼ぶ。 [特に、森は二つの異なる平行な辺を持たない。さらにループも持たない。] 定義 5.2.2 連結な森を木 (tree) と呼ぶ。 例 5.2.3 次の多重グラフを考える: [G は頂点を持たないグラフである。] どのグラフが森で、どのグラフが木だろうか？ グラフ A は閉路を (いくつか) 持つので森ではない。従って A は木でもない。 グラフ B は木である。 グラフ C は森ではあるものの、連結でないので木ではない。 グラフ D は木である。</description>
    </item>
    <item>
      <title>5.3. 葉の定義と性質 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/leave/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/leave/</guid>
      <description>偽植物学の用語定義を続けよう。木が持つ葉を定義する: 定義 5.3.1 T を木とする。次数が 1 である T の頂点を葉 (leaf) と呼ぶ。 例えば、T を次の木とする: T は三つの葉 1, 2, 4 を持つ。 頂点数が固定されたとき、どのような木が最も多くの葉を持つだろうか？ n \geq 3 のとき、単純グラフ \[ \left( \left\{ 0,1,\ldots,n-1\right\} ,\ \left\{ 0i\mid i \in \left\{1,2,\ldots,n-1 \right\} \, \right\} \right) \] は (多重グラフとみなすとき) 木であり、n-1 個の葉を持つ。具体的には 1,2,\ldots,n-1 が葉となる。この木は n 頂点のスターグラフ (star graph) と呼ばれる。8 頂点のスターグラフを次に示す:</description>
    </item>
    <item>
      <title>5.4. 全域木 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/spanning-tree/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/spanning-tree/</guid>
      <description>5.4.1 全域部分グラフ 続いて非常に重要な木の応用に触れる。まず、任意の多重グラフに対して考えられる概念を定義する: 定義 5.4.1 多重グラフ G=\left( V,E,\varphi\right) の全域部分グラフ (spanning subgraph) とは、E の部分集合 F を使って \left( V,F,\varphi|_{F}\right) と書ける多重グラフを意味する。 言い換えれば、G と同じ頂点集合を持つ G の部分多重グラフが G の全域部分グラフである。 さらに言い換えれば、G の頂点を保持したまま辺をいくつか除去して得られるのが G の全域部分グラフである。 これを誘導部分グラフと比べてみてほしい:</description>
    </item>
    <item>
      <title>5.5. グラフと木の中心 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/centers-of-graph-and-tree/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/centers-of-graph-and-tree/</guid>
      <description>5.5.1 距離 グラフが与えられたとき、二つの頂点の間に「距離」を定義できる。距離は二頂点を結ぶ最短路が持つ辺の個数を表す: 定義 5.5.1 G を多重グラフとする。 G の任意の二頂点 u, v に対して、u と v の間の距離 (distance) を、u から v への最短路の長さとして定義する。u から v への路が存在しないなら、u と v の間の距離は \infty と定義される。 u と v の間の距離は d\left( u,v\right) と表記される。G が文脈から明らかでないときは d_{G}\left( u,v\right) とも表記される。</description>
    </item>
    <item>
      <title>5.6. 有向木 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/arborescence/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/arborescence/</guid>
      <description>5.6.1 定義 無向グラフの話題は終わりにしよう。 向きが付いた木とはどんなものだろうか？ つまり、どんな有向グラフが無向グラフにおける木と同じ役割を果たすだろうか？ 無向グラフでは閉路を持たない連結なグラフを木と呼んだ。ここから「有向木」の定義が二つ示唆される: 閉路を持たない強連結な有向グラフを木と定義できそうに思える。しかし残念ながら、そういった有向グラフに関して議論できることは少ない: この条件を満たす任意の有向グラフは 1 個の頂点と 0 個の弧からなる (その理由を納得しておくこと！)。</description>
    </item>
    <item>
      <title>5.7. 有向木 vs. 木 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/arborescence-vs-tree/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/arborescence-vs-tree/</guid>
      <description>続いて有向木と木を関連付ける定理 5.6.4 を証明する。 厳密な証明を行うには、木に関する新しい記法をいくつか導入する必要がある。まず、木において距離 (定義 5.5.1) が持つ性質を一つ証明する: 命題 5.7.1 T を木、r を T の頂点、e を T の辺、u, v を e の端点とするとき d\left( r,u\right) と d\left( r,v\right) はちょうど 1 だけ異なる。言い換えれば、d\left( r,u\right) =d\left( r,v\right) +1 または d\left( r,v\right) =d\left( r,u\right) +1 が成り立つ。 [証明] T は木なので、T の二頂点 p, q 間の距離 d\left( p,q\right) は T における p から q への唯一の路の長さに等しい。</description>
    </item>
    <item>
      <title>5.8. 全域有向木 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/spanning-arborescence/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/spanning-arborescence/</guid>
      <description>多重グラフの全域木に対応する概念として、多重有向グラフの全域有向グラフを定義する: 定義 5.8.1 多重有向グラフ D=\left( V,A,\psi\right) の全域部分有向グラフ (spanning subdigraph) とは、A の部分集合 B を使って \left( V,B,\psi|_{B}\right) と書ける多重有向グラフを意味する。 言い換えれば、D と同じ頂点集合を持つ D の部分多重有向グラフを全域部分有向グラフと呼ぶ。 さらに言い換えれば、D の頂点を保持しながら弧をいくつか除去して得られる多重有向グラフを全域部分有向グラフと呼ぶ。 定義 5.8.2 D を多重有向グラフ、r を D の頂点とする。r を根とする D の全域有向木 (spanning arborescence of D rooted from r) とは、D の全域部分有向グラフであって r を根とする有向木であるものを意味する。</description>
    </item>
    <item>
      <title>5.9. BEST 定理: 主張 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/best-theorem-statement/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/best-theorem-statement/</guid>
      <description>続いて、これまでに示してきたものよりずっと意外性の高い結果を紹介する。 定義 4.7.3 を思い出そう: 多重有向グラフ D の各頂点 v が \deg^{-}v=\deg ^{+}v を満たすとき、かつそのときに限って D は平衡 (balanced) と呼ばれる。平衡性はオイラー回路の存在の必要条件であり、D が弱連結なら十分条件でもある (定理 4.7.2 (a) より)。 驚くべきことに、オイラー回路の個数を与える式が存在する: 定理 5.9.1 [BEST 定理 (BEST theorem)] 各頂点が 1 以上の入次数を持つ平衡な多重有向グラフを D=\left( V,A,\psi\right) とする。D の弧 a を任意に取り、a の終点を r とする。r を根とする全域有向木の個数を \tau\left( D,r\right) と表し、最後の弧が a である D のオイラー回路の個数を \varepsilon \left( D,a\right) と表すとき、次の等式が成り立つ:</description>
    </item>
    <item>
      <title>5.10. 特定の頂点を終根とする有向木 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/arborescence-rooted-to-r/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/arborescence-rooted-to-r/</guid>
      <description>特定の頂点を終根とする有向木の形式的な定義を示す: 定義 5.10.1 D を多重有向グラフ、r を D の頂点とする。 D の各頂点 v に対して v から r の路が D に存在するとき、r を D の終根 (to-root) と呼ぶ。 r が D の終根で、台無向グラフ D^{\operatorname*{und}} が閉路を持たないとき、D は r を終根とする有向木 (arborescence rooted to r) と呼ばれる。 明らかに、定義 5.10.1 と定義 5.6.1 は弧の方向だけが異なる。言い換えれば、有向グラフの弧を反転させる (始点と終点を入れ替える) ことで始根は終根になり、r を根とする有向木は r を終根とする有向木となる (逆も成り立つ)。そのため、r を根とする有向木に関してこれまで証明してきた性質は、全ての弧を反転させることで r を終点とする有向木に関する性質に変換できる。</description>
    </item>
    <item>
      <title>5.11. BEST 定理: 証明 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/best-theorem-proof/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/best-theorem-proof/</guid>
      <description>これで BEST 定理 (定理 5.9.1) を証明する準備が整った。ただ先述したように、最初は BEST&#39; 定理 (定理 5.10.4) を示す。 [証明のアイデア] 弧 a で始まる D のオイラー回路を a-オイラー回路と呼ぶことにする。 \mathbf{e} を a-オイラー回路とする。\mathbf{e} の最初の弧は a であり、\mathbf{e} は r で始まって r で終わる。オイラー回路である \mathbf{e} は D の全ての弧を含む。さらに D の全ての頂点は 1 以上の出次数を持つので、\mathbf{e} は D の全ての頂点を含む。任意の頂点 u \neq r に対して、\mathbf{e} が最後に u を出ていくときの弧を e\left( u\right) と定義する。つまり、終点が u の弧の中で \mathbf{e} における登場位置が最も後ろのものを e\left( u\right) とする。全ての頂点 u \neq r に対する e\left( u\right) を集めた集合を \operatorname*{Exit}\mathbf{e} と定める。この上で次の命題を示す:</description>
    </item>
    <item>
      <title>5.12. 全域有向木に関する系 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/corollary-about-spanning-arborescence/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/corollary-about-spanning-arborescence/</guid>
      <description>BEST 定理 (および BEST&#39; 定理) を使って有向グラフが持つオイラー回路の個数を数える前に、全域有向木の個数に関する系を一つ証明しておく: 系 5.12.1 D=\left( V,A,\psi\right) を平衡な多重有向グラフとする。任意の頂点 r \in V に対して r を終根とする D の全域有向木の個数を \tau\left( D,r\right) とする。このとき \tau\left( D,r\right) は r に依存しない。 [証明] \left\vert V\right\vert \leq 1 のとき示したい命題は自明なので、一般性を失うことなく \left\vert V\right\vert &amp;gt;1 と仮定する。もし頂点 v \in V が \deg^{+}v = 0 を満たすなら、D は平衡より \deg^{-}v = 0 が成り立つ。このとき v 以外の任意の頂点から v への路が存在しないので、任意の頂点 r \in V を終根とする全域有向木は D に存在しない。よって一般性を失うことなく任意の頂点 v \in V で \deg^{+}v&amp;gt;0 だと仮定する。言い換えれば、全ての頂点が 1 以上の出次数を持つと仮定する。</description>
    </item>
    <item>
      <title>5.13. 全域有向木と全域木 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/spanning-arborescence-vs-spanning-tree/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/spanning-arborescence-vs-spanning-tree/</guid>
      <description>BEST 定理 (定理 5.9.1 と定理 5.10.4) は平衡な有向グラフが持つオイラー回路の個数と全域有向木の個数を関連付ける。続いて後者の値を計算する方法を考える。 例えば、何らかの多重グラフ G を使って G^{\operatorname*{bidir}} と書ける有向グラフが持つ全域有向木の個数を考えよう。実は、適当な頂点 r を終根とする G^{\operatorname*{bidir}} の全域有向木は G の全域木と本質的に等しいことが言える: 命題 5.13.1 G=\left( V,E,\varphi\right) を多重グラフとする。定義 4.4.2 を思い出せば、G^{\operatorname*{bidir}} の弧集合は組 \left( e,i\right) \in E\times\left\{ 1,2\right\} である。以降では G の全域木とその辺集合を同一視し、G^{\operatorname*{bidir}} の全域有向木をその弧集合と同一視する。</description>
    </item>
    <item>
      <title>5.14. 行列木定理 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/matrix-tree-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/matrix-tree-theorem/</guid>
      <description>5.14.1 導入 前節の議論から、多重グラフの全域木を数える問題は多重有向グラフで (任意の頂点を終点とする) 全域有向木を数える問題の特殊ケースだと分かった。どちらの問題なら解けるだろうか？ 簡単な例から議論を始めよう: 例 5.14.1 完全グラフ K_{1} には全域木が 1 個しか存在しない: 完全グラフ K_{2} にも全域木が 1 個しか存在しない: 完全グラフ K_{3} には 3 個の全域木が存在する: [これらのグラフは同型であるものの、グラフとしては異なる。] 完全グラフ K_{4} には 16 個の全域木が存在する: [同型なグラフを同一視すると、全域木は二種類しかない。] この例から、完全グラフ K_{n} の全域木の個数が n^{n-2} であることが示唆される。</description>
    </item>
    <item>
      <title>5.15. 無向グラフに対する行列木定理 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/undirected-matrix-tree-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/undirected-matrix-tree-theorem/</guid>
      <description>5.15.1 定理 行列木定理は G^{\operatorname*{bidir}} の形をした有向グラフに適用すると単純になる: 定理 5.15.1 [無向グラフに対する行列木定理] G=\left( V,E,\varphi\right) を多重グラフとする。ある n \in \mathbb{N} で V=\left\{ 1,2,\ldots,n\right\} だと仮定する。 有向グラフ G^{\operatorname*{bidir}} のラプラシアンを L とする。明示的に言えば、n\times n 行列 L\in\mathbb{Z}^{n\times n} の各要素は次の式で与えられる: \[ L_{i,j}=\left( \deg i\right) \cdot\left[ i=j\right] -a_{i,j} \] ここで a_{i,j} は i と j を端点に持つ G の辺の個数を表す (ループは二度数える)。このとき: G の任意の頂点 r に対して次の等式が成り立つ: \[ \left(\text{\# } G \text{ の全域木} \right) =\det\left( L_{\sim r,\sim r}\right) \] t を不定元とする。行列式 \det\left( tI_{n}+L\right) を t の多項式として展開したときの t の係数を c_{0},c_{1},\ldots,c_{n} とする (ここで I_{n} は n\times n の恒等行列を表す)。言い換えれば、次の等式が成り立つように c_{0},c_{1},\ldots,c_{n} を定める:</description>
    </item>
    <item>
      <title>5.16. de Bruijn 列 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/de-bruijn-sequence/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/de-bruijn-sequence/</guid>
      <description>5.16.1 定義 これまでに紹介したものより複雑な有向木の応用例を見よう。 最初にパズルを一つ: 次に示す周期的な列は、どんな特徴を持つだろうか？ \[ ||:0000\ 1111\ 0110\ 0101:|| \] [この列の要素は 0 と 1 だけであり、空白は見やすさのためだけにある。||: と :|| は反復を表す記号であり、この間にある列が無限に繰り返されることを意味する。つまり上の列は 0000\ 1111\ 0110\ 0101\ 0000\ 1111\ \ldots に等しい。] この列が持つ素敵な特徴の一つとして、列の上で長さ 4 の「ウィンドウ」をスライドさせる (連続する 4 要素を順に取る) と、長さ 4 のビット文字列として可能な 16 個のビット文字列が全て得られることがある。加えて、ウィンドウが 16 回スライドするまで同じビット文字列は得られない。長さ 4 のウィンドウを上に示した列の上でスライドさせる様子を次に示す:</description>
    </item>
    <item>
      <title>5.17. ラプラシアンに関する他の話題 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/more-on-laplacian/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/more-on-laplacian/</guid>
      <description>有向グラフのラプラシアンに関して言えることは他にも多くある。グラフと有向グラフに関連付く行列を研究する分野はスペクトルグラフ理論 (spectral graph theory) と呼ばれる。スペクトルグラフ理論が扱う行列の中で最も重要なのがラプラシアンではないかと私は思う (定義の理解しやすさでは隣接行列に分があるだろう)。行列木定理を (定理 5.15.1 (a) に似た命題として) 初めて発見したのは Gustav Kirchhoff であり、彼は電気回路に関する研究 [Kirchh47] の中で行列木定理を発見した ([Holzer22, § 2.1.1] に現代的な解説がある)。電気回路ネットワークにおける任意のノード間の実効抵抗は全域木の個数の比として表すことができ、そのためラプラシアンを使って計算できる (例えば [Vos16, § 2 and § 3] を見てほしい)。なお、正確に言うと実効抵抗は全域木の個数の重み付き平均に依存するので、その計算は本書で考えてきた問題より一般的な問題となる。この問題は第 5.19 節で考える。</description>
    </item>
    <item>
      <title>5.18. ラプラシアンの左零空間について - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/on-left-nullspace-of-laplacian/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/on-left-nullspace-of-laplacian/</guid>
      <description>有向グラフのラプラシアンに関する結果をもう一つ紹介する。この結果を使うと、読者も抱いたはずの自然な疑問に答えられる。有向グラフ D のラプラシアン L は e= \left(1,1,\ldots,1\right)^{T} に対して常に Le=0 を満たすと以前に示した。よって、このベクトル e は L の右零空間 (右核) に属する。容易に分かるように、もし D が終根を持つ (そして票数 0 の体を考えている) なら、e は L の右零空間を張る ── つまり、e の定数倍でないベクトルは L の右零空間に属さない (実は、この逆も成り立つ)。L の左零空間についてはどうだろうか？ fL=0 を満たす 0 でないベクトル f は存在するだろうか？ この質問の答えは「存在する」である:</description>
    </item>
    <item>
      <title>5.19. 重み付き行列木定理 - 5. 木と有向木 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/tree-and-arborescence/weighted-matrix-tree-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/tree-and-arborescence/weighted-matrix-tree-theorem/</guid>
      <description>5.19.1 定義 ここまでは有向木の数え上げ (counting) を考えてきた。数え上げの自然な一般化として重み付き数え上げ (weighted counting) がある ── つまり、有向木のそれぞれに何らかの重み (weight) を割り振り、全ての有向木の重みの和を求める問題である。任意の有向木の重みを 1 とすれば重み付き数え上げで有向木の個数を求められるので、重み付き数え上げは確かに数え上げの一般化と言える。 有向木の重みを適当に割り振ったのでは、重み付き和に特別な意味は生まれない。しかし、良い性質を持った重みの付け方は存在する。例えば、有向グラフの弧に重みを割り当て、有向木の重みを有向木に含まれる全ての弧の積として定義したとき、何が言えるかを考えてみよう。</description>
    </item>
    <item>
      <title>6. グラフの彩色 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/coloring/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/coloring/</guid>
      <description>グラフの頂点に色を塗ろう！</description>
    </item>
    <item>
      <title>6.1. グラフの彩色の定義 - 6. グラフの彩色 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/coloring/definition/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/coloring/definition/</guid>
      <description>これは真面目な数学の講義なので、色は正整数で表される。頂点に色を塗るとは、各頂点に正整数を割り当てることに等しい: 定義 6.1.1 G=\left( V,E,\varphi\right) を多重グラフ、k を自然数とする。 G の k-彩色 (k-coloring) とは、写像 f\colon V\rightarrow \left\{ 1,2,\ldots,k\right\} を意味する。k-彩色 f が与えられたとき、自然数 1,2,\ldots,k を色 (color) と呼び、f\left( v\right) を「k-彩色 f における頂点 v の色」と呼ぶ。 G の k-彩色 f が適切 (proper) とは、G で隣接する任意の二頂点が同じ色を持たないことを言う。 [言い換えれば、G の k-彩色 f が適切なのは、f\left( u\right) =f\left( v\right) を満たす u, v を端点に持つ G の辺が存在しないとき、かつそのときに限る。]</description>
    </item>
    <item>
      <title>6.2. グラフの 2-彩色 - 6. グラフの彩色 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/coloring/2-coloring/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/coloring/2-coloring/</guid>
      <description>一方で、グラフに適切な 2-彩色が存在するかどうかを判定する問題はずっと簡単に解ける。次の定理が優れた判定基準となる: 定理 6.2.1 [2-彩色の同値性定理 (2-coloring equivalence theorem)] G=\left( V,E,\varphi\right) を多重グラフとする。このとき、次の三つの命題は同値である: 命題 B1: グラフ G が適切な 2-彩色を持つ。 命題 B2: グラフ G に長さが奇数の閉路が存在しない。 命題 B3: グラフ G に長さが奇数の回路が存在しない。 この定理を証明するには、命題 3.3.14 に似た次の命題が必要になる: 命題 6.2.2 G を多重グラフ、u, v を G の頂点とする。u から v への奇数長の歩道 \mathbf{w} が存在すると仮定する。このとき、\mathbf{w} は u から v への奇数長の路もしくは奇数長の閉路のいずれか (または両方) を含む。</description>
    </item>
    <item>
      <title>6.3. Brooks の定理 - 6. グラフの彩色 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/coloring/brooks-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/coloring/brooks-theorem/</guid>
      <description>先述したように、与えられたグラフ G が適切な k-彩色を持つかどうかを判定する問題は k \leq 2 でない限り計算量的に難しい問題となる。この事実は理論的な判定基準を考える場合でも変わらない: k &amp;gt; 2 のとき、グラフに適切な k-彩色が存在するための必要十分条件となる優れた判定基準を私は知らない。ただし、十分条件はいくつか知られている。その一つを次に示す: 定理 6.3.1 [Brooks の小定理 (little Brooks&#39; theorem)] 少なくとも一つの頂点を持つループレス1な多重グラフを G=\left( V,E,\varphi\right) とする。\alpha を次のように定める:</description>
    </item>
    <item>
      <title>6.4. グラフの適切な彩色に関する練習問題 - 6. グラフの彩色 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/coloring/exercise-on-proper-coloring/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/coloring/exercise-on-proper-coloring/</guid>
      <description>練習問題 6.1 G を n 頂点の単純グラフ、k を正整数とする。 次の命題を示せ: G が適切な k-彩色を持つなら、K_{k+1} と同型な G の部分グラフは存在しない。 k\geq n-2 のとき (a) の逆が成り立つ。つまり、K_{k+1} と同型な G 部分グラフが存在しないなら、G は適切な k-彩色を持つ。 k &amp;lt; n - 2 のときも (a) の逆は成り立つか？ 特に、n=5 かつ k = 2 のとき成り立つか？ 練習問題 6.2 G を連結でループレスな多重グラフとする。G が適切な 2-彩色を持つのは、G の任意の三頂点 u, v, w が次の条件を満たすとき、かつそのときに限ると示せ:</description>
    </item>
    <item>
      <title>6.5. グラフの彩色多項式 - 6. グラフの彩色 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/coloring/chromatic-polynomial/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/coloring/chromatic-polynomial/</guid>
      <description>グラフの彩色に関して驚くべき事実がもう一つある: 多重グラフ G が持つ適切な k-彩色の個数は k の多項式となる。正確に言えば次の通りである: 定理 6.5.1 [Whitney の彩色多項式定理 (Whitney&#39;s chromatic polynomial theorem)] G=\left( V,E,\varphi\right) を多重グラフとする。x だけを不定元に持つ整数係数多項式 \chi_{G} を、次のように定める: \[ \chi_{G} =\sum_{F\subseteq E}\left( -1\right) ^{\left\vert F\right\vert}x^{\operatorname*{conn}\left( V,F,\varphi|_{F}\right) } =\sum_{\substack{H:\, G \text{ の全域}\\\text{部分グラフ}}}\left( -1\right)^{\left\vert \operatorname*{E}\left( H\right) \right\vert }x^{\operatorname*{conn}H} \] [記号 \sum\limits_{F\subseteq E} は「E の全ての部分集合 F にわたる和」を意味する。]</description>
    </item>
    <item>
      <title>6.6. Vizing の定理 - 6. グラフの彩色 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/coloring/vizings-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/coloring/vizings-theorem/</guid>
      <description>ここまではグラフの頂点の彩色を考えてきた。グラフの辺の彩色を考えることもできる: 定義 6.6.1 G=\left( V,E,\varphi\right) を多重グラフ、k を任意の自然数とする。 G の k-辺彩色 (k-edge-coloring) とは、写像 f\colon E\rightarrow\left\{ 1,2,\ldots,k\right\} を言う。 k-辺彩色 f が適切 (proper) とは、共通の端点を持つ任意の異なる二辺が同じ色を持たないことを言う。 辺彩色に関する最も重要な事実は次の定理である: 定理 6.6.2 [Vizing の定理 (Vizing&#39;s theorem)] 少なくとも一つの頂点を持つ単純グラフを G とする。\alpha を次のように定める:</description>
    </item>
    <item>
      <title>6.7. グラフの彩色に関する練習問題 - 6. グラフの彩色 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/coloring/further-exercise/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/coloring/further-exercise/</guid>
      <description>グラフの彩色に関しては様々な興味深い事実が知られている。適切でない彩色についても言えることがある: 練習問題 6.9 G=\left( V,E\right) を単純グラフとする。 条件「任意の頂点 v \in V に対して、v と同じ色を持つ v の隣接頂点の個数は \dfrac{1}{2}\deg v 以下である」を満たす G の 2-彩色 f が存在すると示せ。 [Remark: この問題は次のように表現されることもある: 政治家の有限集合が与えられる。一部の政治家同士は (お互いに) 敵同士である (自分自身が敵である政治家はいない。もし u が v の敵なら、v も u の敵となる。また、敵の敵は必ずしも友ではない。つまり考えているのは制約を持たない単なる単純グラフである)。この政治家の集合を二つの派閥に分割し、任意の政治家が「自分と同じ派閥に属する自分の敵の人数は、自分の敵の総数の半分以下である」を満たすようにできると示せ。]</description>
    </item>
    <item>
      <title>7. グラフの独立集合 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/independent-set/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/independent-set/</guid>
      <description></description>
    </item>
    <item>
      <title>7.1. 独立集合の定義と Caro-Wei の定理 - 7. グラフの独立集合 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/independent-set/definition-and-caro-wei-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/independent-set/definition-and-caro-wei-theorem/</guid>
      <description>続いて、グラフ理論において最も基礎的な概念の一つを定義する: 定義 7.1.1 多重グラフ G の独立集合 (independent set) とは、\operatorname*{V}\left( G\right) の部分集合 S であって任意の二要素が G で隣接しないものを言う。 言い換えれば、G の独立集合は辺を持たない G の誘導部分グラフとほぼ等しい1。なお、独立集合の定義にある「S の任意の二要素」は「S の任意の異なる二要素」ではない点に注意してほしい。 例えば、定義 2.3.2 で定義した「反三角形」は要素数 3 の独立集合を意味する。</description>
    </item>
    <item>
      <title>7.2. 独立集合の個数に対する弱いものの単純な下界 - 7. グラフの独立集合 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/independent-set/weaker-but-simpler-lower-bound/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/independent-set/weaker-but-simpler-lower-bound/</guid>
      <description>定理 7.1.3 を弱めると次の系が得られる: 系 7.2.1 n 個の頂点と m 個の辺を持つループレスな多重グラフを G とする。このとき、G は要素数が \[ \dfrac{n^{2}}{n+2m} \] 以上の独立集合を持つ。 この系を証明するには、次の不等式が必要になる: 補題 7.2.2 a_{1},a_{2},\ldots,a_{n} を n 個の正の実数とするとき、次の不等式が成り立つ: \[ \dfrac{1}{a_{1}}+\dfrac{1}{a_{2}}+\cdots+\dfrac{1}{a_{n}}\geq\dfrac{n^{2}}{a_{1}+a_{2}+\cdots+a_{n}} \] [証明] いくかの証明が知られている1: Jensen の不等式 (Jensen&#39;s inequality) を凸関数 \mathbb{R}^{+}\rightarrow\mathbb{R}^{+},\ x\mapsto\dfrac{1}{x} に適用する。 Cauchy-Schwarz の不等式 (Cauchy-Schwarz inequality) を使う: \[ \begin{aligned} &amp;amp; \left( a_{1}+a_{2}+\cdots+a_{n}\right) \left( \dfrac{1}{a_{1}}+\dfrac {1}{a_{2}}+\cdots+\dfrac{1}{a_{n}}\right) \\ &amp;amp; \qquad \geq\left( \underbrace{\sqrt{a_{1}\dfrac{1}{a_{1}}}+\sqrt{a_{2}\dfrac {1}{a_{2}}}+\cdots+\sqrt{a_{n}\dfrac{1}{a_{n}}}}_{=n}\right) ^{2}=n^{2} \end{aligned} \] AM-HM 不等式 (AM-HM inequality) を使う。</description>
    </item>
    <item>
      <title>7.3. Turán の定理の証明 - 7. グラフの独立集合 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/independent-set/proof-of-turans-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/independent-set/proof-of-turans-theorem/</guid>
      <description>Turán の定理 (定理 2.4.8) には証明を与えていなかった。この定理は前節で示した系 7.2.1 を使うと容易に証明できる。読みやすいように、Turán の定理をここに繰り返しておく: 定理 7.3.1 [Turán の定理 (Turán&#39;s theorem)] r を正整数、G を n 個の頂点と e 個の辺を持つ単純グラフとする。このとき \[ e&amp;gt;\dfrac{r-1}{r}\cdot\dfrac{n^{2}}{2} \] が成り立つなら、相互に隣接する r+1 個の相異なる頂点が G に存在する。 [証明] 単純グラフ G を G=\left( V,E\right) と書く。このとき \left\vert V\right\vert =n と \left\vert E\right\vert =e と E\subseteq\mathcal{P}_{2}\left( V\right) が成り立つ。</description>
    </item>
    <item>
      <title>8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/</guid>
      <description></description>
    </item>
    <item>
      <title>8.1. マッチングの定義 - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/introduction/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/introduction/</guid>
      <description>グラフの独立集合は「共通の辺を持たない」頂点の集合である。つまり、独立集合に属する二頂点を端点に持つ辺は存在しない。 ある意味で、マッチングは独立集合の双対と言える: マッチングは「共通の頂点を持たない」辺の集合を意味する。つまり、マッチングに属する二辺が同じ頂点を含むことはない。形式的な定義は次の通りである: 定義 8.1.1 G=\left( V,E,\varphi\right) をループレスな多重グラフとする。 G のマッチング (matching) とは、E の部分集合 M であって任意の異なる二要素が共通の端点を持たないものを言う。</description>
    </item>
    <item>
      <title>8.2. 二部グラフ - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/matching-bipartite/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/matching-bipartite/</guid>
      <description>定義 8.2.1 二部グラフ (bipartite graph) とは、次の条件を満たす三つ組 \left( G,X,Y\right) を意味する: G=\left( V,E,\varphi\right) は多重グラフである。 X と Y は共通要素を持たない V の部分集合であり、X\cup Y=V を満たす。 G の任意の辺は X に属する端点と Y に属する端点を持つ。 例 8.2.2 6 次の閉路グラフ C_{6} を考える: \left( C_{6},\ \left\{ 1,3,5\right\} ,\ \left\{ 2,4,6\right\} \right) は二部グラフである。なぜなら、G の各辺は \left\{ 1,3,5\right\} に属する端点と \left\{ 2,4,6\right\} に属する端点を持つからである。また、\left( C_{6},\ \left\{ 2,4,6\right\} ,\ \left\{ 1,3,5\right\} \right) も二部グラフである。</description>
    </item>
    <item>
      <title>8.3. Hall の結婚定理 - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/matching-hall/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/matching-hall/</guid>
      <description>どうすれば二部グラフが完全マッチング (あるいは X-完全マッチング) を持つかどうかを判定できるだろうか？ この質問に答える前に、まずは非常に簡単な命題をいくつか証明しておく: 命題 8.3.1 \left( G,X,Y\right) を二部グラフ、M を G のマッチングとする。このとき: 任意の x \in X の M-パートナーは (存在するなら) Y に属する。任意の x \in Y の M-パートナーは (存在するなら) X に属する。 \left\vert M\right\vert \leq\left\vert X\right\vert と \left\vert M\right\vert \leq\left\vert Y\right\vert が成り立つ。</description>
    </item>
    <item>
      <title>8.4. König の定理と Hall–König の定理 - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/matching-koenig/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/matching-koenig/</guid>
      <description>Hall の結婚定理には様々なバージョンが知られているものの、そのほとんどは前節の最後で示した命題と同値である (どちらかを仮定すれば、もう一方を容易に導ける)。本節で最初に紹介する König の定理 (1931 年に Dénes König と Jenő Egerváry が独立に発見した) は頂点被覆の概念を利用する。頂点被覆の定義を示す: 定義 8.4.1 G=\left( V,E,\varphi\right) を多重グラフとする。G の頂点被覆 (vertex cover) とは、V の部分集合 C であって条件「G の各辺が C に含まれる頂点を少なくとも一つ含む」を満たすものを言う。</description>
    </item>
    <item>
      <title>8.5. 個別代表系 - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/systems-of-representative/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/systems-of-representative/</guid>
      <description>Hall の結婚定理 (定理 8.3.4) のグラフを使わない表現を二つ紹介する。組合せ論以外の分野で Hall の結婚定理を使うときは、これらの表現が用いられることが多い。一つ目の表現は次の通りである: 定理 8.5.1 [SDR の存在] A_{1},A_{2},\ldots,A_{n} を n 個の集合とする。全ての p\in\left\{ 0,1,\ldots,n\right\} に対して、これらの集合から任意に取った p 個の集合の和集合が p 個以上の要素を持つとする。言い換えれば、全ての p\in\left\{ 0,1,\ldots,n\right\} に対して次の条件が成り立つと仮定する: \[ \begin{aligned} \forall i_{1} \forall i_{2} \ldots \forall i_{p} \in \left\{1,2,\ldots,n\right\}, \quad &amp;amp;1\leq i_{1} &amp;lt; i_{2} &amp;lt; \cdots &amp;lt; i_{p}\leq n \\ &amp;amp;\qquad \Longrightarrow \left\vert A_{i_{1}}\cup A_{i_{2}}\cup\cdots\cup A_{i_{p}}\right\vert \geq p \end{aligned} \] このとき、次の条件を満たす n 個の相異なる要素 a_{1}, a_{2}, ..., a_{n} が存在する:</description>
    </item>
    <item>
      <title>8.6. 正則二分グラフ - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/regular-bipartite-graph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/regular-bipartite-graph/</guid>
      <description>Hall の結婚定理 (定理 8.3.4) は任意の二部グラフに X-完全なマッチングが存在するかどうかを判定する必要十分条件を与える。正則二部グラフ (全ての頂点が同じ次数を持つ二部グラフ) を考えるとき、この十分条件はより単純になる: X-完全なマッチングは常に存在する！ 本節では、この意外な事実を証明する (Hall の結婚定理を使えば難しくない)。そのために、まずは正則なグラフという概念を定義する: 定義 8.6.1 k を自然数とする。多重グラフ G の全ての頂点が次数 k を持つとき、G は k-正則 (k-regular) と言う。</description>
    </item>
    <item>
      <title>8.7. ラテン方陣 - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/latin-squares/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/latin-squares/</guid>
      <description>Frobenius のマッチング定理 (命題 8.6.7) が持つ様々な応用の一つに、ラテン方陣の数学的理論がある。ラテン方陣は次のように定義される: 定義 8.7.1 n を自然数とする。n 次のラテン方陣 (Latin square of order n) とは、次の条件を満たす n\times n 行列 M を意味する: M の要素は整数 1,2,\ldots,n であり、それぞれちょうど n 回ずつ現れる。 M の各行の要素は全て異なる。 M の各列の要素は全て異なる。 例 8.7.2 5 次のラテン方陣を次に示す: \[ \begin{pmatrix} 1 &amp;amp; 2 &amp;amp; 3 &amp;amp; 4 &amp;amp; 5\\ 2 &amp;amp; 3 &amp;amp; 4 &amp;amp; 5 &amp;amp; 1\\ 3 &amp;amp; 4 &amp;amp; 5 &amp;amp; 1 &amp;amp; 2\\ 4 &amp;amp; 5 &amp;amp; 1 &amp;amp; 2 &amp;amp; 3\\ 5 &amp;amp; 1 &amp;amp; 2 &amp;amp; 3 &amp;amp; 4 \end{pmatrix} \] この形をしたラテン方陣は一般化できる: c_{k} を次のように定めるとき、任意の自然数 n に対して行列 \left( c_{i+j-1}\right) _{1\leq i\leq n,\ 1\leq j\leq n} は n 次のラテン方陣である:</description>
    </item>
    <item>
      <title>8.8. 魔法陣と Birkhoff–von Neumann の定理 - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/magic-matrix-and-birkhoff-von-neumann-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/magic-matrix-and-birkhoff-von-neumann-theorem/</guid>
      <description>Hall の結婚定理 (定理 8.3.4) を線形代数に応用してみよう。 本書では \mathbb{N}=\left\{ 0,1,2,\ldots\right\} だったことを思い出してほしい。また、非負実数全体の集合を \mathbb{R}_{+} と書くことも本書の最初で定めた。 読者も知っているであろう概念の定義を三つ示す: 定義 8.8.1 \mathbb{N}-魔法陣 (\mathbb{N}-magic matrix) とは、次の三つの条件を満たす正方行列 M を意味する: M の要素は全て非負整数である。 M の各行の和は全て等しい。 M の各列の和は全て等しい。 定義 8.8.2 \mathbb{R}_{+}-魔法陣 (\mathbb{R}_{+}-magic matrix) とは、次の三つの条件を満たす正方行列 M を意味する: M の要素は全て非負実数である。</description>
    </item>
    <item>
      <title>8.9. Hall の結婚定理に関する練習問題 - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/further-uses-of-halls-marriage-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/further-uses-of-halls-marriage-theorem/</guid>
      <description>Hall の結婚定理 (定理 8.3.4) を利用する練習問題を少数ではあるがここに示す。 練習問題 8.3 有限集合 X, Y が \left\vert X\right\vert \leq\left\vert Y\right\vert を満たすと仮定する。f\colon X\rightarrow Y を定数でない写像とする (写像が定数 (constant) とは、写像の値が全て等しいことを言う)。任意の x \in X が g\left( x\right) \neq f\left( x\right) を満たす単射 g\colon X\rightarrow Y が存在すると示せ。 練習問題 8.4 有限集合 A, B が \left\vert B\right\vert \geq\left\vert A\right\vert を満たすと仮定する。任意の \left( i,j\right) \in A\times B に対して実数 d_{i,j} が定まっているとする。m_{1} と m_{2} を次のように定める:</description>
    </item>
    <item>
      <title>8.10. マッチングに関する練習問題 - 8. マッチング - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/matching/further-exercise-on-matching/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/matching/further-exercise-on-matching/</guid>
      <description>練習問題 8.9 G=\left( V,E,\varphi\right) を多重グラフ、M を G のマッチングとする。 M の増加路 (augmenting path) とは、G の路 \left( v_{0},e_{1},v_{1},e_{2},v_{2},\ldots,e_{k},v_{k}\right) であって次の条件を満たすものを言う: k が奇数である。 [k = 1 でも構わない。] 添え字が偶数の辺 e_{2}, e_{4}, \ldots, e_{k-1} が全て M に属する。 [この条件は k=1 のとき空虚な真となる。] 添え字が奇数の辺 e_{1}, e_{3}, \ldots, e_{k} は E \setminus M に属する。 始点 v_{0} は M でマッチ済みでない。 終点 v_{k} は M でマッチ済みでない。 M が G の要素数最大のマッチングであるのは M の増加路が存在しないとき、かつそのときに限ると示せ。</description>
    </item>
    <item>
      <title>9. フロー - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/flow/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/flow/</guid>
      <description>本章ではネットワークフローと、その最適化に関する入門的な話題に触れる。最も単純な結果でさえ鉄道やトラックのスケジューリングで直接利用できるために、ネットワークフローはロジスティクスの専門家とって非常に重要な理論である。純粋に数学的な応用も多くある: 特に、本章ではネットワークフローを使って Hall–König のマッチング定理をようやく証明する (この定理と同値だと示してきた Hall の結婚定理や König の定理といった命題も同時に証明される)。</description>
    </item>
    <item>
      <title>9.1. ネットワークとフローの定義 - 9. フロー - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/flow/definition/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/flow/definition/</guid>
      <description>9.1.1 ネットワーク 本書では \mathbb{N}=\left\{ 0,1,2,\ldots\right\} だったことを思い出してほしい。 定義 9.1.1 ネットワーク (network) は次の要素から構成される: 多重グラフ D=\left( V,A,\psi\right) 入口 (source) と呼ばれる頂点 s \in V 出口 (sink) と呼ばれる s と異なる頂点 t \in V 容量関数 (capacity function) と呼ばれる関数 c\colon A\rightarrow\mathbb{N} 例 9.1.2 ネットワークの例を示す: ここで D は描画されているグラフである (ループと多重辺を持たないので、弧にはラベルを付けていない)。頂点 s, t は図中で s, t とラベルの付いた頂点であり、関数 c の値は D の弧上に書かれている (例えば c\left( \left( s,p\right) \right) =3 や c\left( \left( u,q\right) \right) =1 が成り立つ)。</description>
    </item>
    <item>
      <title>9.2. 最大フロー問題と二部グラフ - 9. フロー - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/flow/maximum-flow-problem-and-bipartite-graph/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/flow/maximum-flow-problem-and-bipartite-graph/</guid>
      <description>フローに関する重要な最適化問題の一つに最大フロー問題 (maximum flow problem) 問題がある。これは与えられたネットワーク上のフローの中で値が最大のものを見つける問題である。 例 9.2.1 二部グラフの最大マッチングを見つける問題は最大フロー問題の特殊ケースである。 実際、\left( G,X,Y\right) を二部グラフとする。このグラフを次のように変形してネットワーク N を構築する: 新しい頂点 s と t を加える。 G の各辺 e を弧 \overrightarrow{e} に置き換える。\overrightarrow{e} の始点は X に属する e の端点で、終点は Y に属する e の端点とする。</description>
    </item>
    <item>
      <title>9.3. フローの基礎的な性質 - 9. フロー - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/flow/basic/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/flow/basic/</guid>
      <description>最大フロー問題に取り掛かる前に、フローに関する簡単な観察を証明しよう: 命題 9.3.1 多重有向グラフ D=\left( V,A,\psi\right) 、入口 s \in V、出口 t \in V、容量関数 c\colon A\rightarrow\mathbb{N} から構成されるネットワークを N とする。N 上のフローを f\colon A\rightarrow\mathbb{N} とする。このとき次の等式が成り立つ: \[ \begin{aligned} \left\vert f\right\vert &amp;amp; =f^{+}\left( s\right) -f^{-}\left( s\right) \\ &amp;amp; =f^{-}\left( t\right) -f^{+}\left( t\right) \end{aligned} \] [証明] 次の等式が成り立つ: \[ \begin{aligned} \sum\limits_{v\in V}f^{+}\left( v\right) &amp;amp; =\underbrace{\sum\limits_{v\in V}\ \ \sum_{\substack{a\in A;\\[2pt] a \text{ の始点は } v}}}_{=\sum\limits_{a\in A}} f\left( a\right) \qquad \left(\because\ f^{+}\left(x\right) \text{ の定義} \right) \\ &amp;amp; =\sum_{a\in A}f\left( a\right) \end{aligned} \] [この等式は有名な性質 \sum \limits_{v\in V}\deg^{+}v=\left\vert A\right\vert の一般化と言える。] 同様に \sum\limits_{v\in V}f^{-}\left( v\right) =\sum\limits_{a\in A}f\left( a\right) も成り立つ。ここから次の等式を得る:</description>
    </item>
    <item>
      <title>9.4. 最大フロー最小カット定理 - 9. フロー - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/flow/max-flow-min-cut-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/flow/max-flow-min-cut-theorem/</guid>
      <description>9.4.1 カットの定義 メインディッシュの前に、もう一つ概念を定義する: 定義 9.4.1 多重有向グラフ D=\left( V,A,\psi\right) 、入口 s \in V、出口 t \in V、容量関数 c\colon A\rightarrow\mathbb{N} から構成されるネットワークを N とする。このとき: N のカット (cut) とは、\left[ S,\overline{S}\right] の形をした A の部分集合を意味する。ここで S は V の部分集合であり、s\in S と t\notin S を満たす。 カット \left[ S,\overline {S}\right] の容量 (capacity) は、値 c\left( S,\overline{S}\right) =\sum\limits_{a\in\left[ S,\overline{S}\right] }c\left( a\right) と定義される。 例 9.4.2 例 9.1.2 のネットワークをもう一度考える。集合 \left[ \left\{ s,u\right\},\, \overline{\left\{ s,u\right\} }\right] =\left\{ sp,\ uv,\ uq\right\} は、このネットワークのカットである。このカットの容量は c\left( \left\{ s,u\right\},\, \overline{\left\{ s,u\right\} }\right) =5 である。</description>
    </item>
    <item>
      <title>9.5. Hall–König のマッチング定理の証明 - 9. フロー - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/flow/hall-konig/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/flow/hall-konig/</guid>
      <description>続いて、最大フロー最小カット定理 (定理 9.4.3) を使って Hall–König のマッチング定理 (定理 8.4.7) を証明する。 [定理 8.4.7 の証明 (概略)] [これは概略である。詳細は [17s-lec16, proof of Lemma 1.42] を見てほしい1。] 例 9.2.1 で説明したように、二部グラフ \left( G,X,Y\right) からネットワーク N を構築し、G のマッチングと N のフローが一対一に対応するようにできる。最大フロー最小カット定理 (定理 9.4.3) より次の等式が分かる: \[ \max\left\{ \left\vert f\right\vert \mid f\text{ は } N \text{ 上のフロー}\right\} =\min\left\{ c\left( S,\overline{S}\right) \mid S\subseteq V\ \wedge\ s\in S\ \wedge\ t\notin S\right\} \] ここで V はネットワーク N を構成する有向グラフの頂点集合を表す。この等式から、N 上のネットワーク f と N のカット \left[ S,\overline{S}\right] であって \left\vert f\right\vert =c\left( S,\overline{S}\right) を満たすものが存在すると分かる。この f と S に注目する。S は V の部分集合であり、s \in S と t \notin S を満たす。</description>
    </item>
    <item>
      <title>9.6. 最大フロー最小カット定理の応用 - 9. フロー - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/flow/other-application/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/flow/other-application/</guid>
      <description>これまでに言及してこなかった最大フロー最小カット定理の応用をいくつか示す: 行列の要素を丸める操作に関する次の興味深い事実: A を m \times n の実行列とする。A の任意の列の和と任意の行の和が全て整数だと仮定する。このとき、A の任意の列の和と任意の行の和を変えないように A の整数でない要素を整数に丸める (実数 x を \lceil x \rceil または \lfloor x \rfloor に置き換える) ことができる (行列を表す有向グラフに対する命題が [Schrij17, Exercise 4.13] にある)。</description>
    </item>
    <item>
      <title>索引 - Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/sakuin/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/sakuin/</guid>
      <description>「Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)」の索引です。</description>
    </item>
    <item>
      <title>索引 - 2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/sakuin/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/sakuin/</guid>
      <description>「2011 年グラフィックスパイプラインひとめぐり (翻訳)」の索引です。</description>
    </item>
    <item>
      <title>10. さらに路について - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/more-about-path/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/more-about-path/</guid>
      <description>本章では、グラフと有向グラフの路に関する事実をさらに学習する。</description>
    </item>
    <item>
      <title>10.1. Menger の定理 - 10. さらに路について - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/more-about-path/mengers-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/more-about-path/mengers-theorem/</guid>
      <description>本章では最初に Menger の定理 (Menger&#39;s theorems) と呼ばれる一連の結果を見ていく。この定理は Karl Menger にちなんで名付けられており、彼は 1927 年に曲線のトポロジーに関する研究の補助的な結果として Menger の定理の一つを発見した (この定理の歴史については [Schrij03, § 9.6e] を参照してほしい)。 フィラデルフィアからニューヨークに車で移動するルートが 4 つあるとしよう。それぞれのルートは異なる道路を使う (2 つ以上のルートに利用される道路は存在しない) と仮定する。このとき、どんな 3 つの道路が封鎖されたとしても、フィラデルフィアからニューヨークに行くルートは少なくとも一つ必ず残る。</description>
    </item>
    <item>
      <title>10.2. Gallai-Milgram の定理 - 10. さらに路について - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/more-about-path/gallai-milgram-theorem/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/more-about-path/gallai-milgram-theorem/</guid>
      <description>続いて、これまでに見てきたものより知名度が低い路の性質を紹介する。 10.2.1 定義 最初の性質を表明するには、次の三つの定義が必要になる: 定義 10.2.1 多重有向グラフ D の二頂点 u, v が隣接する (adjacent) とは、無向グラフ D^{\operatorname*{und}} で u と v が隣接することを言う。 [言い換えれば、始点 u と終点 v を持つ弧または始点 v と終点 u を持つ弧が D に存在するとき、かつそのときに限って u と v は隣接する。] 定義 10.2.2 多重有向グラフ D の独立集合 (independent set) とは、 \operatorname*{V}\left( D\right) の部分集合 S であって任意の二要素が隣接しないものを言う。言い換えれば、無向グラフ D^{\operatorname*{und}} の独立集合が D の独立集合である。</description>
    </item>
    <item>
      <title>10.3. 路残存集合 - 10. さらに路について - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/more-about-path/path-missing-set/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/more-about-path/path-missing-set/</guid>
      <description>続いて、さらに人通りの少ない道へ進む。 Menger の定理 (の一つ) は 1927 年に発見され、Gallai–Milgram の定理は 1960 年に発見された。グラフの路に関する結果は遠い昔に全て発見されたのかと思った読者もいるかもしれない。 しかし、そうではないようだ。2017 年、本講義で課題として出すための練習問題を作るために、私は Python を使ってグラフの路に関する実験をしていた。具体的には、二つの異なる頂点 s, t を持つ有向グラフ D=\left( V,A,\psi\right) を考えていた。弧に関する Menger の定理に発想を得て、s と t を切り離さずに (より正確に言えば、s から t への路の少なくとも一つを残すように) D から除去できる A の部分集合 B を調べる中で、そのような部分集合 B の個数は D が閉路あるいは「不用な弧」(s から t へのどの路にも含まれない弧) を持つとき偶数であり、そうでないとき奇数である1ことに私は気が付いた。</description>
    </item>
    <item>
      <title>10.4. Elser 和 - 10. さらに路について - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/more-about-path/elsers-sum/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/more-about-path/elsers-sum/</guid>
      <description>最後に (多重) 無向グラフの話題に戻る。次に示すのは Veit Elser が統計力学に関する研究の中で 1984 年に発見した補題である1: 定理 10.4.1 [Elser の定理 (Elser&#39;s theorem, 大幅に書き換えたバージョン)] 少なくとも一つの辺を持つ多重グラフを G=\left( V,E,\varphi\right) とする。頂点 v\in V を一つ取って固定する。 F\subseteq E に対して、F に属する辺だけから構成される G の路をF-路 (F-path) と呼ぶ。言い換えれば、全域部分グラフ \left( V,F,\varphi|_{F}\right) の路が F-路である。 G の辺 e\in E と辺集合の部分集合 F\subseteq E に対して、v から e のいずれかの端点への F-路が存在するとき、F は e を汚染する (infect) と言う。 [この用語は、v で発生した病気が F に属する辺を通じて広がっていくイメージから命名されている。]</description>
    </item>
    <item>
      <title>参考文献 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/bibliography/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/bibliography/</guid>
      <description>「グラフ理論入門 (翻訳)」の参考文献です。</description>
    </item>
    <item>
      <title>索引 - グラフ理論入門 (翻訳)</title>
      <link>https://inzkyk.xyz/graph/sakuin/</link>
      <pubDate>Sat, 15 Jun 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/graph/sakuin/</guid>
      <description>「グラフ理論入門 (翻訳)」の索引です。</description>
    </item>
    <item>
      <title>Ruby の型検査器 Sorbet の開発で使われた記録・再生テスト (翻訳)</title>
      <link>https://inzkyk.xyz/misc/record-replay-test/</link>
      <pubDate>Sun, 02 Nov 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/misc/record-replay-test/</guid>
      <description>2017 年から 2018 年にかけて、私 (と Paul Tarjan と Dmitry Petrashko) は Stripe で開始された Sorbet プロジェクトの初期メンバーを務めた。このプロジェクトでは Stripe が持つ数百万行の Ruby コードの生産性を向上させるために漸進的静的型検査システムを開発することが目標とされ、最終的に広く利用されるオープンソースツールが作成された。私は Sorbet に関してチームが成し遂げたこと (そして他の人々が開発を続ける事実) を誇りに思う。Sorbet プロジェクトは非常に大きな成功を収め、Sorbet チームは私が所属してきた中で様々な意味で最も優れたチームだと感じている。</description>
    </item>
    <item>
      <title>V8 の JSON.stringify が二倍高速になった理由 (翻訳)</title>
      <link>https://inzkyk.xyz/v8/json-stringify/</link>
      <pubDate>Sat, 27 Sep 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/v8/json-stringify/</guid>
      <description>JSON.stringify はデータのシリアライズで中心的な役割を果たす JavaScript 関数であり、そのパフォーマンスはウェブにおける様々な基礎的操作に影響する。例えばネットワークリクエストを組み立てる処理や localStorage にデータを保存するときのデータの変換で JSON.stringify は利用される。この関数が高速になればページのインタラクションが高速になり、アプリケーションの待ち時間が短くなる。そのため、ここ最近のエンジニアリングの成果によって V8 の JSON.stringify が二倍以上高速になったと伝えられることを我々は嬉しく思っている。この記事では、この改善を可能にした技術的な最適化を解説する。</description>
    </item>
    <item>
      <title>tray_runner: システムトレイから任意のコマンドを実行するための常駐型プログラム</title>
      <link>https://inzkyk.xyz/software/tray_runner/</link>
      <pubDate>Sun, 20 Jul 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/tray_runner/</guid>
      <description>システムトレイから任意のコマンドを実行するための常駐型プログラム tray_runner の紹介です。軽量で、設定を JSON で記述できることが特徴です。</description>
    </item>
    <item>
      <title>bluetooth_audio_switch: Bluetooth オーディオデバイスの接続管理用 CLI</title>
      <link>https://inzkyk.xyz/software/bluetooth_audio_switch/</link>
      <pubDate>Mon, 30 Jun 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/bluetooth_audio_switch/</guid>
      <description>Bluetooth オーディオデバイスとの接続を管理するための CLI プログラム bluetooth_audio_switch の紹介です。ワイヤレスイヤホンといったデバイスとの接続を CLI で操作できます。</description>
    </item>
    <item>
      <title>textunpack: テキストベースのアーカイブユーティリティ</title>
      <link>https://inzkyk.xyz/software/textunpack/</link>
      <pubDate>Wed, 25 Jun 2025 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/textunpack/</guid>
      <description>テキストベースのアーカイブユーティリティ textunpack の紹介です。textunpack を使うと、一つのテキストファイルで複数のテキストファイルを管理することができます。</description>
    </item>
    <item>
      <title>進捗タイマー</title>
      <link>https://inzkyk.xyz/software/syn-choke-timer/</link>
      <pubDate>Sun, 04 Aug 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/syn-choke-timer/</guid>
      <description>進捗タイマーは作業の進捗を計測するのに特化したストップウォッチです。インストール不要でブラウザから使えます。</description>
    </item>
    <item>
      <title>手続き型軽量マークアップ言語 gokurai</title>
      <link>https://inzkyk.xyz/software/gokurai/</link>
      <pubDate>Thu, 11 Jul 2024 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/gokurai/</guid>
      <description>自作のマークアップ言語 gokurai の公開ページです。</description>
    </item>
    <item>
      <title>ソフトウェア</title>
      <link>https://inzkyk.xyz/software/</link>
      <pubDate>Sat, 30 Dec 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/</guid>
      <description>自作のソフトウェアです。</description>
    </item>
    <item>
      <title>オープンソースアプリケーションのパフォーマンス (翻訳)</title>
      <link>https://inzkyk.xyz/posa/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/posa/</guid>
      <description>翻訳について これは Tavish Armstrong 編 The Performance of Open Source Applications の翻訳です。英語版は Creative Commons Attribution 3.0 Unported (CC BY 3.0) ライセンスで公開されています。 この翻訳は CC BY 3.0 ライセンスの許諾に基づいて公開されます。 謝辞 英語版の編集者 Tavish Armstrong 氏と各章の著者に感謝します。 PDF/EPUB 版について この翻訳の PDF/EPUB 版を BOOTH で販売しています。</description>
    </item>
    <item>
      <title>Rust の新しい正規表現エンジンの設計 (翻訳)</title>
      <link>https://inzkyk.xyz/misc/rust_regex_internals/</link>
      <pubDate>Sun, 27 Aug 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/misc/rust_regex_internals/</guid>
      <description>これは Andrew Gallant 著 Regex engine internals as a library の翻訳です。英語版は UNLICENSE と MIT ライセンスのデュアルライセンスで公開されています。 この翻訳は UNLICENSE の許諾に基づいて公開されます。 これまで数年にわたって、私は Rust の regex クレートの書き直し (リライト) を行ってきた。この書き直しは構成要素を整理し、正確性を保った最適化を容易にするために行われた。その中で、私は regex クレートが内部で利用する機能を他のプログラムから使えるように API として公開する新しいクレート regex-automata を作成した。私の知る限り、regex-automata と同程度の詳細さで内部の機能を個別のバージョン付きライブラリとして公開する正規表現ライブラリは他に存在しない。</description>
    </item>
    <item>
      <title>コンピューターネットワーク: システム的アプローチ (翻訳)</title>
      <link>https://inzkyk.xyz/network/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/network/</guid>
      <description>翻訳について これは Larry Peterson, Bruce Davie 著 Computer Networks: A Systems Approach の翻訳です。英語版は Creative Commons Attribution 4.0 International (CC BY 4.0) ライセンスで公開されています。 この翻訳は CC BY 4.0 ライセンスの許諾に基づいて公開されます。 英語の著作権帰属表示は次の通りです: Title: Computer Networks: A Systems Approach Authors: Larry Peterson and Bruce Davie Copyright: Elsevier, 2012 Source: https://github.com/SystemsApproach/book License: CC BY 4.0 翻訳はコミット b9b77b9 のデータを利用して行われました。この次のコミット 5b72343 で「While this license [CC BY 4.0] does not automatically grant the right to make derivative works, ...」という CC BY 4.0 ライセンスと矛盾する一文が README.rst に追加されたので、念のためこれ以降のデータは利用しませんでした。なお CC BY 4.0 ライセンスは irrevocable (撤回不能) なので、万一ライセンスが将来変更されたとしても、この翻訳の公開・販売が不当になることはありません。</description>
    </item>
    <item>
      <title>ソフトウェアのパフォーマンスに関する考察 (翻訳)</title>
      <link>https://inzkyk.xyz/misc/reflections_on_performance/</link>
      <pubDate>Sun, 11 Sep 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/misc/reflections_on_performance/</guid>
      <description>これは Nelson Elhage 著 Reflections on software performance の翻訳です。英語版は Creative Commons Attribution 4.0 International License で公開されています。 この翻訳は Creative Commons Attribution 4.0 International License の許諾に基づいて公開されます。 これまでのキャリアの中で、私はパフォーマンスが決定的な特徴であるプロジェクトに少なくとも三つ取り組んだ: Livegrep, Taktician, Sorbet である (Sorbet については前回の記事で、Livegrep については以前の記事で細かく論じた)。自分が使うツールのパフォーマンスを改善したこともあり、一部は Accidentally Quadratic という私のもう一つのブログにまとまっている。 この記事では、パフォーマンスに優れるソフトウェアを自分で書く中で、そしてパフォーマンスがそれほど優れない数多くのソフトウェアの改善に取り組む中で私が学んだ教訓について考察したい。</description>
    </item>
    <item>
      <title>WebGPU - コアの全てを canvas 抜きで (翻訳)</title>
      <link>https://inzkyk.xyz/misc/webgpu/</link>
      <pubDate>Wed, 22 Jun 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/misc/webgpu/</guid>
      <description>これは Surma 著 WebGPU — All of the cores, none of the canvas の翻訳です。英語版は Creative Commons Attribution 4.0 International License で公開されています。 この翻訳は Creative Commons Attribution 4.0 International License の許諾に基づいて公開されます。 WebGPU は低レベルで汎用な GPU アクセスを提供する Web API であり、現在策定が進んでいる。 私はグラフィックスが専門というわけではない。OpenGL でゲームエンジンを作るチュートリアルを読んで WebGL について何となく理解し、Inigo Quilez が ShaderToy で 3D メッシュやモデル無しにシェーダーだけで素晴らしいことをするのを見てシェーダーについて学んだ。そうして私は PROXX の背景アニメーションなどを作れるようになったものの、WebGL を使っていて気持ちが安らぐことはなかった。この理由は後で簡単に説明する。</description>
    </item>
    <item>
      <title>オープンソースライセンス - テキストゆれないくん</title>
      <link>https://inzkyk.xyz/software/yurenai/oss_licenses/</link>
      <pubDate>Thu, 09 Jun 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/yurenai/oss_licenses/</guid>
      <description>「テキストゆれないくん」で使われているオープンソースライブラリとそのライセンスの一覧です。</description>
    </item>
    <item>
      <title>表記揺れ検出ツール「テキストゆれないくん」</title>
      <link>https://inzkyk.xyz/software/yurenai/</link>
      <pubDate>Thu, 09 Jun 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/software/yurenai/</guid>
      <description>ブラウザで動作する表記揺れ検出ツール「テキストゆれないくん」の公開ページです。「サーバ」と「サーバー」や「表記揺れ」と「表記ゆれ」のような表記揺れを検出します。1500 パターンの表記揺れを搭載しており、すぐに試せます。</description>
    </item>
    <item>
      <title>JavaScript: 最初の 20 年 (翻訳)</title>
      <link>https://inzkyk.xyz/js_20_years/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/js_20_years/</guid>
      <description>翻訳について これは Allen Wirfs-Brock, Brendan Eich 著 JavaScript: the first 20 years の翻訳です。英語版は CC BY 4.0 ライセンスで公開されています。 この翻訳は CC BY 4.0 ライセンスの許諾に基づいて公開されます。 PDF/EPUB 版について この翻訳の PDF/EPUB 版を BOOTH で販売しています。</description>
    </item>
    <item>
      <title>ripgrep は {grep, ag, git grep, ucg, pt, sift} より速い (翻訳)</title>
      <link>https://inzkyk.xyz/misc/ripgrep/</link>
      <pubDate>Wed, 22 Dec 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/misc/ripgrep/</guid>
      <description>これは Andrew Gallant 著 ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} の翻訳です。英語版は UNLICENSE と MIT ライセンスのデュアルライセンスで公開されています。 この翻訳は UNLICENSE の許諾に基づいて公開されます。 この記事では新しいコマンドライン検索ツール ripgrep を紹介する。ripgrep は The Silver Searcher (ack クローン) の利便性と GNU grep の高い性能を併せ持つ。ripgrep は高速で、クロスプラットフォーム (Linux, Mac, Windows 用のバイナリが利用可能) で、Rust を使って書かれている。</description>
    </item>
    <item>
      <title>Python で学ぶベイズフィルタとカルマンフィルタ (翻訳)</title>
      <link>https://inzkyk.xyz/kalman_filter/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/kalman_filter/</guid>
      <description>翻訳について これは Roger R. Labbe 著 Kalman and Bayesian Filters in Python の翻訳です。英語版は CC BY 4.0 ライセンスで公開されています。 この翻訳は CC BY 4.0 ライセンスの許諾に基づいて公開されます。 PDF 版と Jupyter Notebook 版について この翻訳の PDF 版と Jupyter Notebook 版を BOOTH で販売しています。 謝辞 英語版の著者 Roger R. Labbe 氏に感謝します。 誤植を指摘して頂いた小山浩之氏 (https://twitter.com/0yama) に感謝します。</description>
    </item>
    <item>
      <title>2011 年グラフィックスパイプラインひとめぐり (翻訳)</title>
      <link>https://inzkyk.xyz/ttgp/</link>
      <pubDate>Sat, 05 Jun 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/ttgp/</guid>
      <description></description>
    </item>
    <item>
      <title>Julia 1.5.4 ドキュメント (翻訳)</title>
      <link>https://inzkyk.xyz/julia_doc/</link>
      <pubDate>Wed, 24 Mar 2021 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/julia_doc/</guid>
      <description>Julia 言語 (バージョン 1.5.4) に付属するドキュメントの翻訳です。</description>
    </item>
    <item>
      <title>テクニカルライティング One (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/one/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/one/</guid>
      <description></description>
    </item>
    <item>
      <title>テクニカルライティング One/Two (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/</guid>
      <description>翻訳について これは Google が https://developers.google.com/tech-writing/ にて Creative Commons Attribution 4.0 ライセンスで公開している Technical Writing One と Technical Writing Two の翻訳です。Creative Commons Attribution 4.0 ライセンスの許諾に基づいて公開されます。訳者と Google は無関係です。 Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 4.0 Attribution License. The original content is published at https://developers.google.com/tech-writing/. 謝辞 英語版をウェブで公開している Google に感謝します。</description>
    </item>
    <item>
      <title>テクニカルライティング Two (翻訳)</title>
      <link>https://inzkyk.xyz/technical_writing/two/</link>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/technical_writing/two/</guid>
      <description></description>
    </item>
    <item>
      <title>1. はじめに - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/introduction/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/introduction/</guid>
      <description>1 はじめに Lua は強力かつ効率的でありながらも軽量で組み込み可能なことを特徴とするスクリプト言語です。Lua は手続き型プログラミング・オブジェクト指向プログラミング・関数型プログラミング・データ駆動プログラミング・データ記述をサポートします。 Lua は連想配列と拡張可能な意味論をベースとした強力なデータ記述構文と手続き型の簡単な構文の両方を持ちます。Lua は動的に型付けされる言語であり、レジスタベースの仮想マシンによってバイトコードを通して実行され、インクリメンタルガベージコレクションを使った自動メモリ管理機構を持ちます。このため Lua はコンフィグレーション・スクリプティング・高速なプロトタイピングといった用途に理想的な言語となっています。</description>
    </item>
    <item>
      <title>2. 基本的な概念 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/basic_concepts/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/basic_concepts/</guid>
      <description>2 基本的な概念 この章は Lua 言語の基本的な概念を説明します。</description>
    </item>
    <item>
      <title>2.1 値と型 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/basic_concepts/values_and_types/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/basic_concepts/values_and_types/</guid>
      <description>2.1 値と型 Lua は動的型付けの言語です。これは変数が型を持たないことを意味します: 型を持つのは値だけです。Lua に型の定義は存在せず、全ての値がそれぞれ型を持ちます。 Lua の値は全てファーストクラスです。つまり全ての値は変数に保存でき、関数の引数として渡すことができ、関数の返り値として使えます。 Lua には八個の基本型があります: nil 真偽値 (boolean) 数値 (number) 文字列 (string) 関数 (function) ユーザーデータ (userdata) スレッド (thread) テーブル (table) nil 型の値は nil だけです。値 nil は他のどんな値とも異なることが一番の特徴であり、有効な値が存在しないことを表すのによく使われます。真偽値型の値は false と true の二つです。条件文は nil と false の両方に対して偽となります。この二つの値をまとめて偽値 (false value) と呼び、偽値でない任意の値に対して条件文は真となります。</description>
    </item>
    <item>
      <title>2.2 環境とグローバル環境 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/basic_concepts/environments/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/basic_concepts/environments/</guid>
      <description>2.2 環境とグローバル環境 § 3.2 と § 3.3.3 でさらに説明しますが、自由な (どんな宣言にも束縛されていない) 名前 var は構文的に _ENV.var へ変換されます。また全てのチャンクは _ENV という名前の外部ローカル変数のスコープでコンパイルされるので、_ENV はチャンク内で自由な名前となることがありません (参照: § 3.3.2)。 この外部変数 _ENV と自由な名前の変換規則が存在するにもかかわらず、_ENV は通常の名前として利用できます。例えば _ENV という名前の変数やパラメータを定義できます。自由な名前への参照はプログラムのその時点で見えている _ENV を使って解決され、そのときには Lua の可視性に関する通常の規則 (§ 3.5) が適用されます。</description>
    </item>
    <item>
      <title>2.3 エラー処理 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/basic_concepts/error_handling/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/basic_concepts/error_handling/</guid>
      <description>2.3 エラー処理 Lua が行う処理にはエラーを送出するものがあります。エラーはプログラムの通常の実行フローを中断させますが、エラーを捕捉して実行を継続させることもできます。 Lua コードは error 関数を呼ぶことで明示的にエラーを送出できます (この関数は返りません)。 Lua でエラーを捕捉するには保護された呼び出し (protected call) を使います。これは pcall または xpcall を使って行う呼び出しであり、この二つの関数を使うと引数として渡された関数が保護モード (protected mode) で実行されます。与えられた関数の実行中に何らかのエラーが発生すると関数の実行はその時点で停止して制御は pcall に戻り、そのときの状態コードが pcall の返り値となります。</description>
    </item>
    <item>
      <title>2.4 メタテーブルとメタメソッド - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/basic_concepts/metatables_and_metamethods/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/basic_concepts/metatables_and_metamethods/</guid>
      <description>2.4 メタテーブルとメタメソッド Lua の全ての値はメタテーブル (metatable) を持つことができます。このメタテーブルは通常の Lua テーブルであり、関連付いた値の特定のイベントに対する振る舞いを定義します。値が持つメタテーブルの特定のフィールドを設定することで、様々な場面における値の振る舞いを変更できます。例えば数値でない値が加算演算のオペランドになった場合には、Lua はその値のメタテーブルの __add フィールドに関数があるかを調べ、もし見つかればその関数を呼んで「加算」を実行します。</description>
    </item>
    <item>
      <title>2.5 ガベージコレクション - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/basic_concepts/garbage_collection/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/basic_concepts/garbage_collection/</guid>
      <description>2.5 ガベージコレクション Lua は自動的なメモリ管理を行います。これは新しいオブジェクトに対するメモリの確保や必要なくなったオブジェクトに対するメモリの解放をユーザーが行う必要がないことを意味します。Lua は自動的なメモリ管理にガベージコレクタ (garbage collector) を使います。文字列・テーブル・ユーザーデータ・関数・スレッド・内部で使われるデータ構造など、Lua が使用する全てのメモリが自動的なメモリ管理の対象です。 あるオブジェクトがプログラムの通常の実行において今後アクセスされないことをガベージコレクタが確認したとき、そのオブジェクトは死亡した (dead) とみなされます。(ファイナライザは死んだオブジェクトを蘇生できる (§ 2.5.3) ので、この一文における「通常の実行」はファイナライザを含みません)。ここでオブジェクトの死亡をガベージコレクタが確認するタイミングがプログラマーが予想するそれと異なる可能性があることに注意してください。保証されているのは、プログラムの通常の実行でアクセスできるオブジェクトがコレクトされないこと、そして Lua からはアクセスできないオブジェクトはいずれコレクトされることだけです (ここでオブジェクトに &#34;アクセスできない&#34; とは、そのオブジェクトを指す生きているオブジェクトあるいは変数が存在しないことを言います)。Lua は C コードに関する知識を全く持たないので、レジストリ (§ 4.3) を通してアクセス可能なオブジェクトはコレクトされません。グローバル環境 (§ 2.2) もコレクトされないオブジェクトの一つです。</description>
    </item>
    <item>
      <title>2.6 コルーチン - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/basic_concepts/coroutines/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/basic_concepts/coroutines/</guid>
      <description>2.6 コルーチン Lua はコルーチン (coroutine) をサポートします。コルーチンは協調的マルチスレッディング (collaborative multithreading) とも呼ばれます。Lua のコルーチンは独立した実行の流れを表しますが、マルチスレッドシステムのスレッドとは異なり、コルーチンの実行は yield 関数を明示的に呼ぶまで停止しません。 コルーチンは coroutine.create で作成します。この関数の唯一の引数は作成されるコルーチンのメイン関数です。create 関数は新しいコルーチンを作成してそのハンドル (スレッド型のオブジェクト) を返すだけであり、コルーチンの実行は開始しません。</description>
    </item>
    <item>
      <title>3. 言語 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/language/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/language/</guid>
      <description>3 言語 この章では Lua の字句規則・構文規則・意味論を説明します。言い換えると、Lua において正当なトークンは何か、トークンがどのように組み合わさるか、組み合わさったトークンが何を意味するかをこの章で説明します。 言語の構文は通常の拡張 BNF 記法で表されます。例えば {a} は 0 個以上の a を表し、[a] は 0 個または 1 個の a を表します。また非終端記号は non-terminal, キーワードは kword, 終端記号は = と表記します。Lua の完全な構文は巻末の § 9 にあります。</description>
    </item>
    <item>
      <title>3.1 字句規則 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/language/lexical_conventions/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/language/lexical_conventions/</guid>
      <description>3.1 字句規則 Lua は自由形式 (free-form) の言語です。字句要素 (トークン) の間にあるスペースやコメントは無視され、まとめてトークンを区切る分離記号として解釈されます。Lua はソースコードに含まれる ASCII 空白文字 (スペース・フォームフィード・改行・キャリッジリターン・水平タブ・垂直タブ) を空白として認識します。 Lua における名前 (name) またの名を識別子 (identifier) とは、アルファベット・アラビア数字・アンダースコアからなる数字で始まらない文字列であって予約語でないものを言います。識別子は変数・テーブルフィールド・ラベルの名前に利用できます。</description>
    </item>
    <item>
      <title>3.2 変数 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/language/variables/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/language/variables/</guid>
      <description>3.2 変数 変数 (variable) は値を保存する場所です。Lua の変数にはグローバル変数・ローカル変数・テーブルフィールドの三種類があります。 単一の名前はグローバル変数またはローカル変数を表します (関数のパラメータも表しますが、これはローカル変数の一種です)。 var ::= Name Name は識別子を表します (§ 3.1)。 ローカルと明示的に宣言しない限り変数は全てグローバルです。ローカル変数は字句スコープ (lexically scoped) であり、ローカル変数には同じスコープで定義された関数からもアクセスできます (§ 3.5)。</description>
    </item>
    <item>
      <title>3.3 文 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/language/statements/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/language/statements/</guid>
      <description>3.3 文 Lua がサポートする文は古くからある言語が持つものとよく似ています。例えばブロック・代入・制御構造・関数呼び出し・変数宣言があります。 3.3.1 ブロック ブロックは文のリストです。一つずつ順番に実行されます: block ::= {stat} Lua はセミコロンで表される空文 (empty statement) を持ちます。文をセミコロンで区切ったり、ブロックをセミコロンで始めたり、二つのセミコロンを並べたりといったことが可能です。 CRACK stat ::= ‘;’ 関数呼び出しと代入はどちらも丸括弧で始めることができますが、これにより Lua の文法は曖昧となります。例として次のプログラム片を考えます:</description>
    </item>
    <item>
      <title>3.4 式 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/language/expressions/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/language/expressions/</guid>
      <description>3.4 式 Lua の基本式 (basic expression) は次の通りです: CRACK exp ::= prefixexp exp ::= nil | false | true exp ::= Numeral exp ::= LiteralString exp ::= functiondef exp ::= tableconstructor exp ::= ‘...’ exp ::= exp binop exp exp ::= unop exp prefixexp ::= var | functioncall | ‘(’ exp ‘)’ 数値と文字列リテラルは § 3.1 で、変数は § 3.2 で、関数定義は § 3.4.11 で、関数呼び出しは § 3.4.10 で、テーブルの構文は § 3.4.9 でそれぞれ説明されます。三つのドット (...) で表される可変長引数式は可変長引数を取る関数の直下でのみ利用できます。詳しくは § 3.4.11 で説明されます。 二項演算子には算術演算子 (§ 3.4.1)・ビット演算子 (§ 3.4.2)・関係演算子 (§ 3.4.4)・論理演算子 (§ 3.4.5)・連結演算子 (§ 3.4.6) があり、単項演算子には単項マイナス (§ 3.4.1)・ビットごとの単項 NOT (§ 3.4.2)・単項論理否定演算子 (§ 3.4.5)・単項長さ演算子 (§ 3.4.7) があります。</description>
    </item>
    <item>
      <title>3.5 可視性規則 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/language/visibility_rules/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/language/visibility_rules/</guid>
      <description>3.5 可視性規則 Lua は字句スコープ (lexically scope) の言語です。つまりローカル変数のスコープは宣言の直ぐ後ろにある文に始まり、最も内側のブロックに含まれる無文でない最後の文 (宣言含む) で終わります。例として次のプログラムを考えます: CRACK x = 10 -- グローバル変数 do -- 新しいブロック local x = x -- 新しい &#39;x&#39;, 値は 10 print(x) --&amp;gt; 10 x = x+1 do -- 新しいブロック local x = x+1 -- 新しい &#39;x&#39; print(x) --&amp;gt; 12 end print(x) --&amp;gt; 11 end print(x) --&amp;gt; 10 (グローバルの x) 三行目の宣言 local x = x では新しく定義される変数 x はまだスコープに入っていないので、この文に含まれる二つ目の x は外のブロックの変数を指します。</description>
    </item>
    <item>
      <title>4. C API - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/api/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/api/</guid>
      <description>4 C API この章は Lua の C API を説明します。つまりホストプログラムと Lua の対話で利用可能な C 関数の集合を説明します。C API 関数に関する型と定数は全てヘッダーファイル lua.h で定義されます。 「関数」という言葉を使っていても、API の実体はマクロであることがあります。特に断りがない限りそういったマクロは引数を一度だけ使うので、引数の持つ副作用を気にする必要はありません (Lua ステートを表す第一引数は何度も使われます)。 多くの C ライブラリと同様 Lua の C API は引数の正当性や一貫性を確認しませんが、LUA_USE_APICHECK マクロを定義して Lua をコンパイルすればこの振る舞いを変更できます。</description>
    </item>
    <item>
      <title>4.1. スタック - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/api/stack/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/api/stack/</guid>
      <description>4.1 スタック Lua と C の間で行われる値のやり取りには仮想スタック (virtual stack) が利用されます。スタックの各要素は nil・数値・文字列といった Lua の値を表し、API の関数はパラメータとして受け取る Lua ステートを通してスタックにアクセスします。 Lua が C の関数を呼ぶと、呼び出された関数は新しいスタックを受け取ります。このスタックはそれまでのスタックや他の C 関数で使われている関数とは無関係です。スタックには最初 C 関数へ渡される引数が入っていて、一次的な Lua の値や呼び出し側へ返す値を入れるのに利用されます (lua_CFunction)。</description>
    </item>
    <item>
      <title>4.2. C クロージャ - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/api/c_closures/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/api/c_closures/</guid>
      <description>4.2 C クロージャ 新しく作成される C 関数には Lua の値を結び付けることができます。そうして作成されるのは C クロージャ (C closure) であり、C クロージャに結び付く値をアップバリュー (upvalue) と呼びます。アップバリューは関数が呼ばれたときいつでもアクセス可能です。 C 関数が呼ばれるとき、アップバリューは特定の疑似インデックスに保存されます。この疑似インデックスは lua_upvalueindex マクロで取得でき、例えば関数に結び付いた一つ目のアップバリューを取得するには lua_upvalueindex(1) として呼び出します。関数が持つアップバリューの個数より大きい n に対する lua_upvalueindex(n) は処理可能な有効でないインデックスを返します (ただし n はクロージャが持てるアップバリューの最大値 256 より大きくてはいけません)。</description>
    </item>
    <item>
      <title>4.3. レジストリ - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/api/registry/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/api/registry/</guid>
      <description>4.3 レジストリ Lua はレジストリ (registry) を提供します。レジストリは C コードから利用できるテーブルであり、任意の Lua の値を保存できます。レジストリテーブルには疑似インデックス LUA_REGISTRYINDEX を使っていつでもアクセスできます。任意の C ライブラリは好きなデータをこのテーブルに保存できますが、衝突を避けるために他のライブラリが使わないキーを使う必要があります。そのためキーとしてはライブラリの名前が付いた文字列、ライブラリが持つ C オブジェクトを指すライトユーザーデータ、あるいはライブラリで作成した Lua オブジェクトが推奨されます。変数の名前と同様に、アンダースコアの後に大文字が続くキーは Lua のために予約されています。</description>
    </item>
    <item>
      <title>4.4. C のエラーハンドリング - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/api/error_handling_in_c/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/api/error_handling_in_c/</guid>
      <description>4.4 C のエラーハンドリング Lua は内部で C の longjmp を使ってエラーを処理します (Lua を C++ としてコンパイルした場合には例外が使われます。ソースコードを LUAI_THROW で検索してください)。Lua がメモリアロケーションや型に関するエラーに直面すると、エラーの送出 (つまり longjmp の実行) が行われます。保護された環境 (protected environment) に入るときに setjmp で復帰点が設定され、エラーが起こると一番最近のアクティブな復帰点に実行が移ります。 C 関数では lua_error を呼ぶことで明示的にエラーを送出できます。</description>
    </item>
    <item>
      <title>4.5. C からの yield - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/api/handling_yields_in_c/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/api/handling_yields_in_c/</guid>
      <description>4.5 C からの yield Lua は内部で longjmp を使ってコルーチンの yield を処理します。そのため、もし Lua が呼び出した C 関数 foo が別の API 関数を呼び、その API 関数 (もしくはその関数が呼ぶ他の関数) が yield した場合、Lua は foo に戻る方法を失います。yield に伴う longjmp が foo のフレームを C スタックから消去するためです。 この種の問題に対処するために、API 呼び出しをまたいで yield すると Lua はエラーを送出するようになっています。ただし三つの API 関数 lua_yieldk, lua_callk, lua_pcallk は例外です。これらの関数は yield の後にも実行を続けるために継続関数 (continuation function) をパラメータ k に受け取ります。</description>
    </item>
    <item>
      <title>4.6. C API の関数と型 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/api/functions_and_types/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/api/functions_and_types/</guid>
      <description>4.6 C API の関数と型 C API が持つ全ての関数と型をここに辞書順に示します。 各関数には [-o, +p, x] という印が付いています。最初の o は関数がスタックからポップする要素の数を表し、二つ目の p は関数がスタックにプッシュする要素の数を表します (関数は必ず引数をポップしてから返り値をプッシュします)。x|y と書いてある場合には、状況に応じて x 個または y 個の要素をプッシュ/ポップする関数であることを示します。クエスチョンマーク ? は関数がプッシュ/ポップする要素の数が引数からは定まらないことを示します (個数がスタックの値に依存する場合など)。三つ目の x は関数がエラーを送出するかどうかを表します。x が - の関数はエラーを送出せず、m の関数はメモリ不足によるエラーのみを送出する可能性があり、v の関数は解説にあるエラーを送出する可能性があり、e の関数は任意の Lua コードを (直接あるいはメタメソッドを通して) 実行するので全てのエラーが送出される可能性があります。</description>
    </item>
    <item>
      <title>4.7. デバッグインターフェース - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/api/debug_interface/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/api/debug_interface/</guid>
      <description>4.7 デバッグインターフェース Lua には組み込みのデバッグ機能がありません。その代わりに関数とフック (hook) を使った特別なインターフェースが用意されています。このインターフェースを使うと、インタープリタの内部情報を必要とするデバッガやプロファイラといったツールを好きなように作成できます。 lua_Debug CRACK typedef struct lua_Debug { int event; const char *name; /* (n) */ const char *namewhat; /* (n) */ const char *what; /* (S) */ const char *source; /* (S) */ size_t srclen; /* (S) */ int currentline; /* (l) */ int linedefined; /* (S) */ int lastlinedefined; /* (S) */ unsigned char nups; /* (u) number of upvalues */ unsigned char nparams; /* (u) number of parameters */ char isvararg; /* (u) */ char istailcall; /* (t) */ unsigned short ftransfer; /* (r) index of first value transferred */ unsigned short ntransfer; /* (r) number of transferred values */ char short_src[LUA_IDSIZE]; /* (S) */ /* private part */ other fields } lua_Debug; 関数およびアクティベーションレコード1に関する様々な情報を保存するのに使われるデータ構造です。lua_getstack はこのデータ構造のプライベートな部分だけを埋め、その部分が後で使われます。他のフィールドを埋めるには lua_getinfo を呼びます。</description>
    </item>
    <item>
      <title>5. 補助ライブラリ - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/auxiliary_library/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/auxiliary_library/</guid>
      <description>5 補助ライブラリ 補助ライブラリ (auxiliary library) は C と Lua の対話のための便利な関数を提供します。C と Lua の対話に使える機能は § 4 で説明した基礎 API が全てですが、補助ライブラリには一般的なタスクのための高レベルな関数が用意されています。 補助ライブラリに含まれる関数と型は全てヘッダーファイル luaxlib.h に定義されており、接頭辞 luaL_ を持ちます。 補助ライブラリに含まれる全ての関数は基礎 API の上に作られています。そのため補助ライブラリで行えることは全て基礎 API を使っても行えます。ただそれでも、補助ライブラリを使えばコードがより一貫したものになります。</description>
    </item>
    <item>
      <title>6. 標準ライブラリ - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/standard_libraries/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/standard_libraries/</guid>
      <description>6 標準ライブラリ Lua の標準ライブラリは C API を使って C で実装された便利な関数を提供します。type や getmetatable のように言語で重要な役割を果たす関数もあれば、I/O のように外部へのアクセスを提供する関数、あるいは table.sort のように Lua でも実装可能であるものの様々な理由により C での実装がふさわしい関数が含まれます。 全てのライブラリは公式の C API を使って実装されており、個別の C モジュールとして提供されます。特に断りがない限り、ライブラリ関数は引数の数をパラメータの数に合うよう調整しません。例えばドキュメントに foo(arg) とあるなら、foo を引数無しに呼ぶことはできません。</description>
    </item>
    <item>
      <title>7. Lua スタンドアローン - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/lua_standalone/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/lua_standalone/</guid>
      <description>7 Lua スタンドアローン Lua はホストの C プログラムに埋め込んで使う拡張言語として設計されていますが、スタンドアローンの言語として使われることもよくあります。スタンドアローン言語 Lua のインタープリタは lua という名前であり、標準ディストリビューションに含まれます。このスタンドアローンインタープリタには全ての標準ライブラリが含まれます。使い方は次の通りです: CRACK lua [options] [script [args]] オプションを示します: -e stat: 文字列 stat を実行します。 -i: script を実行してから対話モードに入ります。 -l mod: mod を require し、返り値をグローバル変数 mod に代入します。 -v: バージョン情報を出力します。 -E: 環境変数を無視します。 -W: 警告を有効にします。 --: オプションの処理を止めます。 -: stdin をファイルとして実行し、オプションの処理を止めます。 オプションの処理が終わると、lua は与えられた script を実行します。引数を与えずに lua を呼び出すと、標準入力 (stdin) がターミナルなら lua -v -i が実行され、それ以外の場合は lua - が実行されます。</description>
    </item>
    <item>
      <title>8. 以前のバージョンとの非互換性 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/incompatibilities_with_the_previous_version/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/incompatibilities_with_the_previous_version/</guid>
      <description>8 以前のバージョンとの非互換性 Lua 5.3 のプログラムを Lua 5.4 に移植する際に遭遇する可能性のある非互換性をここに示します。 一部の非互換性は適切なオプションを使って Lua をコンパイルすることで回避できます (luaconf.h を参照してください)。ただし、そういった互換性のためのオプションは将来削除されます。互換性オプションが削除されたときに互換性の問題が発生するということも少なくないので、機会を見計らって互換性オプションを全て無効にしたバージョンの Lua でコードをテストしておくべきです。そうしておけば新しいバージョンの Lua への移行がスムーズになります。</description>
    </item>
    <item>
      <title>9. Lua の完全な構文 - Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/complete_syntax_of_lua/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/complete_syntax_of_lua/</guid>
      <description>プログラミング言語 Lua の完全な構文を拡張 BNF で示します。</description>
    </item>
    <item>
      <title>Lua 5.4 リファレンスマニュアル (翻訳)</title>
      <link>https://inzkyk.xyz/lua_5_4/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/lua_5_4/</guid>
      <description>プログラミング言語 Lua (バージョン 5.4) のリファレンスマニュアルの翻訳です。</description>
    </item>
    <item>
      <title>(モジュールを使った) Go コードの書き方 (翻訳)</title>
      <link>https://inzkyk.xyz/go_doc/how_to_write_new_go_code/</link>
      <pubDate>Thu, 09 Apr 2020 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/go_doc/how_to_write_new_go_code/</guid>
      <description>このドキュメントについて このドキュメントはシンプルなモジュールを使った Go パッケージの開発を実演し、go ツールを紹介するためにあります。go ツールとは Go のモジュール・パッケージ・コマンドをフェッチ・ビルド・インストールする標準的な方法です。 注意: このドキュメントは Go 1.13 以降かつ GO111MODULE 環境変数がセットされていない環境を前提としている点に注意してください。モジュールを使わない以前のバージョンに関するドキュメントはここにあります。 Go プログラムの構成 Go のプログラムはパッケージと呼ばれる単位で管理されます。パッケージ (package) は特定のディレクトリ下に存在するソースファイルを集めたものであり、パッケージに含まれるソースファイルはコンパイルにおける一単位となります。例えばパッケージ内のとあるソースファイルで定義される関数・型・変数・定数は、同じパッケージ内の他の全てのソースファイルから参照可能です。</description>
    </item>
    <item>
      <title>Go ドキュメントの翻訳</title>
      <link>https://inzkyk.xyz/go_doc/</link>
      <pubDate>Tue, 17 Dec 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/go_doc/</guid>
      <description>https://golang.org/doc/ にあるページの翻訳です。</description>
    </item>
    <item>
      <title>Mozilla Hacks の翻訳</title>
      <link>https://inzkyk.xyz/mozilla_hacks/</link>
      <pubDate>Tue, 17 Dec 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/mozilla_hacks/</guid>
      <description>https://hacks.mozilla.org/ に掲載された記事の翻訳です。</description>
    </item>
    <item>
      <title>V8 Blog の翻訳</title>
      <link>https://inzkyk.xyz/v8/</link>
      <pubDate>Tue, 17 Dec 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/v8/</guid>
      <description>https://v8.dev/blog に掲載された記事の翻訳です。</description>
    </item>
    <item>
      <title>その他の翻訳記事</title>
      <link>https://inzkyk.xyz/misc/</link>
      <pubDate>Tue, 17 Dec 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/misc/</guid>
      <description></description>
    </item>
    <item>
      <title>ウェブの外: Emscripten を使ったスタンドアローンの WebAssembly (翻訳)</title>
      <link>https://inzkyk.xyz/v8/emscripten_standalone_wasm/</link>
      <pubDate>Mon, 09 Dec 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/v8/emscripten_standalone_wasm/</guid>
      <description>Emscripten はウェブや Node といった JavaScript 環境へのコンパイルを何よりも一番に考えてきました。しかし WebAssembly は JavaScript を使わずに利用されはじめ、新たなユースケースが登場しています。そこで私たちは、Emscripten の JS ランタイムに依存しないスタンドアローンの Wasm ファイルを Emscripten から生成するための作業を行ってきました！ 本記事ではこれが面白い理由を説明します。 Emscripten をスタンドアローンモードで使う まず、この新しい機能で何ができるかを見ましょう！ この記事と同じように、まずは二つの数を足す関数を一つエクスポートする &amp;quot;hello world&amp;quot; プログラムから始めます:</description>
    </item>
    <item>
      <title>Bytecode Alliance のアナウンス: デフォルトでセキュア、合成可能な WebAssembly の未来を作る (翻訳)</title>
      <link>https://inzkyk.xyz/mozilla_hacks/bytecode_alliance/</link>
      <pubDate>Thu, 05 Dec 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/mozilla_hacks/bytecode_alliance/</guid>
      <description>本日、Bytecode Alliance が発足されたことをお伝えします。Bytecode Alliance は WebAssembly のブラウザ外における利用を推し進めるための産業パートナーシップであり、規格の実装や新しい規格の提案を行います。設立メンバーは Mozilla, Fastly, Intel, Red Hat で、さらなるメンバーを迎え入れるのを楽しみにしています。 私たちが思い描く WebAssembly エコシステムのビジョンは、デフォルトでセキュア (secure by default) なエコシステムが現在のソフトウェア基盤が持つ欠点を修正するというものです。WebAssembly コミュニティは速いペースで進歩しているので、このビジョンは実現可能だと私たちは信じています。</description>
    </item>
    <item>
      <title>WebAssembly Interface Types で全てが連携する！ (翻訳)</title>
      <link>https://inzkyk.xyz/mozilla_hacks/webassembly_interface_types/</link>
      <pubDate>Tue, 03 Dec 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/mozilla_hacks/webassembly_interface_types/</guid>
      <description>ブラウザ外での WebAssembly の利用が盛り上がっています。 盛り上がりはスタンドアローンのランタイムを使った WebAssembly の実行だけではありません。Python, Ruby, Rust といった言語からの WebAssembly の実行にも注目が集まっています。 なぜそんなことが望まれるのでしょうか？ 理由はいくつかあります: 「ネイティブ」をもっと簡単に Node あるいは Python の CPython のようなランタイムでは、C++ などの低レベル言語でもモジュールを書ける場合があります。低レベル言語を使った方が高速なためです。Node のネイティブモジュールや Python の拡張モジュールを利用できるのですが、これらのモジュールはユーザーのデバイスでコンパイルが必要であり、使いやすいとは言えません。WebAssembly の「ネイティブ」モジュールを使えば、コンパイル無しにほぼ同等の速度を得られます。</description>
    </item>
    <item>
      <title>(GOPATH を使った) Go コードの書き方 (翻訳)</title>
      <link>https://inzkyk.xyz/go_doc/how_to_write_go_code/</link>
      <pubDate>Sun, 03 Nov 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/go_doc/how_to_write_go_code/</guid>
      <description>注意: これは古いバージョン (Go 1.13 より前) の Go 言語についてのドキュメントです。最新版の Go 言語を使うときはこのページをご覧ください。 イントロダクション このドキュメントではシンプルな Go パッケージの開発を通して go ツールを紹介します。go ツールは Go パッケージやコマンドをフェッチ・ビルド・インストールするための標準的な方法です。 go ツールを使うには、コードを決められた方法で整理する必要があります。そのためこのドキュメントは注意深く読むようにしてください。Go インストールを使いこなすための一番単純な方法を説明しています。</description>
    </item>
    <item>
      <title>LLVM の WebAssembly バックエンドと Emscripten (翻訳)</title>
      <link>https://inzkyk.xyz/v8/llvm_wasm_backend_emscripten/</link>
      <pubDate>Wed, 03 Jul 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/v8/llvm_wasm_backend_emscripten/</guid>
      <description>WebAssembly は通常ソース言語からコンパイルされて作られるので、開発者が WebAssembly を利用するときにはコンパイルのためのツールが必要になります。このため V8 チームは関連するオープンソースプロジェクト (LLVM, Emscripten, Binaryen, WABT) に取り組んできました。この記事では Emscripten と LLVM に関して私たちが行ってきたことを説明します。これによって、Emscripten がデフォルトで使うバックエンドは LLVM の WebAssembly バックエンドに変更されます ぜひ試して、問題があれば教えてください！</description>
    </item>
    <item>
      <title>Firefox のアドオンが利用不可能になった先日の事件の技術的詳細 (翻訳)</title>
      <link>https://inzkyk.xyz/mozilla_hacks/firefox_addon_outrage/</link>
      <pubDate>Sat, 27 Apr 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/mozilla_hacks/firefox_addon_outrage/</guid>
      <description>Firefox のほとんどのアドオンが動かなくなるという事件が先日起こりました。原因はアドオンの署名に使っていた証明書の有効期限切れであり、私たちのミスです。現在ではほとんどの人のアドオンが復活し問題が解決されたので、この記事では何が起こったのか、なぜ起こったのか、私たちがどのように修正したかについて詳細に説明します。 背景: アドオンと署名 Firefox をそのまま使っている人も大勢いますが、Firefox には &amp;quot;アドオン&amp;quot; と呼ばれる強力な拡張メカニズムがあります。アドオンを使うとサードパーティの機能を Firefox に追加してデフォルトの機能を拡張できます。現在 15,000 個以上の Firefox アドオンが利用可能であり、例えば広告をブロックするアドオンや数百個のタブを管理するアドオンなどがあります。</description>
    </item>
    <item>
      <title>WASI の標準化: WebAssembly をウェブの外で使うためのシステムインターフェース (翻訳)</title>
      <link>https://inzkyk.xyz/mozilla_hacks/wasi/</link>
      <pubDate>Thu, 25 Apr 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/mozilla_hacks/wasi/</guid>
      <description>今日、私たちが新たな標準化の取り組みを開始したことをお伝えします。その名も WebAssembly system interface、略して WASI です。 Why: 開発者たちはブラウザという枠を超えた WebAssembly の利用を探り始めています。WebAssembly を使えば同じコードを全てのマシンで高速、スケーラブル、安全に実行できるからです。 しかし私たちにはこれを実現するための強固な地盤がありません。ブラウザの外で動くコードにはシステムと対話する仕組み、つまりシステムインターフェースが必要であり、WebAssembly プラットフォームにはこの地盤がまだないのです。</description>
    </item>
    <item>
      <title>Post</title>
      <link>https://inzkyk.xyz/post/</link>
      <pubDate>Sun, 21 Apr 2019 00:00:00 +0900</pubDate>
      <guid>https://inzkyk.xyz/post/</guid>
      <description></description>
    </item>
  </channel>
</rss>
