Souk's Notes - Unofficial Summaries

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

Technology and FriendsJason Farrell on Kubernetes [TECHNOLOGYANDFRIENDS 653]
  • Containers scale faster than VMs but need an orchestrator. Farrell, who works on DevOps and Kubernetes at New Signature (since acquired by Cognizant), cites a Tinder engineering write-up: startup went from several minutes for VMs on AWS to under 30 seconds for containers, across about 48,000 containers, too many for people to manage. Kubernetes, an open-source CNCF project under the Linux Foundation that grew out of Google's Borg, has in his view become the de facto orchestrator over rivals such as Mesos.
  • The orchestrator's core job is maintaining a declared desired state. If you declare eight instances and one dies, it notices and starts another; the horizontal pod autoscaler can scale on CPU between a floor and a ceiling (eight to 100 in his example). Because CPU misses work such as a long queue, he recommends KEDA, a Microsoft-created project that scales on Azure queue or Kafka topic depth. He believes autoscaling can also follow a schedule but said he would check.
  • Deployment runs image, pod, service, then rolling deployment. An image pushed to a registry is a class and containers are its instances; a pod, roughly the Kubernetes equivalent of a VM, runs the containers; a service routes outside traffic to whichever pods exist, since their number is elastic. The deployment resource does rolling updates by default, e.g. replacing 80 pods 10 at a time to avoid downtime.
  • Linux containers are far more mature than Windows ones. He puts the smallest Windows container at around 800 MB against about 20 MB for Linux, and says Windows has been in the space one to two years against Linux's five or six. He believes Kubernetes accepted Windows containers from version 1.16, mainly for .NET Framework apps; .NET Core typically ships on Linux.
  • Learning Kubernetes in the cloud can get very expensive. He ranks Google's offering first and AKS close behind, with Amazon harder to work with, and warns AKS users to shut down the VM scale sets at day's end. After an Amazon re:Invent EKS lab, his "deleted" cluster self-healed and ran up a $20,000 bill, which Amazon waived; he suggests free single-node local clusters such as Minikube or MicroK8s, plus kubernetes.io and the cncf.io landscape of what he recalls as 200–300 projects.
Scott HanselmanAzure Static Web Apps, Website, GitHub, SSL & hosting FREE! Computer Stuff They Didn't Teach You #20
  • Azure Static Web Apps gives a free live site, while in preview. Hanselman picks it because it is free "while it's in preview" at the time of recording, alongside free GitHub and Visual Studio Code. He generates a repository from Microsoft's vanilla-basic static-site template (templates also exist for Angular, React, Vue and Blazor) and creates the app in the Azure portal on the Free tier, in a resource group he describes as a named circle around related resources.
  • Connecting GitHub writes the CI/CD workflow for you. Signing in with GitHub from Azure generates a GitHub Actions workflow, so every check-in builds the site and deploys it to Azure under a generated URL, which he shows taking about a minute. He then clones the repo with the GitHub CLI, edits in VS Code and pushes, and the change redeploys on its own; he calls this continuous integration and continuous deployment.
  • Custom domains and SSL certificates come free and automatic. He points the www record of a domain he had bought at the generated URL with a CNAME, Azure validates it, and a certificate is issued minutes later without his involvement. He notes the apex ("naked") domain is handled differently from www.
  • The point is the exercise, not the host. He concedes GitHub Pages and other hosts work too, but argues that doing this once teaches DNS, SSL and HTTPS, and how source host, web host and DNS registrar (his is DNSimple) relate. He calls it a kata for early-career people, done in about 20 minutes and recorded in one shot on 15 March.
Technology and FriendsBrian Genisio on Incremental Rewrites [TECHNOLOGYANDFRIENDS 652]
  • Khan Academy is rewriting its back end one field at a time. Genisio, an engineering manager there, describes about a million lines of Python 2.7, which reached end of life and has no backward-compatible path to Python 3, being moved to Go across 27 services that he says are not microservices. They chose Go for type safety, after 10 years of breakage from dynamic typing, and for performance, which ruled out Python 3. The estimate was about 47 person-years; they are roughly halfway, with 41% of fields migrated.
  • An Apollo Federation gateway moves each field through test stages. The API had been GraphQL since about 2016 and was about 70% of the way there, so the remaining REST-like endpoints were moved first. A decorator on each new field sets its stage. In "manual" a query parameter routes it to the new service for testing. In "side-by-side" the gateway calls both systems, compares the results and logs mismatches into a next-day report, without the client waiting. In "migrated" the new service serves it, and a configuration change reverts it. Then the Python is deleted. He also runs side-by-side locally to catch differences, such as an http-versus-https URL, before deploying.
  • Matching production output counts as correct; unported rules are dead code. Where unit tests exist they port the tests, then the code. Side-by-side then compares real traffic from about 3 million users a day, so he reasons that a business rule not needed to match the output is dead, and a missed edge case would just be a bug. He says edge cases have not been the problem. The problems have been scaling the new architecture on the same Google App Engine infrastructure: a provided Redis caching layer that did not scale, 30-second latencies in the Node-based gateway, and App Engine's new platform APIs.
  • The port adds no new behavior and keeps existing bugs. Their guidelines bar new behavior during the move. If the Python returns null where it should return an empty string, the Go does too, because clients may rely on it. New features are built in the new services, which can mean calling back to the monolith or waiting until a service is far enough along.
  • A "minimal viable experience" sets the order; some features are dropped. This core of content delivery, user management, teacher tools and assignments covers what must exist if Google stopped running Python 2.7. It still covers 60–70% of the code base, and no team starts on P1 work until it is all done. Some features will not be ported: streaks, which a small group of users loved, are being sunset because Khan Academy's pedagogy does not want to encourage daily use.
Crosstalk SolutionsPassword Pusher - Open source secure password transfer
  • Password Pusher replaces emailing credentials with expiring one-time links. The host argues that passwords sent by email or ticket sit in clear text with a permanent trail. The open-source project, by a developer in Palermo, Sicily, hosted at pwpush.com, expires a link after a set number of days or views, whichever comes first, and can let the recipient delete it after copying.
  • Self-hosting avoids trusting the central pwpush.com database. The GitHub project supports Heroku, Docker with a built-in or external Postgres database, Docker Compose, Kubernetes, Azure, OpenShift, or building from source. Once installed, it serves on port 5000.
  • A $5-a-month DigitalOcean droplet is enough to host it. He used the Docker 19.03.12 on Ubuntu 20.04 marketplace image on the lowest plan, because the app is not resource-intensive. After updating packages, a single docker run command installed it in about 60 seconds; cloud hosting means no firewall ports to open at home.
  • The default install runs HTTP only; production needs HTTPS. Adding HTTPS involves changing ports on the default web server, which he leaves out of the video. He still judges even the HTTP version far safer than clear-text email, and asks capable developers to contribute easy HTTPS, perhaps via Let's Encrypt, to what he calls essentially a one-person project.
