Souk's Notes - Unofficial Summaries

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

GCastThrowing and Catching Custom Exceptions in a Java Spring Boot Application [GCast 91]
  • Error checks move out of the controller into a custom exception. The previous episode put the validation in the controller; Giard likes to keep controllers as clean as possible. Now the service throws a custom exception carrying the error message, and the controller catches it.
  • His custom exceptions are nearly always the same boilerplate. He puts them in their own exceptions folder. MissingArgumentsException extends Exception, adds the default serial version ID the parent expects, and has two constructors, one taking a string message and one taking a Throwable, each just calling super. He says 99% of his custom exceptions look like that; the class and its constructors must be public.
  • Java requires every method that may throw it to declare that. The math service's add method checks for a null first or second number and throws the exception with a message. Its throws declaration then had to go on the interface, on a mock implementation from an earlier video, and on the GET method that also calls the add method, which otherwise failed with "unhandled exception type".
  • The controller wraps the call in try/catch and returns 400. The sum variable is declared outside the try because it is used later. The catch takes the exception's message rather than hard-coding one, and returns a null sum with that message and HTTP 400; the person-name checks stay in the controller. Inputs of 10, 20 and "David" returned 30, and a missing number still returned a 400, now raised in the service.
  • Exceptions from deep in a call chain reach one catch. Giard gives two reasons for the refactor despite near-identical output: a cleaner controller, and, more important in his view, that in real services calling other services, databases and the file system, an exception thrown anywhere bubbles up to the controller unless something swallows it on the way. He says the next video shows a simpler way using Spring itself.
GCastBasic Error Handling in a Spring Boot Web Service [GCast 90]
  • The add-numbers service gains a POST version taking JSON. Building on the app from earlier episodes (episode 83 covers HTTP POST in Spring Boot), Giard adds an input model, addNumbersInput, with firstNumber, secondNumber and personName, and an output model, addNumbersOutput, with sum and sumMessage. The new controller method reads the input from the request body and returns a response entity of addNumbersOutput; a POST of 1, 5 and "David" returned HTTP 200 with a sum of 6 and the message "The sum is 6, David".
  • Left unhandled, a missing argument gives an unhelpful 500. Omitting the second number leaves it null, so the addition throws. Giard says Spring handles that, but the client gets back only a 500 "internal server error", which he calls not useful.
  • The controller checks for nulls and returns a 400 itself. If any of the three properties is null, it skips the add call and returns a bad request with a null sum and a message naming the required properties. Giard suggests looking for a more fitting status depending on the error, and says the check could be split into three if statements to give a specific message for each missing property.
  • A business rule can reject input the same way. As a deliberately contrived rule, a person name of "Bob" gets a 400 and "Bob is not welcome here". Giard notes that Java's string compareTo returns a number, zero when the strings match, rather than a boolean, so the test compares the result to zero.
Scott HanselmanGit Push --Force will destroy the timeline and kill us all - Computer Stuff They Didn't Teach You #7
  • The right response to a leaked secret is a compensating commit. Hanselman says to treat the password as dead, get nobody in trouble, and commit the fix forward; he demonstrates erasing history only because a contributor's pull request, which committed a password, asked whether it could be done.
  • An interactive rebase can drop the commit from history. He runs git rebase -i three commits back from HEAD and deletes the "secret" line; the commit is orphaned but stays in the repository until git garbage-collects it, and the local branch now diverges from origin.
  • Force push unconditionally overwrites everyone else's remote work. Anything teammates pushed meanwhile is lost, so he says it only works if everyone stops, syncs and touches nothing; he mentions --force-with-lease as the safer option but uses --force for the demo.
  • Rewriting history does not reach every copy. After the push the password was gone from GitHub's commit history but still visible in the merged, closed pull request, which only the contributor can delete; the contributor's fork was one commit ahead and four behind, still holding the secret. He compares it to an image deleted from the internet and advises never force pushing to main.
Crosstalk SolutionsOn the Road 8
  • Moving house and travel caused the channel's longest gap in five years. The host went 24 days without a video while moving over four days, flying to Wisconsin for ClearlyIP FreePBX training and taking a vacation; he saw the Detroit airport at roughly 10% of its usual crowd and planes 50–75% full, and promises a return to two videos a week once settled.
  • A rental cabin's broken internet cost him six or seven vacation hours. The Lake Tahoe cabin had AT&T DSL of about 6 by 2 Mbps, which died; AT&T denied the outage the rental company claimed. The owners were mid-switch to Suddenlink, whose modem needed its MAC address authorized; he spent about four hours on hold, and the company acted only when he threatened to move cabins.
  • The host expects no UniFi Video 4, by his own speculation. He reads Ubiquiti's end-of-life notice as promising security updates, bug fixes and new G3 camera support for UniFi Video 3 installs, with no new features. Tying Protect to its own hardware (Cloud Key Gen2 Plus, UDM Pro, UNVR) is easier for Ubiquiti to QA, he argues; users lose run-anywhere installs, though he likes Protect.
  • He is tearing down the old site's gear to reuse it. The kit coming off includes a solar-powered mesh access point, a NanoStation AC point-to-point link, a G3 camera, a UAP-AC-LR and a UniFi Switch Industrial, which he plans to put in his new house's hot attic to distribute Cat 6.
Technology and FriendsDonovan Brown on App Innovations [TECHNOLOGYANDFRIENDS 621]
synopsis

Brown, a DevOps advocate at Microsoft, holds that lift-and-shift is a fine way into the cloud but must not be where you stop: lift, shift, then innovate as fast as you can, on a base of agile, DevOps practices and infrastructure as code.

Why VMs fall short. Brown says that a VM in the cloud left him patching, managing firewalls and timing reboots. The gains were hardware upkeep and a move from CapEx, buying for Black Friday peaks, to OpEx. Managed services such as Azure SQL, App Service, Functions and AKS are what free developers to work on the product.

Lift first, then rework. Asked whether lifting first is acceptable, Brown says yes. The Azure DevOps team over-designed, then lifted TFS into the cloud as-is and banned new services from the monolith, adding microservices so it would shrink. He says the result looks nothing like the original drawings. Giard links this to lessons from open source.

Production first. Brown builds an infrastructure-as-code pipeline before any code, then deletes the whole subscription and redeploys to prove it works. He says this covers disaster recovery and short-lived QA environments. His rule is "if it hurts, do it more often": teams shipping every six months never automate their deployments.

The recipe. Brown's order is agile, then DevOps practices, then app innovation. He says PaaS needs less deployment configuration than VMs.

  • Lifting a VM into the cloud is a stepping stone, not the goal. Brown says that after moving his IIS and SQL Server app to the cloud on Windows VMs he still had to patch, manage firewalls, run antivirus and schedule reboots. He grants it brought flexibility, capacity and a move from CapEx to OpEx, and says the gain comes from moving on to Azure SQL, App Service, Azure Functions, AKS or Azure Container Instances.
  • Get to the cloud with least friction, then innovate. Brown says the team behind what is now Azure DevOps spent so long designing a cloud architecture that it shipped nothing, then lifted TFS into the cloud as-is. It then ruled that no new service could join the monolith, and added everything as microservices so the monolith would "atrophy". He says the result "looks nothing like what we had drawn up", and that it lets them scale only the part under load, such as build.
  • Build the infrastructure-as-code pipeline before writing any code. Brown deploys the pipeline, checks Azure, deletes everything in the subscription and reruns it to confirm it all comes back, so disaster recovery becomes "run another deployment". He says the same approach saves money: QA environments are created just in time and deleted afterwards, which stops the meters.
  • If deployment hurts, do it more often. Brown argues that teams shipping every six months never invest in automating a painful deployment, while shipping monthly forces the automation that makes it easy. He compares it to going back to the gym after a long break.
  • His recipe is agile first, then DevOps, then app innovation. Brown says PaaS services such as App Service, Functions and static web apps are easier to deploy than VMs. A VM also needs configuration as code (DSC) for ports and IIS on top of the infrastructure as code. The practices he lists are infrastructure as code, continuous integration, a good branching strategy, small increments and automating everything possible.
