tech

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

Scott HanselmanWhat is the Cloud? Soft and Fluffy Edition - Computer Stuff They Didn't Teach You #10
  • The cloud is someone else's computer, at scale. Hanselman starts from the joke definition and his rental-car analogy: people treat other people's machines roughly because breakage is "their problem". He then argues that what matters is scale: thousands of standardized machines in warehouse-sized buildings, in dozens of regions around the world.
  • Stacked small computers show what redundancy buys and misses. His rack of six Raspberry Pis, each with four cores (24 in total), can lose a board and keep working while he swaps its SD-card "disk" later. Because every board shares one power supply, though, that supply can take the whole stack down. A Synology box with five removable drives and a backup battery is, in his words, where it "starts looking like a server".
  • A 1U Azure Stack Edge is a rentable slice of Azure. He opens a unit that was loaned to him and must be sent back. Inside are two processors, 16 GB sticks of ECC RAM with room for 384 GB, an NVIDIA GPU for machine-learning work, redundant power supplies, and fans and drives that pull out like drawers. It is leased by the month rather than bought. He explains rack units with the shipping container: they are standardized so they can be stacked.
  • Software that treats the machines as one unit makes it a cloud. Your data is copied to racks far apart in the building and to other regions (his examples are Seattle, Japan and South Africa), and when a part fails "the cloud should heal". His definition: "a combination of redundant hardware and smart software."
  • The "edge" is a local piece of cloud linked to the big one. You run it on your own premises and connect it to the wider Azure cloud, which is why it is called the edge. He adds that the cloud needs no particular processor, ARM or Intel, and can run Linux or Windows.
Crosstalk SolutionsGrecian Port PTMP Wireless Design
  • Two 90° sectors beat one 120° sector across the port mouth. A 120° sector would only skirt both sides of the port, where sector signal is weakest. So the host splits 180° between two Rocket 5AC Prism Gen 2 radios on AM-5G20-90 sectors, GPS-synced because they share a pole. This is an unpaid overview for a viewer, Demetrius, at Kos port in Greece.
  • airLink estimates 300 Mbps per station; the host expects 150–200. He plans 40 MHz channels to NanoBeam 5AC Gen 2 stations on the port's light poles, every 10 m and about 6 m tall, with the AP about 20 m up on the internet building's roof. The roughly 300 m distances over water give clear line of sight. He calls 100–150 Mbps per station ample for boat Wi-Fi.
  • Client coverage favours 2.4 GHz, and one stretch stays weak. UAP-AC-M-Pro access points share each station pole because 2.4 GHz penetrates boats better. A stretch along an ancient wall has only hand-reachable lamp posts, so it gets about −60 to −70 at 2.4 GHz and likely no 5 GHz. He buys two five-packs for nine sites, a spare included, for about $20 less than singles.
  • The head-end choices hinge on power types and future cameras. The host chose the Netgate SG-3100 ($399, 2.4 Gbps firewall) and the US-8-150W because it powers both 24 V passive and 802.3af. The Cloud Key Gen2 Plus costs about $18 more than the non-Plus and could add Protect cameras on the sector pole. Each station gets a roughly $50 Altelix NEMA enclosure with two piggybacked PoE injectors.
  • The whole design prices at $4,956. That includes an RF Armor UCM-4T four-way sector mount and an optional $100 RF Armor USK9025X shield. The shield cuts interference between the side-by-side sectors and seals the Prism against port weather, and a $10 UGAH-234 holds the GPS antenna.
Technology and FriendsAlexandria Storm on Natural Language Processing and Inclusion [TECHNOLOGYANDFRIENDS 628]
synopsis

Storm, an undergraduate who has just finished her second Microsoft internship, argues that AI is only as good as its data and that the data must represent everyone who will use it. That conviction runs through her Bing language work, her cancelled founders' conference and her criticism of performative diversity.

The Bing project. After a first internship in UX engineering, she worked alone on natural language understanding for Bing's answer boxes. She built two binary classifiers, one for region sensitivity and one for time sensitivity, using labelled data she collected from paid judges, and says she raised precision significantly.

Diverse data. Storm says Bing lags on non-Latin languages, and that models trained only on broadcast "standard" English may fail AAVE speakers. She argues NLP needs linguistics and diverse teams, noting her team had no Spanish speakers.

The conference. She and two Berkeley colleagues planned a conference with a VC-judged pitch competition to connect underrepresented founders with investors. They had sponsorship and travel scholarships, but the pandemic cancelled it, and she stepped back to protect her health.

