<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agentic on Aayush Bajaj's Augmenting Infrastructure</title><link>https://abaj.ai/tags/agentic/</link><description>Recent content in Agentic on Aayush Bajaj's Augmenting Infrastructure</description><generator>Hugo</generator><language>en</language><copyright>© 2026 Aayush Bajaj</copyright><lastBuildDate>Sat, 31 Oct 2026 18:35:27 +1100</lastBuildDate><atom:link href="https://abaj.ai/tags/agentic/index.xml" rel="self" type="application/rss+xml"/><item><title>A Catalogue of Loss Functions</title><link>https://abaj.ai/wiki/ml/theory/loss-fns/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/theory/loss-fns/</guid><description>&lt;p>a loss function is not a detail of training — it is the &lt;em>definition of the problem&lt;/em>. choose squared error and you have asked for the conditional mean; choose absolute error and you have asked for the median; choose hinge and you have asked only for the decision boundary; choose cross-entropy and you have asked for the whole probability.&lt;span class="margin-note" data-note="corollary: two teams &amp;#39;solving the same problem&amp;#39; with different losses are solving different problems">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page catalogues the standard losses, proves what each one&amp;rsquo;s minimiser actually is, and draws the classic picture that unifies the classification zoo: every one of them is a bribe paid to make the 0–1 loss differentiable.&lt;/p></description></item><item><title>API Design</title><link>https://abaj.ai/wiki/se/architecture-design/api/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/se/architecture-design/api/</guid><description>&lt;p>an api is a promise you cannot take back: the moment a second team depends on it, every quirk you shipped is load-bearing.&lt;span class="margin-note" data-note="hyrum&amp;#39;s law: with enough users, every observable behaviour of your system will be depended on by somebody">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page is the checklist for making promises deliberately — resources and verbs, status codes, pagination, versioning, errors, auth, and rate limiting, with the http machinery treated as the application-layer protocol it is (Kurose, James F. and Ross, Keith W., 2020).&lt;/p></description></item><item><title>Approximate Inference</title><link>https://abaj.ai/wiki/ml/pgm/approximate-inference/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/pgm/approximate-inference/</guid><description>&lt;p>&lt;a
 href="https://abaj.ai/wiki/ml/pgm/inference/"
 
 
>exact inference&lt;/a> costs \(\exp(\text{treewidth})\), and real networks — image grids, dense diagnostic models, unrolled &lt;a
 href="https://abaj.ai/wiki/ml/pgm/markov-models/"
 
 
>dbns&lt;/a> — routinely have treewidth in the hundreds. approximate inference trades guaranteed answers for tractable ones, along two philosophically different roads: &lt;strong>sampling&lt;/strong> replaces the distribution with draws from it (anytime, asymptotically exact, embarrassingly parallel), and &lt;strong>approximate message passing&lt;/strong> runs exact-style propagation on graphs where its correctness proof no longer holds. this page walks the sampling ladder in the order each rung fixes the last one&amp;rsquo;s failure — forward, rejection, likelihood weighting, gibbs — then closes with loopy belief propagation.&lt;span class="margin-note" data-note="comp9418 benchmarks all four samplers against variable elimination on the icu-alarm network; the qualitative ranking below is what those experiments show">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Autoencoders</title><link>https://abaj.ai/wiki/ml/dl/autoencoders/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/autoencoders/</guid><description>&lt;p>an autoencoder is a network trained to do the one thing that sounds useless: output its own input. the trick is the obstacle course in the middle — a bottleneck, a corruption, a penalty — that makes verbatim copying impossible, so the network is forced to learn &lt;em>what about the input is worth keeping&lt;/em>.&lt;span class="margin-note" data-note="supervision without labels: the data is its own target, and the architecture is the teacher">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

the family tree below runs from the linear special case (which is &lt;a
 href="https://abaj.ai/wiki/ml/unsupervised/pca/"
 
 
>pca&lt;/a> wearing a trenchcoat) to the variational autoencoder, which turns the whole construction into a generative model (Goodfellow, Ian, 2016).&lt;/p></description></item><item><title>Banagrams Solver</title><link>https://abaj.ai/wiki/csp/banagrams/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/csp/banagrams/</guid><description>&lt;p>bananagrams hands you a fistful of letter tiles and one instruction: arrange &lt;em>all&lt;/em> of them into a connected crossword before anyone else does.&lt;span class="margin-note" data-note="the game ships as a banana-shaped bag of 144 tiles, hence the name. no board, no scores, no turns — first to use every tile shouts bananas and wins">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page documents the real solver living in this repo at &lt;code>static/code/bananagrams/&lt;/code> — a haskell heuristic search in &lt;code>haskell-imp/&lt;/code> plus a playable js incarnation served at &lt;code>/code/bananagrams/&lt;/code> on this site — rather than a from-scratch design; a compact python reference solver (trie + backtracking) is developed at the end to make the algorithmic skeleton explicit.&lt;/p></description></item><item><title>Bayesian Networks</title><link>https://abaj.ai/wiki/ml/pgm/bayesian-networks/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/pgm/bayesian-networks/</guid><description>&lt;p>a joint probability distribution over \(n\) binary variables is a table with \(2^n - 1\) free numbers. at \(n = 30\) that is a billion parameters for a toy problem — nobody can elicit them, store them, or estimate them from data. the bayesian network is the classical answer: encode the &lt;em>independencies&lt;/em> of the distribution in a directed acyclic graph, and the joint collapses into a product of small local tables.&lt;span class="margin-note" data-note="the treatment here follows darwiche&amp;#39;s book and unsw&amp;#39;s comp9418, which is taught from it">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
the graph is simultaneously a data structure for storage, a calculus for reading off independence, and the substrate on which every &lt;a
 href="https://abaj.ai/wiki/ml/pgm/inference/"
 
 
>inference algorithm&lt;/a> runs.&lt;/p></description></item><item><title>Bazaar</title><link>https://abaj.ai/bazaar/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/bazaar/</guid><description>&lt;p>✦ The &lt;a
 href="https://bazaar.abaj.ai"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar&lt;/a> is where the things I build get sold: one-time purchases, delivered the moment payment clears, no accounts.&lt;/p>
&lt;p>Four stalls:&lt;/p>
&lt;ul>
&lt;li>&lt;a
 href="https://abaj.ai/bazaar/remarkable/"
 
 
>reMarkable&lt;/a> &amp;mdash; native plugins for the Paper Pro → &lt;a
 href="https://bazaar.abaj.ai/remarkable"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar.abaj.ai/remarkable&lt;/a>&lt;/li>
&lt;li>&lt;a
 href="https://abaj.ai/bazaar/flashcards/"
 
 
>Flashcards&lt;/a> &amp;mdash; hand-authored Anki decks → &lt;a
 href="https://bazaar.abaj.ai/flashcards"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar.abaj.ai/flashcards&lt;/a>&lt;/li>
&lt;li>&lt;a
 href="https://abaj.ai/bazaar/notes/"
 
 
>Notes&lt;/a> &amp;mdash; typeset study bundles → &lt;a
 href="https://bazaar.abaj.ai/notes"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar.abaj.ai/notes&lt;/a>&lt;/li>
&lt;li>&lt;a
 href="https://abaj.ai/bazaar/prints/"
 
 
>Prints&lt;/a> &amp;mdash; art from the studio of 佐野貴代美 → &lt;a
 href="https://bazaar.abaj.ai/prints"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar.abaj.ai/prints&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Each stall&amp;rsquo;s page carries a heading per listed item — a small brief of what it is and why it&amp;rsquo;s worth money.&lt;/p></description></item><item><title>Bazaar: Flashcards</title><link>https://abaj.ai/bazaar/flashcards/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/bazaar/flashcards/</guid><description>&lt;p>Hand-authored Anki decks, exported clean and sold at &lt;a
 href="https://bazaar.abaj.ai/flashcards"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar.abaj.ai/flashcards&lt;/a>. The rule for what gets sold: only decks that are my own words — anything derived from textbooks, publisher audio, or downloaded shared decks stays out of the shop (sourcing rules in the bazaar repo&amp;rsquo;s SPEC §7). All four are in pre-sale cleanup: verbatim third-party fragments get stripped before any deck ships.&lt;/p>
&lt;h2 id="cs-interview-prep">CS Interview Prep&lt;a href="#cs-interview-prep" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>~1,300 cards covering the software-interview surface: Java, Python, data structures &amp;amp; algorithms, OOP, git, and interview framing. One idea per card, short prompts. &lt;strong>Coming soon&lt;/strong> → &lt;a
 href="https://bazaar.abaj.ai/p/cs-interview-prep"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>/p/cs-interview-prep&lt;/a>&lt;/p></description></item><item><title>Bazaar: Notes</title><link>https://abaj.ai/bazaar/notes/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/bazaar/notes/</guid><description>&lt;p>Typeset study bundles — LaTeX-set PDFs of my own summaries — sold at &lt;a
 href="https://bazaar.abaj.ai/notes"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar.abaj.ai/notes&lt;/a>. The gate for this stall is the strictest in the bazaar: only 100%-own-authorship summaries, no lecturer material, course branding stripped. Free counterparts live across the site&amp;rsquo;s typeset-PDF wiki pages; the paid bundles are the ones polished into standalone books.&lt;/p>
&lt;h2 id="stat-571-probability-and-measure">STAT 571 — Probability &amp;amp; Measure&lt;a href="#stat-571-probability-and-measure" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>My course notes from the University of Alberta&amp;rsquo;s graduate probability-and-measure course: a ~50-page arc from sigma-fields to the ergodic theorem — Carathéodory extension, the convergence theorems, Fubini–Tonelli, L^p, Borel–Cantelli, LLN, CLT — thirteen lectures compressed to revision speed. I write my own notes for every course I take; these ship with the custom LaTeX preamble (Baskervaldx + newtxmath, the theorem environments) so yours can look this good too. &lt;strong>Live&lt;/strong> → &lt;a
 href="https://bazaar.abaj.ai/p/measure-theory-notes"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>/p/measure-theory-notes&lt;/a>&lt;/p></description></item><item><title>Bazaar: Prints</title><link>https://abaj.ai/bazaar/prints/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/bazaar/prints/</guid><description>&lt;p>Art prints from the studio of 佐野貴代美, sold at &lt;a
 href="https://bazaar.abaj.ai/prints"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar.abaj.ai/prints&lt;/a>.&lt;/p>
&lt;p>The stall is being stocked — first pieces are in preparation. Each print will get its own heading here as it&amp;rsquo;s listed.&lt;/p></description></item><item><title>Bazaar: reMarkable</title><link>https://abaj.ai/bazaar/remarkable/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/bazaar/remarkable/</guid><description>&lt;p>Native plugins for the &lt;a
 href="https://abaj.ai/roam/3dkeycap/"
 
 
>reMarkable Paper Pro&lt;/a> &lt;strong>and the Paper Pro Move&lt;/strong>, built against real firmware and sold at &lt;a
 href="https://bazaar.abaj.ai/remarkable"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>bazaar.abaj.ai/remarkable&lt;/a>. Everything runs under xovi / rm-appload rather than patching the system: no bank-flip risk, graceful degradation on firmware updates, and every item version-pinned to the firmware it was tested on.&lt;/p>
&lt;p>Nearly every item on this shelf now ships for both devices — each product page has a device picker (Paper Pro / Paper Pro Move), and the Move builds are packaged from the exact files proven on real Move hardware. The handful of exceptions (the Move builds of FastTerm, the GUI Emacs and laserPen — the first two need a keyboard story the Move doesn&amp;rsquo;t have) say so plainly on their pages.&lt;/p></description></item><item><title>Build Systems</title><link>https://abaj.ai/wiki/se/implementation/build-systems/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/se/implementation/build-systems/</guid><description>&lt;p>every build system — make, ninja, bazel, cargo, even npm scripts pretending otherwise — is the same machine: a directed acyclic graph of files and commands, plus a policy for deciding which part of the graph is stale. everything else is syntax.&lt;/p>
&lt;h2 id="the-model-a-dag-of-targets">the model: a dag of targets&lt;a href="#the-model-a-dag-of-targets" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>a &lt;strong>target&lt;/strong> is a file the build can produce; a &lt;strong>rule&lt;/strong> says how (a command) and from what (its &lt;strong>dependencies&lt;/strong>).&lt;/li>
&lt;li>dependencies point from outputs to inputs; because outputs of one rule are inputs to another, the whole thing is a dag — a cycle would mean &amp;ldquo;to build a you must first build a&amp;rdquo;.&lt;/li>
&lt;li>a build is then two steps:
&lt;ol>
&lt;li>&lt;strong>mark dirty&lt;/strong>: a target is dirty if it is missing, if any dependency is dirty, or if the staleness policy (timestamps or hashes, below) says an input changed. dirtiness propagates along edges — one flipped source poisons its whole downstream cone.&lt;/li>
&lt;li>&lt;strong>evaluate in topological order&lt;/strong>: run each dirty target&amp;rsquo;s command after all its dependencies are up to date (Cormen, Thomas H. and Leiserson, Charles E. and Rivest, Ronald L. and Stein, Clifford, 2009). independent dirty targets can run in parallel (&lt;code>-j8&lt;/code>) — the dag &lt;em>is&lt;/em> the parallelism plan, which is why builds are embarrassingly parallel until the link step serialises everything.&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>the entire correctness contract: &lt;strong>the graph must be complete&lt;/strong>. every undeclared dependency is a future &amp;ldquo;works after &lt;code>make clean&lt;/code>&amp;rdquo; bug — the build system faithfully skips rebuilding things it was never told could change.&lt;/li>
&lt;/ul>
&lt;figure class="tikz-figure lateximage">
 &lt;script type="text/tikz"
 >
 
\usepackage{xcolor}
\usetikzlibrary{positioning,calc,arrows.meta}
\begin{document}
\begin{tikzpicture}[font=\small, >={Stealth[length=4pt]},
 src/.style={draw, rounded corners=1pt, fill=blue!12, minimum width=1.7cm, minimum height=0.65cm, font=\ttfamily\scriptsize},
 ok/.style={draw, rounded corners=1pt, fill=green!15, minimum width=1.7cm, minimum height=0.65cm, font=\ttfamily\scriptsize},
 bad/.style={draw, thick, rounded corners=1pt, fill=red!15, minimum width=1.7cm, minimum height=0.65cm, font=\ttfamily\scriptsize}]
\node[src] (mainc) at (0,0) {main.c};
\node[bad] (greeth) at (0,-1.4) {greet.h *};
\node[src] (greetc) at (0,-2.8) {greet.c};
\node[bad] (maino) at (3.6,-0.7) {main.o};
\node[bad] (greeto) at (3.6,-2.1) {greet.o};
\node[bad] (app) at (7.0,-1.4) {app};
\draw[->] (mainc) -- (maino);
\draw[->, red!70!black, thick] (greeth) -- (maino);
\draw[->, red!70!black, thick] (greeth) -- (greeto);
\draw[->] (greetc) -- (greeto);
\draw[->, red!70!black, thick] (maino) -- (app);
\draw[->, red!70!black, thick] (greeto) -- (app);
\node[font=\scriptsize, gray, align=left] at (3.6,-3.4) {* edited: dirtiness flows with the arrows};
\node[font=\scriptsize] at (0,0.75) {sources};
\node[font=\scriptsize] at (3.6,0.75) {objects};
\node[font=\scriptsize] at (7.0,0.75) {binary};
\end{tikzpicture}
\end{document}

 &lt;/script>
 &lt;figcaption>dirty-node propagation: editing greet.h dirties every target downstream of it (red); main.c and its untouched cone stay cached. the build re-runs exactly the red commands, in topological order.&lt;/figcaption>
&lt;/figure>

&lt;h2 id="make-the-actual-semantics">make: the actual semantics&lt;a href="#make-the-actual-semantics" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>make&amp;rsquo;s whole rebuild rule fits in one sentence: &lt;strong>a target is rebuilt if it does not exist, or if any prerequisite&amp;rsquo;s mtime is newer than the target&amp;rsquo;s mtime.&lt;/strong> everything else is macro expansion.&lt;/p></description></item><item><title>Calculus</title><link>https://abaj.ai/wiki/mathematics/calculus/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/calculus/</guid><description>&lt;p>calculus is the mathematics of change: it assigns exact meaning to two questions that stumped everyone from zeno to the seventeenth century — &lt;em>how fast is a quantity changing right now?&lt;/em> and &lt;em>how much of it has accumulated so far&lt;/em>?&lt;span class="margin-note" data-note="zeno&amp;#39;s arrow: at every instant the arrow is motionless, so how does it move? calculus answers: velocity is a limit, not a snapshot.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