Scott HanselmanGit Rebase vs Merge explained - Computer Stuff They Didn't Teach You #6
  • Merging keeps parallel history; rebasing rewrites it into a line. Hanselman frames branches as parallel universes. A merge brings them back while their moments in time survive, and a rebase "denies that those parallel universes ever existed" for people who want a clean, linear history.
  • Amending a commit rewrites history, but it is not a rebase. On a demo branch he called "evil spock" he used git commit --amend to replace the last commit's message. He likens it to the Prince of Persia rewind ("that's not what happened").
  • Rebase picks the branch up and replays it on the current main. He ran git rebase main with -i (interactive). That opens an instruction file in the editor, where each commit can be picked or squashed, and Git waits until the file is closed. He squashed his two commits into one, after which main and the branch matched and the side branch no longer appeared in the log. Once pushed, GitHub's main showed no trace of it.
  • Rebase onto others' unrelated work; merge feature branches back in. His rule of thumb is to rebase when another developer made unrelated changes and you want your work based on theirs as of today rather than a week ago. Whether to rebase or merge is "really up to you": it depends on whether you want to avoid unnecessary merge commits.
  • Never rewrite public commits. He says the question is whether you are changing only your own history or "the history for the entire universe". Rewriting some of it is fine, but not all. He credits the VS Code Git History extension and a prompt that shows the current branch with making Git easier to learn.
Crosstalk SolutionsWorst Server Room 2020 - Finalists!
  • Viewer votes decide the Worst Server Room 2020 winner. Every comment and every like on a comment counts as a vote, and the finalist with the most total votes wins; voting closes August 14, 2020 at 12 p.m. Pacific (the captions also say "midnight"), with the winner announced in the next video.
  • The prizes are vendor-sponsored, by Ubiquiti and CanaKit. Grand prize, valued at $1,564: a UniFi Dream Machine Pro, USW-16-PoE switch, UAP nanoHD and UAP FlexHD access points, and G4 Pro and G3 Flex cameras. First runner-up ($577): a Dream Machine, USW Flex switch and UAP FlexHD. Second runner-up: a CanaKit Raspberry Pi 4 8GB Starter Max kit.
  • The five finalists share the same faults: unmanaged cable and floor-level power. Martin P's rack has at least seven unterminated cables and a coupler; Carlos N's has wire management buried under cable so thick the switches and server backs are unreachable; Greg S's Siemens HiPath 4000 room trails cable across the floor to servers on the ground. Power strips and UPSes lie loose on the floor in several.
  • The host judged Greg S's entry not staged. He says staging that much mess would take too much effort and the room looks like it was filmed as found.
  • Jack M's "load-bearing ethernet" entry is a real cleanup job. His firm was hired to clean up a small business's basement server room. As he narrates it, a single cable is holding a leaning switch up on a cardboard box, a Linksys router appears to be in use, two UPSes have dead batteries, the rack is made of wood, and a switch throwing errors feeds copper-clad aluminium cable from a PoE switch and injector.
GCastHTTP Request and Response Headers in a Spring Boot Application [GCast 89]
  • Let the client supply the request key in a header. Building on the previous episode's mapped-diagnostic-context logging, Giard argues it may make more sense for the caller to pass the key than for the controller to generate it. He adds an HttpServletRequest parameter to the addNumber method of his Azure Spring Boot web service, alongside the two query-string numbers, which exposes the whole HTTP request including its headers.
  • Read the custom header, falling back to a random key. He calls request.getHeader("x-request-key"), using the "x-" prefix as the convention for custom headers; the name can be anything the client understands. If the header is absent and the value is null, the controller generates a random key as before. The debugger showed a null without the header and the passed value once he added it in his test client.
  • Uniqueness becomes the client's responsibility. If the client sends no key, the service creates one; if it reuses the same value every time, its logs all carry the same key and it loses the benefit of a unique number in the log. Giard says it need not be a number, but should always be unique.
  • Return the key to the caller in the response headers. His reason: a client, especially one whose key was generated server-side, can later report a problem by quoting the key so its logs can be found. He creates a Spring Framework HttpHeaders object, calls set with the same x-request-key name and the key as value, and passes it to a ResponseEntity overload that accepts headers. He reuses the request's header name because, in his view, both carry the same thing.
GCastSpring Boot Logging with Mapped Diagnostic Context [GCast 88]
  • The service already logs to two destinations. The Spring Boot "add numbers" web service uses an org.slf4j logger configured in logback-spring.xml to write to Application Insights and the console at info level and above, which skips trace. Giard adds logger.info calls recording that the controller and the MathServiceImpl service were reached, with the two numbers passed. He warns that many classes are named Logger, and he had first imported the wrong ones (ch.qos and a Hibernate one).
  • One line in the controller tags every log in the request. In the controller he generates a request key with UUID.randomUUID().toString() and stores it with MDC.put as a key–value pair. The service's log statements then carry it too, although MDC appears nowhere in the service's code. His point is that this avoids repeating the code in every service the controller calls.
  • The key shows up as a custom dimension on every message. In Application Insights, after about five minutes of propagation, each log message, from both the controller and the service, showed a request key property under custom dimensions, alongside the timestamp and operation name. Giard's use case is filtering the logs to one request when hundreds of clients are hitting the service at once.
  • The context does not cross process boundaries. If the code calls something out of process, such as another web service, the key is not carried. Giard says you must pass it explicitly and add code in that service to log it.
Scott HanselmanCygwin in Windows Terminal? Linux on Windows? Shells != Consoles != Terminals, WTF M$FT WINDOZE
  • A shell processes commands; the console or terminal paints the screen. Hanselman says "terminal" and "console" are effectively synonyms in software, but a shell is a different thing. cmd, PowerShell and the rest hand their output strings to the console host (conhost.exe), which he calls slow and legacy. Windows Terminal replaces conhost. It was rewritten from scratch, is open source on GitHub, and "includes no shells".
  • Cygwin and MinGW are not Linux. He describes them as GNU user-mode utilities recompiled to target Windows system calls instead of Linux syscalls. Task Manager shows their cat and bash as ordinary Windows processes, and ls lists Windows folders. Ubuntu under WSL2, by contrast, runs a real Linux kernel. He says the GNU tools shipped their own terminals because conhost lacked VT-100 and ANSI support.
  • Cygwin can run as a Windows Terminal profile. He added a profile to the settings JSON with a self-made unique GUID, an icon and cygwin.bat as the command line. Paths must use double backslashes or forward slashes, and the profile worked without restarting the terminal. He says a settings UI is coming "soon".
Scott HanselmanWindows Terminal Feature PREVIEW - Customize your keybindings, color tabs, split panes, and MORE!
  • Stable and Preview terminals install side by side. When this was filmed the Store's Windows Terminal was version 1.1 and Windows Terminal Preview was 1.2. Each keeps its own settings.json, so new features can be tested against the familiar build. He cites a blog post by Kayla, whom he names as the terminal's owner.
  • Edit settings in VS Code to get schema autocomplete. Settings live in a JSON file, and Hanselman recommends associating .json with VS Code because of the JSON schema line in settings.json. A settings UI was promised for the future. Profiles let you set the default by GUID, hide entries with hidden, and give each profile its own icon, font and background image.
  • Key bindings are where the terminal's real power is. He argues users underuse them. He demos copy with a singleLine option, splitPane (auto, horizontal or a chosen profile) and closePane on Ctrl+W, which also closes the tab when it is the last pane. He bound Ctrl+T to a new tab because that was what he instinctively reached for. Search, which he bound to Ctrl+Shift+F, is a feature users may already have without knowing it.
  • The command palette is the preview feature to watch. It works like VS Code's palette, but is unbound by default, so he bound it to Ctrl+Shift+P. It lists both bound and unbound actions. The 1.2 preview also brought focus mode, always-on-top, tab colouring and renaming, and an experimental retro effect he is unsure about.
Technology and FriendsTibi Covaci on Creating a GitHub Action [TECHNOLOGYANDFRIENDS 620]
  • GitHub Actions are scripted workflows triggered by repository events. Covaci, newly at Microsoft as an Azure developer audience engagement lead, describes a YAML workflow made of jobs, steps and predefined actions. It runs on a pull request or push, for example compiling and running unit tests before anyone bothers with a code review. He says he is not a fan of YAML's sensitivity to whitespace.
  • Azure generated a working CI/CD workflow in under half an hour. Mentoring at the Hack the Crisis hackathon in Sweden, about three months earlier, Covaci found a friend deploying a peer-to-peer communication app (Node.js, Express, WebSockets) to DigitalOcean by hand. He right-click deployed it to an Azure web app. Choosing GitHub Actions in the deployment center then created a workflow in the repo that deployed all the way to production.
  • He wrote his own action rather than use a suboptimal one. The client side was only static files, so Covaci moved it to a storage-account static website behind a CDN. The marketplace action he found was a .NET app that had to compile on every run, so he wrote a Node.js action on the storage SDK. It took a couple of days and is under 150 lines. Its action.yml sits at the repository root and declares the parameters, and the storage account name and key come from GitHub secrets. It is open source, and his planned version 2 adds shared access signatures so a leaked credential can be revoked without rotating the account key.
  • A least-privilege service principal handles CDN purging. Covaci logs in with the Azure login action using a service principal that can only purge the CDN, then runs az cdn endpoint purge. Pushes to a dev branch deploy to the development environment, and pull requests accepted into master deploy to the main application. He says the documentation is still in its infancy, so he learned by reading other people's actions, chiefly those the Azure team publishes.
  • The virtual DevSum delighted attendees but lost speaker interaction. Covaci says the organizers had only three weeks to switch formats. They used a live studio with interviews between sessions, and the venue kept the down payment because it would still allow up to 50 people on site. He proposes leaving half an hour or more between sessions for open-mic talk with speakers. Whether next year's event is held in person is to be decided in the fall.