Performative diversity. She closes by criticizing Pride-month gestures that lack substance, and praises companies that are honest about their numbers. She rates Microsoft better than most.

  • Storm built classifiers to flag region- and time-sensitive Bing queries. In her second Bing internship in Bellevue, a solo project on a team where many held PhDs or master's degrees, she fine-tuned two binary classification models. One marks a query as region-sensitive (should a user in India see the same answer as one in the US?), the other as time-sensitive, as with "how do I delete my Zoom account", which needs the current version's answer. She says she raised the model's precision significantly and presented to the VP of WebXT; the project was ready to ship but she does not know whether it has.
  • Data quality, not model-building, drives improvement in industry AI. Storm says that at large companies the base models already exist and engineers mostly tweak them, so the critical gains come from large volumes of quality labelled data. She gathered hers through internal sites where paid judges and vendors labelled queries. Her own addition to "quality" is that the data must represent the real, diverse user base.
  • NLP models fail users when they ignore dialects and non-Latin languages. She says Bing's answer quality lags for non-Latin-script languages such as Arabic and Chinese. Drawing on her study of linguistics, she argues that models trained only on "standard" broadcast English, which she calls a made-up dialect, may not understand speakers of African-American Vernacular English. She also says her team had no Spanish speakers, which she believes keeps Bing US-centric.
  • Underrepresented founders need concrete funding links, not just community. With two Berkeley colleagues, Storm planned a conference for entrepreneurs of colour, women and queer and trans founders, centred on a pitch competition judged by VCs. It had Microsoft sponsorship (HubSpot was in the works) and travel scholarships. It was cancelled in early April because of the coronavirus, and she says she would only try again through a better-funded organization.
  • Much corporate diversity work is performative, she argues. As a queer woman of colour, often the only one of her demographic on a team and once one of two women at a startup, Storm criticizes rainbow avatars each June without support, promotion or pay equity behind them. She prefers companies that admit their numbers are poor and say how they will improve. She says Microsoft is significantly better than many, citing its funding of her conference.
Scott HanselmanVirtual PowerPoint Greenscreens! Change a PowerPoint Slide and Change an OBS Scene - automatically!
  • A green box on a slide becomes a window for the presenter. In OBS, Hanselman display-captures the screen showing PowerPoint and applies a chroma-key filter to cut out the green. He then places his shrunken camera feed in the hole. He tunes the similarity setting to fix artefacts and points out green "spill" on one slide that still needs work.
  • Animated slide layouts left him changing slides and scenes by hand. Every time a slide moves the green box, the OBS scene has to change so that his image fits it. He found pressing "two buttons" annoying. A Stream Deck is one fix, but he wanted the slide itself to drive the scene.
  • Scene names in the slide notes now switch OBS automatically. A note line starting obs: names the scene. A small C# app listens for PowerPoint's next-slide event, reads the notes, and calls SetCurrentScene on OBS's websocket server, which he says listens on port 444. Notes text oddly begins at shape index 2. The code builds on samples from CSharpFritz and Jimmy Engström and on the OBS websocket .NET library he credits to Alexander Schmid.
  • It is "not a product": about two hours of code. He gives the effort as about 90 minutes, and later "two hours", and posted it as a PowerPoint OBS scene switcher with no executable yet. He plans CI/CD to produce builds. He says it could become an OBS or PowerPoint plug-in, and that storing the scene in the notes field was an arbitrary choice.
Technology and FriendsIrma Mesa on Cafecito [TECHNOLOGYANDFRIENDS 627]
  • Cafecito pairs remote tech workers with strangers for short video breaks. Mesa, who has worked remotely since 2017, built it to solve her own isolation: members sign up, are matched on their interests, role and industry, and meet on a 30-minute video call. She planned it as a local coffee meetup in Indianapolis; COVID made it virtual, and she says it now has members on five continents.
  • The product is the matching algorithm, not the video. Mesa says video comes through daily.co's API, which took less than a day to set up. The core is a matching algorithm, built from scratch by a developer in Mexico City and tested since July, that now starts from shared industry and then narrows by interests. Post-call feedback on enjoyment (1–5), relevance, whether to meet again and how the caller felt is meant to train the matching over time with machine learning, which she describes as still lightweight.
  • She launched on no-code tools and is rebuilding to scale. Mesa says she launched in March on Zapier for automations and Airtable as the database, to validate the idea, and is moving to a proper backend with a React frontend, hosted on AWS. She has about 500 members and hopes for 1,000 by year end. Because she fears another 5,000 at once would be "shaky", she is considering a waitlist, and she is putting quality ahead of growth because competitors who grew fast have shaky quality.
  • Cafecito is free for now, with freemium planned. Mesa describes the current service as a beta with no revenue. Her plan is a trial of perhaps 14 days, then a premium tier with precise targeting such as "engineers in Chicago". As a first-time founder she says running a free product is stressful, and marketing so far has been organic, through Product Hunt, newsletters and users' posts.
  • A business version would help people ops onboard and keep remote hires. Mesa says a B2B prototype, aimed at an August 31 or early-September pilot, would give people ops data on which employees and departments are engaging, so they can act on retention and well-being. Fellows from a programme for people who lost internships to COVID are building it. Giard adds that turnover is expensive and that not feeling connected is one reason people leave.