both questions are answered by the same primitive operation, the &lt;strong>limit&lt;/strong>, applied in two different directions. everything on the pages below is a variation on that one move.&lt;/p></description></item><item><title>California Housing</title><link>https://abaj.ai/tags/california-housing/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/tags/california-housing/</guid><description>&lt;p>Median house values for 20,640 California census block groups from the 1990 census. The modern default for &amp;ldquo;show me a real regression problem&amp;rdquo;: big enough to be non-trivial, small enough to fit anywhere, and full of instructive pathologies — capped targets, aggregate features, and spatial structure.&lt;/p>
&lt;h2 id="provenance">Provenance&lt;a href="#provenance" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>Constructed by R. Kelley Pace and Ronald Barry for &lt;em>Sparse Spatial Autoregressions&lt;/em>, Statistics and Probability Letters 33(3), 1997 — the point of the paper was spatial statistics, not machine learning. The data derive from the 1990 US census at the &lt;strong>block group&lt;/strong> level (the smallest census unit, typically 600 to 3,000 people). It was long distributed via CMU&amp;rsquo;s &lt;a
 href="https://lib.stat.cmu.edu/datasets/"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>StatLib archive&lt;/a>; sklearn&amp;rsquo;s &lt;code>fetch_california_housing&lt;/code> mirrors that original. A cosmetically extended variant (with an &lt;code>ocean_proximity&lt;/code> categorical) is the running example in Geron&amp;rsquo;s &lt;em>Hands-On Machine Learning&lt;/em>, chapter 2 — numbers from the two variants are not interchangeable.&lt;/p></description></item><item><title>Chess Bot</title><link>https://abaj.ai/wiki/ai/adv-search/chess-bot/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ai/adv-search/chess-bot/</guid><description>&lt;p>two chess projects live in this codebase, and honesty requires separating them up front. the first is a &lt;strong>from-scratch javascript engine&lt;/strong> (in &lt;code>arcade/references/chess/js/&lt;/code>, built following the classic bluefever software series): 120-square mailbox board, hand-rolled move generator validated by perft, material + piece-square evaluation, alpha-beta with quiescence, a principal-variation hash table, and iterative deepening. the second is &lt;strong>voice chess&lt;/strong> (&lt;code>code/private/chess-bot/&lt;/code>, published as &lt;a
 href="https://github.com/abaj8494/ollama-voice-chess"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>github.com/abaj8494/ollama-voice-chess&lt;/a>): there i did &lt;em>not&lt;/em> write the engine — stockfish plays the moves over uci — and the engineering is in the wrapper: skill throttling, an ollama llm that provides spoken commentary without being allowed to hallucinate moves, neural tts, and spaced-repetition opening training. one project teaches you how engines work; the other teaches you what to build &lt;em>around&lt;/em> an engine.&lt;span class="margin-note" data-note="everything measured on this page — perft counts, engine analysis, commentary — is real output from running the code on this machine.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>CNN from scratch</title><link>https://abaj.ai/wiki/ml/dl/cnn/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/cnn/</guid><description>&lt;p>a convolutional neural network is a &lt;a
 href="https://abaj.ai/wiki/ml/dl/feedforward/"
 
 
>feedforward network&lt;/a> with its linear layers put on a diet: instead of every unit seeing every input, each unit sees a small local window, and every window is processed by the &lt;em>same&lt;/em> small set of weights.&lt;span class="margin-note" data-note="the licence for this diet is an assumption about images: nearby pixels are related, faraway pixels mostly are not, and a feature worth detecting is worth detecting everywhere">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page builds the operation from its definition, gets the geometry formulas straight, walks the canonical architectures, and ends with a convolution written in loops and checked against scipy (Goodfellow, Ian, 2016).&lt;/p></description></item><item><title>Complex Analysis</title><link>https://abaj.ai/wiki/mathematics/analysis/complex/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/analysis/complex/</guid><description>&lt;p>calculus over \(\mathbb{C}\) is not a cosmetic upgrade of &lt;a
 href="https://abaj.ai/wiki/mathematics/analysis/real/"
 
 
>real analysis&lt;/a> — it is a different subject with better theorems. asking a function of a complex variable to be differentiable &lt;em>once&lt;/em> forces it to be differentiable infinitely often, equal to its taylor series, and rigid enough that its values on a tiny arc determine it everywhere. the payoff for this rigidity: integrals that real methods cannot touch fall to a residue computation in three lines (Brown, James W. and Churchill, Ruel V., 2009).&lt;/p></description></item><item><title>Concurrency</title><link>https://abaj.ai/wiki/se/implementation/concurrency/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/se/implementation/concurrency/</guid><description>&lt;p>&lt;strong>concurrency&lt;/strong> is structure: many logical tasks in flight, interleaved on however many cpus you have (possibly one). &lt;strong>parallelism&lt;/strong> is hardware: tasks literally executing at the same instant. a single-core machine juggling 400 socket connections is concurrent, not parallel; a gpu multiplying matrices is parallel, barely concurrent. you &lt;em>design&lt;/em> concurrency; you &lt;em>buy&lt;/em> parallelism (Tanenbaum, Andrew S., 2008).&lt;/p>
&lt;h2 id="threads-and-shared-memory">threads and shared memory&lt;a href="#threads-and-shared-memory" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>a thread is an independent stream of execution inside one address space: own stack and registers, shared everything else. the sharing is the point — and the disease.&lt;/p></description></item><item><title>Constraint</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/constraint/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/constraint/</guid><description>&lt;p>constraint programming inverts the usual deal: you state &lt;em>what&lt;/em> a solution must satisfy, and a general-purpose solver figures out &lt;em>how&lt;/em> to find one.&lt;span class="margin-note" data-note="freuder&amp;#39;s slogan: the user states the problem, the computer solves it — the closest computer science has come to the holy grail of programming">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

no objective gradient, no simplex tableau — just variables, finite domains, and constraints, attacked by an alternation of &lt;em>inference&lt;/em> (prune values that cannot appear in any solution) and &lt;em>search&lt;/em> (guess, propagate, backtrack). this page builds the machinery from the formalism up; the &lt;a
 href="https://abaj.ai/wiki/ai/csp/sudoku/"
 
 
>sudoku solver&lt;/a> and &lt;a
 href="https://abaj.ai/wiki/ai/csp/hashiwokakero/"
 
 
>hashiwokakero&lt;/a> write-ups on this wiki are the same machinery pointed at actual puzzles.&lt;/p></description></item><item><title>Containers</title><link>https://abaj.ai/wiki/se/implementation/containers/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/se/implementation/containers/</guid><description>&lt;p>a container is not a small virtual machine. it is an ordinary linux process (tree) that the kernel has been told to &lt;em>lie to&lt;/em> — about what processes exist, what the filesystem looks like, what the network is, who root is — plus an accountant capping what it may consume. the lying is &lt;strong>namespaces&lt;/strong>, the accounting is &lt;strong>cgroups&lt;/strong>, and everything else (images, registries, orchestrators) is packaging around those two syscall families (Tanenbaum, Andrew S., 2008).&lt;/p></description></item><item><title>Curse of Dimensionality</title><link>https://abaj.ai/wiki/ml/theory/curse-dim/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/theory/curse-dim/</guid><description>&lt;p>geometric intuition is trained in \(p \le 3\) and it does not survive the trip upstairs.&lt;span class="margin-note" data-note="the phrase is bellman&amp;#39;s, coined in the preface of his 1957 /dynamic programming/, where filling a grid over a high-dimensional state space first went bankrupt">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

in high dimensions the volume of a cube hides in its corners, every point is near the boundary, all pairwise distances look alike, and &amp;ldquo;local&amp;rdquo; neighbourhoods must stretch almost the full width of the space before they contain any data. every method that reasons from &lt;em>closeness&lt;/em> — knn, kernel smoothers, rbf kernels — inherits these pathologies at once.&lt;/p></description></item><item><title>Databases</title><link>https://abaj.ai/wiki/ccs/databases/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/databases/</guid><description>&lt;p>a database is a data structure that survives a power cut, shared by programs that don&amp;rsquo;t trust each other, queried in a language older than most of its users. the relational model has been declared dead roughly once a decade since 1970 and has outlived every announced successor.&lt;span class="margin-note" data-note="this page&amp;#39;s original stub was a shopping list — postgres, mysql, cassandra, mongodb, and something called QRKDB i can no longer place. the taxonomy section sorts them out">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page covers the model, the algebra underneath SQL, normalisation, the storage structures that make queries fast, and the machinery that keeps concurrent transactions honest.&lt;/p></description></item><item><title>Digits</title><link>https://abaj.ai/tags/digits/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/tags/digits/</guid><description>&lt;p>The scikit-learn digits dataset: 1,797 tiny 8x8 greyscale images of handwritten digits, and the workhorse of every sklearn tutorial that needs a multiclass problem which loads instantly and fits in L2 cache.&lt;/p>
&lt;h2 id="provenance">Provenance&lt;a href="#provenance" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>The data is the &lt;strong>Optical Recognition of Handwritten Digits&lt;/strong> (optdigits) set from the &lt;a
 href="https://archive.ics.uci.edu/dataset/80/optical&amp;#43;recognition&amp;#43;of&amp;#43;handwritten&amp;#43;digits"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>UCI machine learning repository&lt;/a>, created by E. Alpaydin and C. Kaynak at Bogazici University and donated in July 1998. It originates in Kaynak&amp;rsquo;s 1995 MSc thesis on combining multiple classifiers, and the companion paper is Alpaydin and Kaynak, &lt;em>Cascading Classifiers&lt;/em>, Kybernetika 34(4), 1998.&lt;/p></description></item><item><title>Discrete Mathematics</title><link>https://abaj.ai/wiki/mathematics/discrete/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/discrete/</guid><description>&lt;p>discrete mathematics is the mathematics of structures that come in separate, countable pieces — integers, truth values, finite sets, graphs — as opposed to the smooth continuum of analysis.&lt;span class="margin-note" data-note="the working test: if \(\varepsilon\)-\(\delta\) arguments feel natural on it, it is not discrete">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

no limits, no derivatives; instead: induction, counting, and exact structure. it is the native mathematics of computation — every data structure, algorithm, database query and cryptographic protocol below this page is discrete mathematics wearing a lab coat (Epp, Susanna S., 2019).&lt;/p></description></item><item><title>Dynamic Programming</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/dynamic/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/dynamic/</guid><description>&lt;p>dynamic programming is two things wearing one name. to bellman it was a mathematical theory of &lt;em>multistage decision processes&lt;/em> — sibling to &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/linear/"
 
 
>linear programming&lt;/a> in the &amp;ldquo;programming means planning&amp;rdquo; sense.&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;span class="margin-note" data-note="bellman chose the name partly to hide the mathematics from a defence secretary who hated the word research; the story is in the footnote">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

to a computer scientist it is a technique: solve a problem by combining solutions to subproblems, and never solve the same subproblem twice (Cormen, Thomas H. and Leiserson, Charles E. and Rivest, Ronald L. and Stein, Clifford, 2009). the two are the same idea at different altitudes, and this page covers both. worked implementations also live in this &lt;a
 href="https://github.com/abaj8494/dynamic-programming"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>github repo&lt;/a>.&lt;/p></description></item><item><title>Email SPAM Classifier</title><link>https://abaj.ai/wiki/ml/supervised/classification/naive-bayes/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/supervised/classification/naive-bayes/</guid><description>&lt;p>naive bayes is the classifier you get by taking bayes&amp;rsquo; rule seriously and probability theory not seriously at all.&lt;span class="margin-note" data-note="the older literature calls it &amp;#39;idiot&amp;#39;s bayes&amp;#39;, which is unfair to a model that keeps beating its critics on small text corpora">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

it assumes every feature is independent of every other feature given the class — an assumption that is false for essentially all real data — and yet it filters spam, routes support tickets and triages documents well enough that it has survived five decades of fancier competition. this page derives it, counts why the &amp;ldquo;naive&amp;rdquo; part is the whole point, builds a spam filter from scratch, and is honest about where it breaks (its probabilities, not its decisions).&lt;/p></description></item><item><title>Ensemble Learning</title><link>https://abaj.ai/wiki/ml/supervised/classification/ensembles/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/supervised/classification/ensembles/</guid><description>&lt;p>one model is an opinion; a committee is an estimator.&lt;span class="margin-note" data-note="the committee must actually disagree sometimes — a parliament of clones has the variance of one member.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

ensemble methods build many imperfect predictors and combine them, and the two great families attack opposite ends of the &lt;a
 href="https://abaj.ai/wiki/ml/theory/bias-var/"
 
 
>bias-variance decomposition&lt;/a>: &lt;strong>bagging&lt;/strong> averages low-bias, high-variance models to cancel their wobble; &lt;strong>boosting&lt;/strong> stacks up high-bias, low-variance weak learners to build accuracy that none of them has alone.&lt;/p></description></item><item><title>Estimation &amp; Inference</title><link>https://abaj.ai/wiki/ml/supervised/regression/inference/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/supervised/regression/inference/</guid><description>&lt;p>fitting a regression model produces numbers; inference is what licenses saying anything about them. this page collects the estimation machinery every model on this branch shares — likelihood, score, information, and the iterative algorithms that maximise them — and the two inferential regimes it feeds: &lt;em>exact&lt;/em> small-sample \(t\) and \(F\) results in the linear gaussian model, and &lt;em>asymptotic&lt;/em> wald, score and likelihood-ratio results everywhere else.&lt;span class="margin-note" data-note="distilled from my math5806 (applied regression analysis) weeks 2 and 3, which follow dobson and barnett chapters 4-6">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Event Driven</title><link>https://abaj.ai/wiki/se/architecture-design/event-driven/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/se/architecture-design/event-driven/</guid><description>&lt;p>event-driven architecture inverts the direction of knowledge: instead of the caller knowing who must react, the &lt;em>reactor&lt;/em> knows what it cares about. producers announce facts; consumers subscribe. the whole style is the &lt;a
 href="https://abaj.ai/wiki/se/architecture-design/patterns/#observer"
 
 
>observer pattern&lt;/a> with a broker in the middle and a network underneath — which is exactly where the interesting failure modes come from.&lt;/p>
&lt;h2 id="events-commands-queries">events, commands, queries&lt;a href="#events-commands-queries" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>three message species, constantly confused:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>event&lt;/strong>: a fact about the past, named in past tense — &lt;code>OrderPlaced&lt;/code>, &lt;code>PaymentFailed&lt;/code>. immutable, owned by the producer, zero expectation about who (if anyone) reacts. broadcasting is safe because nothing is being asked.&lt;/li>
&lt;li>&lt;strong>command&lt;/strong>: a request for the future — &lt;code>PlaceOrder&lt;/code>. imperative mood, addressed to exactly one handler, can be rejected. commands express intent; events record outcome. compare the &lt;a
 href="https://abaj.ai/wiki/se/architecture-design/patterns/#command"
 
 
>command pattern&lt;/a>, which reifies exactly this.&lt;/li>
&lt;li>&lt;strong>query&lt;/strong>: a question, side-effect free, wants an answer now.&lt;/li>
&lt;/ul>
&lt;p>the classic smell is the &lt;em>command in event&amp;rsquo;s clothing&lt;/em>: &lt;code>SendWelcomeEmailRequested&lt;/code> published as an &amp;ldquo;event&amp;rdquo; that exactly one consumer must process, or the producer silently depends on a specific reaction — you have built rpc with extra steps and none of rpc&amp;rsquo;s error handling.&lt;span class="margin-note" data-note="the test: delete every consumer. if the producer&amp;#39;s correctness suffers, it was a command.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Exact Inference</title><link>https://abaj.ai/wiki/ml/pgm/inference/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/pgm/inference/</guid><description>&lt;p>a &lt;a
 href="https://abaj.ai/wiki/ml/pgm/bayesian-networks/"
 
 