Scott HanselmanDo you really need an HTC Vive Pro? Budget VR with Oculus Quest and Virtual Desktop for Wireless VR
  • He now prefers the underpowered Oculus Quest to his Vive Pro. Hanselman owns a Vive Pro driven by a PC with an Nvidia 1080, but says he rarely uses it because of the tangling cord. The Quest runs Android and is "not a high-end thing". He says it is light, portable and quick to start, and that it "completely revitalized" his enjoyment of VR.
  • Virtual Desktop turns the Quest into a wireless PC VR headset. The PC does all the work and streams to the headset "in less than 20 milliseconds". He played Half-Life: Alyx this way with no lag he could feel on his home network. The Vive needs an extra adapter to go wireless. Oculus Link over a USB 3 cable is the supported wired option.
  • Wireless streaming should not need sideloading. The headset app had to be sideloaded with the Quest in developer mode. He can "only assume" built-in support is missing because of "organizational willpower", and hopes Oculus does not break the workaround. He grants the Vive Pro has more pixels and a higher frame rate, but says it no longer "feels pro".
Technology and FriendsMete Atamel on Serverless Containers [TECHNOLOGYANDFRIENDS 619 ]
  • Serverless means event-driven code that scales to zero and bills per use. Atamel, a developer advocate at Google Cloud, defines it as functions that respond to events such as HTTP calls, pub/sub messages or storage events, on infrastructure the developer does not manage, billed only for request time. He and Giard agree the name is misleading, since there is still a server.
  • Knative brings serverless behaviour to containers on Kubernetes. Atamel says serverless functions limit the environment, while running containers on Kubernetes demands learning many constructs. Knative, started by Google with VMware and Red Hat among the contributors, has two parts. Knative Serving handles routing, autoscaling (including down to zero), revisions and traffic splitting between revisions. Knative Eventing delivers events from vendor sources, for example a file saved to a Google Cloud storage bucket, to a service.
  • Tekton and Buildpacks go from source code to container images. Tekton Pipelines, formerly Knative Build, chains tasks into CI/CD pipelines on Kubernetes, but Atamel says it is unneeded if an existing CI/CD setup works. Cloud Native Buildpacks, which he believes came from Heroku and Pivotal, detect the app's language and build an image without a Dockerfile. He calls it experimental: fine for a simple HTTP server, but it "will definitely not work" for complex multi-service apps.
  • Cloud Run is his default because it removes the cluster work. Atamel says self-hosted Knative needs a correctly sized cluster, a gateway (usually Istio) and the Knative install, while Cloud Run deploys a container from a Dockerfile on Google's infrastructure. It bills in 100-millisecond increments, and its free tier makes occasional hobby apps effectively free. A second version, Cloud Run on Anthos, runs on any Kubernetes cluster, on-premises, Azure, AWS or Google Cloud, while the other tools are free open source.
Scott HanselmanHow to do a Greenscreen easily in 10 min for $75 with OBS and good lighting
  • A chair-mounted green screen can fake a studio set cheaply. Hanselman wanted the look of an old Learn .NET set without hanging a room-sized curtain. He used a screenshot of the set as an OBS background and layered his camera over it, with a foreground layer so the desk props sit in front of him. The screen is a small collapsible one from Webaround that fits on the back of his chair.
  • OBS chroma key deletes one chosen colour from the camera. The filter removes the screen's green. He notes a blue key would also have erased much of his blue room, and green was the screen he had and could afford. He then cropped the camera with Edit Transform, trimming 700, 100 and 200 pixels, to fit behind the fake desk. The result is convincing only while his head and gestures stay inside the crop.
  • Lighting decides whether the key looks convincing. Lighting the screen moved it "from being dark green to being like a cleaner green", and a cleaner green keys better. He uses a ring light and suggests a clamp light from Home Depot. He also turned off a lamp in the background picture whose light did not match. His tally is "a 75 dollar green screen and a light".
  • Green spill in the hair is the remaining giveaway. He thinks a blue screen would suit this background better and would cut the spill, along with some digital editing.
Technology and FriendsDave Pine on NET 5 and the Docs team [TECHNOLOGYANDFRIENDS 618]
  • .NET 5 converges .NET Framework and .NET Core into one platform. Pine, a senior content developer on the .NET docs team at Microsoft for just over a year, describes the ".NET 5 wave" as one developer experience across Visual Studio, VS Code and the .NET CLI. In practice he calls it ".NET Core vNext", with .NET Core 3.1 the current LTS release.
  • Pine says migration was never the barrier Giard suggested. Giard frames .NET 5 as making migration from the old framework easier. Pine disagrees: .NET Standard's API contracts and the migration tooling already made porting fairly easy where the API surface matched, and .NET 5 "just continues to get better". From his consulting work with large enterprises, he says shops still stuck on .NET Framework have become a rarity over the last five years.
  • Working in public calls for tooling that defuses hostile issues. At last year's hackathon, on Bill Wagner's team, Pine built an Azure Function on a GitHub webhook that replaced profanity in issue and pull-request titles and bodies with random emoji and labelled them as profane content. He says this signals that the user is frustrated without offending other readers, so maintainers can respond with empathy. He is preparing a conference talk on open-source ethics.
  • .NET MAUI will succeed Xamarin.Forms for new cross-platform apps. Pine says MAUI (multi-platform app UI) is targeted at .NET 6, with previews towards the end of the year, and builds native UI for Android, iOS and Windows from a single project. Xamarin will remain in long-term support.
  • The .NET Docs Show recreates the conference hallway track. Pine co-hosts it with Cam Soper and Scott Addie. It streams live every Thursday at 11 AM US Central and features open-source projects and Microsoft guests. He says the name is a pun on "doctors" rather than a show about documentation, and that guests were already booked into November and December as of early July.
Scott HanselmanPi-Top 4 Review - Raspberry Pi 4 for making, coding, more for kids and classrooms. Plus .NET and C#!
  • The pi-top 4 earns its price as a classroom-ready Pi. Hanselman was sent the unit. Its US price of $300 made him think "holy crap that's kind of expensive" next to a $35 Raspberry Pi, but he argues it is good value because it is "not a Raspberry Pi in a 3d printed box". He found it heavy and solid, and says kids "are not going to be able to break this".
  • The hardware wraps the Pi in a sturdy, sensor-ready case. The case has an OLED screen, extended GPIO pins on top and a battery, which was at 51% on first boot and kept the unit running when unplugged. It ships with a 20 V, 2.25 A power supply with plugs for other countries and a USB-C-to-HDMI video adapter. The foundation kit has a breakout plate, LEDs, a potentiometer, buttons and an ultrasonic sensor, which attach by magnet and are Lego-compatible.
  • Setup and the learning software are polished. First boot walked him through setup. It runs pi-top's own OS, with education tools including LibreOffice and "Further", the company's challenge-based labs, which run in Chromium on ARM. He judges that "the power is in the learning software", though tinkerers happy with Raspbian may not need it.
  • C# Jupyter notebooks can drive the pi-top's sensors. He says the Microsoft .NET Interactive team is looking to add pi-top support, with a private preview planned. He installed the ARM32 .NET Core SDK over SSH, built a daily preview from Diego Colombo's GitHub and ran Jupyter Lab. A C# notebook then switched the LEDs, read the potentiometer and plotted the ultrasonic distance live with d3.js. He stresses that none of this is needed unless you want to tinker.
  • He rates it the most plug-and-play Pi kit he has seen. He contrasts it with the many kits that need soldering or pins pushed into the GPIO header.