Crosstalk SolutionsU6-LR Review and Benchmarks
  • The U6-LR now tops the host's access-point benchmarks. It is Ubiquiti's second Wi-Fi 6 AP, 4x4 MU-MIMO with OFDMA, at $179 MSRP. It averaged 520 Mbps in his iperf tests against 349 Mbps for the next best, 574.1 Mbps in OpenSpeedTest, more than 100 Mbps ahead of the U6-Lite, and just over 400 Mbps combined, about 50 Mbps ahead of any rival.
  • The U6-LR outclasses the U6-Lite and nanoHD on paper. It transmits up to 26 dBm on both bands, with antenna gain of 4 dBi on 2.4 GHz and 5.5 dBi on 5 GHz against the U6-Lite's 2.8 and 3 dBi. It is also the first Ubiquiti AP he knows of to support 160 MHz channels. Ubiquiti claims 300+ concurrent clients, which he would never plan for on one AP.
  • Its single gigabit port is the host's main design complaint. With single clients reaching 800–924 Mbps in his tests, he expects the gigabit port to bottleneck an AP serving many such clients. He suspects a 2.5 GbE port was left out on cost, despite Ubiquiti's multi-gigabit switches on the horizon.
  • For business deployments, the host now prefers it to the nanoHD. His price-per-megabit figures were $0.29 for the $99 U6-Lite, $0.45 for the U6-LR and $0.60 for the nanoHD. He calls the U6-Lite comparison unfair, since the Lite is a 2x2 home AP. The nanoHD still edged the U6-LR by about 20 Mbps in his sustained-throughput test.
  • The host doubts his sustained-throughput test. The four clients totalled only 292 Mbps there, and he suspects disk I/O on the TrueNAS server serving one file to all four. He calls the testing unscientific but run identically for every AP: UniFi Network 6.1.61 on a UDM Pro, defaults except a 160 MHz channel, which gives the U6-LR a bandwidth edge.
Technology and FriendsKevin Ashley on AI for Design Art and Games [TECHNOLOGYANDFRIENDS 651]
  • AI can help adults recover the drawing ability they abandon as children. Ashley, an engineer and not a trained illustrator, says children give up drawing around ages seven to nine once perspective gets hard. His new book is a guide for anyone, not just data scientists, to using machine learning to improve their own drawing. He says he made its hundreds of illustrations himself with machine-learning help, and calls them a big step up from the basic drawings in his earlier book on machine learning in sports.
  • Treat the model as a partner, usable at any stage. He says you can start from a spoken or typed prompt (his example: a cucumber in a pink outfit walking a dog), from a sketch, or bring AI into only the stage you like least, such as line art or coloring. He goes further and says some models now pass a visual Turing test, meaning a viewer cannot tell their pictures from a human's.
  • Style transfer turned his line sketch into a painting. Drawing on research papers about separating a work's style from its content, he moved the style of Vermeer's Girl with a Pearl Earring onto his own sketch and says he touched up little beyond the eyes. The model was trained on anime and manga, which shows in the result. He says face models estimate the head's 3D orientation (the iris is about 11 mm across, and some Google models map 486 facial features), which lets the light source be moved after the fact.
  • AI can take over the frame-by-frame labor of animation. In the 1930–1950 golden age at Disney, he says, a lead animator drew frames 1 and 96, about four seconds, and others drew the 94 in between. AI can now animate a character's speech and lip movement from a single image, which he says is useful to professional animators too.
  • Zero-setup cloud notebooks keep the method open to non-programmers. Instead of asking readers to install a conda environment with PyTorch and Keras, the book uses cloud notebooks such as Colab that run from a link. He says his wife, a watercolorist, was doing style transfer within 10–15 minutes. On 5 February 2021 he said the book was about 80% done, on Kickstarter, and due in about two months.
Scott HanselmanWSL2, Visual Studio Code, Windows 10, Ubuntu/Linux + more - Computer Stuff They Didn't Teach You #19
  • The terminal is not the shell. Hanselman presents Windows Terminal as a console app that hosts many shells (cmd, PowerShell, Linux distros) as customisable profiles; at recording it was at 1.6, with 1.7 in preview adding a settings GUI instead of JSON editing. He themes his prompt with Oh My Posh 3, which he says works across Mac, Unix and Windows.
  • WSL needs only a Windows feature and a Store distro. He turns on Windows Subsystem for Linux under Windows Features, saying Hyper-V is not required, then installs a distro from the Microsoft Store and it appears in the terminal. He says it works on Windows 10 Home as well as Pro, and with free Visual Studio Community, VS Code and Ubuntu makes a free Linux dev setup.
  • Treat Windows and Linux as two machines and sync with git. Windows drives are reachable from Linux under /mnt, but he says that path is slow because it is "a bit of a network hop" even though it is local. He keeps separate clones on each side and runs git pull on both, and shows each side has its own .NET install, path, prompt and fonts to keep up to date.
  • VS Code becomes a client-server app into Linux. Running code . from Ubuntu installs a VS Code server inside Linux, so the Windows editor's terminal, file dialogs and debugger all work in the Linux environment; he sets a breakpoint in his .NET site and says Node and Python work the same way. explorer.exe . shows each running distro's files as a network share, which he says gives integration a virtual machine cannot match.
  • Full Visual Studio can debug in WSL2 too. With an extension, Visual Studio offers WSL2 as a launch target next to IIS Express and Kestrel, and runs his podcast site from the Windows drive inside Linux. His conclusion is that you can be a Linux developer on Windows, as long as you keep track of which file system and OS your code is on.
Technology and FriendsChristos Matskas on Microsoft Identity Platform [TECHNOLOGYANDFRIENDS 650]
  • Identity work splits into signing users in and running apps securely. Matskas, a PM on Microsoft Identity's developer advocacy team, says his team is DevRel in practice, teaching both through Twitch streams, podcasts, user groups and conferences.
  • The Microsoft Identity Platform is an umbrella, not one product. He places Azure Active Directory at its core for organizational users and resources, and Azure AD B2C at the other end for external customers signing in with a username and password, social logins, or any OpenID Connect provider; B2B, easy auth for web apps, managed identities and service principals also sit under it.
  • Getting started takes an app registration plus a library. Registering in Azure AD or B2C yields an application ID and tenant ID that the code uses, and Matskas says developers should not need to think about protocols or flows. Registration is fully API-driven, so teams without portal access can use the Graph API, PowerShell, the Azure CLI or their own wrappers.
  • Standards compliance means developers can bring their own library. Because the platform follows OAuth 2 and OpenID Connect, he says an existing app, such as a Node.js app on Passport for three years, can just be pointed at Microsoft's endpoints. For new projects he recommends MSAL, which he says keeps reaching more languages, with a Go library in preview.
  • Managed identities let apps run without secrets. Matskas says developers can drop connection strings and secrets from local development for resources like Azure SQL and storage, then move the same code to production unchanged, where managed identity works with the Azure SDKs and Graph.