Technology and FriendsNayonna Purnell on Changing to a Career in IT [TECHNOLOGYANDFRIENDS 626]
  • Purnell left teaching for software after talking her way into an internship. She taught K–12 Spanish in Philadelphia for six years, holds a dual master's in special education and Spanish, and made the change about three years ago, around age 30. She had built point-and-click sites, learned through Girl Develop It meetups costing $20–$50, and took an online course. She then asked a startup for a summer internship and was paid $500 a month after the founders said they could not match her teacher's salary. She resigned from teaching, went on to community college and an online programme for software engineering, and now works as a consultant on Salesforce admin and development.
  • The "developer in three months" story did not hold for her. Purnell says the bootcamp promise of a $60,000-to-six-figure job after three months ignored who it worked for. She says data shows Black women are not being hired in Silicon Valley. With two master's degrees, a bachelor's and a software engineering certification, she has been told at interviews that she was "perfect, but yet not enough", and she has never had an uncle or friend to call for a role. She attributes this to being a woman of colour.
  • She focuses on problem-solving rather than one language. Her stack has spanned JavaScript, Python, Apex on Salesforce, Java, C++ and, recently, Blazor with C#. A senior developer's remark that developers are problem solvers changed her approach. Giard agrees, saying his own job is solving business problems, sometimes without technology.
  • Teaching skills transfer directly to development. Purnell calls them her superpower: explaining technical work through analogies to non-technical people while being precise with peers, writing documentation for whoever comes next, and planning code the way she wrote lesson plans, starting from the objective and breaking it into chunks. Her hardest part has been interviews, where hiring managers say passion is enough but then ask her to code and to articulate her thinking.
  • She built her network and experience by volunteering and asking. Purnell volunteers at and organizes conferences to get in free and meet people. She joined Temple University and conference mentorship programmes, plans to attend a virtual Grace Hopper, and found a Python group through Systers. Building a conference website on Firebase with senior developers gave her hands-on work her job did not. She advises entering tech through non-engineering roles or employers that train people from other backgrounds, and not giving up.
Technology and FriendsPeter de Tender on Azure Certification [TECHNOLOGYANDFRIENDS 625]
  • Cloud certification can no longer be crammed in a five-day class. De Tender, an Azure technical trainer at Microsoft since September last year, after about 10 years running his own consultancy, says his team trains top and "compete" customers each week for Azure skills, with certification as a side effect. He says Azure is too broad for anyone to master, and that over the last two or three years exams have tested practical, day-to-day knowledge rather than memorization.
  • Azure certifications are now built around job roles. He says Microsoft Learning introduced the model about three years ago, around September 2018. It starts from AZ-900 Azure Fundamentals and moves to role exams such as administrator, developer (AZ-204), security and IoT, nine or ten in all, which combine into role credentials such as architect. Exams are revised every four to six months, so the administrator exam has gone from AZ-100 to AZ-104. He says the credential stays valid for life but an exam counts for two years.
  • Certification proves competence to yourself and employers. De Tender says Microsoft trainers and Microsoft Certified Trainers must be certified to teach. For others it is evidence of invested effort that can help a career, though not a guarantee of expertise. When he managed a partner firm, consultants who passed got a bonus, a gift card or a pay raise. Giard adds that a certification gives a candidate a leg up, all else being equal.
  • Prepare with free Microsoft Learn labs and each exam's weighted objectives. He points to microsoft.com/learn for free training, documentation and hands-on labs, and suggests running even the smallest VM, about $30 a month, for five minutes. Each exam has a PDF of objectives with weightings; his example is networking at 5% against web-app deployment at 30% for developers. He takes beta exams because they show what to focus on, and their scoring can be revised after feedback within two to six weeks, so a fail can turn into a pass.
  • Exams turn on reading details and spotting distractors. De Tender describes the question types: yes/no, multiple choice with up to seven or eight plausible options, drag-and-drop ordering of steps, and case studies, the hardest, where technical and business requirements such as performance against cost must be balanced. Scenario detail such as "17 offices, 120,000 employees" is often irrelevant. He says live-environment tasks were added about a year ago but recently removed, which he believes is partly because of COVID capacity. Exams can be taken at home under webcam supervision at a completely clear desk; he once had to cover a hotel TV with towels.