Crosstalk SolutionsRaspberry Pi 4 - 8GB Canakits
  • The 8GB Raspberry Pi 4 is for power users and specific workloads. The host says light projects such as Pi-hole need no more than 2GB, so most builds can save money on the 2GB or 4GB board; the 8GB version joins a line launched a year earlier in 1, 2 and 4GB, with the 1GB since discontinued.
  • The host rates CanaKit's two 8GB kits as complete starter bundles. The Starter Pro kit has a power adapter with switch, HDMI cable, fan, heatsinks, a 32GB microSD with NOOBS, a card reader and a black case. The Starter Max adds a second HDMI cable, a white case and a 64GB card. His kit links are Amazon affiliate links that pay the channel.
  • Extra RAM mainly helps by caching files and enabling RAM-based operation. Citing MagPi issue 94, the host lists a larger file cache, a RAM disk (e.g. 4GB, lost on reboot), and the OverlayFS option in raspi-config, which makes the OS read-only with changes held in memory, suited to kiosks that keep their data in a cloud database.
  • Memory sharply cut a photo-compression batch job's run time. In MagPi's benchmark it took over 13 hours on a 2GB Pi 4, about 2.5 hours on 4GB, and under 1.5 hours on 8GB; the host calls this an unrealistic use but proof of RAM's advantage over storage.
  • 8GB makes virtual machines and dual-user workstations conceivable. The host suggests two Pi-hole VMs at 2GB each, leaving 4GB for the OS, but has not tried it. He found no guide anywhere for MagPi's dual-head, two-user idea beyond the article itself. As a dual-monitor desktop, his 4GB Pi stuttered on full-screen 720p YouTube.
Scott HanselmanHow to set up an awesome prompt with your Git Branch, Windows Terminal, PowerShell, + Cascadia Code!
  • Install Windows Terminal from the Store. Hanselman recommends the Microsoft Store build because it updates itself automatically. He stresses that the terminal is not PowerShell. It supplies tabs, copy and paste, and fonts, and PowerShell is just one of the shells it hosts.
  • A Powerline font must be used, or glyphs render as squares. He uses the "PL" variants from the Cascadia Code zip (Cascadia Code PL, Cascadia Mono PL), because the plain fonts lack the Powerline glyphs. He sets the font in a defaults section of the terminal's settings.json so every profile gets it. A font set on a single profile overrides the default, which he demonstrates by breaking it.
  • Installing posh-git and oh-my-posh does not activate them. Both modules come from the PowerShell Gallery, and he says the untrusted-repository prompt is "probably okay" for that source. The import lines then go into the file at $profile, which may need creating. Oh-my-posh draws the prompt, posh-git supplies the Git status, and Set-Theme Paradox is his theme of choice. One other theme he tried failed to load.
  • The "running scripts is disabled" error is an execution policy problem. He fixes it by running Set-ExecutionPolicy as administrator. Unrestricted is the easiest choice but allows any script to run, and if IT forbids that he says to use Signed. The full steps are on his blog ("Hanselman pretty prompt") and in Microsoft's documentation.
Technology and FriendsKayla Cinnamon on Windows Terminal [TECHNOLOGYANDFRIENDS 617]
  • Windows Terminal is a new front end over existing shells. Cinnamon, the Microsoft program manager who owns it, says Command Prompt and PowerShell run unchanged underneath, joined by WSL distros, SSH and any other command-line app, in tabs and panes. Each shell is a "profile" with its own colours, fonts, background image or acrylic. Command Prompt, PowerShell and Azure Cloud Shell come by default, WSL distros and PowerShell 7 are detected automatically, and SSH connections must be added by hand.
  • It went from open source code to stable 1.0 in a year. Terminal was announced and open-sourced at Build 2019, when building from source was the only way to get it. It reached 1.0 at Build 2020, launched just before the keynote, after versions up to 0.11 and about three months of bug fixing aimed at eliminating crashes. A preview build ships in the Microsoft Store alongside the stable build, and features move to stable about a month after reaching preview.
  • Version 1.1 added Explorer integration and tab customization. Released the week before the 24 June recording, 1.1 brought a right-click "Open in Windows Terminal" in File Explorer (a top request), a tab colour picker and renaming. Theming and a settings UI, hoped for by the end of 2020, are planned to replace editing a JSON file guided by a schema. It needs Windows 10 1903 or newer; the Store gives automatic updates, while GitHub releases must be updated by hand.
  • WSL 2 runs a full Linux kernel inside Windows. Cinnamon, relaying what her office mate who owns WSL has told her, says Windows build 2004 removed the old translation layer. That makes Linux operations much faster and gives full system-call compatibility, so Docker now runs. She says installation is now wsl --install, Linux GUI apps are coming later, and she is "pretty sure" GPU acceleration has been added, which she sees helping machine-learning work.
  • Terminal got its own font because the font is most of the screen. Cinnamon says Consolas made the new terminal feel like the old one. Cascadia Code is named after Terminal's internal code name, Cascadia, and "Code" refers to its programming ligatures, such as != drawn as a slashed equals. Terminal ships Cascadia Mono by default because ligatures are "not technically accessible". Variable font weights are coming, and Terminal 1.1 preview already supports them.
Technology and FriendsYina Arenas on Microsoft Graph [TECHNOLOGYANDFRIENDS 616]
  • Microsoft Graph exposes all of a customer's Microsoft 365 data through one API. Arenas, who has led its program managers for about seven years, "since Microsoft Graph was an idea", lists mail, calendars, Teams conversations, SharePoint and OneDrive files, Planner tasks, security alerts and Intune devices. Over 50 teams feed APIs into it. She says it is really many small graphs, one per organization or user, and that consumer outlook.com or hotmail.com accounts have one too, covering mail, calendar, contacts and OneDrive.
  • Graph also generates insights from user activity signals. Arenas says it infers people-to-people relationships from emailing, reading and co-authoring, and people-to-content relationships. Project Cortex, announced at Build, builds project taxonomies and maps who knows what from the content an organization produces, without anyone filing documents by hand.
  • Any device that can make an HTTP request can call it. Access uses OAuth 2.0 with Azure Active Directory: the user consents, the app gets a token, and a request such as GET /me/events returns JSON. SDKs for .NET, Java, JavaScript, Objective-C, PHP, Python and others add pagination and retry with exponential backoff when the service throttles. Previews appear on the /beta endpoint and graduate to the production v1 endpoint.
  • Graph Connectors bring external data into Microsoft Search. Arenas says a line-of-business system, such as HR data or on-premises inventory, can be indexed into Graph so it appears beside Microsoft 365 content when users search from office.com, SharePoint or the Windows search bar. She describes Microsoft 365 as evolving from a marketing bundle of Office 365, Windows and enterprise mobility and security into one product, with Graph as its gateway. Windows search reaching into OneDrive and SharePoint runs on Microsoft Search through Graph.
  • Developers should start at graph.microsoft.com and Graph Explorer. The portal offers quick starts of about three minutes and self-paced tutorials of about 30 minutes. Graph Explorer (aka.ms/ge) comes with a demo account and shows the requests, the responses and the permissions each call needs. For example, Mail.Read is needed to read mail, and User.Read.Basic can be consented by a user while User.Read.All requires administrator consent.
Scott HanselmanGit Pull Requests explained - Computer Stuff They Didn't Teach You #5
  • A pull request is a convention, not a Git feature. Hanselman defines it as someone asking you to pull their branch into your world. He says the "dirty little secret" is that it is just "an agreement and how we communicate", built from Git remotes and branches.
  • Git has no built-in authoritative copy; teams choose one. Because Git is decentralized, nothing makes his copy outrank a clone. Treating the GitHub copy as official is a team decision. He says the same of the names "origin", "upstream", "master" and "main": they are conventions people agreed on.
  • A local repo has no remote until you add one. A repository made with git init shows no origin, while cloning from GitHub creates one automatically. He linked his earlier local repo with git remote add origin and git push -u origin main, where -u sets upstream tracking. All seven commits appeared on GitHub, but his other local branches stayed on his machine.
  • Merge a pull request locally to learn how it works. A friend, Maggie, forked the repo and opened a PR from a branch named "maggie-patch-1". He notes GitHub can merge, squash or rebase with a click. Instead he made a local branch, pulled from her repo, inspected the change, merged it into main without fast-forward and pushed. GitHub then marked the PR merged. He likens the manual route to learning to drive stick.
Scott HanselmanGit 101 Basics - Computer Stuff They Didn't Teach You #4
synopsis

Hanselman teaches Git "for regular people" in one unedited take of about 33 minutes. He builds from an empty folder to a resolved merge conflict and ends on the message that you can almost always go back in time, so you should commit often and not be afraid.

Setup. He works in Windows Terminal running PowerShell, with VS Code beside it. His custom prompt shows the branch and its changes, and he argues Git is hard to learn without seeing that state. The hidden .git folder is Git's database, a "friendly lie" he says never to touch.

Tracking and committing. New files are untracked until git add stages them, and git commit records them with a message. When he deletes the files by accident, git restore brings them back, and git log keeps the ledger of who did what.

Time travel and branches. Checking out a commit hash puts the files back as they were and leaves Git "detached". He says the usual move is to branch instead, using git checkout -b to open a parallel universe for experiments.