Crosstalk SolutionsStarlink + UniFi - Does it work??
  • Starlink works with your own router; theirs is optional. The host unplugged the Starlink Wi-Fi router, ran a 100-foot Cat5e cable from the power brick into a UniFi USG and got a DHCP address straight away. He says the same applies to a retail Netgear, a UDM Pro, EdgeRouters or pfSense. He used an on-site Cloud Key Gen 2 rather than a cloud-hosted controller in case the satellite link proved intermittent.
  • As a UniFi secondary WAN, Starlink failed over with no dropped pings. He created a new network of type WAN ("WAN2", IPv4 via DHCP, load balancing set to failover only rather than weighted) and assigned it to the USG's WAN2/LAN2 port. With firmware current as of 15 February 2021, he pulled the Xfinity cable and a persistent ping to 1.1.1.1 showed no interruption.
  • Starlink runs over CGNAT, which rules out port forwarding for now. The USG's WAN2 showed 100.68.134.85 while the public address appeared as a 143.x address. As far as the host knows, no port forwarding is possible today, perhaps until IPv6 arrives. He would be "very surprised" if VoIP worked well over it but left that test for a later video.
  • Speeds were good but latency was uneven. Fast.com showed 97 Mbps. Speedtest.net gave 83.46/28.59 Mbps at a 153 ms ping, then 120.79/14.06 Mbps at 26 ms, and 82.8/15.6 Mbps at 31 ms over a UniFi AC Mesh access point. Pings sat mostly at 20–40 ms with spikes to 117–136 ms. The host attributes the spikes to gaps in satellite coverage (shown on satellitemap.space) and expects them to shrink as more satellites launch.
  • Starlink's price is justified for rural users and business backup. At $99 a month, the host argues, it is not meant to compete with $59–69 cable. Its value is for people whose only option is roughly 3 Mbps DSL at $60–70 a month, and as about $1,200 a year of backup that is independent of terrestrial cable. He saw no slowdown in heavy rain, and the power brick drew 85 to almost 150 W.
Crosstalk SolutionsEngenius vs. Ubiquiti Bandwidth Showdown!
  • The EnGenius EWS850-AP edged out the U6 Lite overall, for far more money. The host's combined benchmark, an average of iperf3, OpenSpeedTest and sustained-throughput results, put the outdoor EWS850-AP (about $330) at 348 Mbps and the $99 Ubiquiti U6 Lite at 336 Mbps. He calls the two "about almost exactly the same." The nanoHD scored 300 Mbps, the EnGenius ECW230 214 Mbps and the UAP-AC-Pro 202 Mbps.
  • The priciest unit, the EnGenius ECW230, underperformed despite its specs. The $499 4x4 Wi-Fi 6 access point came fourth in iperf3 and OpenSpeedTest and last in sustained throughput, where the 4x4 Wi-Fi 5 nanoHD swapped into the same mount the same day ran about 2–2.5 times faster. He re-ran the test several times. He notes that Wi-Fi 6 is more about aggregate throughput in dense environments than about speed to any one client.
  • Which access point won depended on the test. The EWS850-AP led iperf3 at about 350 Mbps, which the host credits to higher-gain external antennas. The U6 Lite led OpenSpeedTest at about 450 Mbps. The nanoHD led sustained four-client downloads at over 300 Mbps. He calls the method "not entirely scientific": four low-end Wi-Fi 6 clients in fixed spots around his house, pulling from a NAS connected at 10 Gbps.
  • On price per megabit, the U6 Lite was the clear value. By the host's calculation it costs $0.29 per Mbps, ahead of the nanoHD ($0.60), the UAP-AC-Pro ($0.73), the EWS850-AP ($0.95) and the ECW230 ($2.33).
  • Crosstalk will stop deploying the UAP-AC-Pro. The host has installed hundreds of them, but at $147.99 it finished last overall. The nanoHD, another Wi-Fi 5 access point about $30 dearer, clearly outperformed it, so he is "sending it off into retirement."
Technology and FriendsJulie Lerman on Entity Framework Core 5 [TECHNOLOGYANDFRIENDS 648]
synopsis

Lerman argues that EF Core 5, released in November with .NET 5, is the release where the rewritten Entity Framework nearly matches EF6. She says it got there because the team brought old features back better rather than copying them.

How she became the expert. Lerman has worked for herself for over 30 years and now coaches teams and writes for Pluralsight and Code Magazine. She first saw the ORM unnamed at TechEd in 2006. It was Microsoft's third attempt, so others ignored it, and she says she was nearly the only one who knew it when Microsoft declared it the way to access data in .NET.

Versions and the rewrite. She counts eight versions. EF Core was rebuilt from scratch for open-source .NET Core and numbered from 1, skipping 4. EF6 still gets fixes for the millions of applications on it.

What EF Core 5 brings back. Many-to-many, left out of EF Core because the original was too limited, returns with more capability. Logging is now one LogTo call. A missing inheritance mapping arrives too, though she mixes up its two names. Giard guesses the shared-table idea comes from NoSQL, and she replies the concept is older.

Learning why, not just how. She tallies over 200 new features, including changing a context's connection after it is initialised, which she would not use herself. Giard suggests uses such as copying data to blob storage or per-customer databases. She looks in the linked GitHub issues for the reasons behind a feature, and points beginners to her updated Pluralsight course, Entity Framework Core Getting Started.

  • EF Core is a from-scratch rewrite, not a renamed EF6. Lerman counts eight versions: EF 1, EF 4 (numbered to match .NET 4), EF5 and EF6, then EF Core 1, 2, 3 and 5, with 4 skipped to align with .NET 5. EF6 is kept alive with small fixes and pull requests because millions of applications use it, and EF Core 5 shipped in November alongside .NET 5 and ASP.NET Core 5.
  • The team held back features until they could do them better. Lerman says easy many-to-many existed from the first Entity Framework through EF6, but EF Core left it out because the original had many limitations; it returns in EF Core 5 just as simple to use and with more capabilities. She says features were prioritised by how many people needed them, and EF Core 5 brings it "pretty close" to parity with EF6.
  • Logging no longer needs heavy setup. Earlier EF Core extended .NET Core's logging API but took "a lot, a lot" of non-obvious configuration. Lerman says EF Core 5 adds a single LogTo method on the context, such as to the console with filters, while the more elaborate route is still there.
  • The inheritance mapping some users badly needed has finally arrived. In Lerman's account of what EF Core 5 adds, the choice is between storing a derived class such as fish (from pet) in one shared table with many empty columns, or splitting common and derived data into separate tables. She swaps the names "table per type" and "table per hierarchy" as she explains, so the text does not settle which name goes with which layout.
  • Read the GitHub issue to learn why a feature exists. She counts over 200 new features in EF Core 5, among them changing a DbContext's connection or connection string after it is initialised, which her domain-driven "one context, one database" habit would never call for. To find a use for such features, she goes to the GitHub issues linked from the docs and looks for someone saying "I need this because", then turns to blogs. Her position: knowing why to use a feature matters as much as knowing how.
