Souk's Notes - Unofficial Summaries

Unofficial, machine-generated summaries, as of 2026-11-11.

Technology and FriendsJoe Guadagno on Leadership [TECHNOLOGYANDFRIENDS 720]
  • Leaders grow people; managers direct tasks. Guadagno, a director over several teams at Rocket Mortgage, says the word "manager" is frowned upon there; he contrasts a meme of a manager in a cart whipping staff forward with a leader in front helping pull, and a manager assigning a report by a date with a leader growing the person.
  • Leadership can partly be taught but rests on traits. He names compassion, wanting to grow and putting others first, and ties his own to having trained as a high school math teacher and a philosophy of leaving the world better than he found it.
  • He hires for fit with the team over top technical skill. Across his five teams he weighs communication against engineering skill, and rather than turning everyone into a leader he tries to grow each person toward what they want to be "when they grow up"; he spots leadership potential in those who raise flags and ask what-if questions.
  • Knowing each person individually is why he says turnover stays low. He holds one-on-ones, bans calling people "resources", and tailors how he talks to and praises each one, from a quick Teams thank-you to a public award. Of 55 people over four years, he says about two have quit, against an industry where people change jobs every two or three years; Giard adds that the empathy has to be sincere.
  • Humour eases pressure during outages and deadlines. His teams are known for bad jokes and did costume and Zoom-background days after going remote; he deliberately throws in a joke when an outage has people circling.
Technology and FriendsDon Miller on Headless Content Management Systems [TECHNOLOGYANDFRIENDS 719]
  • Headless CMS separates content editing from a custom-built front end. Miller says his agency uses WordPress only as a database and admin portal for non-developers, pulls the content via GraphQL or the REST API, and renders it with Next.js into static pages hosted on Netlify behind Cloudflare. The page is rebuilt when a post is saved, so no database call happens when a visitor opens it.
  • Google's page-speed demands are what make plain WordPress a problem. Miller says Google's 2021 algorithm change around Core Web Vitals wants pages to load on mobile in about a second. A WYSIWYG builder like Elementor is convenient for a quick personal site, but its generated code makes that hard for bigger companies that depend on SEO or paid advertising.
  • Moving the front end into code brings a real development lifecycle. Miller says changes now live in GitHub and go through pull requests, so a breakage can be traced back and rolled back. Netlify builds a preview URL for each pull request for clients to approve before merging, and A/B testing is possible but rarely done because it is a lot of work.
  • Serving cached static copies improves security and scalability. Miller says Cloudflare copies the rendered site to locations worldwide, so an attacker, including in a DDoS attack, hits a static copy with no server or database behind it. He stresses he would never call it unhackable.
  • Headless takes developers, not WordPress developers. Miller says retraining his WordPress staff from CSS and PHP into JavaScript front-end work was one of the largest challenges. He knows of no prepackaged offering that avoids custom development, and says that at his talks four of five attendees don't know what headless is.
Andrej KarpathyThe spelled-out intro to language modeling: building makemore
synopsis

This lecture builds the first and simplest member of the makemore family — a bigram, character-level name generator — twice over: once by directly counting character-pair frequencies, and once by training a single-layer neural network with gradient descent, arriving at the identical ~2.45 loss and identical output samples both ways. The destination isn't a strong model (bigram statistics are, in his words, "just really terrible" — producing garbled near-names rather than good ones) but a fully worked bridge between classical counting-based statistical modeling and the gradient-based neural framework that every later lecture in the series builds on.

Counting bigrams. Starting from a 32,000-name dataset, he treats each name as a sequence of bigrams — consecutive character pairs — wrapping every word with a special start/end token (later unified into a single "." token) so the model also learns which characters are likely to begin or end a name. Every one of the roughly 27x27 possible pairs (26 letters plus the special token) gets a count, tallied into a PyTorch tensor and visualized as a heatmap, revealing structure like "N" being an extremely common ending character.

From counts to a generative model. Normalizing each row of the count matrix into a probability distribution turns raw statistics into something samplable: starting from the special start token, torch.multinomial draws a next character according to that row's probabilities, then repeats using the new character's row, until the end token is drawn. This produces recognizably name-adjacent gibberish ("Keanu," "O'Reilly"-ish fragments), which he confirms is genuinely better than a uniform baseline, even though it's still clearly a weak model since it only ever looks one character back.

Measuring model quality and its sharp edges. To turn "how good is this model" into a single number, he introduces the likelihood (the product of the probabilities the model assigns to every actual next character in the training data) and its practical cousins: log-likelihood (summing logs instead of multiplying tiny numbers) and negative log-likelihood, averaged, which becomes the loss to minimize — lower is better, zero is perfect. A sharp edge appears immediately: querying the model on a plausible but unseen bigram (a name ending in "...jq") returns exactly zero probability, and log(0) is negative infinity, breaking the loss entirely. The fix, "model smoothing," adds a small fake count to every bigram before normalizing, guaranteeing no probability is ever exactly zero — trading a little sharpness for robustness.