>bayesian network&lt;/a> stores a joint distribution; inference is spending that investment — computing probabilities the tables do not state directly. exact inference is np-hard in general, but its true cost is exponential only in a structural parameter of the graph (the &lt;em>treewidth&lt;/em>), not in the number of variables. this page builds the exact toolchain in the order the ideas force themselves on you: factors, variable elimination, the fight for a good elimination order, and finally the jointree algorithm — variable elimination industrialised into a message-passing scheme that answers every marginal at once.&lt;span class="margin-note" data-note="when the treewidth is too large, exact methods drown and you switch to the sampling algorithms on the approximate inference page">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Functional Programming</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/functional/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/functional/</guid><description>&lt;p>unlike its siblings on this branch of the wiki — &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/linear/"
 
 
>linear&lt;/a>, &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/quadratic/"
 
 
>quadratic&lt;/a>, &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/integer/"
 
 
>integer&lt;/a> — this &amp;ldquo;programming&amp;rdquo; really is about writing programs. functional programming is the discipline of building software out of &lt;em>expressions that are evaluated&lt;/em> rather than &lt;em>statements that are executed&lt;/em>: no assignment, no mutation, no time. what remains is algebra, and algebra is something you can reason about.&lt;span class="margin-note" data-note="sicp is the canonical sermon: https://mitpress.mit.edu/9780262510875/ — and learn you a haskell the friendliest hymnal: https://learnyouahaskell.github.io">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>GAN: Generative Adversarial Networks</title><link>https://abaj.ai/wiki/ml/dl/gans/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/gans/</guid><description>&lt;p>a gan trains a generator by making it play a game against a learned critic: the &lt;strong>generator&lt;/strong> \(G\) maps noise to samples, the &lt;strong>discriminator&lt;/strong> \(D\) tries to tell those samples from real data, and each improves by exploiting the other&amp;rsquo;s current weakness — density estimation recast as a two-player minimax game (goodfellow et al. 2014, &lt;a
 href="https://arxiv.org/abs/1406.2661"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>&lt;em>generative adversarial networks&lt;/em>&lt;/a>).&lt;span class="margin-note" data-note="no likelihood is ever computed; the discriminator *is* the loss function, and it is learned">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

the framework is treated in ch. 20 of (Goodfellow, Ian, 2016).&lt;/p></description></item><item><title>Gaussian Mixture Models</title><link>https://abaj.ai/wiki/ml/unsupervised/gaussian-mixtures/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/unsupervised/gaussian-mixtures/</guid><description>&lt;p>a single gaussian is a committed statement: one bump, symmetric, thin tails. real data is usually several stories overlaid — different regimes, different subpopulations — and a gaussian mixture says so explicitly: each point was generated by &lt;em>one of&lt;/em> \(k\) gaussians, we just don&amp;rsquo;t get told which.&lt;span class="margin-note" data-note="the &amp;#39;don&amp;#39;t get told which&amp;#39; is the entire difficulty, and em is the entire answer">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

fitting one is the canonical latent-variable problem, and the algorithm that fits it — expectation-maximisation — is one of the great workhorses of statistics.&lt;/p></description></item><item><title>Generalised Linear Models</title><link>https://abaj.ai/wiki/ml/supervised/regression/glm/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/supervised/regression/glm/</guid><description>&lt;p>a generalised linear model is what remains of &lt;a
 href="https://abaj.ai/wiki/ml/supervised/regression/ols/"
 
 
>linear regression&lt;/a> once you stop pretending every response is gaussian. nelder and wedderburn&amp;rsquo;s 1972 observation was that the gaussian, binomial, poisson, exponential and gamma models all run on the &lt;em>same&lt;/em> three-part engine — a linear predictor, a link, and an exponential-family response — so estimation (fisher scoring), inference (deviance) and diagnostics (standardised residuals) can be built &lt;em>once&lt;/em> and inherited by every member.&lt;span class="margin-note" data-note="this page distils my math5806 (applied regression analysis) notes, which follow dobson and barnett&amp;#39;s textbook parametrisation throughout">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Goal</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/goal/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/goal/</guid><description>&lt;p>most optimisation asks for the &lt;em>best&lt;/em>; goal programming asks for &lt;em>good enough&lt;/em>, several times over.&lt;span class="margin-note" data-note="the deviation-variable trick first appeared in a 1955 charnes-cooper-ferguson paper on executive pay; the name arrived with their 1961 book">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

you attach a numeric target to each of several objectives, measure how far the plan misses each target, and minimise the misses you dislike. the philosophy is herbert simon&amp;rsquo;s &lt;strong>satisficing&lt;/strong>&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup> — real decision makers do not maximise a grand utility function, they set aspiration levels and stop when they are met — and the machinery is pure &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/linear/"
 
 
>linear programming&lt;/a>: goal programming was invented by charnes and cooper as an LP device&lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup> and remains the most-used technique in practical multi-criteria decision making precisely because it never leaves LP territory.&lt;/p></description></item><item><title>Gödel's Incompleteness Theorem</title><link>https://abaj.ai/wiki/mathematics/discrete/incompleteness/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/discrete/incompleteness/</guid><description>&lt;p>In 1931 a twenty-five-year-old in Vienna published a paper proving that mathematics cannot fully formalise itself: any consistent formal system rich enough to do arithmetic contains true statements it cannot prove, and — worse — cannot even prove its own consistency (Gödel, Kurt, 1931).&lt;span class="margin-note" data-note="The paper&amp;#39;s title promises &amp;#39;undecidable propositions of Principia Mathematica and related systems&amp;#39; — the &amp;#39;related systems&amp;#39; clause is doing heavy lifting: it means every system you will ever build">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

This page walks the actual argument: what the theorem says precisely, the two technical inventions that power it (Gödel numbering and diagonalisation), and — just as important — the long list of things it does &lt;em>not&lt;/em> say.&lt;/p></description></item><item><title>Graph Theory</title><link>https://abaj.ai/wiki/mathematics/discrete/graph-theory/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/discrete/graph-theory/</guid><description>&lt;p>graph theory began in 1736 when euler noticed that a walking-tour puzzle about seven bridges in königsberg was really a question about dots and lines — and that the geometry (lengths, positions, the river) was irrelevant.&lt;span class="margin-note" data-note="the first theorem of graph theory killed an entire genre of pub trivia">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

that act of abstraction — keep the incidence structure, discard everything else — is the whole subject. a graph is the minimal mathematical model of &amp;ldquo;things, some pairs of which are related&amp;rdquo;, which is why it keeps turning up: networks, molecules, dependencies, state machines, social graphs (Epp, Susanna S., 2019).&lt;/p></description></item><item><title>Hashiwokakero (Bridges) Solver</title><link>https://abaj.ai/wiki/ai/csp/hashiwokakero/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ai/csp/hashiwokakero/</guid><description>&lt;p>hashiwokakero (&amp;ldquo;build bridges&amp;rdquo;, nikoli) hands you a grid of numbered islands and asks you to join them with bridges until every number is spent. it is the friendliest possible introduction to constraint satisfaction: the constraints are few and visual, propagation alone solves most human-published puzzles, and when it doesn&amp;rsquo;t, you get to write a backtracking search. this page documents my solver at &lt;code>code/private/hashi/&lt;/code> — a go rewrite of a uni assignment originally in c — including the debugging session that writing this page forced on it.&lt;span class="margin-note" data-note="the repo&amp;#39;s own README opens with a life lesson: &amp;#39;whenever you port code, make sure it is correct before translating otherwise you will introduce a suicidal amount of bugs.&amp;#39; foreshadowing.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>IMDB Reviews</title><link>https://abaj.ai/tags/imdb-reviews/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/tags/imdb-reviews/</guid><description>&lt;p>The &lt;strong>Large Movie Review Dataset&lt;/strong> (aclImdb v1.0): 50,000 polar movie reviews from IMDB, split evenly for training and testing. For over a decade the default benchmark for binary sentiment classification — simple enough to load with one function call, large enough that word order and negation actually matter.&lt;/p>
&lt;h2 id="provenance">Provenance&lt;a href="#provenance" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>Collected at Stanford and released alongside Maas, Daly, Pham, Huang, Ng and Potts, &lt;em>Learning Word Vectors for Sentiment Analysis&lt;/em>, ACL 2011. The dataset page (and download) lives at &lt;a
 href="https://ai.stanford.edu/~amaas/data/sentiment/"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>ai.stanford.edu/~amaas/data/sentiment&lt;/a>. The original motivation was learning sentiment-aware word representations; the review corpus it shipped with promptly outlived the method.&lt;/p></description></item><item><title>Integer Programming</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/integer/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/integer/</guid><description>&lt;p>take a &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/linear/"
 
 
>linear program&lt;/a> and add one word — &lt;em>integer&lt;/em> — and the complexity class jumps from polynomial to NP-hard. that word buys expressive power nothing continuous can match: yes/no decisions, either/or logic, fixed costs, sequencing, assignment. integer programming is the lingua franca of operations research precisely because &amp;ldquo;decide&amp;rdquo; is not a convex verb.&lt;span class="margin-note" data-note="commercial solvers — gurobi, cplex, scip — routinely crack instances with millions of variables, np-hardness notwithstanding. hard in the worst case is not hard on your case">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Internet Networks</title><link>https://abaj.ai/wiki/ccs/networking/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/networking/</guid><description>&lt;p>the internet is a triumph of indirection: no layer trusts the one below to be reliable, timely, or even present, and yet a packet leaves your laptop, crosses a dozen autonomous systems owned by companies that actively dislike each other, and arrives.&lt;span class="margin-note" data-note="the design bet — smart edges, dumb core — is called the end-to-end principle">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page walks the stack bottom-up, then follows one HTTP request through DNS, TCP, and TLS to see every layer earn its keep.&lt;/p></description></item><item><title>K-means Clustering</title><link>https://abaj.ai/wiki/ml/unsupervised/k-means-clustering/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/unsupervised/k-means-clustering/</guid><description>&lt;p>k-means is unsupervised learning&amp;rsquo;s hello world: pick \(k\) prototype points, assign every datum to its nearest prototype, move each prototype to the centre of its flock, repeat.&lt;span class="margin-note" data-note="lloyd wrote it up at bell labs in 1957 for pulse-code modulation — it stayed an internal memo until 1982">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

it is fast, it always terminates, and it is wrong in ways that are so instructive that every clustering course starts here anyway.&lt;/p></description></item><item><title>KDD Cup 1999</title><link>https://abaj.ai/tags/kdd-cup/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/tags/kdd-cup/</guid><description>&lt;p>Network intrusion detection at competition scale: nearly five million TCP connection records, each labelled &lt;code>normal&lt;/code> or with one of dozens of attack names. Historically the most-used intrusion-detection benchmark ever — and, by broad consensus, one that should now be used only with its flaws stated up front.&lt;/p>
&lt;h2 id="provenance">Provenance&lt;a href="#provenance" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>The dataset was built for the &lt;a
 href="https://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>Third International Knowledge Discovery and Data Mining Tools Competition (1999)&lt;/a> (held with KDD-99, the fifth KDD &lt;em>conference&lt;/em>) by processing the tcpdump portions of the &lt;strong>1998 DARPA Intrusion Detection System Evaluation&lt;/strong>, run by MIT Lincoln Laboratory. Traffic was generated on a closed simulated air-force network with hand-injected attacks over seven weeks (training) plus two weeks (test), then summarised into per-connection feature vectors.&lt;/p></description></item><item><title>Kernel Methods</title><link>https://abaj.ai/wiki/ml/theory/kernel-methods/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/theory/kernel-methods/</guid><description>&lt;p>kernel methods are the great arbitrage of classical machine learning: keep the algorithm linear — with all its convexity and closed forms — but run it in a feature space so large it can bend around anything, and never pay for that space explicitly.&lt;span class="margin-note" data-note="the whole business is sometimes summarised as: linear models did nothing wrong, your coordinates did">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

one identity powers everything: if your algorithm touches the data only through inner products, you may replace every \(\langle x, x&amp;rsquo;\rangle\) with a kernel \(k(x, x&amp;rsquo;)\) and thereby work in the implicit feature space of \(k\) — possibly infinite-dimensional — at the cost of an \(n \times n\) matrix.&lt;/p></description></item><item><title>LAN Messenger</title><link>https://abaj.ai/wiki/csp/lan-messenger/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/csp/lan-messenger/</guid><description>&lt;p>&amp;ldquo;tessenger&amp;rdquo; is my unsw networks assignment: a multi-client chat server in raw c — &lt;code>server.c&lt;/code> (583 lines) and &lt;code>client.c&lt;/code> (253), no libraries beyond pthreads and the bsd socket api (Kernighan, Brian W. and Ritchie, Dennis M., 1988). it does authentication with timed lockout, private and group messaging, presence, audit logs, and a udp side channel for peer-to-peer file transfer. this page walks the architecture, weaves in the socket theory the assignment was designed to teach, and then does something the assignment never required: an honest concurrency audit of my own submission, with the bugs demonstrated live.&lt;span class="margin-note" data-note="everything quoted below — compiles, session transcripts, log files, even the crash — is a real run of this code on this machine, december-2023 sources untouched except where noted.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Learning Graphical Models</title><link>https://abaj.ai/wiki/ml/pgm/learning/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/pgm/learning/</guid><description>&lt;p>everything so far assumed the network was handed to us. in practice an expert sketches the graph at best, and the numbers — sometimes the graph too — must come from data. learning splits along two axes: &lt;em>parameters vs structure&lt;/em>, and &lt;em>complete vs incomplete data&lt;/em>. the four quadrants ascend steeply in difficulty: counting, then optimisation, then search over graphs, then all three at once.&lt;span class="margin-note" data-note="this is the pipeline of the comp9418 assignment: learn the outcome spaces and cpts from an icu dataset, then classify with complete and with missing evidence">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Linear Algebra</title><link>https://abaj.ai/wiki/mathematics/linear-algebra/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/linear-algebra/</guid><description>&lt;p>linear algebra is the study of vector spaces and the structure-preserving maps between them. it is the one branch of mathematics that computers execute natively — every model fit, every graphics frame, every pagerank iteration is matrix arithmetic — and the local model that calculus reduces every smooth problem to.&lt;span class="margin-note" data-note="the jacobian on the multivariable page is exactly this reduction: differentiate, then hand the problem to linear algebra.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

the plot of this page: spaces, then maps, then the four subspaces every matrix carries, then the two great factorisations — the spectral theorem and the svd (Anton, Howard, 2010).&lt;/p></description></item><item><title>Linear Programming</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/linear/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/linear/</guid><description>&lt;p>&amp;ldquo;programming&amp;rdquo; here means &lt;em>planning&lt;/em>, not coding — the word predates the software sense.&lt;span class="margin-note" data-note="dantzig invented the simplex method in 1947 for air-force logistics planning; kantorovich had the theory in 1939 but the soviets sat on it">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

a linear program optimises a linear objective over a region carved out by linear inequalities. it is the base camp of mathematical programming: &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/quadratic/"
 
 
>quadratic&lt;/a>, &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/integer/"
 
 
>integer&lt;/a> and &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/non-linear/"
 
 
>non-linear&lt;/a> programming all generalise it in one direction or another, and all of them lean on LP machinery (relaxations, duals, warm starts) to get anything done. clrs devotes chapter 29 to it (Cormen, Thomas H. and Leiserson, Charles E. and Rivest, Ronald L. and Stein, Clifford, 2009).&lt;/p></description></item><item><title>Linux</title><link>https://abaj.ai/wiki/ccs/linux/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/linux/</guid><description>&lt;p>unix is less an operating system than a worldview: everything is a file, every program does one thing, and text streams are the universal interface. linux is the worldview&amp;rsquo;s most successful implementation — a monolithic kernel started by a finnish undergraduate in 1991, now running most of the internet, every android phone, and the top 500 supercomputers without exception.&lt;span class="margin-note" data-note="macos is the other unix on this desk — same syscall dialect, different kernel lineage. every demo on this page runs on both">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page is the trunk; the sharpened tools each get their own branch:&lt;/p></description></item><item><title>LLM from scratch</title><link>https://abaj.ai/wiki/ml/dl/natural-language-processing/llms/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/natural-language-processing/llms/</guid><description>&lt;p>a large language model is a decoder-only &lt;a
 href="https://abaj.ai/wiki/ml/dl/transformers/"
 
 
>transformer&lt;/a> trained on one absurdly simple objective — predict the next token — scaled until the emergent behaviour stops looking simple.&lt;span class="margin-note" data-note="everything downstream — chat, code, reasoning — is a fine-tune or a prompt on top of this one objective">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page is the map from that objective to a deployed assistant: the loss, the scaling laws that size the model, the pretrain-align pipeline, and the inference tricks. the hands-on build is &lt;a
 href="https://abaj.ai/wiki/ml/dl/transformers/nanogpt/"
 
 
>nanogpt&lt;/a>.&lt;/p></description></item><item><title>Locally Weighted Regression</title><link>https://abaj.ai/wiki/ml/supervised/regression/locally-weighted/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/supervised/regression/locally-weighted/</guid><description>&lt;p>a straight line is too rigid for a wiggly world, and a global degree-9 polynomial is a hostage negotiation.&lt;span class="margin-note" data-note="the third option — splines — is a different page&amp;#39;s problem.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