Crosstalk SolutionsStarlink Setup and Testing
  • Beta hardware cost $549 and arrived within a week. The host, in Oregon, paid $499 for the dish plus $50 shipping and received it four or five business days after his beta invitation. He says service is mostly limited to the upper latitudes of the US and Canada, with $99 pre-orders open elsewhere. He did not know the monthly fee at recording, having heard both about $50 and about $100.
  • Setup took under an hour, including filming. The cabling comes pre-wired with click-lock connectors and is configured through a phone app. The dish took six or seven minutes to find its satellites and re-aimed itself north-northeast. The host believes it draws around 90 W, too much for standard PoE. A $24 pole mount and a flat "volcano" roof mount are sold separately.
  • The dish needs clear sky; an obstruction crippled speeds. Starlink calls for about 100 degrees of clear sky. With the host's house in the field of view, the first tests gave about 9 Mbps down and 9 Mbps up. After he moved the dish roughly 50 feet toward the fence, it reached 78.3 Mbps down and 23.4 Mbps up at a 35 ms ping.
  • Wired and Wi-Fi speeds were the same at these rates. The router's aux port linked at 1 Gbps. Wired runs ranged from 40/14.4 Mbps at 90 ms to 76.8/16.6 Mbps at 20 ms. Average pings were 29 ms to 1.1.1.1, 70 ms to 4.2.2.2 and 20 ms to 8.8.8.8. An iPad over Wi-Fi got 87.9/15.4 Mbps, and 1080p YouTube felt like regular broadband to him.
GCastLive Streaming with Azure Media Services [GCast 107]
  • One live stream reaches many viewers and is archived at once. Giard describes Azure Media Services taking camera, screen or slide input and sending it to clients in near real time (a short delay depending on latency), broadcast to many devices worldwide, while saving the footage to Azure Storage so people can watch it later.
  • A live event needs a Media Services account and an RTMP input. In the Azure portal he creates a Media Services account with a new resource group, the East US region (near him, to cut upload latency, assuming his viewers are there too) and a new storage account, and ticks the box promising not to broadcast content he does not own the rights to; it takes about 30 seconds. On the account's live streaming blade he adds a live event, keeps the defaults with no encoding and RTMP input, starts it, and copies the input URL it gives him.
  • Local broadcasting software pushes the feed to that input URL. He uses the free version of Telestream's Wirecast, which he says is fine for experimenting but not commercial use because it watermarks the video and periodically announces "this is Wirecast". He adds a webcam layer (screen capture is another option, and inputs can be switched live), moves it from preview to live, pastes the input URL as the RTMP server in the output settings, and starts broadcasting; the portal preview shows the feed a few seconds behind, and refreshing the page cleared an error it threw.
  • Public viewing needs an output, streaming locator and streaming endpoint. He creates an output and a streaming locator with the defaults, starts the streaming endpoint, and pastes the streaming URL as the source of a video tag in a plain HTML page (the same sample from an earlier episode, without the track or captions), which then played the live feed.
  • Stop the live event and streaming when done to avoid compute charges. Giard warns that you are charged while the event runs, citing the cloud rule that "storage is cheap, compute is expensive"; once stopped, only the small charges for configuration and storage remain.
Scott HanselmanTransparent Glass Whiteboard in Microsoft Teams or Zoom with OBS for FREE!
  • A glass light board can be faked with free software. Hanselman credits the technique to a blog post by Rob Farley, which replaces a physical light board (writing on clear glass, then flipping the image) with OBS and a green-screen trick; he calls it the inverse of his own earlier method of punching a hole in PowerPoint slides to put himself inside them.
  • Key a drawing app's background out and layer it over the camera. In OBS he adds a video capture source for himself and a display capture of a second screen running Microsoft Whiteboard, whose background he sets to a loud lime green; he says the app does not matter (Paint or PowerPoint would do).
  • OBS's chroma key filter, set to a custom colour, does the work. He picks the whiteboard's green as the custom key colour, adjusts similarity, stretches the captured screen to crop out the toolbar, then draws with a Surface pen so the strokes appear to float in front of him.
  • Pen choice matters: rainbow and highlighter strokes look best. Some colours leave a visible haze after keying; he finds the highlighter the cleanest because its edges are not aliased. His broader point is that "you can punch a hole through anything" and place yourself anywhere in a scene.
GCastAudio Transcription and Captioning with Azure Media Services [GCast 106]
  • An Audio Transcription transform runs only the audio analysis. Giard uses it instead of the full video analyzer from the previous episode, which also spent time on face and object detection. He adds a new job on the uploaded asset with transform type Audio Transcription, turns off automatic language detection and specifies US English, names the output asset, picks the storage account and sets high priority; the job took about a minute.
  • The output asset is a set of analysis files, not video. Its container held emotions.json, insights.json, lid.json, metadata.json, transcript.ttml and transcript.vtt. Emotions came back empty, which Giard puts down to the clip being so short; lid.json reported English (US) at 100% confidence and would list percentages for other candidate languages; metadata.json describes the file itself.
  • The TTML and VTT transcripts carry timed, confidence-scored caption text. Both hold the same content in different formats, broken out by time range (the first sentence spanning 0 to 7 seconds) with a confidence level per segment. Giard notes both are standards usable on the web and calls them the most interesting of the outputs.
  • Captions need the transcript in the same container as the video. Giard points an HTML video tag's source at the streaming manifest from View Locator, uploads the VTT and TTML files into the container holding the adaptive streaming videos, and sets a track element's source to the VTT file using that container's URL. The player then showed captions; with several caption files a viewer could switch language or turn captions off.