A broadcasting bug as a teaching moment. Converting the row-normalization step into an efficient, vectorized operation exposes a real and easy-to-miss PyTorch pitfall: summing across a dimension with keepdim=False collapses a column-shaped sum into a plain vector, which broadcasting rules then silently reinterpret as a row vector when it's used in a division — replicating it in the wrong direction and normalizing columns instead of rows. The code runs without any error either way; only checking that each row of the result actually sums to one reveals which version is correct. He treats this less as an aside than as a warning: broadcasting semantics deserve real study, because they fail silently rather than loudly.

Reframing bigram modeling as a neural network. Rather than storing probabilities in a table, he encodes each input character as a one-hot vector and feeds it through a single linear layer of 27 neurons with no bias and no nonlinearity, producing 27 raw outputs per input that he explicitly interprets as log-counts ("logits"). Exponentiating these gives count-like positive numbers, and normalizing them (the two steps together forming a softmax) yields the same shape of probability distribution as the counting approach — and because a one-hot vector times a weight matrix simply extracts one row of that matrix, the trained weights end up being nothing more than the log of the original count table, arrived at from a different direction. Training proceeds exactly as with micrograd: a forward pass computes probabilities and the negative-log-likelihood loss, loss.backward() populates gradients via PyTorch's autograd, and a simple update step nudges every weight against its gradient — with gradient descent alone converging to the same ~2.45 loss the explicit counting approach found directly, confirming the two are mathematically the same model reached by different roads.

Why the neural framework is worth the extra machinery. Counting works perfectly well for a single character of context because a 27x27 table is small and every cell gets plenty of data, but scaling to two, three, or ten characters of context blows the table up exponentially and starves most entries of data — a wall that counting fundamentally can't get past. The gradient-based approach doesn't have this ceiling: nothing about the loss function, the softmax, or the optimization changes as the input representation grows more complex, which is exactly what lets the same machinery scale, in later lectures, from a single input character all the way to full Transformer architectures. A closing observation ties the two approaches together further: penalizing large weights in the loss (an L2 regularization term) pushes weights toward zero, which flattens the softmax output toward uniform — mathematically the same effect as adding fake counts in the table-based version, just implemented as a tunable loss term instead of a table edit.

  • Broadcasting silently normalized the wrong axis when a dimension was dropped instead of kept. Dividing a 27x27 count matrix by its row sums gave correct results only with keepdim=True; without it, the summed vector's shape collapsed from a column to a bare 27-length vector, which broadcasting then reinterpreted as a row vector — replicating it vertically and normalizing columns instead of rows, a bug that produced no error and only surfaced by checking that each row actually summed to one.
  • A model that assigns exactly zero probability to an unseen combination breaks the entire loss function, since log(0) is negative infinity. Testing the trained bigram model on a plausible-looking but unseen name fragment produced infinite loss because that particular character pair never occurred in training; the fix, "model smoothing," adds fake counts (e.g., +1) to every bigram before normalizing, trading a bit of accuracy for guaranteed non-zero probabilities everywhere.
  • A single-layer neural network trained with gradient descent converges to the exact same model as directly counting bigram frequencies. The network's output logits are interpreted as log-counts, exponentiated into count-like values, then normalized via softmax into probabilities; because a one-hot input vector times the weight matrix simply plucks out one row of that matrix, the trained weights end up mathematically equivalent to the log of the explicit count table — reaching the identical ~2.45 loss and identical samples, but via a framework that generalizes to arbitrarily more complex networks (all the way to transformers) where explicit counting is no longer feasible.
  • Penalizing large weights during gradient-based training is mathematically equivalent to count-based smoothing. Adding a term that grows with the sum of the weights squared pushes weights toward zero, which — because zero weights produce equal logits and therefore a uniform softmax output — has the same flattening effect on predicted probabilities as adding fake counts to a frequency table, just implemented as a regularization term in the loss instead of a table edit.
Crosstalk SolutionsThe Best Access Point Placement Tips!
  • Map the walls before placing any access point. The host traces the floor plan in the UniFi Design Center (design.ui.com), marking exterior walls, interior walls and window or door openings. Exterior walls weaken signal more because of stucco or siding, so knowing which walls are exterior matters; he had to guess for the garage and closet walls.
  • Two U6 Lites cover a 1,575 sq ft house. The host puts the $99 access points in two spots. One goes in the dining room near the back window, to reach the patio and master bedroom. The other goes just outside the opening between bedrooms 2 and 3 rather than inside their hallway, which keeps the foyer and garage in range. His target is light blue coverage everywhere at 2.4 GHz, with about –60 dBm (green) at worst.
  • Too much overlap makes phones flip-flop between access points. iPhones are especially aggressive about jumping to the strongest one. The host's fix is to keep the strongest zones barely touching and to lower output power on the dining-room access point, which serves an open space with few obstructions. He calls tuning more art than science: test and adjust.
  • 5 GHz leaves weak spots that 2.4 GHz covers. On 5 GHz the far bedroom and the garage are weaker, but most devices drop to 2.4 GHz and keep working. If the garage needs strong Wi-Fi, the host suggests adding an access point there at low power so it covers only the garage.
  • Design Center plans transfer to other brands' access points. The host says the results hold for any brand whose signal strength is similar to the Ubiquiti model placed in the plan.