locally weighted regression (LWR — and its robust cousin LOWESS) takes the diplomatic route: fit the simplest possible model, but fit it &lt;em>freshly at every query point&lt;/em>, paying attention only to the training points nearby.&lt;/p>
&lt;h2 id="motivation">motivation&lt;a href="#motivation" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>linear regression commits to one \(\theta\) for the whole input space. if the true \(f\) bends, the residue of that commitment is bias everywhere.&lt;/li>
&lt;li>the fix need not be a fancier global family. &lt;strong>any smooth function is locally linear&lt;/strong> — taylor says so — so a linear fit weighted toward a neighbourhood of \(x_0\) can track an arbitrary smooth \(f\).&lt;/li>
&lt;li>the price: there is no longer a &amp;ldquo;trained model&amp;rdquo;. LWR is &lt;strong>memory-based and non-parametric&lt;/strong> — like &lt;a
 href="https://abaj.ai/wiki/ml/supervised/classification/knn/"
 
 
>k-nearest neighbours&lt;/a>, it keeps the entire training set and does all of its work at prediction time. training is \(O(1)\); every query costs a fresh weighted least-squares solve.&lt;span class="margin-note" data-note="the classical name for this family is &amp;#39;lazy learning&amp;#39;, which is also a fair description of the author.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/li>
&lt;/ul>
&lt;h2 id="the-estimator">the estimator&lt;a href="#the-estimator" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;h3 id="weighted-least-squares-at-a-query-point">weighted least squares at a query point&lt;a href="#weighted-least-squares-at-a-query-point" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>fix a query \(x_0\). assign each training point a weight \(w_i(x_0) \ge 0\) that decays with distance from \(x_0\), then solve the weighted least-squares problem&lt;/p></description></item><item><title>Logic</title><link>https://abaj.ai/wiki/mathematics/discrete/logic/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/discrete/logic/</guid><description>&lt;p>logic is the study of valid inference: which conclusions are forced by which premises, independent of what the premises are about.&lt;span class="margin-note" data-note="mathematics runs on logic the way programs run on a cpu — invisibly, until something segfaults">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

it splits cleanly into a &lt;strong>syntax&lt;/strong> (formulas, and rules for pushing them around) and a &lt;strong>semantics&lt;/strong> (truth assignments, models), and the deepest theorems in the subject are exactly the ones that say when the two agree (Epp, Susanna S., 2019).&lt;/p></description></item><item><title>Logistic Regression</title><link>https://abaj.ai/wiki/ml/supervised/regression/logistic/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/supervised/regression/logistic/</guid><description>&lt;p>logistic regression is the method that seems only ever to be used for &lt;em>classification&lt;/em> yet insists on calling itself regression. the resolution: it &lt;strong>is&lt;/strong> regression — of the log-odds of a bernoulli success probability onto a linear predictor.&lt;span class="margin-note" data-note="this page follows my math5806 (applied regression analysis) week 4 notes, which follow dobson and barnett">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page develops it the honest way, as a &lt;a
 href="https://abaj.ai/wiki/ml/supervised/regression/glm/"
 
 
>generalised linear model&lt;/a>: bernoulli response, canonical logit link, likelihood fitted by fisher scoring, inference through the deviance. the machine-learning reading (cross-entropy loss, linear decision boundaries) falls out at the end as a corollary.&lt;/p></description></item><item><title>Long Short-Term Memory (LSTM)</title><link>https://abaj.ai/wiki/ml/dl/lstm/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/lstm/</guid><description>&lt;p>the &lt;a
 href="https://abaj.ai/wiki/ml/dl/rnn/"
 
 
>vanilla rnn&lt;/a> cannot learn long-range dependencies: its gradient signal is a product of jacobians that shrinks or blows up geometrically with distance. the lstm&amp;rsquo;s answer is architectural, not numerical — give the network a second state, updated &lt;em>additively&lt;/em> rather than by repeated matrix multiplication, and let learned gates decide what enters, what stays, and what leaves.&lt;span class="margin-note" data-note="hochreiter identified the vanishing-gradient problem in his 1991 diploma thesis, five years before the fix was published">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

the design dates to hochreiter and schmidhuber&amp;rsquo;s 1997 paper (&lt;a
 href="https://doi.org/10.1162/neco.1997.9.8.1735"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>&lt;em>long short-term memory&lt;/em>, neural computation 9(8)&lt;/a>), and for two decades it was simply what &amp;ldquo;rnn&amp;rdquo; meant in practice (Goodfellow, Ian, 2016).&lt;/p></description></item><item><title>Markov Chains and Hidden Markov Models</title><link>https://abaj.ai/wiki/ml/pgm/markov-models/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/pgm/markov-models/</guid><description>&lt;p>time is just another dimension to factorise over. a &lt;a
 href="https://abaj.ai/wiki/ml/pgm/bayesian-networks/"
 
 
>bayesian network&lt;/a> whose variables are indexed by time steps, with the same local structure copied at every step, is a &lt;em>dynamic bayesian network&lt;/em> — and its two simplest members, the markov chain and the hidden markov model, carry a startling share of applied probability: language models before transformers, speech recognition, robot localisation, pagerank, and the mcmc machinery behind &lt;a
 href="https://abaj.ai/wiki/ml/pgm/approximate-inference/"
 
 
>approximate inference&lt;/a>.&lt;span class="margin-note" data-note="the modern neural take on the same sequence problem is the rnn — same graph, learned transition function">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Markov Networks</title><link>https://abaj.ai/wiki/ml/pgm/markov-networks/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/pgm/markov-networks/</guid><description>&lt;p>some dependencies have no natural direction. two neighbouring pixels tend to share a label; two friends tend to vote alike; two adjacent atoms couple their spins. forcing an arrow onto these symmetric interactions — as a &lt;a
 href="https://abaj.ai/wiki/ml/pgm/bayesian-networks/"
 
 
>bayesian network&lt;/a> must — misrepresents them. the &lt;strong>markov network&lt;/strong> (markov random field, mrf) is the undirected alternative, born in statistical physics: edges express mutual compatibility, parametrised not by conditional probabilities but by unnormalised &lt;em>potentials&lt;/em>, with a global normalising constant picking up the bill.&lt;span class="margin-note" data-note="the trade is exactly that: local, symmetric, easy-to-change factors — in exchange for a partition function that is np-hard to evaluate">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Matplotlib Library</title><link>https://abaj.ai/wiki/ccs/programming/libraries/matplotlib/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/libraries/matplotlib/</guid><description>&lt;p>matplotlib has a reputation for being clunky, and the reputation is earned exactly by people fighting the &lt;em>wrong&lt;/em> api. there are two: a stateful &lt;code>pyplot&lt;/code> layer that mimics matlab (&amp;ldquo;draw on whatever was touched last&amp;rdquo;), and an object-oriented core in which every visible thing is an object you hold a reference to. the second is the real library; the first is sugar for one-liners. write &lt;code>fig, ax = plt.subplots()&lt;/code> and stay in object land, and most of the clunk evaporates.&lt;span class="margin-note" data-note="official docs: https://matplotlib.org/stable/ — the &amp;#39;anatomy of a figure&amp;#39; poster there is the single best page of documentation in scientific python">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

all code on this page executed for real; figures were written to &lt;code>/tmp&lt;/code> and are described rather than embedded, with true file sizes.&lt;/p></description></item><item><title>Microservices</title><link>https://abaj.ai/wiki/se/architecture-design/microservices/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/se/architecture-design/microservices/</guid><description>&lt;p>a microservice architecture decomposes one application into many independently deployable services, each owning its own data, talking over a network. the honest framing: you are trading a &lt;em>code&lt;/em> organisation problem for a &lt;em>distributed systems&lt;/em> problem.&lt;span class="margin-note" data-note="fowler&amp;#39;s original essay remains the best single description: martinfowler.com/articles/microservices.html">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

that trade is sometimes worth it. it is not worth it nearly as often as conference talks suggest.&lt;/p>
&lt;h2 id="the-trade-not-the-hype">the trade, not the hype&lt;a href="#the-trade-not-the-hype" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;h3 id="what-you-actually-buy">what you actually buy&lt;a href="#what-you-actually-buy" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>independent deployment&lt;/strong>: team a ships without waiting for team b&amp;rsquo;s release train. this is the real prize — everything else is secondary.&lt;/li>
&lt;li>&lt;strong>independent scaling&lt;/strong>: scale the search service to 40 replicas while billing idles on 2.&lt;/li>
&lt;li>&lt;strong>fault isolation&lt;/strong>: a memory leak in recommendations does not take down checkout — &lt;em>if&lt;/em> you also build the resilience machinery below. isolation is earned, not free.&lt;/li>
&lt;li>&lt;strong>technology heterogeneity&lt;/strong>: the ml service can be python while the ledger is jvm. (also a curse: n stacks to patch.)&lt;/li>
&lt;li>&lt;strong>organisational scaling&lt;/strong>: conway&amp;rsquo;s law working for you — service boundaries that mirror team boundaries let teams own code end to end.&lt;/li>
&lt;/ul>
&lt;h3 id="what-you-actually-pay">what you actually pay&lt;a href="#what-you-actually-pay" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>every in-process function call that crosses a new service boundary becomes a network call: it can now fail independently, time out, arrive twice, or arrive late.&lt;/li>
&lt;li>transactions that were a single &lt;code>BEGIN...COMMIT&lt;/code> become sagas (below) — you give up atomicity across boundaries and must design compensation by hand.&lt;/li>
&lt;li>refactoring across service boundaries is an order of magnitude harder than moving code between modules — the boundary is now an api contract with independent release cadences (Fowler, Martin, 2018).&lt;/li>
&lt;li>operational surface explodes: per-service ci, dashboards, alerts, on-call, versioned contracts, backwards-compatible migrations.&lt;/li>
&lt;/ul>
&lt;h3 id="when-a-modular-monolith-wins">when a modular monolith wins&lt;a href="#when-a-modular-monolith-wins" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>a &lt;strong>modular monolith&lt;/strong> — one deployable, strictly enforced internal module boundaries, one database with schema-per-module discipline — captures most of the design benefit at a fraction of the operational cost.&lt;/li>
&lt;li>you get cheap refactoring while the domain boundaries are still wrong (they always start wrong), real stack traces, local transactions, and one thing to deploy.&lt;/li>
&lt;li>the sane migration path is monolith-first: find the boundaries by living with them in-process, then extract the one or two services that genuinely need independent deployment or scaling — the &lt;em>strangler fig&lt;/em> approach of routing traffic incrementally to extracted pieces.&lt;span class="margin-note" data-note="martinfowler.com/bliki/MonolithFirst.html and /bliki/StranglerFigApplication.html">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/li>
&lt;li>rule of thumb: if one team can hold the whole system in its head and deploys are not blocked on other teams, microservices solve a problem you do not have.&lt;/li>
&lt;/ul>
&lt;figure class="tikz-figure lateximage">
 &lt;script type="text/tikz"
 >
 
\usepackage{xcolor}
\usetikzlibrary{positioning,calc,arrows.meta,fit}
\begin{document}
\begin{tikzpicture}[font=\small, >={Stealth[length=4pt]},
 mod/.style={draw, rounded corners=1pt, fill=blue!12, minimum width=1.9cm, minimum height=0.7cm},
 svc/.style={draw, rounded corners=1pt, fill=green!15, minimum width=1.9cm, minimum height=0.7cm},
 db/.style={draw, fill=orange!20, minimum width=1.1cm, minimum height=0.55cm, rounded corners=3pt}]
% ---- monolith ----
\node[mod] (m1) at (0,0) {orders};
\node[mod, below=0.25 of m1] (m2) {payments};
\node[mod, below=0.25 of m2] (m3) {inventory};
\node[draw, thick, fit=(m1)(m3), inner sep=8pt, label=above:{\bfseries monolith}] (mono) {};
\node[db, below=0.55 of mono] (mdb) {one db};
\draw[->] (mono) -- (mdb);
% ---- microservices ----
\node[svc] (s1) at (6.4,0) {orders};
\node[svc, right=0.5 of s1] (s2) {payments};
\node[svc, right=0.5 of s2] (s3) {inventory};
\node[db, below=0.55 of s1] (d1) {db};
\node[db, below=0.55 of s2] (d2) {db};
\node[db, below=0.55 of s3] (d3) {db};
\draw[->] (s1) -- (d1); \draw[->] (s2) -- (d2); \draw[->] (s3) -- (d3);
\node[draw, fill=gray!15, rounded corners=1pt, minimum width=6.2cm, minimum height=0.55cm, above=0.8 of s2] (gw) {api gateway};
\draw[->] (gw.south -| s1) -- (s1);
\draw[->] (gw) -- (s2);
\draw[->] (gw.south -| s3) -- (s3);
\draw[&lt;->, dashed, red!70!black] (s1) -- node[above, font=\scriptsize] {network} (s2);
\draw[&lt;->, dashed, red!70!black] (s2) -- node[above, font=\scriptsize] {network} (s3);
\node[font=\bfseries] at (8.3,1.9) {microservices};
\end{tikzpicture}
\end{document}

 &lt;/script>
 &lt;figcaption>the same domain twice: one deployable with internal modules and one database, versus independently deployable services each owning its own store, fronted by a gateway.&lt;/figcaption>
&lt;/figure>

&lt;h2 id="decomposing-a-system">decomposing a system&lt;a href="#decomposing-a-system" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;h3 id="bounded-contexts--ddd-lite">bounded contexts (ddd-lite)&lt;a href="#bounded-contexts--ddd-lite" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>the useful sliver of domain-driven design:&lt;/p></description></item><item><title>Multi-objective</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/multi-objective/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/multi-objective/</guid><description>&lt;p>single-objective optimisation is a polite fiction. real decisions trade cost against quality, return against risk, speed against accuracy — and the objectives &lt;em>disagree&lt;/em>, otherwise you would not have listed them separately.&lt;span class="margin-note" data-note="the ordering is named for pareto (1896) though edgeworth had the idea in 1881 — hence the pedantic name edgeworth-pareto optimality">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

multi-objective optimisation refuses to mash them into one number prematurely. the price of that honesty: &amp;ldquo;the optimum&amp;rdquo; stops being a point and becomes a &lt;em>set&lt;/em> — the pareto front — and half the subject is about how to trace it, the other half about how to pick from it.&lt;/p></description></item><item><title>Multivariable Calculus</title><link>https://abaj.ai/wiki/mathematics/calculus/mvars/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/calculus/mvars/</guid><description>&lt;p>calculus in \(\mathbb{R}^n\): functions of several variables, the surfaces they define, and the fields that flow over them. the programme is the same as &lt;a
 href="https://abaj.ai/wiki/mathematics/calculus/svars/"
 
 
>one variable&lt;/a> — linearise locally, integrate globally — but the derivative becomes a matrix, the chain rule becomes matrix multiplication, and the fundamental theorem splits into three named theorems (green, stokes, gauss) that are secretly one (Courant, Richard, 1996). this page is also the mathematical spine of machine learning: gradients, hessians, jacobians and constrained optima are chapter 5 of (Deisenroth, Marc Peter and Faisal, A. Aldo and Ong, Cheng Soon, 2020).&lt;/p></description></item><item><title>No Free Lunch Theorem</title><link>https://abaj.ai/wiki/ml/theory/no-free-lunch/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/theory/no-free-lunch/</guid><description>&lt;p>averaged over &lt;em>all possible problems&lt;/em>, every learning algorithm is exactly as good as random guessing — and every optimiser is exactly as good as blind enumeration.&lt;span class="margin-note" data-note="the name comes from the american saloon practice of &amp;#39;free&amp;#39; lunches that you paid for in beer">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this sounds like nihilism but is actually the sharpest possible argument &lt;em>for&lt;/em> inductive bias: an algorithm can only beat chance on some problems by losing to chance on others, so the whole game of machine learning is choosing whose lunch to eat.&lt;/p></description></item><item><title>Number Theory</title><link>https://abaj.ai/wiki/mathematics/discrete/number-theory/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/discrete/number-theory/</guid><description>&lt;p>number theory studies the integers on their own terms — divisibility, primes, remainders — and for two millennia it was the purest of pure mathematics, prized precisely because it was useless.&lt;span class="margin-note" data-note="hardy, 1940: &amp;#39;no one has yet discovered any warlike purpose to be served by the theory of numbers&amp;#39;. he was off by about 37 years">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

then in 1977 the RSA cryptosystem turned euclid, fermat and euler into load-bearing internet infrastructure. this page walks the classical results in dependency order and ends at that payoff (Epp, Susanna S., 2019).&lt;/p></description></item><item><title>Numpy</title><link>https://abaj.ai/wiki/ccs/programming/libraries/numpy/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/libraries/numpy/</guid><description>&lt;p>numpy is one idea executed ruthlessly: a typed, contiguous block of memory plus enough metadata to &lt;em>reinterpret&lt;/em> it without copying. everything else — broadcasting, views, vectorised speed — falls out of that design. learn the memory model and the api stops being a list of functions and becomes a handful of consequences.&lt;span class="margin-note" data-note="official docs: https://numpy.org/doc/stable/ — the &amp;#39;numpy fundamentals&amp;#39; section is genuinely good, unusual for reference docs">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