Merging and conflicts. Merging the testing branch into main fast-forwards cleanly. Then two branches change the same line of the same file, and the merge fails. He shows the conflict markers are plain text in the file. He resolves the conflict in VS Code by accepting the incoming change, marks it resolved with git add, and commits.

What's left. He mentions squashing, cherry-picking and rebasing as more advanced options, and leaves GitHub push and pull for the next video.

  • Git "lies" helpfully by hiding its database in .git. Hanselman shows the hidden .git folder that turns an empty folder into a repository and calls it "a friendly lie". It is the database of changes, and he says never to touch it.
  • Files go from untracked to staged to committed. He creates files, which Git notices but does not track. git add stages them and git commit with a message records them. When he deletes the files by accident, git restore brings them back, and git log is the audit ledger. He argues Git is "really hard to learn" without a prompt that shows state, and recommends his Windows Terminal pretty prompt with VS Code beside it.
  • Commit hashes allow time travel; branches split time. Checking out a commit hash moves the files back to that moment, leaving Git in a "detached" state he calls an alternate universe. Instead of going back in time, he says, you usually want to split it with git checkout -b, giving a parallel branch where you can experiment.
  • Conflicts are plain text in the file. Merging his testing branch into main fast-forwarded cleanly. Changing the same line on two branches caused a conflict, which Git writes into the file as marker characters. He shows it can be fixed by hand in Notepad, or in VS Code by accepting the incoming change, the current one or both. Running git add then marks it resolved, ready to commit.
  • If you pay attention, you can't lose your work. His central message is that you can almost always go back in time, so "don't be afraid" and commit often. Silly commit messages can be squashed later. He mentions cherry-picking as a more advanced option and leaves pushing and pulling from GitHub for the next video.
Crosstalk SolutionsOn The Road #7
synopsis

A day of field calls that ends the host's five-office project for an Oregon coast real estate firm: every office now has a rebuilt network and phones on the Crosstalk PBX, the firm's own hosted phone system, with an estimated 11-month payback from a roughly halved monthly bill. The video adds a dust-cover test, a UniFi Video recovery and a home rewiring job. Skillshare is announced as the channel's first sponsor.

Follow-up calls. At an earlier office the host fixed a printer and changed call flow: the agents use no voicemail, so calls ring the desk and then forward to cell phones. His point is that a phone system succeeds when it is fitted to the client's workflow. A second office's "phones down" report was a configuration misunderstanding. A third had an ISP outage. He warns that without static IPs the PBX's IP authorization and responsive firewall can lock an office out.

The fifth office. Over six hours he installed an EdgeRouter X, a UAP-AC-Pro and a US-8-150W, remounted the power strip, and moved the office from DSL to 200/10 Mbps cable. Old wiring was the problem: one run passed PoE but no DHCP until both ends were re-terminated, and another worked only if nobody touched the cables.

Dust covers. Of two $12–13 per 100 sets, he prefers the locking plastic plugs over the silicone caps because they need pliers to remove.

UniFi Video. A camera firmware push left seven of about 20 cameras offline. Power-cycling labelled switch ports, plugging one in direct, and a manual SSH update recovered them all, five of them from his car.

Home. He replaced two indoor-rated Cat5e runs with outdoor-rated Cat6 to keystone jacks, with a drip loop, in about three and a half hours before selling the house.

  • The five-office overhaul should pay for itself within a year. The host's real estate client gets new networks at all five offices, new phones at two, and a move to the Crosstalk PBX, the firm's own hosted phone system; he puts the payback at about 11 months because the monthly internet and phone bill is roughly halved.
  • A hosted PBX without static IPs risks locking whole offices out. The PBX authorizes known WAN IPs, and its responsive firewall locks out anything that fails to authenticate within a few packets; none of the five offices has a static IP, so the host suspects a changed WAN IP could knock all the phones off, and highly recommends static addresses.
  • Old in-building cable, not the new gear, caused the fifth office's trouble. A Yealink T20P got PoE but no DHCP address while a laptop on the same jack worked; re-terminating both ends fixed it. The office got an EdgeRouter X, a UAP-AC-Pro and a US-8-150W, and went from DSL to 200/10 Mbps cable.
  • Locking plastic dust plugs beat silicone ones for unused switch ports. Prompted by the grease-coated restaurant switches, the host tried two Amazon sets, both about $12–13 per 100; the silicone caps pull out by hand, while the plastic ones click in and need needle-nose pliers to remove, adding a little security.
  • A UniFi Video camera firmware push left seven cameras offline. Of about 20 cameras, mostly G2 bullets plus a G3 dome failed to return; power-cycling their labelled EdgeSwitch ports recovered five, one G3 dome recovered only when plugged straight into the switch, and one G2 bullet needed a manual firmware update over SSH (fwupdate -m).
Technology and FriendsSven Aelterman on Data in Education [TECHNOLOGYANDFRIENDS 615]
  • Education uses data like other industries, plus regulatory reporting. Aelterman, who spent over 13 years at Troy University as a lecturer and director of IT before joining Microsoft's education division as a cloud solution architect for Tennessee, says universities must check students' eligibility for federal financial aid and submit documentation, and must supply accrediting agencies (private bodies empowered by the federal government) with data on learning outcomes, faculty qualifications and financials. Accreditor data is aggregated rather than student-level, campus health centers bring HIPAA into play, and he says the volume of data makes higher education a frequent target for hackers.
  • Vendor student-information systems rarely fit everything an institution needs. Student information systems (SIS) and their data-warehouse models cover much of it, but his College of Business used off-the-shelf SQL Server and Integration Services to combine institutional and learning-management-system data, and Reporting Services to report on it. He says Power BI is now an attractive option; Giard adds that many people now use Azure Data Factory in place of SSIS.
  • Faculty are data creators and carry responsibility for its quality. Aelterman says instructors produce data whenever they take attendance, record grades or advise students, though they don't usually see themselves that way, and he tried to get faculty to see that their classroom work has implications for the college and institution.
  • Predictive analytics on individual students only helps with high-touch follow-up. He says that over roughly the last year or two, institutions have started projects (not yet a majority) that use demographic and learning-management data to keep individual students on track, rather than tracking aggregate six-year graduation rates. He names three factors, academic, financial and social (the last especially for traditional students living on their own for the first time), and says the insight is only useful when financial aid counselors, academic advisors or career services actually reach out and build a relationship.
  • Experience with online teaching made the pandemic switch easier, not automatic. Troy University sees itself as a pioneer of online education, and many faculty had already learned that you can't just post course material, you have to check in regularly and get students interacting. Faculty who hadn't taught online needed skills, equipment and software, and one-on-one instruction such as piano was hard; he thinks much of education can be done remotely if it has been planned for, though not surgery training from YouTube videos.
Network Chucktest hacking intro
  • This post includes paid content that is not available publicly. See the original source.
Crosstalk SolutionsUniFi USP-RPS Redundant Power System
  • Ubiquiti puts redundant power in one shared box instead of every device. The USP-RPS lists at $399 and backs up to six devices through a proprietary RPS port, which at recording only the UDM Pro and Gen 2 Pro switches have. The host likes that buyers who don't want redundancy aren't charged for a second supply in each device.
  • The RPS cable must be forced in until its printed line disappears. Each USP-RPS includes one cable, and extra cables (USP-Cable) cost $29 each. The host found the cable feels seated while the line is still visible, and it only connects once crammed fully home, as the documentation requires.
  • Failover worked in the host's test, with alerts. When he pulled AC power from a USW-Pro-24-PoE, the RPS supplied 10 of 30 W on its 12 V rail, logged an event, sent an email alert and drew 0.905 A against 0.005 A idle. It handed back to AC about 4 seconds after power returned. Adoption and firmware update went cleanly in UniFi, version 5.12.72, on a Cloud Key Gen2 Plus.
  • True redundancy needs two circuits and two UPSes. The host's suggested design puts the RPS on one UPS and circuit and the switches on another UPS and circuit. That covers both a failed device power supply and a long outage, and power from two separate grids is better still.
  • The host calls it cost-effective for small and mid-size businesses. He prices the RPS plus five extra cables at $544, and with six 48-port Pro switches $7,138 MSRP. His non-comprehensive research put six Aruba or Juniper 24-port switches with hot-swap redundant supplies above $15,000, at $2,500 and up each before licensing. He notes Cisco has a similar but pricier RPS.