Crosstalk SolutionsHow to Terminate Ethernet Cables
  • An adjustable rotary stripper removes the jacket more accurately than wire strippers. The host uses a Monoprice tool whose cut depth is set by a screw to suit the cable's thickness. He then snips the nylon string and, on Cat6 plenum, the plastic pair separator as close to the jacket as he can, taking particular care where a cable already run through a wall leaves little slack.
  • A dedicated untwist tool is the one purchase he most recommends. Its centre channel untwists each pair and its side channels pull the wires straight, which he found much quicker than doing it by hand and wishes he had bought years ago. Before inserting the wires into a connector, he lines them up and makes one straight cut across the ends.
  • Pass-through connectors with a matching crimper make male ends easier. He uses Platinum Tools' Cat6 pass-through connectors, which let the wires feed out the front, and the Platinum Tools crimper trims them as it seats them. The order he uses is white-orange, orange, white-green, blue, white-blue, green, white-brown, brown, and he re-checks it after insertion because the wires often shift.
  • Keystone jacks are his preferred female end for their versatility. He uses Cable Creation's CL0081 Cat6 keystones (a 20-pack), which have the B pinout printed on a sticker, and a 110 punch-down tool. Keep the blade's cutting side on the outside: he has severed wires by reversing it. If the trimmings don't come away, punch again. One jack fits 24-port patch panels, 1-, 2- or 4-port wall plates and surface-mount boxes.
  • Test every finished cable; the method suits any category. His Pocket Ethernet tester pairs with a phone app to show the wire map and a TDR length reading; his test cable read 3 ft, which he thinks is about the tester's minimum. He says that once the wires are exposed, Cat5e, Cat6, Cat7 and shielded or outdoor cable are terminated the same way.
GCastVideo Files and Azure Media Services [GCast 102]
  • A Media Services account bundles a resource group and storage account. From portal.azure.com Giard creates Media Services with a new resource group, an account name, East US as the location and a new storage account, which he prefers to an existing one to keep things together. He must check a box promising not to share anything he lacks rights to; creation took about 30 seconds.
  • Giard is remaking his early Media Services videos. He says he covered the service a couple of years earlier in the series, but the interface and the capabilities have changed a lot since.
  • Media enters the service as an asset backed by blob storage. On the Assets blade he uploads a local MP4 as an input asset, renames the suggested asset name and again affirms he owns the rights. The asset's details link to a blob container in the storage account; an asset maps to one container, which can hold one or more files, here just the uploaded MP4.
Crosstalk SolutionsDefinitive Guide to Hosted UniFi 2021
synopsis

The host builds a hosted UniFi controller for multiple sites from scratch, ending with UniFi 6.0.43 (current as of recording) running on an Ubuntu 20.04 cloud server. Its SSH accepts only keys, its firewall admits admin traffic only from known WAN addresses, and it serves a Let's Encrypt certificate that SSL Labs should rate A. The server. He uses Vultr (his referral link gives $100 of credit), noting that DigitalOcean differs only in VM creation. The $5-a-month tier is enough for a few sites and a couple dozen devices, and he advises paying $1 a month for auto backups in production. The hostname must be an FQDN on a domain you own, with a DNS A record pointing at the server, because Let's Encrypt depends on it.

Locking down SSH. He changes the root password first, since sudo still uses it after root login is disabled. He then creates a sudo user, generates a key pair and copies it to that user. In sshd_config he turns off root login and password authentication, keeping the root session open until the new login is proven. The private key is copied off the server, deleted from it and converted to .ppk with PuTTYgen. SSH then moves from port 22 to 2222, although he concedes that a high, rarely scanned port is better.

Firewall. In UFW, the SSH port, Cockpit's 9090 and the GUI's 8443 accept only authorised WAN IPs. STUN (3478/UDP), inform (8080) and 80/443 for Let's Encrypt are open to all. Ports 8880/8843 are needed only for a guest portal. Hooks that open 80/443 only during renewal are possible but out of scope. He warns that wrong rules lock you out once the firewall is enabled.

Housekeeping. After a full update and reboot, he sets the time zone and installs NTP. He adds an optional 4 GB swap file and the Cockpit monitoring GUI, plus haveged, which once sped UniFi's boot and which he keeps because it does no harm. A monthly cron job runs apt autoremove so /boot never fills.

Installing UniFi. OpenJDK 8 goes in first, then Ubiquiti's apt source and GPG key, then the unifi package. In the setup wizard, advanced setup allows a local account instead of Ubiquiti single sign-on, and device discovery finds nothing because a hosted controller has no LAN devices.

Certificate. Certbot with the Apache plugin issues the certificate and redirects HTTP to HTTPS. Developer Steve Jenkins' script, edited for the hostname, Ubuntu and LE mode, imports it into UniFi. A daily cron job re-imports the certificate whenever it renews.

  • A cheap cloud VPS is enough for a small hosted controller. The host installs UniFi controller 6.0.43 (current as of recording) on Ubuntu 20.04 at Vultr, whose $5-a-month tier he says suits a few sites with a couple dozen devices, or testing. He recommends paying $1 a month for auto backups in production. His Vultr referral link gives new users $100 of credit, and the same steps work on DigitalOcean apart from creating the VM.
  • Lock SSH to key-only login, no root, on a non-standard port. He changes the root password, which is still needed for sudo, and creates a sudo user with a copied key pair. He sets PermitRootLogin and PasswordAuthentication to no, keeping the root session open until the new login works. The private key is moved off the server, converted to .ppk in PuTTYgen, and SSH moved from 22 to 2222 (he says a high port such as 29999 is better).
  • Admin ports should only accept your own WAN IP addresses. With UFW, he allows the SSH port, 9090 (Cockpit) and 8443 (the UniFi GUI) only from authorised WAN IPs. He opens 3478/UDP (STUN), 8080 (inform), and 80 and 443 for Let's Encrypt to everyone, and 8880/8843 only if a guest portal is used. He warns that enabling the firewall with wrong rules locks you out.
  • Some housekeeping is optional and some prevents later failures. He sets the time zone and installs NTP, and adds a 4 GB swap file, which he calls optional and debated. He installs haveged, which once sped up UniFi's boot, though he is unsure it still matters. A monthly cron job runs apt autoremove (359 MB freed here) so /boot never fills, which he says causes problems.
  • UniFi needs a separate script to use the Let's Encrypt certificate. Certbot with the Apache plugin issues the certificate for the server's FQDN, which must have a DNS A record on a domain you own. Developer Steve Jenkins' import script, edited for the hostname, Debian/Ubuntu and LE mode, loads it into UniFi. A daily cron job re-runs it after each roughly 90-day renewal, and the host expects an A rating from SSL Labs.
GCastAnalyzing a Video with Azure Media Services [GCast 105]
  • Analysis is a job run with the Video and Audio Analyzer transform. Giard says analysis ranges from file properties to machine-learning detection of objects, faces, on-screen text and speech. Narrower transforms do only audio transcription or face detection; he picks the full analyzer for both video and audio with the language set to US English. The run took about 1 minute 14 seconds on a clip of about seven seconds, and he warns longer videos take longer.
  • The output is a set of data files, not a stream. The output asset's container held JSON files, a JPEG and zip files, which he downloads with the Azure Storage Explorer. The annotations file tags each time interval with confidence scores; it was 99% sure of a human face, a person, text, clothing, a man and a beard.
  • Moderation scores let a site screen uploaded videos. Each interval gets an adult score, a racy score and a review-recommended flag; Giard's understanding is that adult means pornography and racy means suggestive. He suggests setting your own rules, for example rejecting above 80%, sending 30–80% to a human reviewer and accepting below 30%.
  • Emotion and face files score faces and voice separately. The face emotion scores put joy highest at 69%, then sad and angry, while the vocal analysis read sad ("I looked happy, but I sounded sad"). faces.json gives each face's position, width and height, roll, pitch and yaw, and a 99.99% face confidence; the generated thumbnail was cropped to the face.
  • OCR and transcription ran with mixed results. OCR picked up a poster in the background but classed it as Chinese Traditional, which Giard thinks a language hint might have fixed. The TTML and VTT transcripts caught the one sentence he spoke.