all timings and outputs on this page are real (python 3, numpy 2.4, apple m-series).&lt;/p></description></item><item><title>Pandas Library</title><link>https://abaj.ai/wiki/ccs/programming/libraries/pandas/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/libraries/pandas/</guid><description>&lt;p>pandas is &lt;a
 href="https://abaj.ai/wiki/ccs/programming/libraries/numpy/"
 
 
>numpy&lt;/a> with &lt;em>labels&lt;/em>. a &lt;code>Series&lt;/code> is a 1-d array married to an &lt;strong>index&lt;/strong>; a &lt;code>DataFrame&lt;/code> is a dict of such columns sharing one row index. the single organising idea — the one that explains both the magic and the bugs — is that &lt;strong>every operation aligns on labels first&lt;/strong> and computes second. everything on this page runs against pandas 3.0 (outputs are real).&lt;span class="margin-note" data-note="official docs: https://pandas.pydata.org/docs/ — the user guide&amp;#39;s &amp;#39;10 minutes to pandas&amp;#39; undersells itself by about three hours">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Perceptrons (Augmented with Gradient Descent)</title><link>https://abaj.ai/wiki/ml/dl/perceptron/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/perceptron/</guid><description>&lt;p>the perceptron is the hydrogen atom of neural networks: one neuron, one weight vector, one threshold — and yet it already exhibits the two behaviours that define the whole field.&lt;span class="margin-note" data-note="rosenblatt&amp;#39;s 1958 demo ran in software on an ibm 704; the mark i hardware — motorised potentiometers for weights — was assembled in 1959 and demonstrated in 1960">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

it &lt;em>learns&lt;/em> from mistakes with a provable convergence guarantee, and it &lt;em>fails&lt;/em> on problems its geometry cannot express. this page covers both, then swaps the hard threshold for a sigmoid so that gradient descent can take over — a companion to the &lt;a
 href="https://abaj.ai/wiki/ml/supervised/classification/perceptron/"
 
 
>sign-loss perceptron&lt;/a> page, which treats the classical algorithm on its own.&lt;/p></description></item><item><title>Performance Metrics for Machine Learning</title><link>https://abaj.ai/wiki/ml/theory/perf-metrics/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/theory/perf-metrics/</guid><description>&lt;p>a model is only as good as the number you judge it by, and most of the classic modelling disasters are really metric disasters — a fraud detector with \(99.9\%\) accuracy that never flags anything, a medical test tuned to a roc curve nobody deployed at the published threshold.&lt;span class="margin-note" data-note="rule of thumb: before admiring any metric, compute what the trivial constant predictor scores on it">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page is the field guide: what each metric measures, what it silently assumes, and which one to reach for when the classes are lopsided, the probabilities matter, or the target is continuous.&lt;/p></description></item><item><title>Policy Gradients</title><link>https://abaj.ai/wiki/ml/reinforcement-learning/policy-gradients/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/reinforcement-learning/policy-gradients/</guid><description>&lt;p>value-based methods (&lt;a
 href="https://abaj.ai/wiki/ml/reinforcement-learning/q-learning/"
 
 
>q-learning&lt;/a> and family) learn &lt;em>how good actions are&lt;/em> and act by argmax. policy-gradient methods skip the middleman: parameterise the policy itself, \(\pi_\theta(a \mid s)\), and do gradient ascent on expected return.&lt;span class="margin-note" data-note="the argmax is also the problem: it is undefined over continuous actions and allergic to stochastic policies. differentiation handles both">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

the entire family — reinforce, actor-critic, trpo, ppo, and by extension rlhf — rests on one identity, the policy gradient theorem, whose derivation is three lines of calculus and one very good idea. the standard reference is sutton &amp;amp; barto, free at &lt;a
 href="http://incompleteideas.net/book/the-book-2nd.html"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>http://incompleteideas.net/book/the-book-2nd.html&lt;/a>.&lt;/p></description></item><item><title>Principal Component Analysis (PCA)</title><link>https://abaj.ai/wiki/ml/unsupervised/pca/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/unsupervised/pca/</guid><description>&lt;p>pca is the linear algebra exam question that escaped into industry. given a cloud of points in \(\mathbb{R}^d\), it finds the orthogonal directions along which the cloud spreads the most, and lets you throw away the rest.&lt;span class="margin-note" data-note="invented by pearson in 1901, reinvented by hotelling in 1933, reinvented weekly by graduate students ever since">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

two apparently different questions — &amp;ldquo;which directions carry the most variance?&amp;rdquo; and &amp;ldquo;which subspace loses the least when i project onto it?&amp;rdquo; — turn out to have the same answer, and that answer is an eigendecomposition.&lt;/p></description></item><item><title>Probabilistic Graphical Models</title><link>https://abaj.ai/wiki/ml/pgm/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/pgm/</guid><description>&lt;p>a probabilistic graphical model is a marriage of graph theory and probability: the graph records which variables talk to each other directly, and that structure alone dictates how compactly a joint distribution can be stored, which independencies it must satisfy, and how expensive it is to reason with. one set of ideas — factors, elimination, message passing, sampling — then serves diagnosis networks, spam filters, speech recognisers, image denoisers and gene-regulation maps alike.&lt;/p></description></item><item><title>Python</title><link>https://abaj.ai/wiki/ccs/programming/languages/python/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/languages/python/</guid><description>&lt;div class="collapse-marker" data-target-path="/wiki/ccs/programming/languages/python/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="data-types">Data Types&lt;a href="#data-types" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>category&lt;/th>
 &lt;th>types&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>text&lt;/td>
 &lt;td>&lt;code class="src src-python">str&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>numeric&lt;/td>
 &lt;td>&lt;code class="src src-python">int&lt;/code>, &lt;code class="src src-python">float&lt;/code>, &lt;code class="src src-python">complex&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>sequence&lt;/td>
 &lt;td>&lt;code class="src src-python">list&lt;/code>, &lt;code class="src src-python">tuple&lt;/code>, &lt;code class="src src-python">range&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>mapping&lt;/td>
 &lt;td>&lt;code class="src src-python">dict&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>set&lt;/td>
 &lt;td>&lt;code class="src src-python">set&lt;/code>, &lt;code class="src src-python">frozenset&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>boolean&lt;/td>
 &lt;td>&lt;code class="src src-python">bool&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>binary&lt;/td>
 &lt;td>&lt;code class="src src-python">bytes&lt;/code>, &lt;code class="src src-python">bytearray&lt;/code>, &lt;code class="src src-python">memoryview&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>none&lt;/td>
 &lt;td>&lt;code class="src src-python">NoneType&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="keywords">Keywords&lt;a href="#keywords" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>Python reserves 35 hard keywords (plus the soft keywords &lt;code class="src src-python">match&lt;/code> and &lt;code class="src src-python">case&lt;/code> for structural pattern matching since 3.10). Reserved keywords cannot be used as identifiers; soft keywords are only special in the relevant context.&lt;/p></description></item><item><title>Q-Learning</title><link>https://abaj.ai/wiki/ml/reinforcement-learning/q-learning/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/reinforcement-learning/q-learning/</guid><description>&lt;p>q-learning is the algorithm that made reinforcement learning feel inevitable: interact with an unknown world, nudge a table of numbers after every step, and the table converges to the value of &lt;em>optimal&lt;/em> behaviour — even while you behave suboptimally the entire time.&lt;span class="margin-note" data-note="watkins introduced it in his 1989 phd thesis; watkins and dayan supplied the convergence proof in 1992">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

everything runs on one line of arithmetic, and the rest of this page is the machinery needed to say precisely why that line works. the canonical reference for all of it is sutton &amp;amp; barto&amp;rsquo;s &lt;em>reinforcement learning: an introduction&lt;/em>, free at &lt;a
 href="http://incompleteideas.net/book/the-book-2nd.html"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>http://incompleteideas.net/book/the-book-2nd.html&lt;/a>.&lt;/p></description></item><item><title>Quadratic Programming</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/quadratic/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/quadratic/</guid><description>&lt;p>promote the objective of a &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/linear/"
 
 
>linear program&lt;/a> from a plane to a bowl and you get quadratic programming: minimise a quadratic function over a polyhedron. it is the smallest step beyond LP, yet it captures a startling share of applied mathematics — support vector machines, portfolio selection, ridge regression, model-predictive control — because &amp;ldquo;squared penalty subject to linear rules&amp;rdquo; is how half the world states its preferences.&lt;span class="margin-note" data-note="the other half states them as expected log-wealth and gets convex programming anyway">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Recurrent Neural Networks (RNNs)</title><link>https://abaj.ai/wiki/ml/dl/rnn/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/rnn/</guid><description>&lt;p>feedforward networks eat fixed-size vectors. sequences — text, audio, sensor streams — have no fixed size, and worse, their &lt;em>order&lt;/em> carries the meaning. the recurrent neural network solves both problems with one idea: maintain a hidden state that is updated by the same function at every time step.&lt;span class="margin-note" data-note="one function, applied forever: an rnn is a learned dynamical system, and every pathology of dynamical systems — fixed points, chaos, sensitive dependence — shows up in training">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

parameter count stops depending on sequence length, and the state becomes a lossy summary of everything seen so far (Goodfellow, Ian, 2016).&lt;/p></description></item><item><title>Regular Expressions</title><link>https://abaj.ai/wiki/ccs/linux/regex/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/linux/regex/</guid><description>&lt;blockquote>
&lt;p>You should not be permitted to write production code if you do not have an journeyman licence in regular expressions or floating point math.
&amp;mdash;Rob Pike&lt;/p>
&lt;/blockquote>
&lt;p>a regular expression is two things wearing one syntax: a seventy-year-old theorem about finite automata, and the single most-used text-processing tool on unix.&lt;span class="margin-note" data-note="kleene proved the theorem in 1951 in a paper about nerve nets, not text — the grep application came later">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

this page takes both seriously: the theory tells you exactly what the notation can and cannot express, and the theory&amp;rsquo;s failure modes (backtracking blowups, backreference NP-hardness, the html-parsing folklore) are precisely where practitioners get burned.&lt;/p></description></item><item><title>Regularised Regression</title><link>https://abaj.ai/wiki/ml/supervised/regression/regularised/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/supervised/regression/regularised/</guid><description>&lt;p>this page collects the closed-form solutions to regularised regression (where they exist) and the iterative approximations we fall back on (where they don&amp;rsquo;t).&lt;span class="margin-note" data-note="ridge has a closed form. lasso does not, except in one charmed special case.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

along the way we will see that regularisation is not an ad-hoc hack but a perfectly sensible artefact of estimation: it drops straight out of MAP (maximum a posteriori) inference once you put a prior on the coefficients.&lt;/p></description></item><item><title>Retrieval Augmented Generation</title><link>https://abaj.ai/wiki/ml/dl/natural-language-processing/rags/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/natural-language-processing/rags/</guid><description>&lt;p>retrieval-augmented generation bolts a search engine onto a language model: fetch relevant documents at query time and paste them into the prompt, so the model answers from evidence rather than from its frozen weights (lewis et al. 2020, &lt;a
 href="https://arxiv.org/abs/2005.11401"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>&lt;em>retrieval-augmented generation for knowledge-intensive nlp&lt;/em>&lt;/a>).&lt;span class="margin-note" data-note="the cheapest way to give an llm new knowledge without retraining it">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

it is the pragmatic alternative to baking every fact into an &lt;a
 href="https://abaj.ai/wiki/ml/dl/natural-language-processing/llms/"
 
 
>llm&lt;/a>&amp;rsquo;s weights.&lt;/p>
&lt;h2 id="why-retrieve-at-all">why retrieve at all&lt;a href="#why-retrieve-at-all" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>three problems that no amount of scaling fixes cleanly, and retrieval fixes cheaply:&lt;/p></description></item><item><title>Robust</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/robust/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/robust/</guid><description>&lt;p>every &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/linear/"
 
 
>linear program&lt;/a> you have ever written down was a lie: the coefficients came from measurements, forecasts and vendor spreadsheets, and the optimal vertex — sitting, by design, on the boundary of the feasible region — shatters the moment any of them wobbles.&lt;span class="margin-note" data-note="an optimal basic solution binds n constraints with zero slack; it is maximally exposed to data error by construction">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

robust optimisation is the pessimist&amp;rsquo;s response: declare a set \(\mathcal{U}\) of realisations you refuse to be hurt by, and demand feasibility for &lt;em>every&lt;/em> member of it. no distributions, no expectations, no scenarios — just a set and a worst case. the surprise, and the reason the field exists, is that this worst case can usually be folded back into a deterministic problem of the same (or nearly the same) complexity class.&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p></description></item><item><title>Single-Variable Calculus</title><link>https://abaj.ai/wiki/mathematics/calculus/svars/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/mathematics/calculus/svars/</guid><description>&lt;p>the calculus of one real variable, assembled in logical order: limits, then continuity and its two workhorse theorems (ivt, evt), then the derivative and the mean value theorem, taylor&amp;rsquo;s theorem with an honest error bound, and finally the riemann integral and both parts of the fundamental theorem. everything downstream — &lt;a
 href="https://abaj.ai/wiki/mathematics/calculus/mvars/"
 
 
>multivariable calculus&lt;/a>, &lt;a
 href="https://abaj.ai/wiki/mathematics/calculus/diff-eqns/"
 
 
>differential equations&lt;/a>, every convergence argument in machine learning — leans on the theorems here. proofs are given where they are short and instructive; the deferred foundations live in &lt;a
 href="https://abaj.ai/wiki/mathematics/analysis/real/"
 
 
>real analysis&lt;/a> (Courant, Richard, 1996).&lt;/p></description></item><item><title>Stable Diffusion Models</title><link>https://abaj.ai/wiki/ml/dl/stable-diffusion/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/stable-diffusion/</guid><description>&lt;p>diffusion models generate by learning to undo noise: destroy an image with a fixed gaussian corruption process, train a network to reverse one small step of the destruction, then chain the reversals from pure noise back to data (ho et al. 2020, &lt;a
 href="https://arxiv.org/abs/2006.11239"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>&lt;em>denoising diffusion probabilistic models&lt;/em>&lt;/a>).&lt;span class="margin-note" data-note="the generative modelling trick of the decade: replace an adversarial game with a supervised regression problem">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

&lt;strong>stable diffusion&lt;/strong> (rombach et al. 2022, &lt;a
 href="https://arxiv.org/abs/2112.10752"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>&lt;em>high-resolution image synthesis with latent diffusion models&lt;/em>&lt;/a>) runs this machinery not on pixels but in the latent space of an autoencoder, with a text-conditioned u-net doing the denoising. first the maths, then the architecture.&lt;/p></description></item><item><title>Stochastic</title><link>https://abaj.ai/wiki/ccs/programming/paradigms/stochastic/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ccs/programming/paradigms/stochastic/</guid><description>&lt;p>a &lt;a
 href="https://abaj.ai/wiki/ccs/programming/paradigms/linear/"
 
 
>linear program&lt;/a> assumes you know the data. stochastic programming admits that you do not — some coefficients are random — but insists you know their &lt;em>distribution&lt;/em>, and asks for the decision that is best &lt;strong>on average&lt;/strong>.&lt;span class="margin-note" data-note="dantzig again: his 1955 paper founded the field eight years after he invented simplex. beale published the same idea the same year">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

the structural insight that makes this a paradigm rather than a hack: split the decision in two. commit to \(x\) now, before the coin is flipped; after uncertainty resolves, take a corrective &lt;em>recourse&lt;/em> action \(y\) that adapts to whatever happened. the objective charges you for both, weighting the second stage by expectation.&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p></description></item><item><title>Sudoku</title><link>https://abaj.ai/wiki/ai/csp/sudoku/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ai/csp/sudoku/</guid><description>&lt;p>sudoku is the drosophila of constraint satisfaction: small enough to hold in your head, rich enough to demonstrate every solving paradigm that matters. this page works through four of them against my actual code — a backtracking solver with \(O(1)\) constraint sets (&lt;code>arcade/references/sudoku/solver.py&lt;/code>), a dart port that also &lt;em>generates&lt;/em> puzzles (arcade-mobile), an integer-programming formulation solved for real with scipy, and the exact-cover view that leads to knuth&amp;rsquo;s algorithm x. every timing below is a real run on this machine.&lt;/p></description></item><item><title>Support Vector Machines (SVMs)</title><link>https://abaj.ai/wiki/ml/supervised/classification/svm/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/supervised/classification/svm/</guid><description>&lt;p>a linearly separable dataset admits infinitely many separating hyperplanes, and the &lt;a
 href="https://abaj.ai/wiki/ml/supervised/classification/perceptron/"
 
 