Crosstalk Solutions"the office" Network Design
  • The UniFi Design Center plans a whole UniFi deployment on a floor plan. At design.ui.com, the host scaled a floor plan of the Dunder Mifflin office from the TV show by setting a doorway to 3 feet. He drew outer and inner walls because they drive the Wi-Fi and camera coverage estimates.
  • The host doubles the switching for redundancy rather than max one switch. He fits a UDM Pro for an office under 50 connections with surveillance, plus two USW 48 PoE switches, later upgraded to two Pro 48 PoE at $1,099 each. The design needs exactly 48 ports, and auto mode would give one switch. Split half and half, either switch can carry the office while a failed one is replaced.
  • The host deploys fewer drops than the tool's two-per-person assumption. He mostly uses four-port workspaces per desk cluster, plus two each in two offices and four in the conference room and break room. Running spare cable during the install is cheaper than adding it later.
  • Two NanoHDs cover the office, and dome cameras cover only entrances. 5 GHz coverage shrinks but still reaches where needed. Five G3 Dome cameras watch every door and stairway entrance rather than employees, though he notes flat-mounted domes may need bullet or G3 Micro cameras for angled views.
  • The tool's topology and bill of materials need correcting by hand. Cables can only home-run to the rack, not daisy-chain from a workspace, and the bill of materials adds 96 patch cables. It estimates three 1,000-foot boxes of cable, where the host expects about four once runs go through walls and ladder rack.
GCastHandling Spring Boot Errors with ControllerAdvice [GCast 93]
  • Per-method try-catch scatters and duplicates error handling. Giard says the try-catch pattern from his previous videos works, but catching the same exception in 20 methods means copying the handler into 20 places and maintaining all 20. Controller Advice, built into the Spring Framework, moves that handling into one place.
  • A ControllerAdvice class holds one handler method per exception type. He adds a new class (his name for it is his own choice) annotated with @ControllerAdvice, and in it a method annotated with @ResponseBody and @ExceptionHandler for ArithmeticException. The method builds the endpoint's usual output model with a null quotient and the message "math error: " plus the exception message, and returns it in a ResponseEntity with HttpStatus.BAD_REQUEST (400). He says a separate status annotation is redundant because the ResponseEntity already carries the status.
  • With the advice in place, controller try-catch blocks can simply go. Posting 100 divided by 0 to the divide-numbers endpoint, with no try-catch left in it, lands in the advice method and returns a 400 with quotient null and "math error: / by zero". He adds handlers for his custom missing-arguments exception and for the generic Exception class, which he says should sit at the top or bottom as the handler of last resort, so it catches any exception the others miss.
  • Validation code shrinks to throwing the custom exception. In add-numbers he deletes the inline checks and their try-catch and just throws a new missing-arguments exception with a message; Java requires throws in the method declaration for that exception. A missing person name returns a 400 with "missing args error: missing input, person name is required", and a missing first number, thrown deep inside the math service, is caught by the same handler.
GCastMore Error Handling in a Spring Boot Application [GCast 92]
  • A divide-numbers endpoint shows Java integer division truncating. Giard adds a divide-numbers POST endpoint, called on localhost port 8080 under the app's GCast path, with input and output models copied from his add-numbers ones and a quotient in place of a sum, plus a divide method on the math service interface, its real implementation and its mock. Because an integer divided by an integer returns an integer, 10 divided by 2 returns 5 but 100 divided by 3 returns 33: the fraction is dropped, not rounded.
  • An uncaught divide-by-zero returns an unhelpful HTTP 500. Dividing by 0 throws an exception and the response has a 500 status, no useful information, and not the JSON format the endpoint normally returns.
  • Catch built-in exceptions rather than pre-checking every input. Giard says checking parameters up front, as in his last video, is not always possible: the division might be one step in a longer workflow with complex logic, perhaps one he did not write. He wraps the service call in the controller in a try-catch for ArithmeticException, plus a generic Exception catch for anything else, and how to handle each is up to the business logic.
  • The error comes back in the same format as a success. The catch returns the output model with a null quotient and a message saying an arithmetic error has occurred, with the requester's name and the exception's own message ("/ by zero") appended. His first run still returned a quotient of 0 because the output was set again after the try-catch; the assignment had to move inside the try. He says the consistent format means clients need not change their code radically, and that the next video shows a more elegant way to handle exceptions in one place.
Crosstalk SolutionsUniFi Protect G4 Doorbell
  • The G4 Doorbell is Ubiquiti's first smart-home device since mFi. The UVC G4 Doorbell for UniFi Protect lists at $199 MSRP and was sold out at recording; it records 2 megapixels at 30 frames per second, has a polycarbonate enclosure, entrance lighting and a display, and is rated IPX4: spray from any direction is fine, sustained water pouring over it is not.
  • Installation took the host about 30 minutes, not the advertised 15. He counts five or six minutes finding the breaker and the time spent filming, and puts a typical install at 15–25 minutes with only a Phillips screwdriver; the hardest part was pushing stiff old doorbell wires back into the wall, and the unit works out which wire is which itself.
  • The quick-start guide includes a chime-box step Ubiquiti's video skips. The kit ships a wiring block for the interior chime box; the host first tried without it, then fitted it anyway. The app warns that enabling the chime-box setting without a chime box "can cause serious damage to the device", and the setting also affects power usage.
  • The doorbell's interactive features work only through the mobile app. The Protect app found it on the same Wi-Fi as his UNVR, flagging a weak signal. A ring pushed to his phone, and a custom message can show on the display for one minute; two-way talk worked from the app but not from the web live view, and the speaker was hard to hear over traffic and wind.
  • The host reserves a verdict but calls the price reasonable. He guesses $199 is in line with Ring-type doorbells without having checked. In Protect it supports RTSP and logged a UPS driver's ring as an event, and he says a separately sold $29 doorbell power supply is coming, letting it run without the doorbell wiring.