Polis PanditProgramming Note: Pausing PolisPandit
  • This post includes paid content that is not available publicly. See the original source.
Crosstalk SolutionsUniFi SmartPower USP-PDU-Pro - Complete Overview!
  • The USP-PDU-Pro is a UniFi-managed 2U rack power strip. Its MSRP is $279. It has 16 outlets rated 125 V AC and 15 A, 1,875 W in total: 12 across the top, plus 4 spaced out along the bottom for large power bricks. It also has 4 USB-C ports (2 A per port, 20 W shared), a circuit breaker, and a 1.3-inch touchscreen. The host has run it in his test rack since February, through Early Access.
  • Its redundant-WAN ports did nothing in the host's software. Besides a Fast Ethernet management port, it has three gigabit ports for splitting one ISP link across two Dream Machine Pros, the guide's "type B" install. On UniFi OS 1.12.24 and Network 7.2.93, those ports did not appear in UniFi and showed no activity, though traffic did pass through to his UDM Pro. The host expects UniFi to support redundant firewalls eventually but cannot say when.
  • Each outlet can be named, switched, metered and power-cycled from UniFi. The host keeps his loud rack fans set to disabled, so they shut off once the PDU connects. A "modem power cycle" option reboots the outlet labelled as the ISP modem when the UDM Pro detects an internet outage. At recording, his rack drew about 91 W.
  • The host wants outlet schedules and rates the price as fair. He would like time groups for switching outlets on and off on a schedule. He judges $279 reasonable against 1U and 2U rack PDUs from CyberPower and APC, and asks viewers for an equally capable competitor at that price.
Crosstalk SolutionsUbiquiti vs. Brian Krebs - The Final Chapter
  • Krebs has retracted his Ubiquiti breach reporting and apologized. His post "Final thoughts on Ubiquiti" says his sole source, since federally indicted for allegedly giving false information to the press, is no longer credible and that the articles are removed. The host, saying he has not followed the lawsuit, speculates that the terse wording reads like the product of a settlement.
  • The original report cost Ubiquiti about a quarter of its share price. Krebs's anonymous-source story came out in April 2021, about the breach the host dates to around December 2020; he shows the stock falling from about $389 on March 26 to about $289 on April 1. It sat near $311 at recording, which he puts down mostly to the market, chip shortages and supply-chain problems.
  • The "whistleblower" turned out to be the hacker himself. By December 2021 it emerged that the Ubiquiti security employee feeding Krebs had done the breach, then leaked it posing as an insider when Ubiquiti did not pay a ransom the host recalls as about 60 bitcoin. The host says Krebs had no way to know.
  • The host guesses the settlement bought an apology, not damages. Ubiquiti sued Krebs around April 2022. The host reasons that a blogger could never cover the roughly $4 billion of market capitalisation lost, so the suit may have aimed at the concession and deletion, perhaps with legal fees; he stresses this is speculation.
  • He blames only the hacker, neither Krebs nor Ubiquiti. In his reading Krebs acted reasonably on a vetted source and had reason to protect it, while Ubiquiti acted in its own interest in not disclosing the breach and then suing. He leaves open how sure a journalist must be before publishing damaging claims.
Technology and FriendsMichael Richardson on Yarn Berry [TECHNOLOGYANDFRIENDS 718]
  • The newer Yarn is a ground-up rewrite, not an incremental release. Richardson, a software engineer at Kroger Technology, says the lead maintainer rewrote Yarn's code base because he felt the project needed a different direction; it shipped as Yarn 2, then 3, with 4 "coming out soon", and Richardson uses "Berry" for every version after 1. He describes Yarn as fully free open source with no pricing model, and says the lead maintainer's employer, Datadog, supports his work because it uses Yarn itself.
  • Berry's developer-experience gains are coded CLI output and stronger workspaces. Richardson says every line the command line prints carries a code that can be looked up for detail on the message, warning or error. Workspaces, which Yarn was among the first to introduce, group several packages or projects (he likens them to a .NET solution) so they can import each other, which he says makes managing a monorepo cleaner.
  • Pinning the Yarn version per project removes cross-developer inconsistency. With yarn set version, Yarn downloads the chosen version into the repository, it is committed to source control, and everyone running Yarn in that project uses it, so lock files stop changing between people. He recommends it even to teams staying on Yarn 1 and says it has been "hugely helpful" at Kroger.
  • Plug and play replaces node_modules with zipped packages read on demand. Yarn keeps each package as a zip in a cache folder and hooks into Node, extracting a file only when Node requests it. Richardson says the performance testing he has seen and done shows no significant overhead, citing a prior job where reading smaller zipped files proved faster than reading uncompressed ones. Because the zips can be committed, a freshly cloned repo is ready almost immediately; Kroger uses this "zero install" strategy in some projects.
  • Migrating from the old version is easy unless you adopt plug and play. Richardson says that coming from Yarn 1, less complex projects upgrade "essentially seamless[ly]", complex ones may hit a few small issues, and the move to plug and play is where migration gets more complicated; migration docs are at yarnpkg.com. He agrees with Giard that greenfield projects should start on the latest version.