GCastSharing a Video Online with Azure Media Services [GCast 104]
  • Sharing starts with a streaming locator on the encoded asset. On the adaptive-streaming output asset (four MP4s at different sizes plus metadata) Giard creates a new streaming URL. The streaming policy offers stream only, stream and download, or download only, with optional DRM; he chooses stream and download without DRM. The locator's expiration defaults to 100 years out and can be shortened, to three days for example.
  • A running streaming endpoint costs extra, so stop it afterwards. Giard starts the endpoint to serve the video and, at the end, stops it from the Streaming Endpoints tab. After that nobody can reach the video, but he is no longer paying for it.
  • View Locator lists direct download links for each file. The Downloads section has URLs for the JSON, the JPEG thumbnail and each MP4, whose names give their resolution; pasted into a browser tab, the JPEG renders and the MP4 plays.
  • The smooth streaming manifest URL gives an adaptive web player. Giard pastes the link ending in /manifest into the source element of an HTML video tag, from a template on his blog post of January 20, 2021 on adding an adaptive Azure Media Services video to a web page. The player auto-detected his wired connection and played a high resolution, let him pick a lower one, and its default controls can be restyled.
GCastEncode a Video with Azure Media Services [GCast 103]
  • Encoding runs as a job that executes a reusable transform. Giard describes the transform as the recipe, the steps to do a particular thing, and the job as the execution of it. A job is added from the uploaded asset's page; the first time there is only "create new" for the transform, but once created it can be reused for later jobs. Priority can be set to high, normal or low; he uses normal.
  • Giard picks the adaptive streaming preset to serve unknown viewers. The preset list covers AAC, adaptive streaming and various bit rates. He chooses adaptive streaming because it encodes the video in multiple formats, and he cannot know whether a viewer is on a phone or a computer, or on fast or slow internet.
  • Encoding time trades clip length against the number of formats. His very short clip went from queued to processing to finished in about a minute and a half, visible under transforms and jobs. He notes a longer video would take much longer, and asking for adaptive streaming adds work.
  • The job produces a separate output asset holding several renditions. The output asset sits in a different storage container from the input asset. It holds four MP4s whose file names show AAC audio and the resolution (1024x576, 320x180, 480x270 and so on), plus a thumbnail screenshot and metadata files (JSON, and ISM and ISMC manifests), which he says different clients use. He downloads them with Azure Storage Explorer; the renditions grow in size and sharpness from the grainy smallest to the sharp largest.
Technology and FriendsRichard Taylor on the Microsoft Revenue Recognition System [TECHNOLOGYANDFRIENDS 649]
  • Every Microsoft sale flows through one revenue recognition system. Taylor, about 10 months into a job at Microsoft, works on MS Sales, which handles direct and partner transactions, from Surface and Xbox hardware to online purchases. It has run for 20-plus years and has a 24-hour SLA to publish by midnight each day, and company budget and product-strategy decisions rest on its data. The $143 billion 2020 revenue figure is the host's, not Taylor's.
  • The migration to Azure is "changing the engine while flying". SQL Server has been the core; part of the processing moved to HDInsight on Azure about six months before Taylor joined, and reporting moved from on-prem hardware to Azure. The on-prem data warehouse is the last piece and is being moved now, in short downtime windows with DNS, connectivity and configuration changes. After that the plan is more PaaS, Synapse, and real-time streaming in place of the daily batch.
  • Azure infrastructure is built for each daily run and sized from history. Everything except the reporting platform is spun up for each daily delta run and torn down afterwards. The system sizes it from past volume for that day, day of week or time of month, because load depends on transaction count, not dollar size. Once a week a "restatement" reprocesses everything from the beginning of time, because business rules and revenue recognition rules change.
  • Cloud developers can no longer leave infrastructure to IT. Taylor's team of roughly 80 to 100 developers writes the business rules and also the code that builds the infrastructure daily and tears it down, so some of them have had to learn servers, which they struggle with. He has little accounting background, since others own the rules, and he finds the infrastructure side natural because he started out as a network engineer.
  • Cloud security is not harder, but on-prem assumptions no longer hold. Two servers in a data center might talk unencrypted because an attacker would have to get physically inside, but resources recreated daily on different underlying hardware cannot be trusted that way. So the team encrypts traffic and data at rest. He calls the cloud a "no-brainer" for most workloads, except where regulation rules it out.
Technology and FriendsKevin Pilch on gRPC [TECHNOLOGYANDFRIENDS 647]
  • gRPC is a contract-first remote procedure call system. Pilch, group engineering manager for .NET app frameworks, says messages and parameter types are described in a .proto file that defines the protobuf binary wire format, so a client and server in different stacks (.NET, C++, Go, Java, Rust, Node) interoperate by sharing that file. It came out of Google but the G officially stands for nothing; each release's notes name a new meaning. He likens it to WCF for long-time .NET developers.
  • Its advantage over JSON web APIs is efficiency and an explicit contract. Binary serialization compacts messages, and HTTP/2 adds binary headers and bidirectional streaming that HTTP 1.1 lacks; with REST, he says, the schema is usually extracted from code afterwards with Swagger tooling such as Swashbuckle, whereas gRPC starts from a contract shared across stacks.
  • Microsoft relies on standard open-source tooling for writing proto files. Visual Studio uses a TextMate grammar for coloring and indentation; the team's own work lets a project add a service reference to a proto file and generate the code. A server typically starts as an ASP.NET Core app with gRPC added as endpoints in startup, and he points to the docs at docs.microsoft.com/aspnet, much of it by James Newton-King of Newtonsoft.Json.
  • .NET now has the second-fastest gRPC implementation, he says. Pilch cites his team's benchmarking as of the .NET 5 release: just behind Rust and ahead of Go, C++ and Java.
  • gRPC always runs over HTTP, with a fallback for browsers. HTTP/2 is the default, but browsers expose no HTTP/2 APIs to JavaScript, so gRPC-Web downgrades it to run over HTTP 1.1. The host's question on whether HTTP/2 is still used between processes on the same machine gets no answer in the captions.