>perceptron&lt;/a> will happily hand you whichever one it trips over first.&lt;span class="margin-note" data-note="the perceptron&amp;#39;s answer depends on initialisation and the order you feed it data. the svm&amp;#39;s answer is unique.">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

the support vector machine asks a better question: of all the hyperplanes that separate the data, which one is &lt;em>farthest from everybody&lt;/em>? the answer — the maximum-margin hyperplane — is determined by a handful of boundary points (the support vectors), drops out of a beautiful convex dual, and generalises via the kernel trick from lines to nearly anything.&lt;/p></description></item><item><title>The Babels</title><link>https://abaj.ai/blog/babel/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/blog/babel/</guid><description>&lt;p>This page is for the richness of Babel.&lt;/p>
&lt;p>There are at least four Babels worth keeping in one place: a real tower, a story about the tower, a library built out of the story, and a piece of software I use every day. They are all the same idea wearing different clothes — &lt;strong>the totality of language, and what it costs&lt;/strong>.&lt;/p>
&lt;h2 id="the-tower-that-actually-stood">the tower that actually stood&lt;a href="#the-tower-that-actually-stood" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>Babel was a real place before it was a metaphor. The name is &lt;strong>Bab-ilim&lt;/strong> — &amp;ldquo;gate of the god&amp;rdquo; — Babylon, on the Euphrates, and its tower was the &lt;strong>Etemenanki&lt;/strong>: &amp;ldquo;the temple of the foundation of heaven and earth,&amp;rdquo; a seven-tiered ziggurat of baked brick and bitumen sacred to Marduk, rising perhaps 90 metres over the city. It was old when history found it — damaged and rebuilt across centuries, most famously restored by Nebuchadnezzar II (r. 605–562 BCE), who recorded the work in glazed-brick boast: its top was to &amp;ldquo;rival the heavens.&amp;rdquo;&lt;/p></description></item><item><title>The Bias-Variance Decomposition</title><link>https://abaj.ai/wiki/ml/theory/bias-var/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/theory/bias-var/</guid><description>&lt;p>there is exactly one theorem in machine learning that every practitioner rederives on a whiteboard at least once a year, and this is it.&lt;span class="margin-note" data-note="the second candidate is bayes&amp;#39; rule, but that one belongs to the statisticians">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

the squared-error risk of any learned predictor splits into three non-negative pieces — irreducible noise, squared bias, and variance — and every design decision you make (model class, regularisation strength, \(k\), ensemble size, early stopping) is secretly a transaction between the last two.&lt;/p></description></item><item><title>The Roux Method</title><link>https://abaj.ai/wiki/cubing/roux/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/cubing/roux/</guid><description>&lt;p>this is a working sheet for solving a 3x3 cube with the Roux method: hold the cube, find the picture that matches it, do the moves. everything here is drawn from &lt;a
 href="http://grrroux.free.fr/method/Intro.html"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>Gilles Roux&amp;rsquo;s own description of his method&lt;/a>, with his sequences machine-checked and every case drawn. where a sentence is his it is quoted; the rest is paraphrase.&lt;/p>
&lt;p>the sheet assumes nothing beyond &amp;ldquo;I can turn the faces&amp;rdquo;. every symbol used is defined in the next section, and every word of cubing jargon is defined where it first appears and again in the glossary at the end.&lt;/p></description></item><item><title>The Story of Socrates</title><link>https://abaj.ai/blog/socrates/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/blog/socrates/</guid><description>&lt;figure>&lt;img src="https://abaj.ai/ox-hugo/socrates-bust.jpg"
 alt="Socrates, Roman marble after a Greek bronze by Lysippos — the Louvre. He was, by every account including his own, remarkably ugly: snub nose, bulging eyes, the face of a satyr. Athens never forgave him for showing them that beauty was elsewhere." width="420px">&lt;figcaption>
 &lt;p>&lt;em>Socrates&lt;/em>, Roman marble after a Greek bronze by Lysippos — the Louvre. He was, by every account including his own, remarkably ugly: snub nose, bulging eyes, the face of a satyr. Athens never forgave him for showing them that beauty was elsewhere.&lt;/p></description></item><item><title>Tokenisers</title><link>https://abaj.ai/wiki/ml/dl/natural-language-processing/tokenisers/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/natural-language-processing/tokenisers/</guid><description>&lt;p>before a transformer sees a single number, text must be cut into pieces and each piece mapped to an integer. the tokeniser is that cut — the least glamorous and most consequential preprocessing step in the whole pipeline, since it fixes the vocabulary, the sequence length, and what the model &lt;em>can&lt;/em> represent at all.&lt;span class="margin-note" data-note="most &amp;#39;the model can&amp;#39;t spell / can&amp;#39;t do arithmetic&amp;#39; failures trace back to the tokeniser, not the weights">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Transformers</title><link>https://abaj.ai/wiki/ml/dl/transformers/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/transformers/</guid><description>&lt;p>the transformer (Vaswani, Ashish and Shazeer, Noam and Parmar, Niki and Uszkoreit, Jakob and Jones, Llion and Gomez, Aidan N. and Kaiser, Lukasz and Polosukhin, Illia, 2017) deleted recurrence from sequence modelling and replaced it with a single primitive — attention — applied in parallel over the whole sequence.&lt;span class="margin-note" data-note="the paper title *attention is all you need* was a claim; a decade of scaling made it a fact">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

every token gets to look at every other token in one matrix multiply, the maximum path length between any two positions drops from \(O(n)\) to \(O(1)\), and training parallelises across the sequence dimension. this page derives the machinery; a from-scratch decoder-only build lives at &lt;a
 href="https://abaj.ai/wiki/ml/dl/transformers/nanogpt/"
 
 
>nanogpt&lt;/a>.&lt;/p></description></item><item><title>Ultimate Tic Tac Toe</title><link>https://abaj.ai/wiki/ai/adv-search/ultimate-ttt/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ai/adv-search/ultimate-ttt/</guid><description>&lt;p>ordinary tic-tac-toe is a solved bore — both players draw with a lookup table. glue nine boards together and add one rule about &lt;em>where&lt;/em> you are allowed to move, and suddenly the game tree is deep enough that you need actual search theory: minimax, the negamax reformulation, alpha-beta pruning, and a heuristic to stand in for the leaves you cannot reach. this page documents the agent my partner and i wrote for unsw comp3411 (assignment 3, &amp;ldquo;nine-board tic-tac-toe&amp;rdquo;), warts and all — and the warts are instructive.&lt;span class="margin-note" data-note="code: agent.py in the cs3411-9ttt repo, plus alan blair&amp;#39;s referee scaffolding servt.c / game.c and starter agents in c and java">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>Visual Transformers (ViT)</title><link>https://abaj.ai/wiki/ml/dl/computer-vision/visual-transformers/</link><pubDate>Sat, 31 Oct 2026 18:53:32 +1100</pubDate><guid>https://abaj.ai/wiki/ml/dl/computer-vision/visual-transformers/</guid><description>&lt;p>the vision transformer asks a blunt question: if attention replaced recurrence for text, can it replace convolution for images? the answer (dosovitskiy et al. 2020, &lt;a
 href="https://arxiv.org/abs/2010.11929"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>&lt;em>an image is worth 16x16 words&lt;/em>&lt;/a>) is yes — chop the image into patches, treat each patch as a token, and feed the sequence to a standard &lt;a
 href="https://abaj.ai/wiki/ml/dl/transformers/"
 
 
>transformer&lt;/a> encoder with almost no vision-specific machinery.&lt;span class="margin-note" data-note="the title is literal: a 16x16 pixel patch is one &amp;#39;word&amp;#39; in the image&amp;#39;s sentence">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>
&lt;/p></description></item><item><title>On the Statistics of Smoking</title><link>https://abaj.ai/blog/on-the-statistics-of-smoking/</link><pubDate>Sat, 31 Oct 2026 16:40:00 +1100</pubDate><guid>https://abaj.ai/blog/on-the-statistics-of-smoking/</guid><description>&lt;p>Everyone knows smoking is bad for you. This post is about a narrower question: what does it look like when you try to &lt;em>show&lt;/em> that from data, with the tools a statistics student is actually taught? I take three small, classic datasets that ship with R, fit the models that are appropriate to each, and spend most of the time on the inference rather than the fitting: the Wald test and its cousins, where the asymptotics quietly fail, what a Bayesian reading adds, and what a multivariate test buys you when you have several outcomes at once.&lt;span class="margin-note" data-note="this page was written by an agent (Claude Fable 5.1) working from my brief, and the R was executed once in a fresh session; the numbers are what came out">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

The code is shown in full and the output is baked into the page. If you want to re-run it, every block is self-contained from the top of the page down, with the seed set.&lt;/p></description></item><item><title>Solutions to Cormen, Leiserson, Rivest &amp; Stein's Introduction to Algorithms</title><link>https://abaj.ai/words/library/books/clrs-solutions/</link><pubDate>Thu, 22 Oct 2026 12:00:00 +1100</pubDate><guid>https://abaj.ai/words/library/books/clrs-solutions/</guid><description>&lt;p>Solutions to every exercise and end-of-chapter problem in Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein&amp;rsquo;s &lt;em>Introduction to Algorithms&lt;/em>, third edition (MIT Press, 2009): 956 section exercises and 158 problems, appendices included. Every algorithm comes with a correctness proof and a running-time bound, and every algorithm and numeric claim was checked by running it against brute force. The book itself: &lt;a
 href="https://abaj.ai/words/library/books/clrs/"
 
 
>Introduction to Algorithms&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-0720fa28">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-0720fa28">
 &lt;div class="pdf-loading" id="pdf-loading-0720fa28">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/clrs-solutions.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-0720fa28">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-0720fa28">
 &lt;button id="pdf-prev-0720fa28">Previous&lt;/button>
 &lt;button id="pdf-next-0720fa28">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-0720fa28">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-0720fa28">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-0720fa28" href="https://abaj.ai/words/library/books/clrs-solutions.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/clrs-solutions.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-0720fa28'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-0720fa28"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-0720fa28');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-0720fa28').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-0720fa28').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-0720fa28').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-0720fa28').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/clrs-solutions/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="chapter-1-the-role-of-algorithms-in-computing">Chapter 1: The Role of Algorithms in Computing&lt;a href="#chapter-1-the-role-of-algorithms-in-computing" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="1-dot-1-algorithms">1.1 Algorithms&lt;a href="#1-dot-1-algorithms" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.1-1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.1-1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Describe a real-world situation that needs sorting, or one that needs the computation of a convex hull.&lt;/p></description></item><item><title>Solutions to Blum, Hopcroft &amp; Kannan's Foundations of Data Science</title><link>https://abaj.ai/words/library/books/foundations-of-data-science-solutions/</link><pubDate>Wed, 21 Oct 2026 12:00:00 +1100</pubDate><guid>https://abaj.ai/words/library/books/foundations-of-data-science-solutions/</guid><description>&lt;p>Solutions to every end-of-chapter exercise in &lt;em>Foundations of Data Science&lt;/em> by Avrim Blum, John Hopcroft and Ravindran Kannan (Cambridge University Press, 2020; freely available draft of 4 January 2018). Computational exercises were run for real in Python; the reported numbers and figures come from those runs. The book itself: &lt;a
 href="https://abaj.ai/words/library/books/foundations-of-data-science/"
 
 
>Foundations of Data Science&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-07a68531">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-07a68531">
 &lt;div class="pdf-loading" id="pdf-loading-07a68531">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/foundations-of-data-science-solutions.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-07a68531">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-07a68531">
 &lt;button id="pdf-prev-07a68531">Previous&lt;/button>
 &lt;button id="pdf-next-07a68531">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-07a68531">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-07a68531">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-07a68531" href="https://abaj.ai/words/library/books/foundations-of-data-science-solutions.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/foundations-of-data-science-solutions.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-07a68531'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-07a68531"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-07a68531');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-07a68531').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-07a68531').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-07a68531').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-07a68531').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/foundations-of-data-science-solutions/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="high-dimensional-space">High-Dimensional Space&lt;a href="#high-dimensional-space" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-2-dot-1-2-dot-7">Exercises 2.1–2.7&lt;a href="#exercises-2-dot-1-2-dot-7" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="2.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(2.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>(1) Let \(x\) and \(y\) be independent random variables with uniform distribution in \([0,1]\). What is the expected value \(E(x)\), \(E(x^2)\), \(E(x-y)\), \(E(xy)\), and \(E(x-y)^2\)?&lt;/p></description></item><item><title>Solutions to Kleinberg &amp; Tardos's Algorithm Design</title><link>https://abaj.ai/words/library/books/algorithm-design-solutions/</link><pubDate>Wed, 21 Oct 2026 12:00:00 +1100</pubDate><guid>https://abaj.ai/words/library/books/algorithm-design-solutions/</guid><description>&lt;p>Solutions to every end-of-chapter exercise in Jon Kleinberg and Éva Tardos&amp;rsquo;s &lt;em>Algorithm Design&lt;/em>, published by Addison-Wesley in 2005. Each design exercise gets an algorithm, a proof that it is correct, and a running-time bound; the chapters&amp;rsquo; Solved Exercises are worked in the book itself and are not repeated here. The book itself: &lt;a
 href="https://abaj.ai/words/library/books/algorithm-design/"
 
 
>Algorithm Design&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-e3c41396">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-e3c41396">
 &lt;div class="pdf-loading" id="pdf-loading-e3c41396">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/algorithm-design-solutions.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-e3c41396">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-e3c41396">
 &lt;button id="pdf-prev-e3c41396">Previous&lt;/button>
 &lt;button id="pdf-next-e3c41396">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-e3c41396">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-e3c41396">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-e3c41396" href="https://abaj.ai/words/library/books/algorithm-design-solutions.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/algorithm-design-solutions.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-e3c41396'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-e3c41396"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-e3c41396');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-e3c41396').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-e3c41396').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-e3c41396').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-e3c41396').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/algorithm-design-solutions/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="introduction-some-representative-problems">Introduction: Some Representative Problems&lt;a href="#introduction-some-representative-problems" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-1-dot-1-1-dot-7">Exercises 1.1–1.7&lt;a href="#exercises-1-dot-1-1-dot-7" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Decide whether you think the following statement is true or false. If it is true, give a short explanation. If it is false, give a counterexample.&lt;/p></description></item><item><title>Solutions to Lafaye de Micheaux, Drouilhet &amp; Liquet's The R Software</title><link>https://abaj.ai/words/library/books/the-r-software-solutions/</link><pubDate>Thu, 24 Sep 2026 12:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/the-r-software-solutions/</guid><description>&lt;p>Solutions to every exercise and every worksheet practical in &lt;em>The R Software: Fundamentals of Programming and Statistical Analysis&lt;/em> by Pierre Lafaye de Micheaux, Rémy Drouilhet and Benoît Liquet (Springer, Statistics and Computing 40, 2013) — 164 end-of-chapter exercises and 57 worksheet practicals (353 numbered questions) across chapters 3 to 15, worked in R with the book&amp;rsquo;s own data sets, with executed code and committed output throughout. Chapter and exercise numbers follow the published Springer edition; worksheet practicals are labelled &lt;code>&amp;lt;chapter&amp;gt;.W&lt;/code>, &lt;code>&amp;lt;chapter&amp;gt;.W.&amp;lt;practical letter&amp;gt;&lt;/code> or &lt;code>&amp;lt;chapter&amp;gt;.W.&amp;lt;letter&amp;gt;.&amp;lt;study&amp;gt;&lt;/code> (for example &lt;code>15.W.B.2&lt;/code> is chapter 15, worksheet practical B, second study) so they never collide with exercise numbers. The book is filed at &lt;a
 href="https://abaj.ai/words/library/books/the-r-software/"
 
 
>The R Software: Fundamentals of Programming and Statistical Analysis&lt;/a>.&lt;/p></description></item><item><title>Solutions to Casella &amp; Berger's Statistical Inference</title><link>https://abaj.ai/words/library/books/casella-berger/</link><pubDate>Mon, 21 Sep 2026 11:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/casella-berger/</guid><description>&lt;p>Solutions to every exercise in Casella &amp;amp; Berger&amp;rsquo;s &lt;em>Statistical Inference&lt;/em> (2nd edition, Duxbury, 2002) — 624 exercises across chapters 1–12, from the axioms of probability to ANOVA and regression. The book is filed at &lt;a
 href="https://abaj.ai/words/library/books/statistical_inference_casella_berger/"
 
 