Polis PanditThe Master of Dark Money Arts, Leonard Leo
  • This post includes paid content that is not available publicly. See the original source.
Crosstalk SolutionsWireless Design! Rustic Lodge Cabin Property
  • A free equipment-list request became a public design video instead. A Tennessee lodge owner wanted Ubiquiti gear for a four-acre property: 16 cabins 20–30 feet apart, a main building 200–500 feet away, and no trenching allowed. The host says Crosstalk sells design and installation, not Ubiquiti hardware, because there is "zero margin" in it.
  • The main building is designed for redundancy because guests expect uptime. Two Netgate 4100 Base firewalls ($599 each, the first Netgate model to support high availability) with dual WAN, so Starlink could back up the line, plus optional TAC Pro support. Inside go three U6 Pro APs at $149 and a Cloud Key Gen2 Plus, chosen because the Gen2 was out of stock.
  • Two PoE switches were chosen so either can carry the full load. The host specifies two Switch Lite 16 PoE at $199, eight PoE+ ports each, over two cheaper Switch Lite 8 PoE. Those have only four PoE ports against five PoE devices, so losing one would mean dropping an AP or adding an injector.
  • One sector AP reaches all the cabins over clear line of sight. A LiteAP GPS ($99) on the building's north corner feeds NanoBeam 5AC Gen2 stations, about 300 Mbps per link in Ubiquiti's design tool at 40 MHz width. It needs an INS-3AF-I injector, since it runs 24 V passive PoE and the switch only provides 802.3af, plus surge protectors on outdoor units.
  • The host rejects the client's AP-in-every-cabin plan as overkill. Instead he puts a Mesh Pro AP ($199) outside about every third building, six satellite sites at almost $2,000 total. Each chains two PoE injectors from the NanoBeam; adding a Switch Lite 8 PoE per site would cost about $774 more across six.
  • Crosstalk would bill this as a two-day, two-person install. Main-building equipment comes to about $3,383 before cabling. The host prices labor at about $6,200: four hours of design at $200 an hour, a two-day minimum on site at $1,800 a day including per diem (ideally with two staff), and two travel days at half rate ($900).
Crosstalk SolutionsTesting the U6 Enterprise for Prizes!
  • The U6 Enterprise's 6 GHz band buys capacity, not speed. The host explains that this first Wi-Fi 6E AP from Ubiquiti gains less interference and room for 80 and 160 MHz channels in a band about four times the size. Ubiquiti rates it at 10.2 Gbps aggregate (4.8 Gbps on 6 GHz, 4.8 on 5 GHz, 570 Mbps on 2.4 GHz) and 600 clients, on a 2.5 GbE port with PoE+.
  • Single-client tests landed around 200–400 Mbps. On a UDM Pro (UniFi OS 1.12.24, Network 7.2.91, the latest stable at recording), with the AP on a 2.5 GbE port of a USW Enterprise 24 PoE, the host's Wi-Fi 6 laptop and iPhone averaged about 350 Mbps down and 350–400 Mbps up to an OpenSpeedTest server on 10 GbE. iPerf gave 200–350 Mbps; he concedes this does not test a 600-client AP.
  • A 20-laptop class contest still bottlenecked elsewhere. At the Crosstalk Fundamentals of Networking class in Austin, students raced to download a 2 GB file for a prize of a U6 Enterprise and UDM SE worth about $800. The Windows 11 SMB share on the host's laptop was the weak link, and the winner took about 8 minutes; the AP "didn't break a sweat".
  • Wi-Fi 6 access points are hard to load-test without real money. The host had considered a dozen Raspberry Pis running a random-browsing script but notes they are not Wi-Fi 6. He has no cheap capacity test and asks viewers for one.
Polis PanditThe Pretextual Death of Aleksandr Dugin's Daughter
  • This post includes paid content that is not available publicly. See the original source.
Scott HanselmanEmulating a C64 1541 Floppy disk drive with a Raspberry Pi. AMAZING
  • Original 1541 drives are the weak point of a restored C64. Hanselman, refurbishing a 40-year-old Commodore 64 still in its original Sears box, says the 5¼-inch 1541 drive has moving parts, heads that drift out of alignment, and is very slow.
  • Pi1541 emulates the drive clock-perfectly, so the C64 cannot tell. The open-source project by Stephen White (whom Hanselman says he has donated to) puts a hat on a Raspberry Pi Zero, roughly a $10 board he estimates at three to four thousand times the C64's speed, and serves disk image files picked from an SD card. He stresses that only the drive is emulated, not the C64 itself: "emulation is lying" to the machine.
  • Small adapters let real Commodore hardware use modern conveniences. His second example translates between the C64's 1351 mouse and a PS/2 mouse connector, and he argues such devices let him keep original hardware while using modern mice and disk-file loading.
Andrej KarpathyStable diffusion dreams of psychedelic faces
  • This post is a wordless visual piece, not a narrated lecture. Its caption track consists only of "[Music]" tags across the full 4-minute runtime, with no spoken or technical content to summarize.
