<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Journal on Jonathan Bergknoff</title>
    <link>/journal/</link>
    <description>Recent content in Journal on Jonathan Bergknoff</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 14 Mar 2024 00:00:00 +0000</lastBuildDate>
    <atom:link href="/journal/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Using IAM Identity Center in a Personal AWS Account</title>
      <link>/journal/iam-identity-center-personal-aws-accountu/</link>
      <pubDate>Thu, 14 Mar 2024 00:00:00 +0000</pubDate>
      <guid>/journal/iam-identity-center-personal-aws-accountu/</guid>
      <description>I have a personal AWS account that I use for a handful of things. One aspect of it that always bothered me is the use of long-lived credentials: I had a jonathan IAM user with a long-lived access key and secret, and then if I wanted to, e.g., upload a backup to S3, I would use those credentials to assume a role with the necessary permissions before performing the task.</description>
    </item>
    <item>
      <title>Compound Interest</title>
      <link>/journal/compound-interest/</link>
      <pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate>
      <guid>/journal/compound-interest/</guid>
      <description>My wife and I recently started paying two of our kids allowance. One of them likes to spend it, while the other likes to save it. I looked into opening a bank account so our saver could earn a return on the money, but it was too complicated. We don&amp;rsquo;t have any brick-and-mortar banks in walking distance from our house, and an online bank may make deposits and withdrawals tricky. There&amp;rsquo;s also questions of joint ownership or custodianship.</description>
    </item>
    <item>
      <title>The Custom Terraform Build</title>
      <link>/journal/the-custom-terraform-build/</link>
      <pubDate>Wed, 21 Oct 2020 00:00:00 +0000</pubDate>
      <guid>/journal/the-custom-terraform-build/</guid>
      <description>As discussed in Terraform Pain Points, one of the most frustrating things about working with Terraform is the pace and direction of upstream development. Useful features and bug fixes often languish for months or years because the maintainers lack bandwidth to review them or don&amp;rsquo;t see the utility. Check out all of the (justified) angst in the comments of terraform-provider-aws#8268, as hundreds of people waited eight months for it to be merged.</description>
    </item>
    <item>
      <title>DIY Snap Circuit Jumper Wires</title>
      <link>/journal/diy-snap-circuit-jumper-wires/</link>
      <pubDate>Mon, 10 Aug 2020 00:00:00 +0000</pubDate>
      <guid>/journal/diy-snap-circuit-jumper-wires/</guid>
      <description>We play with Snap Circuits a lot around here, and it&amp;rsquo;s a lot of fun. The only issue we&amp;rsquo;ve had is that the jumper wires (the flexible ones) fall apart very easily:&#xA;A broken jumper wire. Also pictured: a previous attempt at a fix, with solder and electrical tape. At least it outlived the other side. I had some luck soldering one back together, but it was a hassle because I had to whittle (or melt) away some of the plastic on the terminal to expose something to solder to.</description>
    </item>
    <item>
      <title>Terraforming AWS IAM users</title>
      <link>/journal/terraforming-aws-iam-users/</link>
      <pubDate>Mon, 03 Aug 2020 00:00:00 +0000</pubDate>
      <guid>/journal/terraforming-aws-iam-users/</guid>
      <description>I found myself Terraforming some AWS IAM users today. It can be hard to remember the ins-and-outs of managing the PGP-encrypted credentials, so I&amp;rsquo;m writing this down for future reference.&#xA;The model here is to create IAM users (probably one per person on your team), and to set them up with long-lived IAM credentials (access key/secret) and login access to the web console. We&amp;rsquo;ll have Terraform generate these secrets for us and give us PGP-encrypted output that we can distribute to the user.</description>
    </item>
    <item>
      <title>Effective Terraform Practices</title>
      <link>/journal/effective-terraform-practices/</link>
      <pubDate>Mon, 20 Jul 2020 00:00:00 +0000</pubDate>
      <guid>/journal/effective-terraform-practices/</guid>
      <description>Getting started with Terraform is easy. As your deployments grows to multiple environments and multiple state files, maintained by multiple team members, things can become harder to wrangle. This article touches on some practices that I&amp;rsquo;ve found effective for using Terraform in those settings.&#xA;Be thoughtful about repository structure Maintain a custom build in a Docker image Run in CI whenever possible Be thoughtful about state file boundaries Be practical about module boundaries How to name things This is part two in a series about Terraform.</description>
    </item>
    <item>
      <title>Terraform Pain Points</title>
      <link>/journal/terraform-pain-points/</link>
      <pubDate>Wed, 08 Jul 2020 00:00:00 +0000</pubDate>
      <guid>/journal/terraform-pain-points/</guid>
      <description>I love using Terraform. At my previous job, we managed our infrastructure entirely with Terraform: tens of thousands of resources spread across several cloud providers. The benefits of infrastructure-as-code and Terraform, in particular, are massive, but well known. While I still consider Terraform the best tool of its kind, this article describes some pain points that my team and I encountered as power users. I hope it can lead to some discussion about ways to improve.</description>
    </item>
    <item>
      <title>Running Project64 in Docker</title>
      <link>/journal/running-project64-in-docker/</link>
      <pubDate>Mon, 08 Jun 2020 00:00:00 +0000</pubDate>
      <guid>/journal/running-project64-in-docker/</guid>
      <description>This past weekend, I published a Docker image for Project64 (a Nintendo 64 emulator for Windows). That&amp;rsquo;s here. If you just want to run Project64 in Docker: check out the readme, docker pull jbergknoff/project64:v2.3.2, and go nuts.&#xA;Why? In short, because Wine and Project64 are unstable together. Docker gives me a way to explicitly enumerate what they depend on to work, and a way to easily reset to a clean slate when they break.</description>
    </item>
    <item>
      <title>Solving the &#34;Five Squared&#34; puzzle</title>
      <link>/journal/five-squared-puzzle/</link>
      <pubDate>Wed, 25 Mar 2020 00:00:00 +0000</pubDate>
      <guid>/journal/five-squared-puzzle/</guid>
      <description>I&amp;rsquo;ve had this puzzle called &amp;ldquo;Five Squared&amp;rdquo; (חמש בריבוע) for a long time but never solved it. It&amp;rsquo;s a 5x5 grid broken into a handful of rectangles (two 2x1 and seven 3x1) with symbols on them, and the objective is to construct a square, out of those rectangles, where each row and column has all the symbols (no repeats).&#xA;I don&amp;rsquo;t really have a knack for these puzzles, but recently my son got interested in it and kept asking me to help him, and that motivated me to work on it.</description>
    </item>
    <item>
      <title>Run More Stuff in Docker</title>
      <link>/journal/run-more-stuff-in-docker/</link>
      <pubDate>Tue, 10 Mar 2020 00:00:00 +0000</pubDate>
      <guid>/journal/run-more-stuff-in-docker/</guid>
      <description>[Hacker News Discussion: https://news.ycombinator.com/item?id=25547205]&#xA;In 2020, Docker is the best medium for distributing and running most developer-facing software. It&amp;rsquo;s widely accepted that Docker is great for building and deploying the artifacts for your enterprise web app, but this is less well known when it comes to things like developer tools. However, running tools in containers has many benefits over installing and running them in the conventional way, and we should all start doing it more.</description>
    </item>
    <item>
      <title>Resurrecting My Bread Machine</title>
      <link>/journal/resurrecting-bread-machine/</link>
      <pubDate>Thu, 05 Jul 2018 00:00:00 +0000</pubDate>
      <guid>/journal/resurrecting-bread-machine/</guid>
      <description>In 2012, my wife and I got a bread machine (Hitachi HB-B101) from her parents. We saw the box lying around their house, unopened, and asked them for it. It had been a gift in the early 90s, with a book of coupons that all expired in 1996. We took it home and it worked perfectly. We&amp;rsquo;ve been making 2 or 3 loaves of bread per week with it ever since.</description>
    </item>
    <item>
      <title>Always Pin Your Versions</title>
      <link>/journal/always-pin-your-versions/</link>
      <pubDate>Sun, 12 Nov 2017 00:00:00 +0000</pubDate>
      <guid>/journal/always-pin-your-versions/</guid>
      <description>I got thinking about version pinning yesterday after reading the HN discussion of this article. This post isn&amp;rsquo;t about that article, but rather about something that I like to do which seems to be very unconventional: I always pin version numbers. I would argue that, in any serious project, you should never use a wildcard version for a dependency: the downsides far outweigh the benefits.&#xA;Why could it be a good thing to point at version 1.</description>
    </item>
    <item>
      <title>Resurrecting My Lawn Mower</title>
      <link>/journal/resurrecting-lawnmower/</link>
      <pubDate>Sun, 27 Mar 2016 00:00:00 +0000</pubDate>
      <guid>/journal/resurrecting-lawnmower/</guid>
      <description>This morning, I went to mow my lawn for the first time this year, and the lawn mower wouldn&amp;rsquo;t start. Mine is the standard Home Depot issue Yard Machines 21&amp;quot; lawn mower with a Briggs &amp;amp; Stratton 140cc engine (model 90000). I tried to pull the starter cord, but I couldn&amp;rsquo;t get a response from the engine. I was able to get the lawn mower running again by cleaning out the carburetor.</description>
    </item>
    <item>
      <title>JavaScript&#39;s Style Problem</title>
      <link>/journal/javascript-style-problem/</link>
      <pubDate>Mon, 29 Feb 2016 00:00:00 +0000</pubDate>
      <guid>/journal/javascript-style-problem/</guid>
      <description>Conventional JavaScript style has never sat well with me. I always had a feeling that something was &amp;ldquo;off&amp;rdquo; about the way we normally write JavaScript. I finally got to the bottom of it.&#xA;Trouble in Paradise Here&amp;rsquo;s an idiomatic snippet of node.js code from the Express documentation:&#xA;app.get(&#39;/&#39;, function (req, res) { res.send(&#39;GET request to homepage&#39;); }); What could possibly be wrong with a three-line block of code?&#xA;The body of the function should be indented twice.</description>
    </item>
    <item>
      <title>Building Better Docker Images</title>
      <link>/journal/building-better-docker-images/</link>
      <pubDate>Sat, 06 Jun 2015 00:00:00 +0000</pubDate>
      <guid>/journal/building-better-docker-images/</guid>
      <description>It&amp;rsquo;s been about eight months since I wrote down some of my thoughts on building good docker images. The docker ecosystem has continued moving quickly and I&amp;rsquo;m pleased to say that most of the principles listed in the old article have aged well. I don&amp;rsquo;t have a ton to add, but here&amp;rsquo;s a few things that I&amp;rsquo;ve discovered since then:&#xA;Base images off of Alpine&#xA;alpine is a 5 megabyte image based on Alpine Linux (Docker hub link).</description>
    </item>
    <item>
      <title>Some Obscure JavaScript Pitfalls</title>
      <link>/journal/some-obscure-javascript-pitfalls/</link>
      <pubDate>Mon, 15 Dec 2014 00:00:00 +0000</pubDate>
      <guid>/journal/some-obscure-javascript-pitfalls/</guid>
      <description>These are some (relatively) obscure JavaScript quirks which have caused issues for me in the past. While JavaScript has plenty of common pitfalls that most users have encountered and overcome, I&amp;rsquo;ve tried to leave them off of this list. Next time you&amp;rsquo;re scratching your head over your JavaScript code misbehaving, maybe one of these will come in handy!&#xA;Array::sort sorts alphabetically by default.&#xA;This is often what you want, but not if you need to sort a list of numbers:</description>
    </item>
    <item>
      <title>Installing Quake 3 in Linux Mint</title>
      <link>/journal/installing-quake3-linux-mint/</link>
      <pubDate>Sat, 06 Dec 2014 00:00:00 +0000</pubDate>
      <guid>/journal/installing-quake3-linux-mint/</guid>
      <description>I had a bit of a hard time installing and running Quake 3 Arena with ioquake3 under Linux. The root of the problem was probably that I was trying to use the promising-looking packages in the Ubuntu package repositories (quake3, ioquake3). Unfortunately, those packages seemed to be a dead end.&#xA;Since I eventually got it working, I wanted to document it to save others the headache. I&amp;rsquo;m running Linux Mint 17.</description>
    </item>
    <item>
      <title>A Peculiar, Non-Constructive Proof</title>
      <link>/journal/peculiar-non-constructive-proof/</link>
      <pubDate>Sat, 08 Nov 2014 00:00:00 +0000</pubDate>
      <guid>/journal/peculiar-non-constructive-proof/</guid>
      <description>A friend of mine loves to trot out this oddity, and I always manage to forget it afterwards. Now that I have it in mind, I will take a minute to write it here for posterity.&#xA;Theorem: There exist a,b∈Ra,b∈R, irrational, such that ab∈Qab∈Q.&#xA;In other words, the theorem asserts that an irrational raised to an irrational may be rational. This isn&amp;rsquo;t especially interesting and, while surprising, I don&amp;rsquo;t claim to have any sort of intuition violated here.</description>
    </item>
    <item>
      <title>Making a Guitar Tuner with HTML5</title>
      <link>/journal/making-a-guitar-tuner-html5/</link>
      <pubDate>Sat, 01 Nov 2014 00:00:00 +0000</pubDate>
      <guid>/journal/making-a-guitar-tuner-html5/</guid>
      <description>The guitar tuner described in this article can be accessed at https://jbergknoff.github.io/guitar-tuner. The source code is available on github.&#xA;Nowadays, you can do all sorts of cool things with audio in web browsers. While it used to require flash to interact with the microphone or to play arbitrary sound, the web audio API has taken major strides. The API is still under heavy development and is sure to improve with time.</description>
    </item>
    <item>
      <title>Building Good Docker Images</title>
      <link>/journal/building-good-docker-images/</link>
      <pubDate>Fri, 03 Oct 2014 00:00:00 +0000</pubDate>
      <guid>/journal/building-good-docker-images/</guid>
      <description>[See also: an update to this article, Building Better Docker Images&#xA;The docker registry is bursting at the seams. At the time of this writing, a search for &amp;ldquo;node&amp;rdquo; gets just under 1000 hits. How does one choose?&#xA;What constitutes a good docker image? This is a subjective matter, but I have some criteria for a docker image that I consider good:&#xA;working. Some examples:&#xA;an Android SDK image should be able to compile a project without first applying updates to the container.</description>
    </item>
    <item>
      <title>Amortized Mortgage Payments</title>
      <link>/journal/amortized-mortgage-payments/</link>
      <pubDate>Wed, 10 Sep 2014 00:00:00 +0000</pubDate>
      <guid>/journal/amortized-mortgage-payments/</guid>
      <description>Computing the Payment Amount With home ownership on the horizon, I&amp;rsquo;ve been curious about how amortized mortgage payments work. My goal was the following: given a loan for the amount PP, to be paid in NN installments, and compounded at the time of each payment with interest rate rr, determine what constant payment xx should be paid each month to discharge the loan.&#xA;For one thing, it&amp;rsquo;s not entirely obvious that this should be possible.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 4.2</title>
      <link>/journal/topics-in-algebra-chapter-4-section-2/</link>
      <pubDate>Fri, 04 Jul 2014 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-4-section-2/</guid>
      <description>This page covers section 4.2 (&amp;ldquo;Linear Independence and Bases&amp;rdquo;).&#xA;Topics covered: 4.2 Throughout, VV is a vector space over a field FF.&#xA;Definition: Let v1,…,vn∈Vv1​,…,vn​∈V and α1,…,αn∈Fα1​,…,αn​∈F. Any element of the form ∑iαivi∑i​αi​vi​ is a linear combination over FF of the {vi}{vi​}.&#xA;Definintion: If S⊂VS⊂V is a subset of VV, then span(S)span(S) is the set of all linear combinations of finite sets of elements of SS.&#xA;Lemma 4.2.1: If S⊂VS⊂V, then span(S)span(S) is a subspace of VV.</description>
    </item>
    <item>
      <title>Modifying Theme Colors in Linux Mint Cinnamon</title>
      <link>/journal/modifying-theme-colors-linux-mint-cinnamon/</link>
      <pubDate>Sat, 05 Apr 2014 00:00:00 +0000</pubDate>
      <guid>/journal/modifying-theme-colors-linux-mint-cinnamon/</guid>
      <description>I&amp;rsquo;ve recently switched off of Lubuntu 13.10 to Linux Mint 16. Lubuntu performance was nothing special, and there were a handful of bugs which made me eager to switch (maybe I&amp;rsquo;ll write about them in another article).&#xA;Mint has been great, and I like the Cinnamon desktop environment. Surprisingly, the performance is better than in Lubuntu; things are generally snappier and it&amp;rsquo;s faster to start Sublime Text, Chrome, etc. The default Cinnamon theme is good, but the colors on the taskbar are very awkward: the active window&amp;rsquo;s taskbar button looks unpressed while the inactive window buttons all look pressed:</description>
    </item>
    <item>
      <title>Scanning in Ubuntu with the Canon MF3010</title>
      <link>/journal/scanning-ubuntu-canon-mf3010/</link>
      <pubDate>Sat, 29 Mar 2014 00:00:00 +0000</pubDate>
      <guid>/journal/scanning-ubuntu-canon-mf3010/</guid>
      <description>After the debacle of setting up the Canon MF-3010 to print in 64-bit Lubuntu 13.10, it&amp;rsquo;s not a surprise that setting up scanning is also a pain in the neck.&#xA;After installing the sane-utils package, the command sudo sane-find-scanner wouldn&amp;rsquo;t find any USB printers. I looked at man sane-pixma, the backend driver responsible for interfacing with the Canon MF3010, but it didn&amp;rsquo;t list my printer model. However, on the official man page, the model is listed.</description>
    </item>
    <item>
      <title>Installing GHC in SliTaz</title>
      <link>/journal/installing-ghc-haskell-slitaz/</link>
      <pubDate>Sun, 09 Mar 2014 00:00:00 +0000</pubDate>
      <guid>/journal/installing-ghc-haskell-slitaz/</guid>
      <description>There is no GHC package in SliTaz&amp;rsquo;s repositories, so, if you want to play with Haskell in SliTaz, it&amp;rsquo;s an adventure. I managed it just now and I&amp;rsquo;m writing it down so I can do it again in the future if I have to. I am using SliTaz 4.0 base.&#xA;First I dug around the Debian repositories for a GHC package that I could tazpkg convert. I found one, took an i386 download link, and did</description>
    </item>
    <item>
      <title>Printing in Ubuntu with the Canon MF3010</title>
      <link>/journal/printing-ubuntu-canon-mf3010/</link>
      <pubDate>Sat, 08 Feb 2014 00:00:00 +0000</pubDate>
      <guid>/journal/printing-ubuntu-canon-mf3010/</guid>
      <description>I recently switched my laptop over to Lubuntu. The experience has been pretty good overall, but one painful thing was getting my printer to cooperate.&#xA;Specifically, I am using 64-bit Lubuntu 13.10 and a Canon MF-3010. It was great to find out that Canon has an officially-released driver for its proprietary UFR II protocol. At the time of this writing, the driver version is 2.70.&#xA;I downloaded the installed the driver from the 64-bit Debian packages.</description>
    </item>
    <item>
      <title>Wald GR, Chapter 3 Notes</title>
      <link>/journal/gr/wald-3/</link>
      <pubDate>Fri, 17 Jan 2014 00:00:00 +0000</pubDate>
      <guid>/journal/gr/wald-3/</guid>
      <description>3.0: Curvature Extrinsic curvature of a manifold is a notion of curvature relying on embedding the manifold in a higher-dimensional space. It will be discussed in chapter 9.&#xA;Intrinsic curvature of a manifold, with no reference to a higher-dimensional space, can be defined in terms of parallel transport.&#xA;Parallel transport is roughly &amp;ldquo;to keep a tangent vector pointing in the same direction&amp;rdquo; as it is moved around the manifold (across the various different tangent spaces).</description>
    </item>
    <item>
      <title>Solving a quartic equation</title>
      <link>/journal/solving-a-quartic-equation/</link>
      <pubDate>Sun, 15 Dec 2013 00:00:00 +0000</pubDate>
      <guid>/journal/solving-a-quartic-equation/</guid>
      <description>This is a method of solving the general quartic equation that my father showed me. The result is a very nice, compact and symmetric expression for the roots.&#xA;Problem Solve the quartic equation aX4+bX3+cX2+dX+e=0aX4+bX3+cX2+dX+e=0&#xA;for XX. Solution First divide through by aa and then substitute X=x−b4aX=x−4ab​ in order to eliminate the cubic term. This leaves us with&#xA;x4+px2+qx+r=0.(depressed-quartic) x^4+px^2+qx+r=0.\tag{depressed-quartic} x4+px2+qx+r=0.(depressed-quartic)&#xA;Now, introduce a new variable y=x2+p/2y=x2+p/2. Then our quartic is equivalent to the pair of simultaneous equations: y2+qx+(r−p24)=0x2−y+p2=0.</description>
    </item>
    <item>
      <title>Wald GR, Chapter 2 Notes</title>
      <link>/journal/gr/wald-2/</link>
      <pubDate>Wed, 11 Dec 2013 00:00:00 +0000</pubDate>
      <guid>/journal/gr/wald-2/</guid>
      <description>2.1: Manifolds A manifold is, roughly, a set in which the vicinity of every point &amp;ldquo;looks like&amp;rdquo; $\mathbb{R}^n$.&#xA;An open set is defined as a set which can be expressed as a union of open balls.&#xA;An $n$-dimensional $C^\infty$ manifold is a set $M$ and a set of open subsets ${O_\alpha}$ of $M$ satisfying&#xA;Each $p\in M$ belongs to some $O_\alpha$, i.e. ${O_\alpha}$ is an open cover of $M$. For each $\alpha$, there is a bijection $\psi_\alpha:O_\alpha\to U_\alpha$ with $U_\alpha\subset\mathbb{R}^n$ open.</description>
    </item>
    <item>
      <title>Wald GR, Chapter 1 Notes</title>
      <link>/journal/gr/wald-1/</link>
      <pubDate>Sat, 23 Nov 2013 00:00:00 +0000</pubDate>
      <guid>/journal/gr/wald-1/</guid>
      <description>1.2: Space and Time in Prerelativity Physics and in Special Relativity Inertial motion is the motion a material body undergoes when it is not subjected to any external forces. 1.3: The Spacetime Metric In classical physics, invariants between inertial frames are: (1) the time interval $\Delta t$ between two events, (2) the spatial distance $|\Delta x|$ between two simultaneous events.&#xA;In special relativity, the invariant between inertial frames is the interval $$I=(\Delta s)^2=-(\Delta t)^2+(\Delta x)^2+(\Delta y)^2+(\Delta z)^2.</description>
    </item>
    <item>
      <title>Carroll GR, Chapter 1 Notes</title>
      <link>/journal/carroll/1/</link>
      <pubDate>Tue, 19 Nov 2013 00:00:00 +0000</pubDate>
      <guid>/journal/carroll/1/</guid>
      <description>1.1: Prelude Einstein&amp;rsquo;s equation $$R_{\mu\nu}-\frac{1}{2}Rg_{\mu\nu}=8\pi GT_{\mu\nu}$$ takes the place of (1) the inverse square gravity law and (2) Newton&amp;rsquo;s second law. It relates the curvature of spacetime (LHS) to the effect it has on matter (RHS).&#xA;Free particles move along geodesics in spacetime.&#xA;&amp;ldquo;Special relativity: the theory of spacetime in the absence of gravity/curvature&amp;rdquo;.&#xA;1.2: Space and Time, Separately and Together A particle&amp;rsquo;s worldline is its four-dimensional trajectory $x^\mu(\tau)$.&#xA;Simultaneity: in Newtonian physics, there is a notion of &amp;ldquo;all space at a given time&amp;rdquo;, a cross-section in time.</description>
    </item>
    <item>
      <title>Tiny Headless Linux VM in Windows</title>
      <link>/journal/headless-linux-vm-in-windows/</link>
      <pubDate>Sat, 09 Nov 2013 00:00:00 +0000</pubDate>
      <guid>/journal/headless-linux-vm-in-windows/</guid>
      <description>One major drawback of doing web development on Windows is the difficulty of running software primarily developed for Linux, things like redis, node.js and git. With great virtualization software nowadays, it is very feasible to run Linux software inside of Windows without any performance penalty. In particular, running Linux headless, and accessing the VM only over the network, is a great resource-saver.&#xA;Here&amp;rsquo;s how to get a headless Linux virtual machine running under Windows in 10 minutes.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 4.1</title>
      <link>/journal/topics-in-algebra-chapter-4-section-1/</link>
      <pubDate>Mon, 23 Sep 2013 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-4-section-1/</guid>
      <description>This page covers section 4.1 (&amp;ldquo;Elementary Basic Concepts&amp;rdquo; [of vector spaces and modules]).&#xA;Topics covered: 4.1 Definition: Let VV be a non-empty set, let FF be a field, and let +:V×V→V+:V×V→V and ⋅:F×V→V⋅:F×V→V be binary operations such that&#xA;α⋅(v+w)=α⋅v+α⋅wα⋅(v+w)=α⋅v+α⋅w for all α∈Fα∈F, v,w∈Vv,w∈V. (α+β)⋅v=α⋅v+β⋅v(α+β)⋅v=α⋅v+β⋅v for all α,β∈Fα,β∈F, v∈Vv∈V. α(β⋅v)=(αβ)⋅vα(β⋅v)=(αβ)⋅v for all α,β∈Fα,β∈F, v∈Vv∈V. 1⋅v=v1⋅v=v for all v∈Vv∈V where 11 is the multiplicative unit in FF. Then VV is said to be a vector space over FF.</description>
    </item>
    <item>
      <title>Rendering 3D Graphics from Scratch in under 100 Lines of JavaScript</title>
      <link>/journal/rendering-3d-in-under-100-lines-js/</link>
      <pubDate>Sat, 07 Sep 2013 00:00:00 +0000</pubDate>
      <guid>/journal/rendering-3d-in-under-100-lines-js/</guid>
      <description>In part 1 of this series, we discussed the mathematical preliminaries for a basic, didactic software rendering scheme for three-dimensional graphics. In this second part, we will build the renderer using HTML5 canvas and javascript. Canvas is the ideal technology for exploring the basics of graphics, because (i) reloading a page is an incredibly fast way to iterate and test small changes in code, and (ii) everybody has access to a web browser so there is no barrier to entry for development (setting up an IDE, etc.</description>
    </item>
    <item>
      <title>Rendering 3D Graphics: Mathematical Preliminaries</title>
      <link>/journal/rendering-3d-math-preliminaries/</link>
      <pubDate>Sun, 01 Sep 2013 00:00:00 +0000</pubDate>
      <guid>/journal/rendering-3d-math-preliminaries/</guid>
      <description>In this series of articles, we&amp;rsquo;ll walk through a basic, didactic software rendering scheme for three-dimensional graphics. We assume familiarity with high school geometry and vectors. In this first part, we will explore the mathematical preliminaries. Afterwards, we will implement the renderer using javascript canvas.&#xA;Why do distant objects appear small? This is a fundamental question that we must consider. An object very far away from us appears small, and it increases in size as it approaches us.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3 Supplementary Problems</title>
      <link>/journal/topics-in-algebra-chapter-3-supplementary/</link>
      <pubDate>Sun, 07 Jul 2013 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-supplementary/</guid>
      <description>This page covers the supplementary problems at the end of chapter 3.&#xA;The problems below are paraphrased from/inspired by those given in Topics in Algebra by Herstein. The solutions are my own unless otherwise noted. I will generally try, in my solutions, to stick to the development in the text. This means that problems will not be solved using ideas and theorems presented further on in the book.&#xA;Herstein 3.1: Let RR be a commutative ring.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.11</title>
      <link>/journal/topics-in-algebra-chapter-3-section-11/</link>
      <pubDate>Sat, 13 Apr 2013 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-11/</guid>
      <description>This section covers section 3.11 (&amp;ldquo;Polynomial Rings over Commutative Rings&amp;rdquo;).&#xA;Topics covered: 3.11 Definition: Let RR be a commutative ring with a unit element. R[x]R[x] is defined, as in section 3.9, as the set of all symbols a0+a1x+⋯+amxma0​+a1​x+⋯+am​xm where mm is a non-negative integer and a0,…,am∈Ra0​,…,am​∈R. The standard addition and multiplication make R[x]R[x] a ring. It will be shown in exercise 3.11.1 that R[x]R[x] so defined is a commutative ring with unit element.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.10</title>
      <link>/journal/topics-in-algebra-chapter-3-section-10/</link>
      <pubDate>Sat, 16 Feb 2013 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-10/</guid>
      <description>This page covers section 3.10 (&amp;ldquo;Polynomials over the Rational Field&amp;rdquo;).&#xA;Topics covered: 3.10 Definition: The content of f∈Z[x]f∈Z[x] is the greatest common divisor of its coefficients.&#xA;Definition: A polynomial f∈Z[x]f∈Z[x] is primitive if its content is 11.&#xA;Lemma 3.10.1: If f,g∈Z[x]f,g∈Z[x] are primitive, then so is fgfg.&#xA;Theorem 3.10.1 (Gauss Lemma): If f∈Z[x]f∈Z[x] is primitive and can be factored as f=ghf=gh with g,h∈Q[x]g,h∈Q[x], then it can be factored as f=g′h′f=g′h′ with g′,h′∈Z[x]g′,h′∈Z[x].</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.9</title>
      <link>/journal/topics-in-algebra-chapter-3-section-9/</link>
      <pubDate>Wed, 06 Feb 2013 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-9/</guid>
      <description>This page covers section 3.9 (&amp;ldquo;Polynomial Rings&amp;rdquo;). Throughout, FF is a field.&#xA;Topics covered: 3.9 F[x]={a0+a1x+⋯anxn∣n∈N,a0,…,an∈F}F[x]={a0​+a1​x+⋯an​xn∣n∈N,a0​,…,an​∈F} is the set of polynomials with coefficients from the field FF.&#xA;Addition, multiplication and equivalence of polynomials are defined in the obvious ways.&#xA;Definition: The degree of non-zero f∈F[x]f∈F[x], deg(f)deg(f), is the coefficient of the highest non-zero power of xx in ff. The degree is not defined for the zero polynomial.&#xA;Lemma 3.9.1: If f,g∈F[x]f,g∈F[x] are non-zero, then deg(fg)=deg(f)+deg(g)deg(fg)=deg(f)+deg(g).</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.8</title>
      <link>/journal/topics-in-algebra-chapter-3-section-8/</link>
      <pubDate>Mon, 28 Jan 2013 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-8/</guid>
      <description>This page covers section 3.8 (&amp;ldquo;A Particular Euclidean Ring&amp;rdquo;).&#xA;Topics covered: 3.8 Z[i]Z[i], the Gaussian integers, is the set of complex numbers a+bia+bi where a,b∈Za,b∈Z. The proof of each result in this chapter is very clever.&#xA;Theorem 3.8.1: Z[i]Z[i] is a Euclidean ring. The distance function is d(a+bi)=a2+b2d(a+bi)=a2+b2.&#xA;Lemma 3.8.1: Let c,p∈Zc,p∈Z with pp prime and (c,p)=1(c,p)=1 such that there exist x,y∈Zx,y∈Z with x2+y2=cpx2+y2=cp. Then there exist integers a,b∈Za,b∈Z such that p=a2+b2p=a2+b2.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.7</title>
      <link>/journal/topics-in-algebra-chapter-3-section-7/</link>
      <pubDate>Sun, 13 Jan 2013 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-7/</guid>
      <description>This page covers section 3.7 (&amp;ldquo;Euclidean Rings&amp;rdquo;). Throughout, RR is a ring.&#xA;Topics covered: 3.7 Definition: The integral domain RR is a Euclidean ring if there exists d:R∖0→Z∗d:R∖0→Z∗ such that&#xA;d(a)≤d(ab)d(a)≤d(ab) for a,b∈R∖0a,b∈R∖0.&#xA;For a,b∈R∖0a,b∈R∖0, there exist r,s∈Rr,s∈R with a=sb+ra=sb+r and either r=0r=0 or d(r)&amp;lt;d(b)d(r)&amp;lt;d(b).&#xA;Here, Z∗Z∗ is the set of non-negative integers. This generalizes the Euclidean algorithm of the integers.&#xA;Theorem 3.7.1: If II is an ideal of the Euclidean ring RR, then there exists a∈Ra∈R such that I=(a)={ax∣x∈R}I=(a)={ax∣x∈R}.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.6</title>
      <link>/journal/topics-in-algebra-chapter-3-section-6/</link>
      <pubDate>Thu, 27 Dec 2012 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-6/</guid>
      <description>This page covers section 3.6 (&amp;ldquo;The Field of Quotients of an Integral Domain&amp;rdquo;). Throughout, RR is an integral domain and FF is its field of fractions, defined in &amp;ldquo;topics covered&amp;rdquo;.&#xA;Topics covered: 3.6 The section focuses on generalizing the relationship between ZZ and QQ (field of fractions) to integral domains in general.&#xA;Definition: Ring SS can be imbedded in ring S′S′ if there exists an injective ring homomorphism S→S′S→S′. If both SS and S′S′ are unital then we also require the imbedding to map 11 to 1′1′.</description>
    </item>
    <item>
      <title>A New Year&#39;s Integral</title>
      <link>/journal/new-years-integral/</link>
      <pubDate>Fri, 07 Dec 2012 00:00:00 +0000</pubDate>
      <guid>/journal/new-years-integral/</guid>
      <description>A friend of mine showed me the following integral:&#xA;Problem Compute ∫01dx [(1−x2011)1/2011−x]2. \int_0^1 dx,\left[\left(1-x^{2011}\right)^{1/2011}-x\right]^2. ∫01​dx[(1−x2011)1/2011−x]2.&#xA;Solution This is not the New Year&amp;rsquo;s integral of the title; clearly it would be a year out of date. That one will come a bit later.&#xA;My immediate thought when I saw this integral was that (1−x2011)1/2011(1−x2011)1/2011 looks like the usual thing whose limit one takes to get, or define, ee. As 20112011 is pretty close to infinity, I numerically evaluated ∫01dx [e−x−x]2∫01​dx[e−x−x]2</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.5</title>
      <link>/journal/topics-in-algebra-chapter-3-section-5/</link>
      <pubDate>Fri, 07 Dec 2012 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-5/</guid>
      <description>This page covers section 3.5 (&amp;ldquo;More Ideals and Quotient Rings&amp;rdquo;). Throughout, RR is a ring.&#xA;Topics covered: 3.5 Lemma 3.5.1: Let RR be commutative and unital and only have the ideals (0)(0) and RR. Then RR is a field.&#xA;Definition: An ideal I⊂RI⊂R is a maximal ideal if any other ideal JJ such that I⊂J⊂RI⊂J⊂R is either J=IJ=I or J=RJ=R.&#xA;The prime ideals of ZZ are exactly the ideals (p)={kp∣k∈Z}(p)={kp∣k∈Z} for pp a prime integer.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.4</title>
      <link>/journal/topics-in-algebra-chapter-3-section-4/</link>
      <pubDate>Wed, 21 Nov 2012 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-4/</guid>
      <description>There are no exercises from 3.3, so this section covers both 3.3 (&amp;ldquo;Homomorphisms&amp;rdquo;) and 3.4 (&amp;ldquo;Ideals and Quotient Rings&amp;rdquo;).&#xA;Throughout, RR is a ring and pp is a prime integer.&#xA;Topics covered: 3.3 Definition: Let R,R′R,R′ be rings. A ring homomorphism is a mapping ϕ:R→R′ϕ:R→R′ such that ϕ(a+b)=ϕ(a)+ϕ(b)ϕ(a+b)=ϕ(a)+ϕ(b) and ϕ(ab)=ϕ(a)ϕ(b)ϕ(ab)=ϕ(a)ϕ(b) for all a,b∈Ra,b∈R.&#xA;Lemma 3.3.1: If ϕ:R→R′ϕ:R→R′ is a ring homomorphism, then ϕ(0)=0ϕ(0)=0 and ϕ(−a)=−ϕ(a)ϕ(−a)=−ϕ(a).&#xA;Definition: With ϕ:R→R′ϕ:R→R′ a ring homomorphism, the kernel of ϕϕ is the set {a∈R∣ϕ(a)=0}{a∈R∣ϕ(a)=0}.</description>
    </item>
    <item>
      <title>Topics in Algebra, Chapter 3.2</title>
      <link>/journal/topics-in-algebra-chapter-3-section-2/</link>
      <pubDate>Sun, 11 Nov 2012 00:00:00 +0000</pubDate>
      <guid>/journal/topics-in-algebra-chapter-3-section-2/</guid>
      <description>There are no exercises from 3.1, so this section covers both 3.1 (&amp;ldquo;Definition and Examples of Rings&amp;rdquo;) and 3.2 (&amp;ldquo;Some Special Classes of Rings&amp;rdquo;). Throughout, RR is a ring and pp is a prime integer.&#xA;Topics covered: 3.1 Definition: An associative ring is a non-empty set RR with two operations, ++ and ⋅⋅ obeying the usual axioms: RR is an abelian group under ++, RR is closed under the associative multiplication ⋅⋅, and the distributive law holds in RR.</description>
    </item>
    <item>
      <title>A Birthday Integral</title>
      <link>/journal/a-birthday-integral/</link>
      <pubDate>Fri, 26 Oct 2012 00:00:00 +0000</pubDate>
      <guid>/journal/a-birthday-integral/</guid>
      <description>There was a post on math.stackexchange.com where somebody was looking for a non-trivial integral, evaluating to 5959, as a birthday present for his father. In the end, only one answer impressed me. All the rest relied on some transparent encoding of 5959 in the exponents and/or coefficients.&#xA;Problem Show that ∫0∞dx x2(x4−2)cosh⁡(πx/2)=59.∫0∞​dxcosh(πx/2)x2(x4−2)​=59.&#xA;Solution The polynomial in the numerator is waving a big, red flag at us that we should stick in an exponential factor and repeatedly differentiate it.</description>
    </item>
    <item>
      <title>Nesting the Sine Function</title>
      <link>/journal/iterated-sine/</link>
      <pubDate>Fri, 05 Oct 2012 00:00:00 +0000</pubDate>
      <guid>/journal/iterated-sine/</guid>
      <description>Problem Let x∈(0,π)x∈(0,π). Consider the sequence of real numbers given by s1=sin⁡xs1​=sinx and sn+1=sin⁡snsn+1​=sinsn​ for n∈{2,3,…}n∈{2,3,…}. Thus we consider iterations of sine nesting: sn=sin⁡(sin⁡(⋯sin⁡(x))).sn​=sin(sin(⋯sin(x))).&#xA;(a) Prove that {sn}{sn​} is a convergent sequence. (b) Determine its leading-order asymptotic behavior for large nn. Solution (a) The restriction of xx to (0,π)(0,π) makes it so that s1=sin⁡x&amp;gt;0s1​=sinx&amp;gt;0. We would like to show that {sn}{sn​} is decreasing and bounded below by zero. We may do it by induction: suppose sk&amp;gt;0sk​&amp;gt;0 so that, because 0&amp;lt;sin⁡u&amp;lt;u0&amp;lt;sinu&amp;lt;u for u&amp;gt;0u&amp;gt;0, we have sk&amp;gt;sk+1=sin⁡sk&amp;gt;0sk​&amp;gt;sk+1​=sinsk​&amp;gt;0.</description>
    </item>
  </channel>
</rss>