Technology and FriendsJeff Fritz on Migrating from Web Forms to Blazor [TECHNOLOGYANDFRIENDS 614]
  • Only Blazor for the web is production-supported; desktop and mobile are experiments. Fritz describes Blazor as the .NET team's component-based framework, fully supported as of ASP.NET Core 3.1 (released "back in November, December", with four years of support). Blazor server-side renders components to HTML on the server and uses SignalR to sync changes with the browser, and it can also run in the browser on WebAssembly. Hosting Blazor in a Chromium shell, Electron-style, for cross-platform desktop apps is an experiment the team has not committed to shipping, and it will continue only if the data shows developers want it.
  • Web Forms has no direct successor, so migration has meant rewriting. Fritz says going from Web Forms to MVC meant rewriting the application, and ASP.NET Core supports only MVC, with no Web Forms. His first step is to move business logic into class libraries targeting .NET Standard; Giard raised this, and Fritz adds that it can be done in the existing app now without breaking anything.
  • Blazor components that mimic Web Forms controls let markup be copied across. The idea came from Blazor program manager Dan Roth: components with the same names, attributes and HTML output as their Web Forms counterparts. A proof-of-concept repeater let them reuse about 80% of the code. Of roughly 26 base controls (not counting data-editor components), about 15–16 are built towards a read-only minimum viable product, developed live on his Twitch stream as the open-source Blazor Web Forms Components (on GitHub under fritzandfriends and on NuGet). He agrees with Giard that it is still a rewrite, just an easier one.
  • Shims emulate the Web Forms page lifecycle and ViewState. Blazor has only an on-initialized and an on-after-render event, and the latter fires on every re-render, so Fritz has "started down that path" of a shim that maps OnLoad-style code onto them. ViewState is already supported as a string–object dictionary held in memory the Blazor way, rather than serialized into the page and posted back on every submit.
  • Reaching Blazor puts old Web Forms apps on .NET Core. Fritz says that means an app can run in a container rather than being coupled to IIS, be deployed with Kubernetes, and use modern Azure architectures, which is the on-ramp he is pushing the project towards.
Crosstalk SolutionsOn the Road 6
synopsis

Two weeks of field calls on the Oregon coast, ending with four of five real estate offices moved to rebuilt networks and the Crosstalk PBX, the firm's own phone system, with the last office due the following Tuesday. Running through it are the host's working principles: tackle unwanted tasks at once, figure out an unfamiliar site rather than know everything, fit the wiring to what the client will pay for, and put the effort into phone system details and training.

The greasy restaurant. He came out for dead phones at a restaurant he had set up about five years earlier, running an old FreePBX on an ASUS VivoPC. The PBX itself was fine. The cordless analog phone on a Cisco SPA112 came back after reseating its wall run, and the spare Yealink had been plugged in with an RJ11 cable. The real finding was kitchen grease coating the EdgeSwitch 24 PoE in the cabinet above the kitchen. Its exposed ports no longer made reliable contact, and he advised replacing the switch.

Phones and training. At the Seal Rock office a speakerphone complaint was a missed firmware update. He argues a deployment fails without attention to follow-me, voicemail and routing, documentation, and training an administrator to train the agents.

The intermittent home run. A Raspberry Pi monitor caught nothing in six weeks. After a 24-hour outage, a temporary floor cable to another home run stopped the drops. The original run is the likely culprit, but the cause is still unknown.

Wiring. Installing a second nanoHD and a Flex switch to get past a concrete wall, he defends plain wiring in a kitchen prep area. The client will not pay for neat work there, and he says no client has ever complained about his wiring.

Offices and upgrades. One office went from 20/3 DSL to about 45/23 Mbps once the PPPoE modem was bridged to an EdgeRouter X. Another was rebuilt on Charter, where static-IP Yealink T20Ps cost 1.5 hours of factory resets. A UniFi Video server moved to Ubuntu 16.04 by reinstalling and restoring from backup.

  • Kitchen grease made a restaurant's switch ports unreliable. The network cabinet sits directly above the kitchen, and after five years the EdgeSwitch 24 PoE's long-exposed, unused ports gave power but no network and did not click home, while long-occupied ports worked; the host recommended replacing the switch and asked viewers for a cleaning method.
  • The intermittent home-run fault was fixed, never explained. The Raspberry Pi set to start a packet capture on lost ping saw no outage in six weeks, and the drops returned after it was removed. A temporary cable taped across the floor to another home run 15 feet away stopped them; the host's line is "there's never an answer, there's only a fix".
  • Reusing end-of-life Yealink T20Ps saves money but costs labour. The phones, end of life since 2014, redirect only by TFTP on their old firmware. At one office every phone had a static IP and no known password, so the host factory-defaulted each, updated firmware and auto-provisioned it to the Crosstalk PBX, the firm's own phone system, which took an extra 1.5 hours.
  • A phone system succeeds on details and training. The host says follow-me, voicemail and call routing must be set correctly, then documented and taught to an office administrator who trains the staff, because the learning curve otherwise makes people hate the system. One office's speakerphone complaint turned out to be phones that had missed a firmware update boosting gain.
  • Moving UniFi Video to Ubuntu 16.04 worked but requires a reinstall. The client's Shuttle PC ran version 3.9.12, the highest the host says Ubuntu 14.04 supports; upgrading the OS uninstalls UniFi Video, so take a backup first, then reinstall 3.10.2 and restore. He flags his version numbers as possibly wrong and calls it perhaps the last release.
Technology and FriendsJason Fox on Spatial Computing [TECHNOLOGYANDFRIENDS 613]
  • Spatial computing is the enabling layer that lets computers understand physical space. Fox, who specialized in it during his last years at Microsoft, defines it as taking in camera streams, LIDAR and depth sensors to work out the shape of a space and where the device is in it, and says AR and VR are built on it. HoloLens uses SLAM (simultaneous location and mapping) rather than LIDAR: four low-res black-and-white cameras whose data, he thinks, is processed at close to a gigabyte per second on special hardware. The new iPad Pro has a LiDAR sensor that returns a mesh of a room within a couple of seconds.
  • Today's commonest use is mobile AR combining maps with local positioning. Pokémon Go puts a game skin over real-world map points of interest and places creatures in the camera view, and Fox calls Minecraft Earth the fuller example. He frames it as two coordinate systems: geospatial coordinates on the Earth, translated into a local coordinate system a computer can calculate against.
  • His startup turns existing camera feeds into a site model over time. At Worlds, Fox says, machine learning detects objects in 2D camera streams, and because the camera's location and the space's geometry are already known, the system can give a detected person's position in metres from the camera and in latitude and longitude. The point is finding things indoors, where GPS fails, such as equipment moved across a facility. The system covers "4D" with rewind, replay and live views, and with no ready SDK or API on the market they are building their own platform.
  • The "AR Cloud" goal is a persistent, shared digital overlay of the world. Fox works on the nonprofit Open AR Cloud as a side project and cites Microsoft's Azure Spatial Anchors, which saves an XYZ anchor to the cloud for recall on the same or another device. He calls what Worlds builds "little private AR clouds" for specific customers and hopes to open it up as a platform, which he says is "probably a few years down the road" for a small company. He also cites overlaying a building's CAD model on construction work in progress; Giard adds prototyping and redecorating as uses.
  • There is no go-to learning source because the field is immature. Fox got started about 12 years ago with a structured-light sensor at a lab inside Lockheed Martin in Fort Worth, aligning scans of aircraft parts with engineering CAD models. He says the term "spatial computing" only appeared in the past two or three years. He suggests experimenting with ARKit or ARCore on a phone and watching recorded sessions from the Augmented World Expo (AWE), which he calls the de facto industry conference after about a decade.
Network ChuckTHANK YOU!! and WELCOME NEW MEMBERS!! [MEMBERS ONLY]
  • This post includes paid content that is not available publicly. See the original source.