GCastDeploying a Web App to Azure from VS Code [GCast 135]
  • VS Code deploys to App Service through Microsoft's Azure extension. Giard installs the Azure App Service extension from Microsoft (about 60 seconds), which adds an Azure icon to the left toolbar; you pick the right subscription, expand App Services and right-click to create a new web app. His demo app is Node, but he says the method applies to any language App Service supports, such as C#, Java or Python.
  • The advanced create path asks more questions for more flexibility. Its six questions are a globally unique app name, a new or existing resource group, the runtime stack (he takes the most recent Node), Windows or Linux (both supported; he picks Linux), a region chosen for latency to users and to the resources the app calls (he takes East US), and a new App Service plan with a pricing tier of free, development/test or production. Application Insights is optional and, like much of this, can be changed later in the portal.
  • Creating the web app does not deploy the code. A separate Deploy button asks which folder to deploy and whether to always deploy it to this app service (he skips that); it uploads only the files needed to run, such as binaries and views, not all the source. In the demo it took about two minutes, after which "browse website" served the same page that had run locally on port 3000.
Scott HanselmanThe best progamming language to learn in 2022?
  • No single best language; success is possible in any. Hanselman names C#, Java, JavaScript, Python, Ruby, Rust and Go, and argues people fixate on language details when they should be thinking about the larger systems languages live within.
  • Pick by enjoyment and local jobs, and ignore "this language sucks". His advice is to learn one, see whether it "feeds your spirit", check the job market where you live, and switch if it doesn't suit; he notes your favourite websites are probably written in a language someone else thinks sucks, so success is the better metric.
GCastManaging Microsoft Edge Profiles [GCast 134]
  • Edge profiles keep separate settings and accounts in one browser. Giard keeps one for work and one for personal, each tied to a different email address; he says this suits defaulting to different sign-ins, or single sign-on with a customer's account.
  • A new profile is added from the profile icon and synced to an account. The icon sits at the top right; "Add profile" then asks you to sign in to sync data with an existing or new email account. Giard suggests giving each profile a different color theme so it is easy to tell which one you are in.
  • Rename, repicture or remove a profile under Settings, Profiles. The three dots next to a profile offer edit (a descriptive name in place of the default "Personal 2", and a picture in place of initials) and remove. Any profile but the first can be deleted; there must always be at least one.
Andrej KarpathyStable diffusion dreams of steampunk brains
  • This post is a wordless visual piece, not a narrated lecture. Its caption track consists only of "[Music]" and "[Applause]" tags across its roughly 19-minute runtime, with no spoken or technical content to summarize.
Crosstalk SolutionsSnom's Innovative Conference Phone Lineup
  • Crosstalk is replacing Yealink with Snom over security concerns. The host, whose firm sells and supports VoIP systems, says Yealink looks headed for the same bucket as Huawei and Hikvision. Crosstalk evaluated several brands and is now selling Snom for its conference and DECT phones, alongside its own Crosstalk-branded desk phones.
  • The C520 adds detachable wireless mics for long tables. It lists at $345 MSRP: a full-duplex speakerphone for small to mid-size rooms, with two mics rated 70 hours standby and 12 hours talk that recharge on the base. It also has PoE or a power adapter, G.722, Bluetooth pairing to a cell phone, automatic gain control, a 2-year warranty, and expansion via C52 SP speakers.
  • The C620 costs more for a fully wireless phone. At $499 it keeps the wireless mics but drops Bluetooth; the phone itself lifts off a charging base and talks to a separate DECT base, with 12 hours of talk time. The host pitches it for tables with no PoE or power beneath, and it carries a 3-year warranty.
  • The host's test call on the C520 sounded clear. He called Crosstalk's main line and judged the quality "really good", noting the call went over his cellular connection rather than an HD voice codec.
Andrej KarpathyStable diffusion dreams of tattoos
  • The caption track contains no spoken content to summarize. The 106-second video's captions hold only automatic tags for music, applause and laughter (11 words in all), so nothing it shows or argues can be recovered from the text; the title suggests it is a montage of Stable Diffusion-generated tattoo imagery set to music.
Andrej KarpathyThe spelled-out intro to neural networks and backpropagation: building micrograd
synopsis

Starting from a completely blank notebook, this lecture builds micrograd — a roughly 150-line scalar-valued automatic differentiation engine — from first principles, then uses it to define and train a tiny multi-layer perceptron (three inputs, two hidden layers of four neurons, one output; 41 total parameters) on a four-example toy classification problem until its loss reaches essentially zero and its predictions match the targets almost exactly. The destination isn't the model — it's a complete, ground-up understanding of what every modern deep learning framework (PyTorch included) is actually doing underneath its tensors and GPUs, since he demonstrates throughout that the only difference between micrograd and production frameworks is efficiency: PyTorch does the identical math, just packaged into parallel n-dimensional arrays instead of individual scalars.