Technology and FriendsHeather Ackels on TechOlympics [TECHNOLOGYANDFRIENDS 646]
  • TechOlympics is a tech conference for high schoolers, run by high schoolers. Ackels, executive director of the Cincinnati nonprofit Inter Alliance, calls it the nation's largest such conference; she is its only adult employee, and 30 students handle everything from t-shirt design and procurement to the website and speaker recruiting. Normally about 500 students attend three days in person with an overnight hotel stay, for about 80 hours of content; this was its 11th year, she believes.
  • The 2021 edition spreads that content virtually across all of February. She says students have had enough of Teams and Zoom, so the event runs in themed weeks, each opened by one of four keynotes, across tracks in art tech, software, cyber, and data and AI, plus career preparation such as GitHub, LinkedIn and resume training. Hands-on workshops rise from about 10 to between 20 and 25, and a hosted Minecraft server and chess competition stand in for the student lounge.
  • Going virtual cut the price sharply, and sponsors cover the rest. It drops from the usual $200 to $40, or $10 a week, with generous scholarships on request, and the event is open beyond its usual 50 miles around CVG; a $5,000 Rotary grant paid for free registration for 125 city students. Sponsors include FIS (primary), Anthem Digital and Procter & Gamble, plus Microsoft prizes such as Surface Go raffles, and she says the money goes back to students: over $100 of materials each, including GE Aviation lockpicking kits and temporary Illustrator and Photoshop licences.
  • The programs are a direct pipeline into local tech jobs. Inter Alliance places 50 to 75 paid technology interns every summer, internship job descriptions go to TechOlympics students before anyone else, and over 50 business partners have virtual exhibitor booths. About four of this year's sessions are led by alumni, including a Duke student on AI and an advanced GitHub class.
  • Representation decides whether a student is interested or inspired. Ackels says having a presenter "who looks and sounds like you" makes that difference, so the group partners each fall on a women-in-technology conference that draws about 300 high school girls and has brought in a consultant to refresh its diversity and inclusion strategy. Her own route in: she was "voluntold" to mentor there from Kroger Technology after maternity leave, and eight years later runs it.
GCastAzure Resource Groups [GCast 101]
  • A resource group's region does not bind what goes in it. Giard says he is unsure how much the group's location matters, since resources in other regions can be placed in it; his demo group is in East US and he notes a web app could go in Central US. He typically puts a group near himself, his users or the resources it will use.
  • Resource groups gather an application's parts in one place. A web app's app service plan, and any SQL Server, Cosmos DB or functions it uses, logically belong in the same group, so opening the group shows "this is my application" at a glance.
  • Deleting the group removes everything in it at once. Giard uses this to clear multi-part demo apps rather than deleting resources one by one. Because it is destructive, the portal makes him type the group's name before the delete button is enabled.
  • Resources can move between groups and now between subscriptions. Moving some or all resources to another group can merge groups, or to a new one can effectively rename a group. Moving to another subscription "didn't used to be possible", he says, and matters when handing work to a customer or changing billing.
  • Export template generates an ARM template for the whole group. The template automates creating all the group's resources, and can be deployed with PowerShell or the CLI, with parameters changed for different names or locations. It can be added to a library or downloaded as separate files.
GCastCreating a Screencast [GCast 100]
  • A mid-range microphone is enough; avoid the laptop's built-in one. Giard uses a Microsoft headset with a boom mic and says about $50 buys good enough quality, with no need to spend hundreds. He turns the mic level up and makes sure Camtasia records from the headset, not the webcam mic.
  • Giard captures the screen in Camtasia, splitting long waits into clips. Camtasia Studio from TechSmith costs a couple hundred dollars, with a free trial he thinks lasts 30 days; he recommends trying it before buying. F10 stops recording; he records separate clips to skip a step that takes, say, five minutes, and notes Camtasia does not add later clips to the timeline automatically, so he drags them in, adding a transition such as page roll to signal time passing. He exports a best-quality WMV at 1080p with no watermark; episodes run about 7 to 25 minutes, and longer topics get split into two or more videos to stay consumable.
  • Intro and credits come from re-saving the last episode in Premiere Elements. Adobe Premiere Elements costs under $100. He opens the previous episode, saves it under the new name, deletes the old screencast, edits only the episode number, title and recording date in the intro and outro, drops in the new WMV, and raises clip audio gain by about 5 or 10 if it sounds quiet before exporting.
  • Recording date goes in the YouTube tags because software changes. He switches to the GCast channel's own account (each of his three shows has one), titles the upload "<title> [GCast NNN]", marks it not made for kids, and tags the recording date so viewers can judge whether a demo is still relevant; he sometimes re-records a demo years later. He usually publishes public, and sometimes schedules uploads days or a week apart when he records several in one day.
  • Giard replaced YouTube's auto-thumbnails with a standard PowerPoint title card. YouTube picks three frames pseudo-randomly, and he found them not indicative of the content. He duplicates a slide in a PowerPoint deck, changes the episode number and title, swaps in a different photo of himself (using the selection pane to reach the picture behind other elements), and saves just that slide as a PNG to upload as the thumbnail.
Scott HanselmanWhat happens when you type a URL in the web browser and press Enter? Computer Stuff #18
  • The interview question tests reasoning about layers, not trivia. Hanselman says that when he asks it he wants to see whether a candidate can puzzle out how it might work and design a system on the fly, and the right depth depends on the job (the back-end database for a database role, firewalls for a network engineer). His rule is to understand one layer deeper than you usually work, as he can change his oil and a tire without being a mechanic.
  • The first step is DNS turning the domain into an IP address. He describes DNS as the internet's yellow pages: global and distributed, so different servers (his home server, 1.1.1.1, Google's 8.8.8.8) return the same address, and results are cached, which is why developers say "it's always DNS" and flush it when an address changes. In an inserted correction he concedes that his opening ping example is not strictly a name lookup and that nslookup is the precise tool; whois shows hanselman.com, hosted by DNSimple, was bought in 1998.
  • TCP/IP connects and splits the data, hidden beneath the browser. The browser does a three-way SYN / SYN-ACK / ACK handshake on port 80 for HTTP or 443 for HTTPS, and IP chops the content into packets that may arrive out of order but are reassembled intact, like a delivery split into several boxes. He uses the OSI model to show that the application layer where browsers live sits on physical layers (wire, fiber, Wi-Fi) the user never has to think about, and notes that "ethernet" is the format while the cable is an RJ45.
  • Browser dev tools and curl expose the HTTP conversation. In dev tools the page itself arrived in just over 50 milliseconds, after which the browser parsed it and requested the images and JavaScript it referenced. With curl he shows the certificate exchange and the negotiation of HTTP/2 against 1.1, the GET of the root path, the user agent, and headers such as the en-US language preference and cookies, then renders his homepage in the text browser Lynx.
  • Status codes signal success, redirect, client fault or server fault. He gives the series as 100 informational, 200 success, 300 "go over there", 400 "your fault" and 500 "my fault", and shows his bare domain returning a 301 permanent redirect to the www address. Behind the HTML is either a static site (unchanging files) or a dynamic one like his blog, and a busy site such as Twitter sits behind a load balancer spreading requests across many servers, round robin or by load.