Technology and FriendsTroy Hunt on The Role of Technology in Social Isolation [TECHNOLOGYANDFRIENDS 612]
  • Face-to-face contact has value that remote sessions cannot replicate. Hunt says he has offered remote workshops for years, yet more than 90% of the ones he runs are in person because clients want the dynamic, including going for beers afterwards; video "beers" after two recent remote workshops were good, but he doubts he will remember those people as he would from a pub. Giard's view is that social media maintains relationships but does not establish them; Hunt partly disagrees, saying his first contact usually comes online (talks, media) and then formalizes in person, and that he has never advertised his workshops.
  • Hunt splits each remote workshop day with a co-presenter. A normal workshop is two eight-hour days, and he says eight hours in front of a screen is much harder than being in the room, while time zones make a 9-to-5 day for a Chicago client brutal from the Gold Coast. With Scott Helme in the UK, who has run the workshop dozens of times to Hunt's nearly hundred, they tag-team: for a Copenhagen client the week before, Hunt took the first half, both chatted for an hour over lunch, and Helme took the second.
  • Hunt does not need travel, and would happily do half as much. His income also comes from blog sponsorship, Pluralsight courses and commercial subscribers to Have I Been Pwned, and he treats talks and workshops as augmenting that ecosystem. He spent about 245 days away in 2019, roughly 42% of the year, and says he would be happy with half that; recording on 6 April 2020, he expects to travel within Australia in the next few months but struggles to see going overseas that year.
  • Hunt's 10-year-old son took to online school quickly. After a chaotic first day of video-conference audio cutting out, the class adapted fast, and his son is online 20 minutes early and stays until about 3 p.m. Hunt hopes schools might keep a mix, such as four days in class and one at home, so children enter the workforce knowing video-conferencing etiquette and how to work from home effectively.
  • The forced experiment may change employers' attitudes to remote work. Giard argues that firms which distrust staff working at home may find the world does not fall apart and reconsider costly offices and travel; Hunt recalls his boss at Pfizer, which he left nearly five years earlier, insisting he be "present" and "visible". Hunt wants empirical evidence afterwards, such as 12 months on, on whether remote work and remote workshops proved worse, better or in between, including weighed against the environmental cost of his travel.
GCastLogging to Azure Application Insights from a Java Spring Boot Application [GCAST 87]
  • Application Insights can collect logs from apps hosted anywhere. Giard creates an Application Insights resource from the Azure portal (left at the default West US region, though he says it should sit near where the app is deployed) and runs the demo app locally, extending the Spring Boot MVC app's logging from the previous episode. The resource's instrumentation key is a GUID that identifies it; he says to keep it secret and shows his only because he will delete the resource.
  • Two Maven dependencies wire Spring Boot logging to Application Insights. In pom.xml he adds Application Insights Spring Boot Starter and Application Insights Logging Logback, both in the com.microsoft.azure group, the latter at a 2.0-series version. He says Maven may need a refresh before they resolve, which IntelliJ flags with red or squiggly-underlined entries.
  • A second Logback appender plus the key sends logs to Azure. In logback-spring.xml he adds an appender-ref named "AI appender" beside the existing console one, then defines that appender with the Application Insights class (the name is his choice; the class comes from the new dependency). The instrumentation key goes into application.properties.
  • Logs arrive in Azure minutes later, because shipping is asynchronous. With the level set to warning and above, a request to the greet endpoint logged a warning and an error to the console at once, but they showed up in Application Insights only a few minutes later. Giard says the asynchronous push is how it scales to millions of users without overwhelming Azure.
  • Entries land under Traces and can be filtered with a query language. Under Logs, a traces query shows each message with its severity level, timestamp, and detail on the running program and the browser. He points to IntelliSense-assisted where filters, order by timestamp ascending or descending, and null handling, and leaves the query language for a possible future video.
Crosstalk SolutionsHome Upgrades!
  • Temporary indoor-rated runs were replaced with hidden outdoor-rated Cat6. The host ran about 60 feet of outdoor Cat6 under his deck and into the garage, to a USW-Industrial switch mounted below his Tesla wall charger. The switch's 802.3bt PoE powers a G4 Pro camera watching the driveway. He prefers screw-in grip clips to nail-in ones.
  • Use a converter to run a 24 V passive device from an 802.3af switch. The USW-Industrial does not supply 24 V passive, so the garage UAP-AC-LR got no power. An INS-3AF-I-G (802.3af in, 24 V passive out) brought it up as a wired access point instead of a repeater, which the host prefers to buying an overkill 802.3af access point.
  • Terminate permanent runs into a female jack, not the device. The host ends custom runs in keystone blocks and an Ethernet surge protector, mainly so the device on the far side can be swapped without rerunning cable. Commenters prompted him to add a drip loop to the outside surge protector.
  • The NanoStation AC suits a mixed-PoE point-to-point link. It accepts both 802.3af and 24 V passive, so it works on the industrial switch at one end and the 24 V passive-only Ubiquiti solar point at the other. The link runs about 50 feet, partly through a greenhouse, and showed full bars.
  • Old coax runs make good pull strings for new Cat6. The host pulled Cat6 to his loft along an unused coax run and installed an In-Wall HD there, overkill for Wi-Fi but useful for its four wired ports, one with PoE out. The move to a new house then cancelled his remaining plans, and he took down the test pole.
GCastLogging in a Java Spring Boot Application [GCast 86]
  • Use Spring Boot's built-in logging framework unless there is reason not to. The built-in framework is Logback, and Giard says he prefers it over adding another one unless there is "some compelling reason". He enables it by adding a file named logback-spring.xml under the application's resources, with a root element whose appender-ref points to an appender named console.
  • The appender's pattern decides what each log line contains and looks like. In his file the pattern sets the colours of each part, the date format, a highlighted log level, the message text, and exception details followed by a line break. He calls the syntax "a little bit cryptic" and points to the formatting chapter of the Logback manual at logback.qos.ch/manual.
  • A single level setting turns logging on and off without code changes. There are five levels, in order: trace, debug, info, warn and error. Setting level="info" on the root logs info, warn and error; trace would log everything, and warn would log only warn and error. Code can log at every level, and the config file decides what gets output.
  • Pick the standard logger class when several are offered. Giard says to choose the Logger from org.slf4j, the one that works with LoggerFactory, which is in the same package. He declares a private Logger field built with LoggerFactory.getLogger(), passing the current class so that the class is logged automatically. The logger has trace, debug, info, warn and error methods. He says error usually belongs in a catch block because an overload also takes the exception and logs it.
  • The demo shows lower levels being ignored at the configured threshold. With the level at info, stepping through a controller method logged nothing for the trace and debug calls but logged the info, warn and error messages, alongside Spring's own info messages that he did not write. After he changed the level to warn and restarted the app, only the warn and error calls produced output.
Crosstalk SolutionsUniFi AR
  • UniFi AR needs touchscreen gear, iOS and current software. It works only with the new generation of switches and the UDM Pro, the devices with the 1.3-inch touchscreen, and as of recording only on iPhone or iPad. The controller must be 5.12.66 or later; the host says the current 5.12.72 release and the switch firmware that comes with it cover every requirement, whatever hosts the controller.
  • Scanning a switch shows what is plugged into each port. In the UniFi app, More then AR turns every switch screen into a QR code; after an orientation scan of the rack, pointing the phone at a switch labels each port with the connected device or cross-connect, with device icons where UniFi recognises them. Arrows or moving the phone switch between switches.
  • The AR rack is a saved snapshot and must be rebuilt. This is why AR had failed on his Gen 2 Pro switch in an earlier review: the switch was added after the rack was scanned. Deleting the AR rack under the settings gear and rescanning each switch top to bottom fixed it.
  • The host thinks it a gimmick for small racks, valuable for big ones. With his two 24-port switches it is a neat feature he does not need, but he expected it to save real time finding a drop or cross-connect in racks of 10 to 20 switches, or several racks.
  • The feature is unfinished, in the host's view. He says the overlay stays horizontal on vertically mounted switches. He would like tapping a port to show its throughput, historical traffic, and the connected device's MAC and IP address.
Technology and FriendsNik Molnar on Visual Studio Codespaces [TECHNOLOGYANDFRIENDS 611]
  • Codespaces moves the whole developer environment off your machine. Molnar, a program manager on the team, describes the Azure service (formerly Visual Studio Online, renamed around the time of recording) as spinning up an environment with tools, configuration and source code "in a matter of seconds", reachable from VS Code via an extension, from Visual Studio (then in private preview) or from full VS Code running in a browser; build, debug and IntelliSense all run remotely, so the local editor is a thin rendering layer that no longer competes with Outlook, PowerPoint or Spotify for resources.
  • Its main value is near-instant onboarding to any code base. Molnar says one JSON file in a repo dictates the operating system, tools and extensions, so every collaborator gets the same environment and "works on my machine" problems largely go away, while personal settings such as theme and shell aliases are layered on top; Live Share and IntelliCode, which suggests members based on usage patterns mined from popular GitHub repos, are built in. Giard says getting productive on a consulting engagement used to take him days or sometimes weeks.
  • Environments are meant to be task-based and disposable. Molnar suggests spinning one up for a 30-minute PR review and deleting it, or keeping one for a multi-day feature; after 30 minutes idle by default it drops to a low-power state for "fractions of a penny an hour" with all uncommitted changes kept. He quotes about 46 cents per active hour on the current entry SKU, 88 cents on premium and about 24 cents on a coming basic SKU, saying he may be a penny or two off, and says a newly expanded self-hosted agent for your own machine is free.
  • Under the hood each user gets an isolated VM running a container. Molnar says the service places a Docker container, built from an image you name or a Dockerfile in the repo, on a VM isolated to you for security, then clones your repo into it; you get full terminal access to install or delete anything, and changes persist between sessions.
  • The roadmap adds smaller, larger and multi-container environments. Molnar says the current standard tier is 4 cores and 8 GB of RAM, with a premium tier above it; planned are a basic tier of 2 cores and 4 GB, a tier above premium with a GPU for machine learning work, and Docker Compose support so an environment can include services such as MySQL or Redis.