What a derivative actually measures. Rather than symbolically differentiating anything, the lecture starts from the raw definition — the limit as h approaches zero of (f(x+h) − f(x))/h — and estimates it numerically on a simple parabola, building the intuition that a derivative just measures how sensitively an output responds to a small nudge in an input, and in which direction. This same numerical-nudge approach is reused throughout as a way to sanity-check every gradient the engine computes analytically, treating agreement between the numerical estimate and the backpropagated value as the truth test for correctness.

Building the Value object and its expression graph. A Value class wraps a single scalar and overloads Python's arithmetic operators (__add__, __mul__, later power, negation, and division derived from those) so that ordinary-looking Python expressions silently construct a full computational graph: every Value remembers which operation produced it and which other Values (its children) fed into that operation. Visualizing this graph directly makes it concrete — feeding two inputs through a chain of additions and multiplications produces a small DAG whose leaves are the original inputs and whose root is the final output, with every intermediate result labeled and inspectable.

Manual backpropagation through a full expression. Working outward from a final output whose gradient with respect to itself is trivially 1, he hand-derives the gradient of every node in a small expression graph by applying the chain rule one node at a time: for any node, the gradient of the final output with respect to that node's inputs equals the node's known "local" derivative (how its output changes with respect to each input, in isolation) multiplied by the gradient already flowing into it from downstream. Working through an addition node and a multiplication node repeatedly, a clean pattern emerges: addition nodes have a local derivative of 1, so they simply copy their incoming gradient unchanged to every child (they "route" gradient); multiplication nodes have a local derivative equal to the other input's value, so they scale the incoming gradient by that value before passing it down. Every manually-derived gradient is cross-checked against a numerical nudge, and they agree.

Backpropagating through a neuron. The same machinery is applied to a biologically-inspired model of a single neuron — a weighted sum of inputs plus a bias, squashed through a tanh nonlinearity — introduced first as one atomic operation (since its forward value and derivative, 1 − tanh(x)², are both known from calculus) and later reimplemented from raw exponentiation, addition, and division primitives to prove the two approaches give bit-for-bit identical forward outputs and gradients. This demonstrates a general principle he states explicitly: the graph doesn't care whether a node represents an atomic operation like addition or an arbitrarily complex composite function — all that matters for backpropagation is that you can compute the node's output and its local derivative, a principle mirrored directly in how PyTorch lets users register entirely custom autograd functions.

Automating the backward pass. Rather than manually propagating gradients node by node, each Value gains a private _backward closure that knows how to push its own output gradient into its children according to its specific operation, and calling .backward() on the final node performs a topological sort of the graph — ensuring no node's gradient is finalized before every node that depends on it has already propagated its contribution — then walks the sorted list in reverse, invoking every node's _backward in the correct order. Along the way, a subtle and consequential bug surfaces: when a value is reused multiple times in an expression (as simple as b = a + a), naively setting a child's gradient during each backward call overwrites earlier contributions instead of combining them, giving a wrong answer (a gradient of 1 instead of the correct 2). The fix, motivated by the multivariable chain rule's requirement to sum contributions across every path from a variable to the output, is to accumulate gradients with += rather than assign them with = — a one-character difference that determines correctness anywhere a value or a set of shared weights gets used more than once, which describes essentially every real neural network.

Confirming the engine against PyTorch. The same small expression, rebuilt using real PyTorch tensors (wrapped as single-element double-precision tensors with requires_grad=True), produces identical forward values and identical gradients once .backward() is called — establishing that micrograd, despite operating on individual Python scalars instead of parallel tensor arrays, is mathematically doing exactly what a production framework does, just without the efficiency of batched, hardware-accelerated array operations.

From engine to neural network library. On top of the roughly 100-line autograd engine, an entire neural network library is built in about 50 more lines: a Neuron computes a weighted sum of its inputs plus a bias and passes it through tanh; a Layer is simply a list of independently-evaluated neurons; and a Multi-Layer Perceptron (MLP) chains layers sequentially, mirroring PyTorch's own nn.Module API closely enough that a shared parameters() method can gather every weight and bias across the whole network for updating. A four-example toy dataset (each example a 3-dimensional input paired with a target of +1 or −1) is used to define a mean-squared-error loss — a single number summarizing how far every prediction is from its target, engineered so that lower is always better and zero means perfect predictions.