Technology and FriendsKevin Griffin on SignalR Real World Projects [TECHNOLOGYANDFRIENDS 645]
  • SignalR lets the server push changes instead of clients polling. Griffin describes it as a wrapper around WebSockets that notifies web pages, mobile, desktop or IoT clients when server state changes. He agrees with the host that it pays off most when data must be current but changes rarely, since most polls return nothing. Polling the database for deltas is the bottleneck he sees most often.
  • Replacing a one-second page reload cut server CPU from 100% to under 1%. The client was a nonprofit that aggregates data from many 911 and emergency agencies into dashboards used mainly in firehouses around Ohio, and by scanner enthusiasts. Its ASP.NET Web Forms update panel reloaded a page of at least 1 MB every second for about 600 users. Griffin rebuilt it on full-framework ASP.NET SignalR, sending only deltas: new, updated or resolved incidents. Of about 200 dashboard configurations, each client gets only the updates for the ones it is viewing.
  • Griffin says SignalR "can potentially save lives". A firefighter he works with told him of a crew that saw a cardiac-arrest call flash red on the new board and was already pulling out of the firehouse when the dispatcher radioed it. He puts the gap at roughly 20 to 30 seconds.
  • Its best uses are small notifications, not big problems. On other client projects Griffin has built a real chat box, site-wide alerts and an administrator-announcement flag tracked per user and synced across all of a user's open tabs. He also pushes progress and errors for import jobs that take more than about 10 to 15 seconds, sent only to the users who care. These replace jQuery timers that hit the server for nothing.
  • It is simple to set up and works with many kinds of clients. His demo takes under five minutes, plus TypeScript setup that is not required. Clients can be JavaScript, .NET console, WPF, Universal Windows, iOS or Android, with no server change for each type. Recording on 6 January 2021, he said his course at SignalRMastery.com would launch on 13 January and would walk through the 911 system's architecture.
GCastPowerPoint Animations [GCast 99]
  • Picking from the ribbon replaces an object's animation rather than adding one. PowerPoint's four categories are entrance (green in the animation pane), emphasis (yellow), exit (red) and motion paths. To stack several on one object Giard uses Add Animation, and reorders them by dragging in the animation pane; emphasis effects are grouped as basic, subtle, moderate and exciting.
  • Start settings chain animations onto a single click. Each animation defaults to "on click"; "with previous" and "after previous" make them run together or in sequence. Giard sets a fly-in, a wipe and a float-in to run after one another so one click plays the whole sequence.
  • Effect options and timing tune each animation. The options depend on the object: Giard sets a wipe to run from the left to match an arrow's direction and adds a half-second bounce at the end of a float-in. Timing sets a delay and a duration, here waiting half a second and taking two seconds.
  • Motion paths and text effects add movement and staged reveals. Motion paths include lines, arcs, turns, shapes and loops, with more such as a curvy star. Text can be revealed one line per click, or animated by word or by letter.
  • Giard's advice: add animation last, and sparingly. He builds the content first, then looks for places animation helps, such as revealing a flow chart in the direction of flow as he talks. Too much of it, he says, makes the audience stop listening and watch the slides.
Technology and FriendsDustin Campbell on Support for WinForms to the Visual Studio Designer [TECHNOLOGYANDFRIENDS 644]
synopsis

Campbell, an architect in .NET tooling, argues that WinForms on .NET Core needs its Visual Studio designer, and that making it work means moving the designer out of Visual Studio's process. The designer works today; data tooling and third-party controls remain the hard part.

Why a designer. WinForms came to .NET Core 3, but unlike WPF, where many write XAML by hand, WinForms culture is drag and drop, so the designer is essential.

How it works. The designer never compiles your form. It creates the base type, turns InitializeComponent into a CodeDOM model, deserializes that into real objects by reflection, and shows a live form beneath a transparent "sneeze guard" window that captures clicks.

Out of process. Visual Studio runs on .NET Framework, so objects created there would lack new .NET Core APIs. The form is built in a separate .NET Core process and its window parented into Visual Studio, which he says invites cross-process deadlocks. Synchronous APIs from .NET 1.0 are being made asynchronous for a possible future network boundary, such as GitHub Codespaces.

What remains. The data sources window, which loads assemblies and creates instances by reflection, does not work yet, so neither does setting up data binding through it. Control vendors face significant breaking API changes: modal dialogs must stay in Visual Studio while their logic runs elsewhere. Campbell rewrote Microsoft's own dialogs, pulling thousands of lines out of click handlers.

Why bother. The host says vendors still sell far more WinForms controls than others. Campbell, about 14 years at Microsoft after DevExpress, credits skill sets from eight years as the only .NET desktop framework, legacy code, and ease for quick tools. He notes four or five .NET UI frameworks since he joined, while WinForms remained the fallback shipped with Windows.

  • WinForms on .NET Core is useless without its drag-and-drop designer. Campbell, an architect in .NET tooling, says WPF developers often write XAML by hand and use the designer as a preview, but WinForms culture is built on the designer; WinForms was ported to .NET Core 3 and the designer, which works in Visual Studio today, has been brought online gradually.
  • The designer builds a live, uncompiled form from InitializeComponent. It creates the form's base type, then turns the InitializeComponent code into a CodeDOM model and deserializes that again into real objects through reflection. What the user sees is a real form under a transparent window, the "sneeze guard", that captures clicks for dragging and dropping.
  • The designer must run out of process on the target .NET. Visual Studio runs on .NET Framework, so objects created there would miss new .NET Core APIs; the form is created in a separate .NET Core process and its window parented into Visual Studio across processes, which he says invites deadlocks. The team is also making APIs that were synchronous since .NET 1.0 asynchronous, anticipating a possible network boundary with something like GitHub Codespaces.
  • Data tooling and third-party controls are the unfinished parts. The data sources window, which loads assemblies and creates instances by reflection, does not work yet, so setting up data binding through it does not either. Control vendors face significant breaking designer API changes: modal editing dialogs must live in Visual Studio while their UI logic runs in the other process, which for Campbell meant refactoring thousands of lines out of click handlers in Microsoft's own dialogs.
  • WinForms persists through skill sets, legacy code and sheer ease. Campbell cites about eight years as the only .NET desktop framework before .NET Framework 3 around 2006–2007, its simplicity for quick tools, and XAML being a "mind flip" few even at Microsoft knew. He says Microsoft has built four or five UI frameworks on .NET since he joined, about 14 years ago from DevExpress, while WinForms stayed the fallback shipped with Windows. The host says control vendors tell him they still sell far more WinForms controls than controls for other platforms.