Crosstalk SolutionsOn the Road 5
  • One small, identical design suits all five real-estate offices. The client has five offices on the Oregon coast, with three or four agents each, who are rarely in. Each gets an EdgeRouter X, doing quality of service for the phone trunk, plus a UAP-AC-Pro with a secure SSID and a guest SSID. Two offices also get a US-8-150W PoE switch; no site-to-site VPN was needed.
  • The suspected double NAT at Depoe Bay turned out not to exist. The host expected the Wave Broadband connection behind a TP-Link router/Wi-Fi unit to be double-NATed, which would have meant calling the ISP. The modem was in bridge mode, so the EdgeRouter X pulled a public IP straight onto its WAN, which he says is ideal for VoIP. He removed an old Samsung phone system and a failing, noisy AdTran PoE switch in about four hours on site.
  • He throttled and scheduled the guest network against outside users. Because the coast sees many travellers and transients, the open guest SSID is limited to 5 Mbps down and 2 Mbps up and broadcasts only from 7 a.m. to 7 p.m. The only disruption to staff was the subnet change, which meant reconnecting to the office printer.
  • Call forwarding bridges the gap until numbers are ported. Phones move to Crosstalk's own SIP trunking and Crosstalk PBX. Calls are forwarded from the old provider so the new system is in use before the port completes. The three remaining offices are on DSL, where a previous vendor sold VoIP phones without checking the network. The host says five IP phones cannot run over DSL, so those sites move to Charter Spectrum, with modems in bridge mode.
  • The host rates ClearlyIP phones highly for real-estate offices. The phones are ClearlyIP units branded for Crosstalk, which supplies them. A Follow Me button lets each agent toggle and set how calls ring to the desk and to their mobile, which he says suits staff who turn over often and change mobile numbers.
Crosstalk SolutionsUniFi Protect ViewPort
  • The ViewPort puts UniFi Protect live views on any HDMI screen. The UFP-ViewPort lists at $199 MSRP and outputs up to 4K at 30 fps. It has a PoE-in port and a second Ethernet port the host takes for pass-through rather than PoE out, and comes with a wall bracket and an HDMI cable. A US-8-60W, which is 802.3af, powered it without trouble, and it ran warm, not hot, at 106°F.
  • Adopt it from the Protect web interface, not the mobile app. Its welcome screen says either works, but the host could not find it in the latest Protect app. The desktop interface found it at once under Add Devices, and it updated itself in about five minutes. Even after adoption it never showed in the app.
  • Its only setting is which predefined live view it shows. You build views in Protect and assign one to the ViewPort. The host found a bug: a view slot set to rotate between cameras every five seconds, or on motion, cycles in Protect but stays on one camera on the ViewPort.
  • Ease of setup makes it one of his favourite Ubiquiti products. It runs in about ten minutes with no learning curve. His Raspberry Pi surveillance monitor was cheap but took hours of fiddling, so for a customer deployment he would rather pay $200 for the ViewPort.
  • The host most wants touchscreen control. As of recording the display is static. He would like tapping a camera on a touchscreen monitor to make it full screen and tapping again to restore the view, though he concedes it would probably need a list of tested touchscreens.
GCastDependency Injection in Java Spring Apps [GCAST 85]
  • Newing up the service in the controller is a dependency worth removing. Continuing from episode 84's MathService interface and MathServiceImpl class, Giard wants room for multiple implementations: one doing the real work and one with a hard-coded answer for testing, or different ones per environment or per part of an organization. He calls the example contrived.
  • Each implementation is marked as a service and given a qualifier. Giard labels the class with the service attribute so Spring knows about it, and adds a qualifier with a name; the service label alone suffices if there is only one implementation of the interface. He names each qualifier after its class, though he says that is not required.
  • A mock implementation returns a fixed value regardless of input. He adds MathServiceMock, which implements MathService, with the same service and qualifier attributes, and makes addNumbers always return 10.
  • The controller autowires an interface-typed field and picks one by qualifier. The controller drops the new call for a private class-level field of type MathService (the interface, not the implementation), marked autowired so Spring creates the instance as soon as it is referenced, with a qualifier naming MathServiceImpl. A GET in the browser returns 30 for 10 and 20 and 35 for 10 and 25; changing the qualifier to MathServiceMock returns 10 whatever is passed in.
  • The payoff is testing without fragile, slow dependencies. Giard says you would not normally edit the live controller to switch; the live code would use the real implementation while a test uses the mock. It matters, he says, when the real implementation calls another web service or reads or writes a database: those dependencies are fragile, take time, and are not what the test is testing.
Technology and FriendsChristine Matheney on Teaching Computer Science to the Next Generation [TECHNOLOGYANDFRIENDS 610]
  • Coding becomes approachable when broken into small, concrete steps. Matheney, volunteering with Girl Scouts of Northern California on the organisation's coding-for-good badges, trains troop leaders, often parents hesitant with computers, by having them write if-then "algorithms" for making a peanut butter and jelly sandwich; she says the same approach works for adults and young girls alike.
  • All-girl settings make girls more willing to try intimidating technology. Matheney says that among girls she is less hesitant to admit not understanding and there is more collaboration; she was on one of the first Girl Scout FIRST Robotics teams, sponsored by NASA and building at NASA Ames, and says about 75% of her teammates are now in STEM careers. She adds that physical results, a robot moving or a bulb lighting, spark more interest than printed output.
  • The bottleneck in high school computer science is finding teachers. Matheney works for Microsoft's TEALS program, which pairs volunteer technologists with teachers to co-teach in roughly 500–700 US high schools that otherwise could not offer the subject, because people who know computer science can earn more in tech. She says over two to four years a teacher goes from minimal knowledge to teaching AP Computer Science alone, and that seeing a technical woman in the classroom helps keep girls interested.
  • TEALS volunteers shifted to remote mentoring when schools closed. Matheney says the program's 1,800 volunteers, who normally teach the hour before work, held lunch-hour sessions to prepare students for the AP Computer Science A exam still held in May and for the project replacing the cancelled Principles exam; her team also published remote engagement practices such as polling and Flipgrid video assignments. She cites a figure she read that 86% of people with a mentor in high school or college are more likely to finish college.
  • Imagine Cup Junior extends Microsoft's student competition to high school AI. Matheney says it offers a day of AI learning content and asks students to propose, rather than build, AI-for-good solutions, such as spotting ocean trash or tracking air pollution, judged regionally and then internationally. Giard describes a similar Illinois showcase he mentors in, with student proposals for sign-language interpretation and expired-food detection.
Crosstalk SolutionsUniFi Gen2 PRO PoE Switches
  • Both Pro switches share the same PoE++ ports and differ in scale. The USW-Pro-24-PoE has eight 802.3bt PoE++ ports (17–24), sixteen 802.3at PoE+ ports, two 10G SFP+ ports, a 400 W PoE budget and 88 Gbps switching capacity. The USW-Pro-48-PoE has the same eight PoE++ ports, 40 PoE+ ports, four SFP+ ports and 176 Gbps. Both take a UniFi RPS input; neither offers 24 V passive PoE.
  • Layer 3 routing is promised but not yet delivered. As of recording both are layer 2. The datasheet promises inter-VLAN routing, static routing and DHCP server functionality in future firmware. The host explains that switch-level inter-VLAN routing keeps traffic between VLANs on the same switch from travelling to the firewall and back.
  • The Pro has fans and is audibly louder than the non-Pro. Ubiquiti's datasheet claims "near-silent" cooling: about 0.9 dB at 25% fan, 7.3 dB at 50% and 18.8 dB at 100% (22.5 dB on the 48-port). The host measured about 49 dBA behind the switch at fan level 40 against 42.6 dBA ambient, and 64–65 dBA at 100%. He will keep the fanless USW-24 in his rack instead.
  • UniFi AR would not work on the Pro switch at first. The Pro showed no QR code although it ran the same firmware as his working Gen 2 non-Pro switch, and he had not found the cause at recording. The front touchscreen shows port, throughput, PoE wattage and temperature statistics, and can also set the fan speed manually.
  • The host thinks the pricing fair once layer 3 arrives. The 24-port lists at $699 USD and the 48-port at $1,099 USD MSRP. He judges that about right for a layer 3 switch with these features, so the price is justified by firmware not yet shipped.