>Statistical Inference&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-0bbc484a">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-0bbc484a">
 &lt;div class="pdf-loading" id="pdf-loading-0bbc484a">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/casella-berger.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-0bbc484a">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-0bbc484a">
 &lt;button id="pdf-prev-0bbc484a">Previous&lt;/button>
 &lt;button id="pdf-next-0bbc484a">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-0bbc484a">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-0bbc484a">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-0bbc484a" href="https://abaj.ai/words/library/books/casella-berger.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/casella-berger.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-0bbc484a'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-0bbc484a"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-0bbc484a');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-0bbc484a').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-0bbc484a').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-0bbc484a').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-0bbc484a').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/casella-berger/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="probability-theory">Probability Theory&lt;a href="#probability-theory" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-1-dot-1-1-dot-7">Exercises 1.1–1.7&lt;a href="#exercises-1-dot-1-1-dot-7" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>For each of the following experiments, describe the sample space.&lt;/p></description></item><item><title>Solutions to Gelman et al.'s Bayesian Data Analysis</title><link>https://abaj.ai/words/library/books/bda3/</link><pubDate>Mon, 21 Sep 2026 10:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/bda3/</guid><description>&lt;p>Solutions to every exercise in &lt;em>Bayesian Data Analysis&lt;/em> (3rd edition, CRC Press, 2013) by Gelman, Carlin, Stern, Dunson, Vehtari and Rubin — 215 exercises across chapters 1–23. The book is filed at &lt;a
 href="https://abaj.ai/words/library/books/bayesian_data_analysis_gelman/"
 
 
>Bayesian Data Analysis&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-2a5a3062">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-2a5a3062">
 &lt;div class="pdf-loading" id="pdf-loading-2a5a3062">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/bda3.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-2a5a3062">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-2a5a3062">
 &lt;button id="pdf-prev-2a5a3062">Previous&lt;/button>
 &lt;button id="pdf-next-2a5a3062">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-2a5a3062">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-2a5a3062">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-2a5a3062" href="https://abaj.ai/words/library/books/bda3.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/bda3.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-2a5a3062'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-2a5a3062"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-2a5a3062');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-2a5a3062').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-2a5a3062').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-2a5a3062').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-2a5a3062').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/bda3/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="probability-and-inference">Probability and Inference&lt;a href="#probability-and-inference" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-1-dot-1-1-dot-7">Exercises 1.1–1.7&lt;a href="#exercises-1-dot-1-1-dot-7" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Conditional probability: suppose that if \(\omega = 1\), then \(y\) has a normal distribution with mean 1 and standard deviation \(\sigma\), and if \(\omega = 2\), then \(y\) has a normal distribution with mean 2 and standard deviation \(\sigma\). Also, suppose \(\Pr(\omega = 1) = 0.5\) and \(\Pr(\omega = 2) = 0.5\).&lt;/p></description></item><item><title>Solutions to Abbott's Understanding Analysis</title><link>https://abaj.ai/words/library/books/abbott-analysis/</link><pubDate>Mon, 21 Sep 2026 09:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/abbott-analysis/</guid><description>&lt;p>Solutions to every exercise in Stephen Abbott&amp;rsquo;s &lt;em>Understanding Analysis&lt;/em> (2nd edition, Springer UTM, 2015) — 467 exercises across chapters 1–8, from the construction of the real numbers to Fourier series. The book is filed at &lt;a
 href="https://abaj.ai/words/library/books/understanding-analysis/"
 
 
>Understanding Analysis&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-6c246a02">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-6c246a02">
 &lt;div class="pdf-loading" id="pdf-loading-6c246a02">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/abbott-analysis.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-6c246a02">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-6c246a02">
 &lt;button id="pdf-prev-6c246a02">Previous&lt;/button>
 &lt;button id="pdf-next-6c246a02">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-6c246a02">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-6c246a02">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-6c246a02" href="https://abaj.ai/words/library/books/abbott-analysis.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/abbott-analysis.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-6c246a02'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-6c246a02"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-6c246a02');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-6c246a02').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-6c246a02').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-6c246a02').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-6c246a02').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/abbott-analysis/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="the-real-numbers">The Real Numbers&lt;a href="#the-real-numbers" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-1-dot-2-dot-1-1-dot-2-dot-7">Exercises 1.2.1–1.2.7&lt;a href="#exercises-1-dot-2-dot-1-1-dot-2-dot-7" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.2.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.2.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>(a) Prove that \(\sqrt{3}\) is irrational. Does a similar argument work to show \(\sqrt{6}\) is irrational?&lt;/p></description></item><item><title>Solutions to Rosenthal's A First Look at Rigorous Probability Theory</title><link>https://abaj.ai/words/library/books/rosenthal-probability/</link><pubDate>Sat, 12 Sep 2026 09:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/rosenthal-probability/</guid><description>&lt;p>Solutions to every exercise in Jeffrey S. Rosenthal&amp;rsquo;s &lt;em>A First Look at Rigorous Probability Theory&lt;/em> (2nd edition, World Scientific, 2006) — 203 exercises across chapters 1–14, from probability triples and the extension theorem through martingales. The book is filed at &lt;a
 href="https://abaj.ai/words/library/books/a_first_look_at_rigorous_probability_theory/"
 
 
>A First Look at Rigorous Probability Theory&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-483daa72">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-483daa72">
 &lt;div class="pdf-loading" id="pdf-loading-483daa72">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/rosenthal-probability.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-483daa72">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-483daa72">
 &lt;button id="pdf-prev-483daa72">Previous&lt;/button>
 &lt;button id="pdf-next-483daa72">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-483daa72">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-483daa72">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-483daa72" href="https://abaj.ai/words/library/books/rosenthal-probability.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/rosenthal-probability.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-483daa72'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-483daa72"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-483daa72');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-483daa72').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-483daa72').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-483daa72').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-483daa72').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/rosenthal-probability/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="the-need-for-measure-theory">The Need for Measure Theory&lt;a href="#the-need-for-measure-theory" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-1-dot-3-dot-1-1-dot-3-dot-5">Exercises 1.3.1–1.3.5&lt;a href="#exercises-1-dot-3-dot-1-1-dot-3-dot-5" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.3.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.3.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Suppose that \(\Omega = \{1,2\}\), with \(\mathbf{P}(\emptyset) = 0\) and \(\mathbf{P}\{1,2\} = 1\). Suppose \(\mathbf{P}\{1\} = \tfrac{1}{4}\). Prove that \(\mathbf{P}\) is countably additive if and only if \(\mathbf{P}\{2\} = \tfrac{3}{4}\).&lt;/p></description></item><item><title>Solutions to Darwiche's Modeling and Reasoning with Bayesian Networks</title><link>https://abaj.ai/words/library/books/modeling-and-reasoning-with-bayesian-networks/</link><pubDate>Mon, 07 Sep 2026 09:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/modeling-and-reasoning-with-bayesian-networks/</guid><description>&lt;p>Solutions to every exercise in Adnan Darwiche&amp;rsquo;s &lt;em>Modeling and Reasoning with Bayesian Networks&lt;/em> (Cambridge, 2009) — 342 exercises across chapters 2–18, from propositional logic and probability calculus through exact and approximate inference to parameter and structure learning. The book is the COMP9418 reference text and is filed at &lt;a
 href="https://abaj.ai/words/library/books/modeling_and_reasoning_with_bayesian_networks/"
 
 
>Modeling and Reasoning with Bayesian Networks&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-2adc777c">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-2adc777c">
 &lt;div class="pdf-loading" id="pdf-loading-2adc777c">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/modeling-and-reasoning-with-bayesian-networks.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-2adc777c">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-2adc777c">
 &lt;button id="pdf-prev-2adc777c">Previous&lt;/button>
 &lt;button id="pdf-next-2adc777c">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-2adc777c">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-2adc777c">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-2adc777c" href="https://abaj.ai/words/library/books/modeling-and-reasoning-with-bayesian-networks.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/modeling-and-reasoning-with-bayesian-networks.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-2adc777c'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-2adc777c"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-2adc777c');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-2adc777c').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-2adc777c').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-2adc777c').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-2adc777c').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/modeling-and-reasoning-with-bayesian-networks/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="propositional-logic">Propositional Logic&lt;a href="#propositional-logic" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-2-dot-1-2-dot-7">Exercises 2.1–2.7&lt;a href="#exercises-2-dot-1-2-dot-7" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="2.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(2.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Show that the following sentences are consistent by identifying a world that satisfies each sentence:&lt;/p></description></item><item><title>Solutions to Royden &amp; Fitzpatrick's Real Analysis</title><link>https://abaj.ai/words/library/books/royden-fitzpatrick-solutions/</link><pubDate>Tue, 01 Sep 2026 01:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/royden-fitzpatrick-solutions/</guid><description>&lt;p>Solutions to every problem in Royden &amp;amp; Fitzpatrick&amp;rsquo;s &lt;em>Real Analysis&lt;/em> (fourth edition, 2010) — 1062 problems across the book&amp;rsquo;s 22 chapters: Lebesgue measure and integration for functions of a single real variable, differentiation and integration, the \(L^p\) spaces, metric and topological spaces, Banach and Hilbert spaces, and measure and integration in full generality. The book is filed at &lt;a
 href="https://abaj.ai/words/library/books/royden_fitzpatrick/"
 
 
>Real Analysis (Royden &amp;amp; Fitzpatrick)&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-6c348142">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-6c348142">
 &lt;div class="pdf-loading" id="pdf-loading-6c348142">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/royden-fitzpatrick-solutions.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-6c348142">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-6c348142">
 &lt;button id="pdf-prev-6c348142">Previous&lt;/button>
 &lt;button id="pdf-next-6c348142">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-6c348142">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-6c348142">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-6c348142" href="https://abaj.ai/words/library/books/royden-fitzpatrick-solutions.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/royden-fitzpatrick-solutions.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-6c348142'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-6c348142"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-6c348142');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-6c348142').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-6c348142').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-6c348142').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-6c348142').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/royden-fitzpatrick-solutions/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="the-real-numbers-sets-sequences-and-functions">The Real Numbers: Sets, Sequences, and Functions&lt;a href="#the-real-numbers-sets-sequences-and-functions" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="problems-1-dot-1-1-dot-7">Problems 1.1–1.7&lt;a href="#problems-1-dot-1-1-dot-7" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>For \(a \neq 0\) and \(b \neq 0\), show that \((ab)^{-1} = a^{-1} b^{-1}\).&lt;/p></description></item><item><title>COMP9418 — Advanced Topics in Statistical Machine Learning at UNSW</title><link>https://abaj.ai/blog/pgrad-unsw/comp9418/</link><pubDate>Mon, 31 Aug 2026 08:00:00 +1000</pubDate><guid>https://abaj.ai/blog/pgrad-unsw/comp9418/</guid><description>&lt;p>I took COMP9418 in 2026 T2 as part of my &lt;a
 href="https://abaj.ai/blog/pgrad-unsw/"
 
 
>Masters of Statistics&lt;/a>. Despite the
broad name, the course is really one long story about &lt;em>probabilistic graphical
models&lt;/em>: how to encode a joint distribution as a graph, how to answer queries
against it exactly and approximately, and how to learn it from data. If you
are deciding whether to enrol, or you are mid-term and drowning, this page
collects everything I wish I had on day one.&lt;/p></description></item><item><title>MATH5806 — Applied Regression Analysis at UNSW</title><link>https://abaj.ai/blog/pgrad-unsw/math5806/</link><pubDate>Mon, 31 Aug 2026 08:00:00 +1000</pubDate><guid>https://abaj.ai/blog/pgrad-unsw/math5806/</guid><description>&lt;p>I took MATH5806 in 2026 T2 as part of my &lt;a
 href="https://abaj.ai/blog/pgrad-unsw/"
 
 
>Masters of Statistics&lt;/a>. The name
undersells it: &amp;ldquo;applied regression analysis&amp;rdquo; here means &lt;em>generalised linear
models&lt;/em>, done properly &amp;mdash; exponential families, link functions, iteratively
reweighted least squares, deviance &amp;mdash; with ordinary linear regression as the
special case rather than the destination, and splines, Poisson and binomial
regression along the way. Everything runs in R. This page is the admin,
the textbook, and my notes, in one place.&lt;/p></description></item><item><title>Solutions to Tao's An Introduction to Measure Theory</title><link>https://abaj.ai/words/library/books/tao-measure/</link><pubDate>Mon, 31 Aug 2026 01:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/tao-measure/</guid><description>&lt;p>Solutions to every exercise in Terence Tao&amp;rsquo;s &lt;em>An Introduction to Measure Theory&lt;/em> (AMS GSM 126, 2011) — 237 exercises, woven inline through the text as Tao builds the theory through them. The book is the MATH5825 companion text and is filed at &lt;a
 href="https://abaj.ai/words/library/books/tao_measure_theory/"
 
 
>An Introduction to Measure Theory (Tao)&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-ff64e398">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-ff64e398">
 &lt;div class="pdf-loading" id="pdf-loading-ff64e398">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/tao-measure.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-ff64e398">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-ff64e398">
 &lt;button id="pdf-prev-ff64e398">Previous&lt;/button>
 &lt;button id="pdf-next-ff64e398">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-ff64e398">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-ff64e398">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-ff64e398" href="https://abaj.ai/words/library/books/tao-measure.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/tao-measure.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-ff64e398'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-ff64e398"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-ff64e398');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-ff64e398').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-ff64e398').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-ff64e398').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-ff64e398').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/tao-measure/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="notation">Notation&lt;a href="#notation" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="0-dot-0-notation">§0.0 — Notation&lt;a href="#0-dot-0-notation" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="0.0.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(0.0.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>If \((x_\alpha)_{\alpha \in A}\) is a collection of numbers \(x_\alpha \in [0,+\infty]\) such that \(\sum_{\alpha \in A} x_\alpha &amp;lt; \infty\), show that \(x_\alpha = 0\) for all but at most countably many \(\alpha \in A\), even if \(A\) itself is uncountable.&lt;/p></description></item><item><title>Solutions to Chiang's Networked Life</title><link>https://abaj.ai/words/library/books/networked-life/</link><pubDate>Sat, 29 Aug 2026 13:30:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/networked-life/</guid><description>&lt;p>Solutions to all 100 homework problems (five per chapter, difficulty-starred, some deliberately open-ended) in Mung Chiang&amp;rsquo;s &lt;em>Networked Life: 20 Questions and Answers&lt;/em> (Cambridge, 2012). Computational answers are worked as &lt;code>jupyter-python&lt;/code> blocks with their committed results — numpy/scipy/networkx experiments you can re-run. Open-ended problems get a substantiated position argued from the chapter&amp;rsquo;s models rather than a hedge.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-4bae73c8">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-4bae73c8">
 &lt;div class="pdf-loading" id="pdf-loading-4bae73c8">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/networked-life.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-4bae73c8">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-4bae73c8">
 &lt;button id="pdf-prev-4bae73c8">Previous&lt;/button>
 &lt;button id="pdf-next-4bae73c8">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-4bae73c8">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-4bae73c8">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-4bae73c8" href="https://abaj.ai/words/library/books/networked-life.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/networked-life.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-4bae73c8'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-4bae73c8"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-4bae73c8');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-4bae73c8').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-4bae73c8').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-4bae73c8').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-4bae73c8').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/networked-life/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="what-makes-cdma-work-for-my-smartphone">What makes CDMA work for my smartphone?&lt;a href="#what-makes-cdma-work-for-my-smartphone" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="problem-1-dot-1-distributed-power-control">Problem 1.1 — Distributed power control&lt;a href="#problem-1-dot-1-distributed-power-control" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Distributed power control.&lt;/p></description></item><item><title>Solutions to Axler's Linear Algebra Done Right</title><link>https://abaj.ai/words/library/books/ladr/</link><pubDate>Sat, 29 Aug 2026 13:00:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/ladr/</guid><description>&lt;p>Solutions to every exercise in the fourth edition of Sheldon Axler&amp;rsquo;s &lt;em>Linear Algebra Done Right&lt;/em> (Springer UTM, 2024) — 732 exercises across sections 1A–9D. The book is open access at &lt;a
 href="https://linear.axler.net"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>linear.axler.net&lt;/a> and is filed at &lt;a
 href="https://abaj.ai/words/library/books/linear_algebra_done_right_axler/"
 
 