Training via gradient descent, bugs and all. Calling .backward() on the loss back-propagates through all four forward passes simultaneously, populating a .grad on every one of the network's 41 parameters; nudging each parameter a small step in the negative direction of its gradient (since the gradient points toward increasing loss, and the goal is to decrease it) measurably lowers the loss on the next forward pass, and repeating this forward-backward-update cycle is gradient descent itself. Choosing a learning rate is shown to be delicate first-hand: too small converges too slowly, too large risks destabilizing or exploding the loss, though in one case the model overshoots and by luck rapidly lands in a very good spot anyway. Left deliberately uncut is a real, on-camera bug: because each .backward() call accumulates gradients onto whatever a parameter's .grad already holds rather than resetting it, omitting an explicit "zero the gradients" step before each backward pass caused gradients to compound step over step, artificially inflating the effective step size — the network still converged, but only because the toy problem was trivially easy; with anything harder, the same one-line omission (a mistake he notes he's made many times, on camera, over a career) would have derailed training entirely. The closing framing ties it all together: a neural network, no matter how large, is just a mathematical expression connecting data and parameters to a loss through additions, multiplications, and nonlinearities; gradient descent is simply following that expression's local slope downhill; and the same principles — differing only in scale, nonlinearity choice, and loss function — extend unchanged from a 41-parameter toy classifier all the way to language models with hundreds of billions of parameters.

  • Backpropagation is just the chain rule applied recursively, and each operation has a distinctive way of passing gradient backward. An addition node's local derivative is always 1, so it simply routes its output gradient unchanged to both children; a multiplication node's local derivative is the other operand's value, so it scales the incoming gradient by that value before passing it on — demonstrated by manually computing every intermediate gradient in a small expression and confirming each against a numerical estimate.
  • When a value is used more than once in an expression, its gradient contributions from every use must be summed, not overwritten. Building b = a + a and calling backward revealed a bug: naively setting a.grad each time a child is visited leaves it at 1 instead of the correct 2, because the multivariate chain rule requires accumulating (+=) gradients flowing in from every path, not assigning them.
  • Forgetting to zero out gradients between training steps is a classic, easy-to-miss bug that silently inflates the effective learning rate. Caught live: because each .backward() call accumulates onto existing .grad values rather than resetting them, an omitted zero_grad-equivalent step caused gradients to build up across iterations, making a tiny network converge deceptively fast only because the toy problem was trivial — with a harder problem, the same bug would have stalled training.
  • Any function can be a node in the computational graph, atomic or composite, as long as its forward output and local derivative are both known. Implementing tanh two different ways — as one direct operation, and by decomposing it into exponentiation, addition, and division primitives — produces identical forward values and identical gradients either way, which is the same principle PyTorch uses to let users register arbitrary custom autograd functions as new building blocks.
Andrej KarpathyStable diffusion dreams of "blueberry spaghetti" for one night
  • This post has no transcript content to summarize. The transcript file for this roughly 5-minute video is empty; the title indicates an AI-generated visual sequence ("blueberry spaghetti") rather than a narrated lecture.
Crosstalk SolutionsUniFi Teleport - Easy Setup VPN
  • Teleport is remote access into your own network, not a privacy VPN. The host describes Ubiquiti's one-click VPN as reaching home or office resources from somewhere like a hotel, unlike site-to-site VPN or services like NordVPN. It is built on WireGuard, which Ubiquiti says stores no data, and needs a Dream Machine, Dream Machine Pro, Pro SE or Dream Router, UniFi Network 7.1 or later, and the WiFiman app.
  • Issue one invitation link per user so each can be revoked. Under Settings, Teleport & VPN, you generate a link, which Ubiquiti says is single-user, and send it to the person, whose WiFiman app opens it and builds the tunnel. The invitation history shows each link's status and lets you revoke one user without affecting others.
  • The Teleport client subnet cannot be changed. In the host's test on UniFi OS 1.12.24 and Network 7.2.91, the phone got 192.168.3.1 and appeared as a Teleport client. He says the subnet is fixed for now and has heard this may change.
  • Test from a different network, or the result proves nothing. The host's first ping to his TrueNAS ran while his phone was still on the same Wi-Fi. After switching SSIDs, the tunnel reconnected and he could ping the server and load its web interface.
Andrej KarpathyStable diffusion dreams of steam punk neural networks
  • This post has no transcript content to summarize. The transcript file for this roughly 2.5-minute video is empty, with no spoken or technical content to extract.
GCastConfiguring an Azure App Service Identity Provider [GCast 133]
  • An App Service gets sign-in from its Authentication blade. "Add identity provider" offers Microsoft (Azure Active Directory and Microsoft accounts) and third parties such as Apple, Facebook and GitHub; Giard notes the third parties require you to register with them first.
  • The supported account types decide who can sign in. Choosing Microsoft and a new app registration, the options are a single tenant, multiple Azure tenants, personal Microsoft accounts (Outlook.com, Hotmail, Live.com), or both Azure AD and personal accounts, which he picks for flexibility. He requires authentication and sets the HTTP code returned when it fails.
  • Setup creates an app registration in Azure Active Directory. It appears under App registrations, easiest found by filtering to owned applications and sorting by created date. Giard is an owner of it, which is why he can still reach the now-protected site.
  • Other users get in through a Reader role assignment. On the app service's access control blade he adds a role assignment; he calls Reader the common choice for people who use the app, and Contributor for those who manage it. Members can include guest accounts in the directory, and a Hotmail guest he assigns could then open the site.
Polis PanditWe Must Enforce the Rule of Law While Risking Another Trump Presidency
  • This post includes paid content that is not available publicly. See the original source.
Scott HanselmanDon’t you miss copying your code directly from a magazine to play a game?
  • Magazines once delivered C64 games as code you typed in. Hanselman recalls that besides cassette, disk or radio, games came as printed listings in mailed magazines; a friend paid in Skittles would read the 6502 assembly aloud while he typed, and later issues added features until you had a playable game. He calls it "the coolest thing ever", and notes the channel is not a Commodore 64 channel, just his interest that week.
Crosstalk SolutionsUniFi Protect AI Theta Cameras Announced!
  • AI Theta splits the lens from the camera's electronics. Per Ubiquiti's announcement, a lens with a 22 mm footprint sits flush in a wall or ceiling and connects by USB-C, up to 30 meters away, to a PoE body holding the compute. Lenses range from 360-degree to telephoto, and the early-access kit, which hit the store the day of recording, ships with a 360 lens and an 8 MP standard lens.
  • Two-way audio needs a separate optional module. The speaker and microphone array is an add-on, resembling the Smart Chime in form, that plugs into the body; there is also an articulating mount. The host likes that this lets a camera watch from above a door while the speaker sits at mouth level.
  • The host suspects "AI" cameras will get analytics the G4 line won't. The announcement shows people-counting over time. He guesses AI-branded models will get such features while G4 cameras stay limited to smart detections, which he says would explain the AI Bullet's $399 price against $199 for a G4 Bullet with similar lens specs. He labels this speculation.
  • Expect the software to lag the hardware at launch. From past Ubiquiti releases, the host expects basic features at general availability that improve over time. Ubiquiti claims high-frame-rate 4K, lens dewarping and high dynamic range.
Scott HanselmanDid you know Ctrl-Shift-A lets you search your open tabs?!?
  • Ctrl-Shift-A searches across all open browser tabs. Hanselman's tip for having too many tabs open: press it and start typing to find a tab. The video does not name the browser.
Technology and FriendsMichael Scherotter on Galeryst [TECHNOLOGYANDFRIENDS 717]
  • His site turns photo albums into shareable 3D virtual galleries. Scherotter, a technical program manager at Microsoft, built it during a sabbatical because his 30 years of illustrated travel journals do not exhibit well in physical galleries; he scanned them into Adobe Photoshop Lightroom, and Adobe's opening of API access to Lightroom data during the pandemic made the site possible. He says Adobe's fund for design gave him a grant after he applied, and he launched in December 2021.
  • The stack is TypeScript end to end on Azure, with Stripe billing. He describes Azure App Service running Node.js, TypeScript on client and server, Babylon.js for 3D in the browser, and WebXR so galleries can be viewed in a VR headset. Stripe runs recurring subscriptions, the cheapest at $3.99 a month, and he says that income pays for his Azure consumption.
  • Free users get one gallery; subscribers get links and customization. Anyone with an Adobe ID and a Lightroom album can create one free gallery, set public, link-only or private. Subscribers can attach links to each work, such as a making-of video, an NFT or their own shop; he says he does no commerce on their behalf. He reports almost 500 people have created galleries, including schools in Indonesia and Trinidad and Tobago.
  • Shipping fast without tests caused instability that unit tests cured. Scherotter calls managing complexity the biggest challenge: he built rapidly, saw stability issues, then wrote hundreds of unit tests on the Node code while isolating with COVID earlier this year. He says the tests uncovered errors, crashes stopped, and he is now more confident adding features as the sole engineer.
  • Next he wants analytics showing how visitors walk through a gallery. He has no formal roadmap, takes feature requests in a GitHub repo, and now works on the site evenings and weekends. He wants to show gallery owners what visitors linger on and click, something he says a physical gallery cannot do well.
Technology and FriendsDarryl Hogan on Accelerating Technologies for Nonprofits [TECHNOLOGYANDFRIENDS 716]
  • Small nonprofits lag on technology, and technologists can volunteer to close it. Hogan, who says his passion is empowering the Black community in North America, finds that small agencies living on donations lack awareness of newer technology or the resources to adopt it, unlike large charities with IT budgets. He suggests starting with your company's benefits or community-giving coordinator, or asking contacts in your tech community, and says he has never offered help and been refused.
  • His project moved a nonprofit's hard-to-maintain site into the cloud. The organization, a not-for-profit that helps other not-for-profits (Hogan confirms its site as givinggap.org), keeps a central database of Black-founded or Black-focused organizations where visitors can learn about them and donate. Hogan says the site was not scalable and the group had no real DevOps capability, so the work grew from a site rebuild into cloud hosting that frees office staff for fundraising.
  • No free cloud credits came, so the design fit their budget. Hogan says the cloud providers they checked had no program they could use right away, partly because the organization was still working on its 501(c)(3) designation. It could carry light hosting costs, and the solution was built to land within those constraints.
  • Resistance to change is overcome by earning trust. Hogan says a working solution makes any change look like a gigantic risk to non-technical staff. His answer is to show you understand the technology, show why it benefits the organization, and build relationships with its administrators until they are confident you can deliver.
  • Volunteer-built solutions must be sustainable after the volunteer leaves. Hogan says skilled tech volunteers are scarce and usually "fly in, do what you can do, and fly out", so the next person will likely arrive blind. He contrasts for-profits, which he calls more hierarchical and mission-driven in adopting technology, with small nonprofits, where the aim is better day-to-day operation and the leader signing the check may not understand the technology at all.
Polis PanditTrains, Climate Change, and the Week In Politics
  • This post includes paid content that is not available publicly. See the original source.