Scott HanselmanPorts and Processes! What Process has that Port open? - Computer Stuff They Didn't Teach You #9
  • Understand why a pasted fix works, not just that it does. Hanselman frames the video against copying Stack Overflow answers blind: the computer "is not a black box", and, like changing a tire, it is worth knowing how even if you sometimes call for help.
  • "Address already in use" means another process got the port first. His demo Node app fails to bind port 1337 because something is already listening on it; he stresses that a port is a computer concept, not a Windows, Mac or Linux one, and that ports are first come, first served.
  • On Windows, get the PID without elevation, then kill it. netstat -b -a names the executable but needs administrator rights and is slow; netstat -a -o -n piped through findstr 1337 gives the process ID without elevation, tasklist with a PID filter identifies it as node, and taskkill /f /pid stops just that one process (the PID can also be found in Task Manager's PID column).
  • Linux uses different flags for the same tools. In WSL 2, netstat -ltnp (listening, TCP, numeric, program name) showed node without sudo, grep stands in for findstr, and he prefers kill -15 to the "very aggressive" kill -9.
  • Sysinternals TCPView gives the same view graphically. It needs administrator rights, sorts connections, shows the PID and file location and can end the process; he argues such tools matter for malware hunting too, since a program listening on a port as an ordinary process finds it hard to hide.
Technology and FriendsDamian Brady on MLOps [TECHNOLOGYANDFRIENDS 624]
  • DevOps practices fit machine learning poorly as they stand. Brady says ML projects are experimental, with dead ends and corrupt data, and may run weeks or months before anything is worth releasing. A training run "might take days of training on petabytes of data" and thousands of dollars of compute, against minutes for a normal build, so retraining on every change is not practical.
  • Everything except the data belongs in source control. That means the Python, R or C# training code, the data-cleaning steps, the infrastructure definition (VM size, GPUs, RAM, OS, library versions) and the pipeline, which saves each model to a repository with metadata such as accuracy. He says data scientists are often not developers, so models still pass around by USB key and email; he wants an automated pipeline that packages a model as a library or, commonly, a Docker container exposing an API.
  • Monitoring should test whether a new model changes behaviour. For a recommendations engine he would check whether the new model gets more clicks than the old one; for image captioning, whether users correct captions less often. He says this is only partly automatable, because validation against your own test data "doesn't necessarily represent the real world".
  • Track individual experiments, not user stories toward the goal. Brady says he has been "struggling with" planning, since a project's single aim (a recommender hitting a target click-through) cannot be broken into steps. He suggests one work item per experiment, such as a linear regression on a given data set, closed with its result even when it is a dead end, so the team sees what was tried.
  • Azure Machine Learning runs training; GitHub Actions or Azure Pipelines trigger it. He describes Azure ML's experiment and model tracking, compute that scales from zero to five or six instances and back, mounted blob storage, hosted Jupyter notebooks, AutoML and a drag-and-drop designer. General CI tools cannot easily run an unattended two-day job and don't know what a model or accuracy metric is, so he uses them to start a training run when code changes and to deploy once the model is done.
Technology and FriendsGlenn Block on Astrophotography [TECHNOLOGYANDFRIENDS 623]
synopsis

About two years into the hobby, Block argues that astrophotography is now within an amateur's reach. Mounts, cameras and software have become far more affordable, though a serious start still costs a couple of thousand dollars. The way in, he says, is the local astronomy community rather than the equipment.

Mounts and optics. He starts with the mount: a tracking mount follows the Earth's rotation, and an equatorial mount at about $800 tracks better than an alt-azimuth one at the same price. Aperture sets how much light a scope gathers, and the eyepiece sets magnification. Reducers widen the field of view and a Barlow zooms in, each with a trade-off, which he says appeals to the engineer in him.

From eyepiece to camera. Faint deep-sky objects need long exposures, around 30 seconds, from a dedicated camera tethered to a PC, which then stacks many frames, sometimes from several nights. He says a Canon EOS is also popular. Sessions last six to eight hours, so power matters, and he chose an Intel NUC over a Mac drawing about 80 watts. Post-processing is part automated and part checked by hand.

Where and when to shoot. He leaves Seattle's light pollution for darker sites an hour or more away, judges them by the Bortle scale, and plans trips with deep-sky weather apps covering seeing, humidity and cloud. His proudest image is of the Whirlpool Galaxy.

His gear path. He went from a cell-phone adapter to a Celestron NexStar Evolution 8, a used ZWO ASI294, then a Celestron AVX mount, a RedCat 51 and a guide scope. Each upgrade, he says, needed about 10 more purchases.

Getting started. He recommends the book NightWatch and the Cloudy Nights forum, and above all a local star party, where newcomers can look through other people's scopes.

  • The tracking mount matters more than the telescope sold in kits. Block says children's scope kits disappoint, because a stable mount that moves with the Earth's rotation is what keeps an object centred. He puts a really good alt-azimuth mount at about $5,000 alone, against roughly $800 for an equatorial mount that tracks tightly; equatorial mounts align on Polaris and need counterweights, so he started on alt-azimuth because it was easier to learn.
  • Deep-sky astrophotography is long exposures stacked and post-processed on a computer. The eye sees the Orion Nebula as a grey smudge; a 30-second exposure brings out colour. He describes sessions of six to eight hours, sometimes over several nights, with a dedicated camera streaming frames over USB to a PC, then stacking in Photoshop, Deep Sky Stacker or PixInsight, with perhaps 10 hours of processing behind a finished galaxy image. Imaging drains laptops, so he bought a low-power Intel NUC mini PC rather than a Mac drawing about 80 watts.
  • Dark skies and atmospheric conditions decide the shot. He says the Bortle scale measures sky darkness, lower being darker. From Seattle he drives about an hour to Gold Creek (Bortle three or four, he thinks), and names Goldendale, about three and a half hours away, with an observatory. He uses deep-sky weather apps for seeing, humidity and cloud up to about 10 days out, and says city-light filters help from home.
  • Start cheap and upgrade as the hobby takes hold. He began with a cell-phone adapter on the eyepiece and shot the Moon and the Orion Nebula from his driveway. His gear went from a Celestron NexStar Evolution 8 (an 8-inch scope that aligns on three stars from a 50,000-star database) to a used ZWO ASI294 camera (almost $1,000 new), a Celestron AVX mount, a portable RedCat 51 and a guide scope. He puts a serious start at a couple of thousand dollars, or about $300 for a tracker if you already own a camera, and recalls one person who spent $100,000.
  • Join the local community before buying anything. Block says a star party hooked him about two years before recording, and that you don't need a telescope to attend one. For learning he recommends the book NightWatch, the Cloudy Nights forum ("the de facto site"), his local shop Cloud Break Optics and local Facebook groups, and says beginners are not made to feel dumb.
Scott HanselmanContainers? So What? Docker 101 Explained - Computer Stuff They Didn't Teach You #8
  • Hand-configured machines drift, and VMs fix that expensively. Hanselman starts from setup documents (install nginx, Apache, Python, PHP, .NET) that go wrong across 1 to 256 machines; virtual machines solve this but each carries a whole guest OS on a hypervisor, perhaps 20 GB, duplicating what the host already provides.
  • Containers share the host OS, carrying only their own binaries and libraries. In his diagram the hypervisor and guest OSes are replaced by a thin Docker daemon that brokers system calls; a FROM scratch image holding his statically linked C hello world was about 1 MB, the size of the binary itself.
  • Containers are ephemeral by design. Files he created inside an interactive busybox container were gone on the next run; he calls this a feature, since the machine is always exactly what the Dockerfile describes, and says state belongs in mounted volumes or, as with his podcast site, an external database.
  • Cached layers make images fast to build and start. Each Dockerfile step is a layer stacked on base images (scratch, busybox, ubuntu, nginx built on Debian Buster slim) pulled from Docker Hub; nginx came down as five layers of about 30 MB and ran with port 81 on the host mapped to 80 in the container.
  • His production site builds, tests and publishes entirely inside Docker. The Hanselminutes site's multi-stage Dockerfile uses Microsoft's .NET SDK image, so no SDK is needed locally; it has 23 layers, an 11-second step is reused when unchanged, and the final image is 256 MB. He calls containers the future of shipping software and defers orchestrators like Kubernetes to a later video.
Scott HanselmanWhat is .NET? What's C# and F#? What's the .NET Ecosystem? .NET Core Explained, what can .NET build?
  • .NET is an ecosystem of languages, runtimes and libraries, not one product. Answering newcomers including Kelsey Hightower, who likened it to "a mini operating system", Hanselman lists C#, F# and VB; the common language runtime (like the JVM); a large base class library; and NuGet (like npm or Maven), which he puts at 57 billion downloads.
  • The separate .NET flavours are merging into one SDK. .NET Framework runs on Windows and is "basically done"; .NET Core is open source and cross-platform; Mono/Xamarin is a clean-room reimplementation. As of 2020 .NET Core 3.1 is the long-term-support release with three years of support, .NET 5 is in preview for later in 2020, and he says LTS releases then follow every other year.
  • The dotnet CLI is the entry point, with templates and side-by-side versions. dotnet new scaffolds console, WPF, Razor Pages, MVC, React and gRPC projects; the bin and obj folders are disposable build artifacts; installed versions sit side by side, so one app cannot break another; the project file reflects C#'s enterprise use.
  • Language versions move separately from the runtime. Using a C# 9 preview, he rewrites a recursive Fibonacci (fib(20) = 6765) as a top-level program with no namespace, class or Main, then as a pattern-matching switch expression; he stresses the newer style is optional.
  • F# and C# borrow features from each other and interoperate. F# is the functional, OCaml-style language; all .NET languages compile to an intermediate language run by the CLR, so each can call the other, which he admits is "a bit of an oversimplification". His own podcast site runs on .NET Core 3.1 on Linux in Docker.
Scott HanselmanRaw Tech User Group Talk - How does the Windows Terminal, WSL, and other shells all fit together?
synopsis

Recorded remotely over Teams for the Omaha Azure user group and posted unedited, this talk builds from terminal history to Hanselman's case that WSL 2 is not "just a VM" but a level of integration that "blurs the lines between operating systems". He ends by claiming that a Windows machine set up this way, even an old laptop, is "the best developer laptop". He works at Microsoft, which makes the tools he presents.

Console, terminal and shell. He separates the three: the shell (cmd, PowerShell, Git Bash, Cygwin) makes the strings, and the terminal paints them. The old console host is synchronous, so a dir /s runs only as fast as the screen accepts output and builds run fastest minimized. Mintty existed because of that. The open-source Windows Terminal renders with DirectX at around 500 frames a second, asynchronously, and any shell can run in it through the ConPTY pseudo-terminal interface.

Fake Linux and lied-to Linux. Cygwin is GNU user-space recompiled against Win32 with #ifdefs, so its ls calls Windows APIs. An attendee called it "syntactic sugar" and Hanselman adopted the phrase; his example is that you still cannot follow a Redis install guide with it. WSL 1 instead runs unchanged ELF binaries as pico processes, a lightweight process type invented because forking on Windows is expensive, and intercepts their Linux syscalls and redirects them to Windows. It breaks down on the file system: the Linux file system sits on NTFS, one syscall can become up to ten NTFS writes, access was about 10 times slower than native, and npm install could take 15–20 minutes. He calls WSL 1 obsolete but notes it needs no hypervisor, so it still serves older PCs without virtualization extensions.

WSL 2 as a utility VM. WSL 2 runs a real Linux kernel on the Windows hypervisor platform, which was split off from the paid Hyper-V product so that Windows 10 Home users, students with cheap laptops included, can run it. He calls getting that through the organisation "a huge win". Distros start in under a second, five ran within about half a gigabyte, less memory than Teams, and wsl.conf sets mounts, memory, processor limits or a custom kernel. Distros can be exported and imported as tar files; his example is a Microsoft colleague shipping a preconfigured IoT build environment that way.

Integration across the boundary. From Linux he launches notepad.exe (the .exe must be explicit, which he says prevents exploitation), pipes ls to clip.exe, and opens Linux folders in Explorer through a Plan 9 file server each distro runs. VS Code stays a Windows app while its extensions, such as the C# language service, run in a server inside Linux on a well-known port; he says other editors could copy the open protocol. Linux's localhost port 5000 is forwarded to Windows, so a breakpoint set in Windows debugs .NET Core running in Linux.

Docker, dev containers and Codespaces. Docker Desktop now runs on its own hidden WSL distro rather than a Hyper-V VM "on puppet strings", and his podcast site builds and runs its Selenium tests in Linux containers from either side. A dev container file lets a new hire open a Go project with no Go installed locally, and Visual Studio Codespaces moves the same setup to a cloud VM reachable from a browser or desktop VS Code. He adds that one person with free tools can now run CI/CD more maturely than many enterprises.

What was still coming. As of the August 2020 talk, Linux GUI support had been announced at Build with full support due that autumn, CUDA GPU access for TensorFlow was planned, and the WSL kernel was to move from Windows Update to Microsoft Update. His stated goal was cutting WSL setup from three or four steps and a reboot to one step and a reboot.

  • A shell makes the strings; a terminal paints them. Hanselman, a Microsoft employee, says the old console host is synchronous, so output can go no faster than the screen paints it and builds run fastest minimized; mintty was a "vote of no confidence" in it. The open-source Windows Terminal renders with DirectX at around 500 frames a second, asynchronously, and talks to any shell through ConPTY.
  • Cygwin is recompiled comfort food; WSL 1 lies to real Linux binaries. Cygwin is the GNU utilities rebuilt against Win32, "syntactic sugar" on Windows in an attendee's phrase he adopts. WSL 1 runs unchanged ELF binaries as lightweight pico processes and translates their Linux syscalls to Windows, but file access was about 10 times slower than native, with one syscall becoming up to ten NTFS writes, so npm install could take 15–20 minutes.
  • WSL 2 is a real kernel in a lightweight utility VM. It runs on the Windows hypervisor platform, separated from the paid Hyper-V product so it works on Windows 10 Home, which he calls a hard-won internal change; distros start in under a second, five ran in about half a gigabyte, wsl.conf caps memory and processors, and distros export and import as tar files. WSL 1 still serves PCs without virtualization support.
  • Deep Linux–Windows integration, not the VM, is the selling point. He runs notepad.exe from Linux, pipes ls into clip.exe, browses Linux files from Explorer through a Plan 9 server, splits VS Code so the UI stays in Windows while language servers run in Linux, and forwards Linux's localhost port 5000 to Windows. Docker Desktop keeps its own hidden WSL distro, and dev containers and cloud Codespaces remove machine setup for new hires.
  • More was promised for that autumn. As of the August 2020 talk, Linux GUI support had been announced at Build, CUDA GPU access for TensorFlow was coming, the WSL kernel was to move to Microsoft Update, and his goal was a one-step-plus-reboot install, down from three or four steps. He argues that, so set up, Windows is "the best developer laptop".
Technology and FriendsJon Skeet on Programming an Electronic Drum Kit [TECHNOLOGYANDFRIENDS 622]
synopsis

Skeet, who builds Google Cloud's .NET client libraries, describes V-Drum Explorer, an open-source app for configuring Roland electronic drum modules from a computer. A year on, it works much as he first pictured it and has grown into Blazor, Bluetooth and a second instrument. He calls it silly and also useful: it taught him tools he has since used elsewhere, and it supplied conference and user-group talks.

The idea. A Roland module holds 100 kits, each configurable down to two instruments per trigger, behind a tiny display. Seeing the USB port in the store, he imagined a tree-view editor. He compares seeing an idea through to the end with directing An Inspector Calls about 14 years earlier, when the cast finally played his cheerful Inspector "to 11" on the last night.

Talking to the module. It speaks MIDI SysEx, which he says is one-way in MIDI 1.0, so he built a request-response layer on top. He moved from a console app to WinForms to WPF, then rewrote the WPF app properly with view models.

Structure. Separate projects hold the model, with schemas for the TD-17, TD-27 and TD-50 and interfaces for MIDI and audio, plus the device implementations and the view model. A view-services interface keeps the view model testable, though he says he has written few tests. People with similar kits have shown interest.

The silly parts. Prompted by user-group listeners, he built a Blazor demo using the Web MIDI API that reaches the kit over Bluetooth from a phone. He also found that Roland's Aerophone wind instrument shares the protocol. A bar trigger turns the pages of his sheet music.

What it gave him. He learned installers, code signing and documentation. His WPF work led to a Zoom SDK app, and the project became an NDC London talk and many remote user-group talks. He says it works better over Zoom because the kit stays at home.

  • A tiny module display prompted him to configure the drums in code. Skeet's Roland TD-17 (later upgraded to a TD-27 module) holds 100 kits, and in each one every trigger can take two instruments with their own volume, attack and crossover. Seeing the USB port, he pictured a Windows app with a tree of settings. He says the open-source V-Drum Explorer still looks much as he imagined it just over a year earlier.
  • MIDI SysEx had to be wrapped to behave like request and response. He says MIDI 1.0 is unidirectional: the module answers on its own output with a block of memory at an address, and sends the same message when settings change on the device. His abstraction sends a request, waits for data for that address and ignores everything else. He credits Roland's detailed documentation of each module's schema.
  • The design separates model, view model and devices so the view model stays testable. A model project holds the schemas for the TD-17, TD-27 and high-end TD-50 and interfaces for MIDI and audio, implemented in separate projects; the audio one records samples of all 300 instruments. Dialogs go through a view-services interface with one-line implementations, so tests can fake a save or a cancel, though he admits there are few tests. The app went from console to WinForms to WPF, then a full WPF rewrite with view models, and he notes there had been no new WPF books since about 2010.
  • User-group audiences suggested the extensions he finds "wonderfully silly". After one suggestion he spent a weekend on a Blazor demo that runs the same .NET model code in the browser through the JavaScript Web MIDI API, which can reach the kit from his phone over Bluetooth MIDI. Another question led him to find that Roland's Aerophone digital wind instrument uses the same protocol, so the app lists its saxophone and pipe-organ kits too.
  • A spare pad turns the pages of his sheet music. Hitting the bar trigger sends a MIDI note that his console app turns into a page-turn on a four-page PDF of "Livin' on a Prayer". An earlier hack copied the current kit to slots 99 and 100 and treated a switch to 100, made by the pedal, as a page-turn. He says the project taught him Windows installers, Authenticode signing and documentation, and its WPF work made his later Zoom C# SDK app practical.
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.