>Linear Algebra Done Right (Axler)&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-8dbfc09a">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-8dbfc09a">
 &lt;div class="pdf-loading" id="pdf-loading-8dbfc09a">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/ladr.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-8dbfc09a">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-8dbfc09a">
 &lt;button id="pdf-prev-8dbfc09a">Previous&lt;/button>
 &lt;button id="pdf-next-8dbfc09a">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-8dbfc09a">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-8dbfc09a">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-8dbfc09a" href="https://abaj.ai/words/library/books/ladr.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/ladr.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-8dbfc09a'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-8dbfc09a"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-8dbfc09a');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-8dbfc09a').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-8dbfc09a').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-8dbfc09a').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-8dbfc09a').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/ladr/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="vector-spaces">Vector Spaces&lt;a href="#vector-spaces" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-1a">Exercises 1A&lt;a href="#exercises-1a" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1a.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1A.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Show that \(\alpha + \beta = \beta + \alpha\) for all \(\alpha, \beta \in \mathbf{C}\).&lt;/p></description></item><item><title>Solutions to Axler's Measure, Integration &amp; Real Analysis</title><link>https://abaj.ai/words/library/books/axler-measure/</link><pubDate>Sat, 29 Aug 2026 12:30:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/axler-measure/</guid><description>&lt;p>Solutions to every exercise in Sheldon Axler&amp;rsquo;s &lt;em>Measure, Integration &amp;amp; Real Analysis&lt;/em> (Springer GTM 282, 2020) — 587 exercises across sections 1A–12. The book is open access at &lt;a
 href="https://measure.axler.net"
 
 
 class="link--external" target="_blank" rel="noreferrer"
 
>measure.axler.net&lt;/a> and is filed at &lt;a
 href="https://abaj.ai/words/library/books/measure_integration_real_analysis_axler/"
 
 
>Measure, Integration &amp;amp; Real Analysis (Axler)&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-2dd7d23b">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-2dd7d23b">
 &lt;div class="pdf-loading" id="pdf-loading-2dd7d23b">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/axler-measure.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-2dd7d23b">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-2dd7d23b">
 &lt;button id="pdf-prev-2dd7d23b">Previous&lt;/button>
 &lt;button id="pdf-next-2dd7d23b">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-2dd7d23b">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-2dd7d23b">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-2dd7d23b" href="https://abaj.ai/words/library/books/axler-measure.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/axler-measure.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-2dd7d23b'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-2dd7d23b"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-2dd7d23b');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-2dd7d23b').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-2dd7d23b').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-2dd7d23b').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-2dd7d23b').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/axler-measure/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="riemann-integration">Riemann Integration&lt;a href="#riemann-integration" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-1a">Exercises 1A&lt;a href="#exercises-1a" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1a.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1A.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Suppose \(f : [a, b] \to \mathbb{R}\) is a bounded function such that&lt;/p></description></item><item><title>Solutions to Bogachev's Measure Theory, Volume 1</title><link>https://abaj.ai/words/library/books/bogachev-measure-theory/</link><pubDate>Sun, 23 Aug 2026 20:10:00 +1000</pubDate><guid>https://abaj.ai/words/library/books/bogachev-measure-theory/</guid><description>&lt;p>Solutions to the exercises of V.I. Bogachev&amp;rsquo;s &lt;em>Measure Theory&lt;/em>, Volume 1 (Springer, 2007) — exercises 1.12.47–160, 2.12.25–117, 3.10.29–125, 4.7.42–154, and 5.8.37–142. Exercises marked \(\circ\) in the book are the basic ones. The book itself is filed at &lt;a
 href="https://abaj.ai/words/library/books/measure_theory_bogachev/"
 
 
>Measure Theory (Bogachev)&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-854279d3">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-854279d3">
 &lt;div class="pdf-loading" id="pdf-loading-854279d3">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/bogachev-measure-theory.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-854279d3">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-854279d3">
 &lt;button id="pdf-prev-854279d3">Previous&lt;/button>
 &lt;button id="pdf-next-854279d3">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-854279d3">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-854279d3">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-854279d3" href="https://abaj.ai/words/library/books/bogachev-measure-theory.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/bogachev-measure-theory.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-854279d3'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-854279d3"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-854279d3');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-854279d3').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-854279d3').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-854279d3').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-854279d3').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/bogachev-measure-theory/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="constructions-and-extensions-of-measures">Constructions and Extensions of Measures&lt;a href="#constructions-and-extensions-of-measures" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="exercises-1-dot-12-dot-47-1-dot-12-dot-53">Exercises 1.12.47–1.12.53&lt;a href="#exercises-1-dot-12-dot-47-1-dot-12-dot-53" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.12.47">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.12.47)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>(\(\circ\)) Suppose we are given a family of open sets in \(\mathbb{R}^n\). Show that this family contains an at most countable subfamily with the same union.&lt;/p></description></item><item><title>The Mechanics of a Flying Disc</title><link>https://abaj.ai/wiki/frisbee/mechanics-of-a-flying-disc/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate><guid>https://abaj.ai/wiki/frisbee/mechanics-of-a-flying-disc/</guid><description>&lt;p>An Ultimate disc is a wing you can catch.&lt;span class="margin-note" data-note="the Discraft Ultrastar was certified in 1981 and has been the de facto standard of ultimate ever since">
 &lt;span class="margin-note-indicator">𐃏&lt;/span>
&lt;/span>

It has no tail, no fuselage, and no static stability whatsoever &amp;mdash; by the standards of a fixed-wing aircraft it should tumble within the first few metres. Instead it flies a hundred, because it carries its stabiliser as angular momentum. This treatise works through the mechanics in four movements: the disc as a rigid body, the aerodynamic forces on it, the gyroscopic dance that shapes every throw, and the resulting flight envelope. The canonical sources are Hummel&amp;rsquo;s flight simulations (Hummel, Sarah Ann, 2003), the Manchester wind-tunnel programme of Potts and Crowther (Potts, Jonathan R. and Crowther, William J., 2002), and Lorenz&amp;rsquo;s instrumented discs (Lorenz, Ralph D., 2005).&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p></description></item><item><title>V60 Pourovers</title><link>https://abaj.ai/roam/coffee/v60/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate><guid>https://abaj.ai/roam/coffee/v60/</guid><description>&lt;p>Everything about the Hario V60 is a refusal to make decisions on your behalf. It is a cone, some ribs, and a hole &amp;mdash; no valve, no basket geometry slowing the water down, no reservoir metering the flow. The dripper controls nothing, which means the person holding the kettle controls everything: grind, temperature, ratio, and the shape of the pour itself. How the bean got to your kitchen in the first place is told in &lt;a
 href="https://abaj.ai/roam/coffee/history/"
 
 
>a history of coffee&lt;/a>; this treatise is about the last four minutes of that thousand-year journey.&lt;/p></description></item><item><title>Solutions to Dobson &amp; Barnett's An Introduction to Generalized Linear Models</title><link>https://abaj.ai/words/library/books/an_introduction_to_generalized_linear_models/</link><pubDate>Sun, 14 Jun 2026 13:42:58 +1100</pubDate><guid>https://abaj.ai/words/library/books/an_introduction_to_generalized_linear_models/</guid><description>&lt;p>Solutions to every exercise in the fourth edition of Dobson &amp;amp; Barnett&amp;rsquo;s &lt;em>An Introduction to Generalized Linear Models&lt;/em> (Chapman &amp;amp; Hall/CRC, 2018) — 78 exercises across 14 chapters, worked in R with the book&amp;rsquo;s own datasets from the &lt;code>dobson&lt;/code> package, with executed code and committed output throughout. This is the MATH5806 text; the book is filed at &lt;a
 href="https://abaj.ai/words/library/books/dobson_glm/"
 
 
>An Introduction to Generalized Linear Models (Dobson &amp;amp; Barnett)&lt;/a>.&lt;/p>
&lt;script type="text/javascript" src= '/js/pdf-js/build/pdf.js'>&lt;/script>

&lt;style>
 #embed-pdf-container {
 position: relative;
 width: 100%;
 height: auto;
 min-height: 20vh;
 
 }
 
 .pdf-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 #the-canvas {
 border: 1px solid black;
 direction: ltr;
 width: 100%;
 height: auto;
 display: none;
 }
 
 
 .pdf-loadingWrapper {
 display: none;
 justify-content: center;
 align-items: center;
 width: 100%;
 height: 350px;
 }
 
 .pdf-loading {
 display: inline-block;
 width: 50px;
 height: 50px;
 border: 3px solid #d2d0d0;;
 border-radius: 50%;
 border-top-color: #383838;
 animation: spin 1s ease-in-out infinite;
 -webkit-animation: spin 1s ease-in-out infinite;
 }
 
 
 
 
 
 #overlayText {
 word-wrap: break-word;
 display: grid;
 justify-content: end;
 }
 
 
 #overlayText svg {
 height: clamp(1em, 2vw, 1.4em);
 width: clamp(1em, 2vw, 1.4em);
 }
 
 
 
 @keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 @-webkit-keyframes spin {
 to { -webkit-transform: rotate(360deg); }
 }
 &lt;/style>&lt;div class="embed-pdf-container" id="embed-pdf-container-4174a671">
 &lt;div class="pdf-loadingWrapper" id="pdf-loadingWrapper-4174a671">
 &lt;div class="pdf-loading" id="pdf-loading-4174a671">&lt;/div>
 &lt;/div>
 &lt;div id="overlayText">
 &lt;a href="https://abaj.ai/words/library/books/an_introduction_to_generalized_linear_models.pdf" class="pdf-download-button" aria-label="Download" download>
	&lt;svg class="my-svg" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">
	 &lt;style>
	 .my-svg path {
		fill: black;
	 }
	 [data-theme="dark"] .my-svg path {
		fill: var(--fg0);
	 }
	 &lt;/style>
	 &lt;path d="M9 13c.3 0 .5-.1.7-.3L15.4 7 14 5.6l-4 4V1H8v8.6l-4-4L2.6 7l5.7 5.7c.2.2.4.3.7.3zm-7 2h14v2H2z" />
	&lt;/svg>
 &lt;/a>
 &lt;/div>
 &lt;canvas class="pdf-canvas" id="pdf-canvas-4174a671">&lt;/canvas>
&lt;/div>

&lt;div class="pdf-paginator" id="pdf-paginator-4174a671">
 &lt;button id="pdf-prev-4174a671">Previous&lt;/button>
 &lt;button id="pdf-next-4174a671">Next&lt;/button> &amp;nbsp; &amp;nbsp;
 &lt;span>
 &lt;span class="pdf-pagenum" id="pdf-pagenum-4174a671">&lt;/span> / &lt;span class="pdf-pagecount" id="pdf-pagecount-4174a671">&lt;/span>
 &lt;/span>
&lt;/div>

&lt;noscript>
View the PDF file &lt;a class="pdf-source" id="pdf-source-noscript-4174a671" href="https://abaj.ai/words/library/books/an_introduction_to_generalized_linear_models.pdf">here&lt;/a>.
&lt;/noscript>

&lt;script type="text/javascript">
 (function(){
 var url = '\/words\/library\/books\/an_introduction_to_generalized_linear_models.pdf';

 var hidePaginator = "" === "true";
 var hideLoader = "" === "true";
 var selectedPageNum = parseInt("") || 1;

 
 var pdfjsLib = window['pdfjs-dist/build/pdf'];

 
 if (!pdfjsLib) {
 return;
 }

 
 if (pdfjsLib.GlobalWorkerOptions.workerSrc == '')
 pdfjsLib.GlobalWorkerOptions.workerSrc = "https:\/\/abaj.ai\/" + 'js/pdf-js/build/pdf.worker.js';

 
 var pdfDoc = null,
 pageNum = selectedPageNum,
 pageRendering = false,
 pageNumPending = null,
 scale = 3,
 canvas = document.getElementById('pdf-canvas-4174a671'),
 ctx = canvas.getContext('2d'),
 paginator = document.getElementById("pdf-paginator-4174a671"),
 loadingWrapper = document.getElementById('pdf-loadingWrapper-4174a671');


 
 showPaginator();
 showLoader();

 

 function renderPage(num) {
 pageRendering = true;
 
 pdfDoc.getPage(num).then(function(page) {
 var viewport = page.getViewport({scale: scale});
 canvas.height = viewport.height;
 canvas.width = viewport.width;

 
 var renderContext = {
 canvasContext: ctx,
 viewport: viewport
 };
 var renderTask = page.render(renderContext);

 
 renderTask.promise.then(function() {
 pageRendering = false;
 showContent();

 if (pageNumPending !== null) {
 
 renderPage(pageNumPending);
 pageNumPending = null;
 }
 });
 });

 
 document.getElementById('pdf-pagenum-4174a671').textContent = num;
 }

 

 function showContent() {
 loadingWrapper.style.display = 'none';
 canvas.style.display = 'block';
 }

 

 function showLoader() {
 if(hideLoader) return
 loadingWrapper.style.display = 'flex';
 canvas.style.display = 'none';
 }

 

 function showPaginator() {
 if(hidePaginator) return
 paginator.style.display = 'block';
 }

 

 function queueRenderPage(num) {
 if (pageRendering) {
 pageNumPending = num;
 } else {
 renderPage(num);
 }
 }

 

 function onPrevPage() {
 if (pageNum &lt;= 1) {
 return;
 }
 pageNum--;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-prev-4174a671').addEventListener('click', onPrevPage);

 

 function onNextPage() {
 if (pageNum >= pdfDoc.numPages) {
 return;
 }
 pageNum++;
 queueRenderPage(pageNum);
 }
 document.getElementById('pdf-next-4174a671').addEventListener('click', onNextPage);

 

 pdfjsLib.getDocument({ url: url, verbosity: 0 }).promise.then(function(pdfDoc_) {
 pdfDoc = pdfDoc_;
 var numPages = pdfDoc.numPages;
 document.getElementById('pdf-pagecount-4174a671').textContent = numPages;

 
 if(pageNum > numPages) {
 pageNum = numPages
 }

 
 renderPage(pageNum);
 });
 })();
&lt;/script>



&lt;div class="collapse-marker" data-target-path="/words/library/books/an_introduction_to_generalized_linear_models/" data-folded="true" data-lvl="0">&lt;/div>
&lt;div class="collapsible-container">
 &lt;style id="collapsible-css">
 
 .collapsible-wrapper {
 display: flex;
 align-items: center;
 margin-bottom: 0px;
 }

 
 .toggle-button {
 cursor: pointer;
 border: none;
 background: none;
 color: black;
 font-size: 1rem;
 width: 1.5rem; 
 height: 1.5rem;
 text-align: center;
 line-height: 1.5rem;
 margin-right: 8px;
 padding: 0;
 }

 [data-theme="dark"] .toggle-button {
 color: white; 
 }

 
 .toggle-button:focus {
 outline: none;
 }

 
 .collapsible-content {
 display: none;
 margin-left: 8px;
 margin-bottom: 0px;
 padding: 2px 0 2px 12px;
 border-left: 1px solid rgba(0, 0, 0, 0.1);
 transition: all 0.3s ease-out;
 }

 
 [data-theme="dark"] .collapsible-content {
 border-left-color: rgba(255, 255, 255, 0.12);
 }

 
 .collapsible-content.show {
 display: block;
 }
 &lt;/style>

 &lt;script src="https://abaj.ai/js/collapsible-global.js">&lt;/script>
&lt;/div>

&lt;h2 id="introduction">Introduction&lt;a href="#introduction" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;div class="collapsible-container">
 &lt;script type="text/javascript">
 var folded = 'true';
 &lt;/script>
&lt;/div>

&lt;h3 id="problem-1-dot-1-let-y1-and-y2-be-independent-random-variables-with">Problem 1.1 — Let Y1 and Y2 be independent random variables with&lt;a href="#problem-1-dot-1-let-y1-and-y2-be-independent-random-variables-with" class="post-heading__anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;div class="math-problem" id="1.1">
&lt;div class="math-problem-header">
&lt;div class="problem-header-left">
&lt;strong>Problem&lt;span class="problem-counter">&lt;/span>&lt;/strong>
&lt;span class="problem-name">(1.1)&lt;/span>
&lt;/div>
&lt;/div>
&lt;div class="math-problem-content">
&lt;p>Let \(Y_1\) and \(Y_2\) be independent random variables with \(Y_1 \sim N(1,3)\) and \(Y_2 \sim N(2,5)\). If \(W_1 = Y_1 + 2Y_2\) and \(W_2 = 4Y_1 - Y_2\), what is the joint distribution of \(W_1\) and \(W_2\)? (difficulty: \(\star\))&lt;/p></description></item><item><title>The Bayesian Cat</title><link>https://abaj.ai/blog/the-bayesian-cat/</link><pubDate>Sun, 08 Dec 2024 18:39:13 +1100</pubDate><guid>https://abaj.ai/blog/the-bayesian-cat/</guid><description>&lt;p>This blog post has been created to convince you that real-world
probability, is in fact &lt;span class="underline">Bayesian&lt;/span> probability.&lt;/p>
&lt;p>Anyone who believes that a frequentist approach is superior may be
correct (for that particular example), but it must be said that the
Bayesian framework is a superset of this naive and trivial
card-playing model of probability.&lt;/p>
&lt;p>We are no longer trying to determine the probability of landing a
&lt;code>double-six&lt;/code> dice roll, and rather we are trying to figure out what
the probability is that Mia (our cat) will be waiting for us on the
porch when we get home.&lt;/p></description></item></channel></rss>