tech

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

Crosstalk SolutionsUniFi Protect AI 360 Announced!
  • The new camera is a ceiling-hung fisheye with digital pan-tilt-zoom. Ubiquiti's announcement video presents the AI 360 as a 360-degree digital pan-tilt-zoom camera with enhanced person and vehicle detection, microphone and speaker, infrared, PoE power and two interchangeable bubble lenses. $299 is the early-access price, which the host notes may change; he has not used one and says early-access status would bar him commenting on its function anyway.
  • Leaving it zoomed in could miss events elsewhere in the room. No Ubiquiti AI camera yet auto-zooms onto detected people, the host says, so a camera left in PTZ mode records only where it points. He would like it to revert to 360 view after inactivity, or always record 360 and allow PTZ on playback, but does not know whether it does.
  • He doubts the speaker and the second lens are useful. Previous Ubiquiti two-way cameras had weak speakers, and this one would sit 8 to 15 feet up or more. He cannot see why a non-weatherproof lens is included when the tamper- and weather-resistant one would seem good enough, though suspects the larger clear dome may affect the view.
  • Comparable 360 cameras all cost more. The AI 360 is 5 MP and 1920x1920 in 360 mode; the Axis M3067-P is 6 MP, 2016x2016 in 360 mode and up to 60 fps for $469. Hikvision's 6 MP models run $380 to $550 at 30 fps, and a 5 MP Dahua with IP67 and IK10 ratings costs just over $400, each before any NVR.
  • Protect's polish is the trade for proprietary hardware. Compared with NVRs such as Blue Iris, which he runs on a test server, the host finds UniFi Protect a more seamless experience. The cost is that it cannot be installed on your own server, which he says is also what lets Ubiquiti control and refine it.
Scott HanselmanLearn F# to write Succinct, Performant, and Correct Code with Don Syme - Hanselminutes #799
synopsis

Don Syme, F#'s designer and architect, ends where he starts: F# is a practical, strongly typed, type-inferred, data-oriented language that delivers succinctness, robustness and performance at once, and it now reaches beyond .NET into the cloud and JavaScript.

Not a functional religion. Pressed by Hanselman's decade-old impression of F# as "the functional one", Syme says the label never mattered; "functional first" means data and functions with immutable defaults. Succinct was a deliberate word: brevity serves clarity for teams, not shortness for its own sake.

Correctness as tightness. Syme names nulls and C#'s silent discarding of results as enemies of correct code. F# forces explicit ignores and, through records, unions and tuples, forces every use of a domain model to be updated when it changes. Hanselman offers Yaron Minsky's "illegal states unrepresentable"; Syme agrees and recommends Scott Wlaschin's book.

Immutability and performance. Hanselman raises the trade-off; Syme says most bookkeeping suits immutable data and mutation remains available. He credits F# async with inspiring async/await elsewhere, concedes its performance and debugging issues, and describes F# 6's task { }, built on resumable code, matching C#'s output.

Cloud and client. Syme describes cloud programming as small pieces of code injected into a dominating system, and points to Azure Functions and .NET for Apache Spark. Through Fable and WebSharper F# also compiles to JavaScript; Guido van Rossum used it that way at .NET Conf Focus Day.

  • F# aims at simplicity without trading away correctness or speed. Syme, F#'s designer and architect, argues that only strongly typed functional languages deliver succinctness, robustness and performance together: in his framing Python gives succinctness without the other two, and C# gives robustness and performance but not succinctness. He plays down the "functional" label; "functional first" means only data plus functions that transform it, with immutable defaults.
  • Correctness comes from code that stays tight under change. Syme calls nullness "absolutely a disaster" for correct code, and contrasts C# silently discarding an unused result with F# requiring an explicit ignore. Records, discriminated unions and tuples force every producer and consumer to be updated when the domain model grows; he cites anecdotal enterprise deliveries with very low or zero bug counts. Hanselman relays Yaron Minsky's line that F#'s type system makes "illegal states unrepresentable", which Syme endorses, recommending Scott Wlaschin's Domain Modeling Made Functional.
  • Immutable by default, mutable wherever performance needs it. Syme says most web, UI and data-pipeline bookkeeping suits immutable data, while cores such as one huge machine-learning array can drop to mutation. F# 6, then in planning for .NET 6, adds task { } built on a general "resumable code" feature, compiling to essentially the same high-performance, debuggable code as C# async; F# 5 added struct records and other struct work.
  • F#'s async model came first and inspired C#'s and Python's. Syme credits F# async with inspiring async/await in C#, then Python and others, but concedes the early F# implementation had performance and debugging issues that C# ironed out, which the new task support addresses. Resumable code also covers async sequences, which he says F# can do in a library where the C# team must build each into the compiler.
  • F# is pitched as a cloud and JavaScript language, not only .NET. Syme says .NET for Apache Spark has "solved the big data problem for .NET", a space Java dominated, and points to F# templates for Azure Functions. Through the community's Fable and WebSharper compilers F# targets JavaScript and npm, playing TypeScript's role; at .NET Conf Focus Day, recorded before 29 July 2021, Guido van Rossum used it on both sides and quickly grasped list expressions, which Syme says subsume three or four C# features.
Crosstalk Solutions08 Backup and Restore - FreePBX 101 v15
  • FreePBX ships with no default backup, so you must build one. The host calls Sangoma's removal of default backups astounding; setup takes two parts, a File Store location (local, FTP, Dropbox, SSH or Amazon S3) and then a job in the Backup and Restore module. The SSH store exists for primary/warm-spare setups, which Crosstalk offers to set up for clients.
  • A local backup alone is not enough for production. If the drive crashes, the local copies go with it. For both hosted and on-premises clients, Crosstalk keeps a local backup plus an off-site FTP copy on its own servers, and keeps three monthly and three weekly backups.
  • Path variables take double underscores, and backup names should become subfolders. The local store points at the spool variable plus /backup (/var/spool/asterisk/backup). Turning on "append backup name as a directory" keeps monthly and weekly jobs in separate subfolders. Retention is set by "delete after runs" (3 keeps three months; 0 never deletes) or by age in days.
  • Email on both outcomes at first, then switch to failure only. Inline logs put the backup log in the email body. Once backups have proven reliable, the host only wants to hear about problems. Leave all modules selected unless you know otherwise; add custom folders such as custom sounds or TFTP phone configs and firmware if needed.
  • The rewritten module restores backups made on older versions. The module was rewritten in FreePBX 15; earlier releases could only restore onto the same version; the host says cross-version restores from 12, 13 or 14 work pretty well. His near-empty test server produced a 53 MB tar.gz, and backups in the configured File Store appear automatically under the Restore tab.
Technology and FriendsBecky Gaudet on the Azure Commercial Marketplace [TECHNOLOGYANDFRIENDS 672]
synopsis

Gaudet, who runs part of Microsoft's Commercial Marketplace publishing process, ends on one piece of advice: read every policy and the terms of use before you start, because the route from Partner Center through certification to a live offer is mostly automated now and the failures that remain come from what publishers write and submit.

Her job. She covers virtual machines, Azure Apps and container images, with IoT Edge coming, and owns metadata certification. Her work is split between strategy, such as interviewing publishers about what hurts, and escalations. A high-profile publisher's complaint to Scott Guthrie trickles down the management chain to her, and she pushes the certification teams, occasionally for an exception, usually to point the publisher at documentation.

Quality against speed. Due diligence slows publishers down, and Microsoft gets compared with Amazon and Google. Giard raises the early Windows 8 store, flooded with junk apps, as the failure the policies exist to prevent. During SolarWinds she spent a weekend checking whether an offer was affected; it was not, and she wants a process that does not depend on her.

Automation. About six months before recording, offers with 20 to 100 VM images were still approved by hand, one at a time. VMs now clear in a couple of hours, and the goal is to automate certification as far as possible within a year, though subjective checks such as blurry logos remain.

The process. A publisher gets an MPN ID, is vetted, picks Commercial Marketplace and one of 16 offer types, and enters metadata that sells the product without implying it is Microsoft's. After automated checks, content and technical validation run in parallel, about 95% automated. A pass goes to preview and reaches Marketplace within 24 hours. Support goes through aka.ms/marketplacesupport, not her inbox.

  • Gaudet owns the publishing process, not the technology behind it. She works on Microsoft's Commercial Marketplace enablement team (formerly operations) covering infrastructure offers — virtual machines, Azure Apps (solution templates, a subset of ARM templates) and container images from Azure Container Registry, with IoT Edge about to be added — and owns metadata certification, checking titles, descriptions and links against hundreds of policies.
  • Publishing runs through Partner Center and two parallel certification workflows. She describes getting an MPN ID, being vetted (a physical business location is required, as she remembers it), choosing Commercial Marketplace and one of 16 offer types, entering metadata and uploading; after automated checks such as malware scanning, content and technical validation run in parallel, about 95% automated and taking a couple of hours, and a passing offer goes to preview and is in Marketplace within 24 hours. Sovereign clouds such as China are handled separately, and VM extensions still have to be submitted by email.
  • Certification is being automated, but multi-image offers made it painful. Until about six months before recording, VM certification was manual, and a publisher with 20 to 100 images on one offer had to publish them one at a time while she chased the certification team for each approval; VMs now go through in a couple of hours, and the aim is to automate as much certification as possible within the next year. Subjective checks remain, such as blurry logos, which she attributes to one upload being resized into three logo sizes without a set DPI.
  • Listings must not read as if the product is Microsoft's. She says "monkey application on Windows" passes where "monkey application Windows 8" fails, for Microsoft IP and legal reasons, and logo use is restricted; the publisher agreement lets Microsoft remove insecure or policy-violating offers, and apps may not collect customer data without telling the customer. Her closing advice is to read all the policies and terms before starting.
  • SolarWinds showed how much the process depended on her. She spent a weekend on the incident checking whether any Marketplace offer was affected and waking people across teams because she lacked access to parts of the infrastructure; the offer in question was not affected because its publisher had fixed it over the summer. She wants a process that works without her as the bottleneck, and asks publishers to use Marketplace support (aka.ms/marketplacesupport) rather than email her, since her inbox starts at about 300 messages.
Crosstalk Solutions05 - IoT Network Setup - UDM-Pro Complete Setup 2021
  • IoT devices belong on their own network, away from the main LAN. They phone home to vendor clouds and could be compromised, so isolating them both controls what reaches out and protects the computers holding photos and documents. The host puts every IoT device in his house there, and suggests a separate network for cameras on the same pattern.
  • Firewall rules needed the classic UniFi interface at recording time. The IoT network is a corporate network (not guest) on VLAN 20, 192.168.20.0/24, with DHCP widened to .2–.254 and DNS 1.1.1.1 and 9.9.9.9. Its SSID is WPA2 only, since most IoT devices cannot do WPA3, and optionally 2.4 GHz only to spare the 5 GHz band.
  • Ordered LAN In rules block inter-VLAN traffic but spare the LAN. First allow established/related; then allow the main LAN to an RFC 1918 address group (192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8); then drop RFC 1918 to RFC 1918. An existing ping kept working until the 30-second ICMP state timeout expired, because of the established/related rule.
  • LAN In rules do not stop access to the gateway itself. The IoT network could still ping and open the UDM Pro's UniFi OS at 192.168.1.1. LAN Local drop rules block IoT and guest networks from the other networks' gateway addresses, using per-network address groups.
  • Block only the management ports on a network's own gateway. Blocking 192.168.20.1 outright would kill IoT internet access, so the host drops IoT traffic to an all-gateways group on a port group of 80, 443 and 22. He leaves ICMP open for testing; allowing access to a Pi-hole on the main LAN is left out of scope.
Crosstalk Solutions04 - UniFi Network Guest Network - UDM-Pro Complete Setup 2021
  • A simple guest network works entirely in the new UniFi interface. The host creates it on VLAN 10 as 192.168.10.0/24, turning off auto-scale network so he can set the subnet and start DHCP at .2. Optional manual DNS (1.1.1.1 and Quad9, or a subscribed service such as OpenDNS) adds content filtering for guests.
  • Device isolation is what actually walls guests off. Before it was enabled, his phone on the guest Wi-Fi could ping his main-LAN computer at 192.168.1.144 and the UDM Pro at 192.168.1.1. Enabling it adds a restricted-access list of all RFC 1918 ranges, after which guests reached only the internet, not even their own gateway at 192.168.10.1.
  • UniFi bandwidth profiles cap each wireless client, not the network. A "crosstalk guest" profile of 10 Mbps down and 10 Mbps up applies per client on the guest SSID and does not affect wired clients; a speed test showed the cap working. The host wishes UniFi offered an aggregate cap for the whole guest network instead.
  • Businesses should schedule guest Wi-Fi to business hours. He recommends it so nobody parked outside can use the connection after hours, especially for passwordless guest networks. Security is set to WPA2/WPA3 mixed mode because his access point is Wi-Fi 6 capable.
Crosstalk SolutionsTech Travel Bag 2021
  • A well-designed tech pouch is the bag's best item. The host's Peak Design Tech Pouch is water resistant, with hand straps underneath for one-handed access and an internal pass-through so a power bank inside can charge a phone in the side pocket. He used that more than expected on his first business trip in over a year, a training in Appleton, Wisconsin.
  • He loves one travel router and refuses to recommend another. His GL.iNet Slate rides in a hard case made for the TP-Link AC750 travel router, which he calls absolutely horrendous; he scrapped a planned review of it. Retractable Ethernet cables (a two-pack for under $10) and tough nylon USB cables suit a bag that gets knocked around.
  • One brand supplies all his power banks and chargers. It is Anker: the PowerCore 10000 costs $21.99 and the 20000 mAh PowerCore Essential $42.97; the 20 W Nano charger is $16.99, and the 60 W PowerPort Atom III is $37.99 in white or $39.99 in black, as of recording. He says the banks charged his iPad without trouble.
  • Bring a streaming stick, plus a flexible HDMI jumper. Both the Amazon Fire TV Stick ($47.49) and the Roku Streaming Stick+ ($49) got past hotel Wi-Fi captive portals and keep your logged-in apps; he prefers Roku from familiarity. Some hotel TVs physically cannot take a stick in the HDMI port, which has happened to him.
Technology and FriendsMartine Dowden on the D3 JavaScript Visualization Framework [TECHNOLOGYANDFRIENDS 671]
  • D3 generates interactive SVGs and does the placement math for you. Dowden explains that SVG is function-based rather than raster, so it scales without limit and can carry clickable, animated elements. D3 is a JavaScript library for building SVGs on the fly. It runs anywhere JavaScript does, including an Angular project she is working on.
  • D3 is usually overkill but pays off for complex visualizations. For ordinary charts she finds Charts.js perfectly fine. For a tabletop-RPG project she gives D3 a list of nodes and connections, and it draws a "spider web" of rooms, traps, enemies and treasure without overlaps; she swapped its circles for her brand's hexagons. That took "an afternoon of fiddling," against a lot of work without D3. She also built a spinning globe of the countries she has visited and spoken in from a JSON map of the world.
  • SVG's fixed positions make data refresh an implementation decision. Unlike HTML, an added element does not push its neighbours aside, so the developer must work out how much to recalculate. She redraws her whole node web on refresh. In a nested-circle view (castle, levels, rooms) she redraws only the circle that changed.
  • D3 wants pre-shaped JSON in memory; data volume governs speed. Her Angular services turn Firebase data into the JSON a given D3 function expects, much like old jQuery UI plugins. She expects about 5,000 nodes to lag, because rendering is client-side and the DOM has limits. Speed can also come from tighter data transformation, such as looping once instead of three times. She computes her statistics before handing the data to D3, though she does not say D3 cannot do it.
  • Getting started is importing D3 and writing DOM-style JavaScript. It is available from npm or a CDN, and using it feels like "back to the good old DOM manipulation days." She recommends the D3 Graph Gallery for examples with their code, and warns that it assumes you already know JavaScript well.
Crosstalk Solutions07 Let's Encrypt Installation - FreePBX 101 v15
  • Several FreePBX services need a valid certificate on a real FQDN. The host lists WebRTC, Sangoma's Zulu and Connect, and Clearly Anywhere. He uses Let's Encrypt because it is built into FreePBX, though your own certificates also work.
  • Move the plain-HTTP admin GUI so Let's Encrypt can take its port. He moves plain-HTTP admin to 8080 (which can then be kept closed at the firewall) and assigns port 80 to Let's Encrypt. He argues port 80 open this way is not a risk: it serves only the files Let's Encrypt checks to verify the server.
  • FreePBX's firewall opens the challenge port only during renewals. The responsive Let's Encrypt rules allow temporary access to the ACME challenge folder during an update. Let's Encrypt always challenges on port 80, so requests fail if an upstream firewall blocks it without redirecting; a forward can stay open permanently.
  • Generating the certificate is not enough; install it. After creating it under Certificate Management, where it renews automatically about every two months, make it the default. Then select it under System Admin's HTTPS Setup and click install before the server actually uses it.
Crosstalk Solutions06 Updating FreePBX - FreePBX 101 v15
  • FreePBX has two update types, each runnable from GUI or SSH. System updates patch the base Linux OS; module updates patch the FreePBX software. The host's scheduler applies only security updates automatically and leaves everything else notification-only.
  • System updates can take the PBX offline; module updates usually do not. In the GUI his check found 18 system packages, and module updates are typically safe to run in production.
  • The host prefers SSH because the GUI handles dependencies poorly. He says the GUI gives little feedback and does not resolve dependencies between modules, while the command line does. Over SSH as root, yum update -y handles system packages (under a minute for him) and fwconsole ma upgradeall handles modules (about 11 minutes for 66).
  • fwconsole restart drops calls, so use a maintenance window. He restarts services after a major update, which brings Asterisk down and disconnects calls in progress. Re-running both commands should then report nothing to update, followed by Apply Config in the dashboard.
Technology and FriendsJason Bock on Mutation Testing [TECHNOLOGYANDFRIENDS 670]
  • High code coverage does not prove the tests are good. Bock, a developer advocate at Rocket Mortgage, notes that tests with no assertions still raise coverage. Good tests naturally produce high coverage, but the reverse does not hold. Mutation testing answers "who watches the watchers": it alters the code, for example changing an add's plus to a minus, and expects some test to fail. Each failure "kills the mutant." He says the idea dates from the 1960s or 70s and spread only recently because it is computationally expensive.
  • Stryker automates mutation testing; installing it and running dotnet stryker is enough. It is open source and available for .NET, Scala and JavaScript; Giard found its site, stryker-mutator.io, and that the .NET version arrived in 2018. Bock believes it mutates the source in memory rather than the bytecode. A run is slow, like BenchmarkDotNet, and ends in a report that links to each file and marks which mutants survived. He asks companies that use open-source tools like it to contribute back.
  • A surviving mutant flags a possible problem; a human must decide. Stryker applies a fixed list of mutations, including arithmetic operators, string literals and LINQ (Take becomes Skip). In his own code, changing < to <= broke no test, and he judged that acceptable. Blanking an exception message also broke no test. He changed his tests to assert the message, on the principle that code exists for a reason and should be tested.
  • Adopt Stryker early, not years into a codebase. He sympathizes with teams under deadline pressure. Adding it six months to two years in can be overwhelming, so he advises bringing it in as soon as code is written. A Rocket colleague is looking at building it into their continuous integration.
  • A fresh explanation can make a familiar concept click. Bock had heard of mutation testing for years, but it only clicked in a lightning talk on Stryker at a group run by Dan Clark in Oxford, as mocking had once clicked for him through one framework. So he urges people to blog or record videos on topics others have already covered.
Technology and FriendsSarah Withee on an Open Source Pancreas [TECHNOLOGYANDFRIENDS 669]
  • A looping system automates what a type 1 diabetic otherwise does by hand. Withee's device takes the last 15 minutes or so of readings from her continuous glucose monitor, which reports every five minutes over Bluetooth, factors in recent food and insulin, predicts whether she will need more or less, and sets temporary rates on her insulin pump over the 400 or 900 MHz bands. She says it still needs occasional intervention but cuts a constant, mentally taxing workload of carb counting and dose correction down to a periodic glance at her phone.
  • The open-source stack costs almost nothing beyond the device. She runs OpenAPS (github.com/openaps) on an Intel Edison, or alternatively a Raspberry Pi Zero, with an open-source Explorer board, running Debian Linux; LoopKit (github.com/loopkit) does the calculations on an iPhone through a RileyLink bridge but must be compiled and installed by the user. Nightscout collects the data on a free Heroku instance backed by a free MongoDB Atlas cluster; after three years she is still under the 500 MB limit. The glucose sensors and insulin pumps themselves are not open source.
  • Withee trusts the code because of its research and its many eyes. She credits Dana Lewis with the original research, testing dosing algorithms against collected blood-sugar data, combined with others' reverse engineering of pumps and sensors; OpenAPS, LoopKit and AndroidAPS share much of the same technology. She says the repos are so actively maintained that she had to turn off notifications, and estimates at least 2,000 people run such systems.
  • The FDA leaves self-built systems alone but not store apps. She says the FDA treats a do-it-yourself pancreas as a single-person experiment it does not regulate, but would have to review an app sold through the Play Store or App Store, a hurdle she thinks med tech companies avoided until the open-source community's success pushed them to build closed systems. Tidepool Loop, a non-profit bridging open-source software and closed-source devices, filed with the FDA in May of the previous year and, last she heard, was still pending.
  • She argues hacking the device would cost far more than it gains. An attacker would have to find and break into her phone's hotspot, then the device's Linux, and the pump beeps at every message and doses slowly through thin tubing, so alarms would let her correct a low; altering Nightscout values would be overwritten by new readings. Giard adds the principle that a breach should cost more than it is worth.
Crosstalk SolutionsUPDATE - My Starlink Broke!
  • A replacement PoE injector did not fix the link-speed fault. The dish kept falling back from gigabit to 10/100, capping throughput at 100 Mbps. The injector RMA was placed May 27, 2021 and arrived June 11; the problem returned after 5–10 hours instead of minutes.
  • Starlink's slow RMA shipping would hurt users relying on it. The host notes 15 days for the injector and wants an option to pay for expedited shipping. Starlink did approve a new dish without question on June 25, and it arrived July 2, a week later.
  • The new dish appears to have fixed the problem, so far. The next day his port showed a gigabit link, with about 200+ Mbps through his Starlink VLAN to an EdgeRouter X and about 246 Mbps over Starlink's router Wi-Fi; he will keep watching it. The new unit has a smooth face and grey cable and stand, and its cable still cannot be detached.
  • The host is skeptical Starlink's economics can work. Citing estimates of $2,000+ per dish sold at $500 and 42,000 satellites at $250,000–500,000 each, he figures his two dishes leave about a $3,000 loss after about $1,000 paid ($500 plus $100 a month since February). He admits this oversimplifies, and worries more users could cut speeds and raise latency.
Crosstalk Solutions03 - UniFi Network Initial Setup - UDM-Pro Complete Setup 2021
  • WAN settings need changing only for unusual connections. Plain DHCP from the ISP needs nothing; the advanced settings are for a static IP or a block of statics, PPPoE credentials, or internet delivered on a VLAN. The host says the series applies broadly to a USG or a cloud- or PC-hosted controller, not just the UDM Pro.
  • Threat management trades throughput for protection. IDS only alerts; IPS blocks and costs more CPU and RAM. Sensitivity levels run from 6 of 35 categories at level 1 to 35 at level 5 (17 at level 3). His roughly 700 Mbps connection should cope, but he advises speed-testing after enabling it.
  • Turn off auto-scale network to control the LAN subnet. With it on, the new dashboard hides the gateway IP, subnet and DHCP pool. He sets DHCP to 192.168.1.50–254, keeping .2–.49 for static addresses; the classic interface has no auto-scale setting at all.
  • Leave automatic firmware updates off for networks managed for others. He waits to see whether a firmware release is stable and updates in maintenance windows; home users who care less might enable automatic updates.
  • Use WPA2/WPA3 mixed mode and keep 2.4 GHz enabled. Not every client or access point does WPA3, and older IoT devices need 2.4 GHz. For the open guest Wi-Fi he set up at real-estate offices, he combined bandwidth limits with a Wi-Fi schedule so it ran only during business hours.
Scott HanselmanElectronics for Everyone with AdaFruit's Limor Fried - Hanselminutes #795
synopsis

Limor Fried, who runs Adafruit and its factory in Manhattan, ends up arguing that feedback systems govern everything: machines, code, bodies and people. In her view precision comes from tight, good feedback rather than perfect parts, and people finish things through deadlines and frustration with bad work rather than through waiting for a perfect first try.

The factory. Fried tours the manufacturing floor in a former Westinghouse inductor factory, in one of Manhattan's last areas zoned for light manufacturing. Its thick concrete floor keeps the pick-and-place machines from vibrating, which matters because each of four or five manufacturing steps must be about 99.9% accurate and the errors multiply into yield.

Feedback systems. Natural motion is imprecise, she says, and only feedback makes it accurate, as with drawing with eyes open rather than closed. Her stencil printer makes mistakes all the time, but its vision inspection catches them. Fried extends the idea to programming: punch cards gave feedback a day later, Python gives it instantly. Hanselman offers his own blood sugar as the example: a finger stick shows 15 minutes ago, insulin acts after an hour and a half, and real-time readings let him steer instead of oscillating.

Short loops and wrong decisions. CircuitPython was meant to remove embedded development's long compile-and-flash loop: the board appears as a drive and reloads on save. Fried defends FAT on flash without wear leveling as technically incorrect but user-friendly, to be refactored later, and credits Microsoft Research's UF2 bootloader with doubling file size so out-of-order writes stop mattering.

Teaching and paralysis. Hanselman relays a colleague's criticism that he teaches from the metal up. Fried teaches top-down and says beginners need not know cache from RAM. Experienced engineers, she argues, stall from knowing the right way; she makes them do one step and get something working, since all code gets refactored.

Finishing. Hanselman's son talks about scripts for months without writing them. Fried says finishing is management's real job and uses each quarterly AdaBox as a deadline, citing a Final Fantasy game described as the best they could make with the technology available at publish time. She suggests voice notes, starting at the second paragraph, and admits she is "motivated by hate" of bad engineering. Turning that on the son, she proposes he rewrite the show he hates as fanfic.

  • Good feedback beats precise parts. Fried says manufacturing needs about 99.9% accuracy at each of four or five steps (board design, stencil paste, pick-and-place, oven), because errors multiply and one bad part means hand rework. In her account, the error-prone stencil printer is rescued by a vision check that flags missing paste or a needed cleaning cycle, and the former Westinghouse inductor factory's thick concrete floor lets the pick-and-place machines hold precision several storeys up in Manhattan.
  • Shortening the feedback loop is how imperfect people get better. Fried contrasts punch cards and UV-erasing EPROMs (five to ten minutes) with CircuitPython, which Hanselman shows running on a PyPortal: save in Visual Studio Code and it reloads. Hanselman adds his own analogy: a finger-stick reading shows his blood sugar from 15 minutes ago and insulin takes an hour and a half to act, while real-time readings let him make small corrections instead of big swings.
  • Technically wrong choices can be the right engineering decision. Fried says CircuitPython deliberately exposes a FAT file system on flash without wear leveling, against the textbook answer of littlefs or a journaling file system, because mass storage is the one driver every computer has and wear-out is a long way off. She credits Microsoft Research's UF2 bootloader with padding files to twice their size so it no longer matters in what order each operating system writes them.
  • Teach top-down and get something working first. Hanselman relays a colleague's view that he teaches "from the metal up" while newcomers work from the screen down; Fried sides with the top-down approach, arguing beginners need not know cache from RAM and premature optimization is the root of all evil. She says experienced engineers get "engineer's paralysis" from knowing the right way, and she breaks the work into single steps because "all code gets refactored".
  • Deadlines and spite get projects finished. Fried says management's job is getting people over the finish line, and she uses each quarterly AdaBox as a deadline to force development, such as shipping a low-power Wi-Fi e-ink project on a new Espressif chip. She describes herself as "motivated by hate" of bad electronics; applied to Hanselman's son, who stalls on screenwriting, she suggests voice notes, starting at the second paragraph, and rewriting a show he dislikes as fanfic.
Technology and FriendsMichael Dowden on Firebase [TECHNOLOGYANDFRIENDS 668]
  • Firebase is a whole app platform, not just a database. Dowden runs Andromeda, which builds its own and clients' products mostly on Firebase. It covers database, serverless functions, analytics, crash reporting, ads and A/B testing, under one SDK and one web console. His team adopted it for a database that needed no servers, since operations was not a skill the team had, and they used more of it as the platform grew. Their parking-management app has run on it for about six years.
  • Firebase offers two databases, and Firestore suits real-time apps at scale. The original Realtime Database is a pure JSON store read by path, and it can import and export JSON files at any location. Firestore is a document database of collections and sub-collections, and collections with the same name can be queried as one group. He says Firestore supports up to 1 million concurrent listeners and pushes changes to all of them within milliseconds over a WebSocket SDK, so a live page needs no extra code.
  • Cloud Functions' strength is event triggers, not HTTP endpoints. Functions created in Firebase also appear in Google Cloud Platform, where more customization is available. He writes them in TypeScript; Firebase supports Node.js with TypeScript or JavaScript. Triggers include database changes, file uploads, new users, schedules and Pub/Sub topics, and Google scales instances out under load.
  • Its operational tools are mobile-first, and web has nearly caught up. Analytics is Google Analytics underneath. Crashlytics is mobile-only, so his team uses TrackJS for web crash reporting. Cloud Messaging (FCM) handles push notifications, AdMob serves ads, and Remote Config acts as segmentable feature flags that combine with A/B testing.
  • He recommends starting with Firebase static hosting. He calls it "ridiculously fast": firebase deploy publishes atomically with no downtime, versions automatically, and allows one-click rollback in the console. It adds a CDN and HTTPS certificates, and the free plan covers a lot of traffic. He uses it instead of GitHub hosting. For server-side rendering such as Angular Universal, the CLI can deploy to a cloud function instead. To learn, he points to the docs at firebase.google.com/docs and Firebase's YouTube series.
Scott HanselmanFirst Look at Windows 11 Insiders Build with UI Tour June 2021
  • The centred taskbar is a default, not a requirement. Hanselman shows that taskbar settings move Start back to the left; live tiles are gone, which he calls "a bummer", replaced by pinned apps and a "recommended" list of recently added apps and recently opened documents.
  • Window management gets snap layouts and named virtual desktops. Hovering the maximize button offers snap assist layouts (he notes it does not yet appear in every app, such as Windows Terminal); task view creates named desktops ("work stuff", "home stuff") that he switches with a four-finger swipe, and a widgets panel slides out with calendar, traffic, to-dos and stocks.
  • Developer tooling is built in rather than bolted on. Command Prompt opened inside Windows Terminal, which he says can be set as the default "probably later this fall"; wsl --install sets up WSL and Ubuntu in one step, and Linux GUI apps, including Chrome on Ubuntu, show up in the Start menu. He pins Gmail and Outlook as PWAs installed from Edge, which he notes also works on Windows 10 today.
  • The rebuilt Settings app is, in his view, the best part. He calls it "really cohesive" and searchable, and demonstrates Swift Pair for a Surface mouse, per-app network data usage, per-app battery usage "like on an iPhone", editable grouped quick-settings buttons and a per-app input/output volume mixer that used to be buried in Windows 10.
  • This first public preview is rough; use a spare machine. He points out old dialogs in new chrome (Run, Explorer options, Control Panel), a "show more options" context menu that hides third-party entries, square buttons among rounded ones and a white flash in dark mode. He advises against putting it on a daily driver; his 13-year-old's Call of Duty has "weird things" on it.
Crosstalk Solutions05 First Steps After Installation - FreePBX 101 v15
  • Unless eth0 is in the Internet zone, the firewall does nothing. Out of the box eth0 sits in "trusted, excluded from firewall", so every rule on the Networks tab is moot. The host then lists each allowed LAN (in CIDR form), VPN subnet and remote WAN IP under Networks, with a description for each ("Bob's home IP"). He prefers the Local zone, which opens only FreePBX's ports, over Trusted, which opens everything, though FreePBX wants at least one trusted entry.
  • A double reboot opens a window to undo a firewall lockout. Rebooting twice within five minutes is the safety net: if a mistake on the Networks tab locks you out, the second boot comes up with the FreePBX firewall disabled for five minutes so you can fix it. On a hosted server that means forcing two restarts from the provider's console; on bare metal, pulling the power twice. The host says this has happened to him.
  • The host treats the responsive firewall as a last resort. Remote staff on dynamic home IPs can be allowed by dynamic DNS name, but DNS time-to-live can leave FreePBX an hour or more behind an address change. Responsive firewall lets every non-blacklisted address send a few packets, so valid phones authenticate, and jails brute-force attempts for growing periods. He calls it effective, but leaving it off is more secure.
  • Sysadmin Pro is mandatory on every FreePBX system Crosstalk installs. It costs $25 once, on what the host thinks is a 25-year licence (his showed expiry in 2046), and is tied to the deployment ID. It adds the built-in VPN server, email/SMTP setup in the GUI and dynamic DNS. It is bought from Module Admin with a Sangoma portal login.
  • Whitelist your own addresses in intrusion detection. Intrusion detection works alongside the firewall and had already banned an attacker's IP on his test server, since scripts scan WAN addresses constantly. He also sets a real FQDN hostname instead of freepbx.sangoma.local and disables PnP, which doesn't work hosted. A time-zone change, which time conditions depend on, needs a reboot.
Crosstalk Solutions04 Initial Setup Wizard - FreePBX 101 v15
  • Set module updates to email-only but security updates to automatic. A module update that breaks something, such as one not properly QA'd, can leave you facing a dead PBX in the morning with no idea why. Email-only lets you install in a maintenance window, while a zero-day security fix should go on at once. Update checks run at a random time between midnight and 4 a.m. so millions of servers don't hit Sangoma at once.
  • Activate the server, because commercial modules attach to its deployment ID. An unactivated FreePBX cannot install commercial modules, and activation needs a free Sangoma portal account. The deployment ID can be moved to a new server or hosting provider, so modules already bought, even Sysadmin Pro, are not lost.
  • The host updates through SSH, not the GUI, because SSH resolves dependencies. In the GUI, a module that depends on another forces repeated check-and-update rounds until everything is current; a single SSH run handles it in one pass. He therefore skips the pile of updates offered right after activation.
  • On a hosted server, trust only your own IP. The firewall wizard offers to trust the client and then its whole network. Trusting the /24 of a WAN address would let neighbours on the same range reach the login GUI. On a local install, trusting the LAN subnet is usually fine because the phones live there too. He also avoids "admin" as the GUI username, since countless devices use it.
  • One Apply Config click covers many changes. The red button appears after almost every edit, but it can be clicked once after a batch of work.
GCastPassing parameters to xUnit net tests with the ClassData attribute [GCAST 113]
  • InlineData couples test data to the test and accepts only primitives. Giard says the coupling matters little for simple cases but can for complex ones, and that InlineData offers no way to pass a whole object as a parameter. ClassData is xUnit's answer to both.
  • The test data lives in its own class implementing IEnumerable<object[]>. His class holds a read-only Data property, a list of object arrays (15, 30, 45; -15, -30, -45; -15, 30, 15). The generic GetEnumerator returns this.Data.GetEnumerator(), and the non-generic one returns this.GetEnumerator(). Each array must match the test method's parameters in number, data type and meaning. He notes the entries could be full objects with properties and sub-objects.
  • [ClassData(typeof(...))] replaces InlineData on the test method. The class's type is passed to the attribute, and each array becomes one run, with its three values as the method's three parameters. He describes this as "three times three". In Test Explorer the new class shows one method with three tests under it, all passing.
  • Debugging shows the runs do not follow the data's listed order. With a breakpoint set and that one test debugged, the first pass received -15, -30, -45, the second -15, 30, 15, and the third 15, 30, 45.
Technology and FriendsGavin Bauman on SonarQube [TECHNOLOGYANDFRIENDS 667]
  • SonarQube combines a server, a code scanner and an IDE linter. Bauman, a few months into using it, describes the SonarQube server that receives scans, SonarScanner that analyses the code base, and SonarLint, a free IDE extension (he uses it in Visual Studio) that flags code smells and security vulnerabilities as you type and links to a plain-English explanation, such as socket exhaustion from an HttpClient held as a singleton in .NET. The server can be bought as a hosted service or self-hosted on an Azure or AWS VM, supports over 25 languages (the host later checks: 27, including COBOL), and SonarLint can run in a connected mode that pulls the team's own rules from it.
  • Quality gates let a tech lead decide what code gets in. The default rules are rigid and follow each language's governing body, linking to Microsoft docs for C# and to PEPs for Python; a lead can set thresholds such as the number of code smells allowed per commit, or tolerate old code's faults while holding new code clean. Repositories and new commits get A–F grades, which Bauman says has helped on a mixed client team where some developers come from Java and bring its casing conventions.
  • A failed Sonar scan fails the pipeline and blocks the merge. His Azure DevOps pipeline runs build, unit tests and a Sonar scan on each pull request, with SonarScanner run as a CLI in a bash task and flags used to, for example, skip JavaScript files. By default the scanner passes and the repository's health simply declines; it only fails the pipeline if told to wait on the quality gate.
  • The free Community edition breaks down on larger teams. The team uses Community, which covers CI integration, bugs and vulnerabilities but only the main branch and a subset of languages; Developer edition adds multi-branch and pull-request analysis. The drawback he has hit is that the dashboard shows only the most recent scan, so a teammate's run hides why your own pipeline failed; he advises starting on Community and upgrading later.
  • Teams need some automated quality gate, not necessarily SonarQube. Bauman's take-home is that larger teams should put a barrier between the programmer and the code base to validate quality. He says it could equally be StyleCop or a GitHub Super-Linter if the connected server isn't wanted.
Crosstalk Solutions02 - Device Adoption - UDM-Pro Complete Setup 2021
  • The UDM-Pro's built-in switch has no PoE. Powering a UniFi access point therefore needs either a PoE injector on a UDM-Pro port or a PoE switch; the host uses a USW-Pro-24-PoE, adopted with one click and then updated, which takes about five minutes including the reboot.
  • A solid blue ring means the device belongs to another controller. His U6 Lite showed solid blue, meaning it had already been adopted elsewhere, so he held reset with a paper clip for about 10 seconds. Once reset it showed a solid white ring and could be adopted, after which the ring turned blue again.
  • The host avoids leaning on the classic dashboard. At the time of recording, the new UniFi Network dashboard lacked settings he needs, so he expects to switch between the two. He prefers the classic one but tries to use the new one wherever it works.
Crosstalk Solutions01 - Initial Setup Wizard - UDM-Pro Complete Setup 2021
  • The host rates the UDM-Pro for homes, not businesses. For a business he would rather have more robust gear with more redundancy built in. At $379 it is a UniFi OS console that can run UniFi Network, Protect, Access and Talk as separate applications, whereas the standard UDM runs Network only.
  • The UDM-Pro cannot be set up without a cloud login. The wizard demands a ui.com account and allows no local login, a point the host calls contentious, so he strongly urges two-factor authentication (he uses a hardware key). Before turning off remote access via unifi.ui.com, he says, create a local-access-only super admin, as he does at the end.
  • The host disables automatic updates and turns on SSH. SSH is his way back in if an application update crashes an app and it has to be rolled back to an earlier version. As of recording he was on UniFi OS 1.9.3, UniFi Network 6.1.71 and UniFi Protect 1.17, updated to 1.18.1.
  • Scheduled backups survive a factory reset. The wizard offered him backups taken before he reset the unit, so he recommends keeping scheduled backups on; he moves his from Monday 12 a.m. to Sunday 1 a.m.
  • Choosing "personal" or "business" setup changes nothing the host could find. He installed both ways and saw no difference beyond extra questions about the business. For Protect storage he recommends a surveillance drive such as a Seagate SkyHawk or WD Purple, sized to the cameras and recording quality.
Crosstalk Solutions03 Hosted Server Installation - FreePBX 101 v15
  • Vultr's ISO library gives a one-click FreePBX install. The host picks the newer of two FreePBX images there (version 2011-5), older than the freepbx.org download but equivalent once updated, and a location close to the users. He asks viewers to use his Vultr referral code, which he says gives up to $100 of credit; DigitalOcean and AWS are mentioned as alternatives.
  • The host sizes a 20-extension office at the $20-a-month server. The $5 or $10 a month tiers are enough for testing; he demonstrates on $10. Vultr's auto backups, about $2 a month more, are worth turning on in production, but they are snapshots on the same host and are lost with it, so separate off-site backups come later in the series.
  • Point a DNS A record at the server before going further. A valid FQDN resolving to the server's IP matters for the Let's Encrypt certificate, WebRTC and remote softphones, and he names the Vultr server after its FQDN to keep many servers straight.
  • Remove the ISO in Vultr instead of pressing Reboot. After the 30–40 minute automated install, the virtual ISO is still mounted like a thumb drive. Removing it under the server's settings triggers the reboot itself, and the server then comes up at the initial setup wizard over HTTPS with a certificate warning.
Crosstalk Solutions02 On-premises Server Installation - FreePBX 101 v15
  • Any Linux-capable PC will run FreePBX for learning, but not production. For production the host wants something more robust, and installs on the Crosstalk 710 appliance his firm sells. He says it handles up to 100 phones or 30 concurrent calls, is fanless, and comes like all Crosstalk servers with a 2-year warranty and FreePBX pre-installed.
  • Start the ISO download early because Sangoma's servers are slow. The full ISO, the 64-bit Sangoma 7 PBX build released in April 2021 at recording, can take a couple of hours to come down from freepbx.org.
  • Triple-check the target drive when flashing the USB stick. He writes the ISO with balenaEtcher to a 32 GB stick (he thinks at least 8 GB is needed), warning that picking the wrong device, such as his 12 TB backup drive, would erase it.
  • The installer asks only for a root password, then runs itself. With a network cable attached it also updates FreePBX, taking about 30–40 minutes. Pull the stick at reboot, then browse to the DHCP-assigned address shown at the console login to reach the setup wizard.
GCastPassing parameters to xUnit.net tests with the InlineData attribute [GCAST 112 ]
  • A Theory replaces near-duplicate Fact tests with one parameterized method. The three tests from the previous episode (positive, negative and mixed inputs to an add function) repeat most of their code. Marking one method [Theory] instead of [Fact] lets it take int firstNumber, int secondNumber and int expectedResult as parameters and assert the expected result against the actual one.
  • Each [InlineData] attribute supplies one test case's values. The number of arguments must equal the number of method parameters, so here each holds three numbers: 15, 30, 45; -15, -30, -45; and -15, 30, 15. He keeps the empty "arrange" comment as a reminder that the inputs arrive as arguments.
  • Test Explorer adds a level showing each case's result. Under the class and method sit the three individual runs, each with its own green check mark. Giard recommends running all tests often, and says that is an incentive to keep tests short in running time.
  • InlineData works only for primitive types like strings and numbers. He says passing objects needs another approach, covered in the next episode.
Scott HanselmanLearn C# Basics 2 of 3 with Scott and Cherita
synopsis

The second session works through the middle of the C# 101 notebook, from keywords and type inference to arithmetic across types, comparison, if/else and the ternary operator. Its running theme is that the compiler does exactly what it is told and infers carefully where it is not; Cherita, the TypeScript developer, spends much of the hour testing that by trying to trip it up. Loops are pushed to day three.

Where things live. Hanselman recaps the coding pack at dotnet.microsoft.com/learntocode, which now links straight to the 101 notebook through a VS Code URL. He describes notebooks as "polyglot" and as an automatic car hiding the runtime and compiled files, while Cherita wants to drive stick shift eventually. Asked about VS Code against Visual Studio 2019, he calls one a code editor and the other an IDE with profilers and memory tools, and drops the notebook into Notepad to show that the code is only text.

Types and inference. Keywords such as int, char and string change colour and are reserved. var is sugar: the type is inferred at assignment and then fixed. Casting a large value into an int loses the fraction; every object can become a string.

Adding unlike things. Strings combine with decimals and ints in either order; int plus decimal becomes decimal, since the compiler picks the type that can hold both. Hanselman checks that this is the type system, not display or Console.WriteLine, and display turns out to be a notebook helper. Cherita's suggestion to add a double and a decimal produces a type error, which she admits she was steering him into. Suffixes M, D and F set a literal's type.

Operators and side effects. += and ++ are shortcuts; using them inside a display call changes values on each run, which he calls bad practice. == compares, = assigns, and != is "bang".

Conditionals. A seconds-are-even check with modulus becomes an improvised IsEven function, then an expression returned directly, then a ternary. Braceless else covers only one line regardless of indentation. A bug where i came from the earlier function shows why names matter.

  • var is syntactic sugar, not loose typing. Hanselman shows that var fixes the type at first assignment, so a var holding a string cannot later take 99; its scope is the same as any other variable. Some dislike it because a reader must hover to learn what the type is.
  • The compiler widens mixed arithmetic to avoid losing data. int plus decimal yields a decimal, and anything plus a string yields a string; Cherita's deliberate probing exposed that adding a double to a decimal is an error. The M, D and F suffixes force the literal's type, and display turned out to be a notebook helper for Console.WriteLine, not the source of the conversions.
  • VS Code is an editor; Visual Studio 2019 is an IDE. Hanselman generalises that back-end developers use Visual Studio for profilers and memory diagnostics while front-end work suits VS Code. He opens the notebook in Notepad to show it is plain text, and says to switch to the full IDE "when it feeds your spirit".
  • Keep side effects out of display calls. Writing apples += 10 inside a display changes the value on every run, so he stores results in variables first, and contrasts = for assignment with == for comparison. Cherita likes the ternary operator; Hanselman finds a well-named function easier to read.
  • Whitespace doesn't matter in C#, but braces do. A brace-less if or else covers only the next line, so a second indented line runs regardless, unlike Python; braces "give it a hug". Brace placement is style, and a team's inherited style wins.
Scott HanselmanLearn C# Basics 1 of 3 with Scott and Cherita
synopsis

The first of three one-hour Microsoft Reactor livestreams gets a beginner from an empty machine to writing and running C# in a notebook, and through strings and basic typing. Hanselman, who works on .NET at Microsoft, teaches; Cherita, who works in TypeScript and React in the M365 admin center group with some C# on the back end, plays the experienced developer from another language. The case the session makes is that notebooks let a learner meet the language before the ceremony around it.

Setup. In a fresh Windows Sandbox, Hanselman downloads the .NET Coding Pack from dotnet.microsoft.com/learntocode, which he says no one has seen before this stream. It installs VS Code, the C# compiler and libraries, and .NET Interactive notebooks, then opens a "C# for beginners" notebook. He separates C#, the language, from .NET, the libraries and ecosystem, which also hosts F# and Visual Basic. Viewers on Ubuntu install the parts by hand.

Notebooks instead of a project. A .dib file holds Markdown and code cells, each run with a play button. Cherita says that when she learned, she had to work backwards to discover which of the usings and namespaces she had been told to ignore actually mattered; the notebook hides them.

Strong typing and errors. Removing a semicolon produces a red squiggle that Hanselman likens to a spelling mistake. Reassigning a string variable to a number fails, which Cherita compares with TypeScript's strictness over JavaScript's looseness. He presents naming style (camel, Pascal, kebab, Hungarian) as a team decision.

Strings as objects. The $ prefix for interpolation, he argues, exists so old strings with curly braces do not change behaviour. Strings carry methods and properties such as ToUpper, Length, Trim, Replace and Contains; his digression on the Turkish dotted "i" shows that a culture taken silently from the machine can make two capitalised strings fail to match.

Habits. He tells viewers to remember that a method ought to exist rather than memorise it, and to put return values in variables so they can be debugged. The session closes on number types: an explicit cast from 10.5 to an int discards the fraction.

  • A new coding pack installs everything a beginner needs at once. Hanselman presents the .NET Coding Pack at dotnet.microsoft.com/learntocode, launched on this stream, which installs VS Code, the .NET SDK and .NET Interactive notebooks on Windows or Mac. For Ubuntu there is no pack installer; viewers install .NET, VS Code and the notebook extensions separately.
  • Notebooks teach the syntax without the boilerplate. A .dib notebook mixes Markdown and runnable code cells, so learners skip the usings and namespaces they are normally told to ignore; Cherita, a TypeScript developer in the M365 admin center group, says beginners otherwise have to go back later and work out what mattered. Hanselman notes a notebook is not yet an app.
  • C# is strongly typed, and its errors are help, not threats. Assigning 99 to a string fails, where JavaScript would allow it and TypeScript would not; an explicit cast of 10.5 to an int silently drops the 0.5. Hanselman urges reading the error message, while conceding some messages are genuinely bad.
  • String interpolation needs a marker to protect existing code. Hanselman explains the $ prefix exists so that strings already containing curly braces keep their old behaviour. Strings are objects with methods and properties; ToUpper depends on a culture taken silently from the computer, so a Turkish user would capitalise a dotted "i" differently and stored strings might later fail to match.
  • Know a method ought to exist; don't memorise it. He compares it to knowing Spanish has a word for hunger without recalling it, and lets IntelliSense find Trim or Replace. He favours storing return values in variables over clever one-liners because they can be inspected while debugging, and says naming case style is the team's choice.
Scott HanselmanLearn C# Basics 3 of 3 with Scott and Cherita
synopsis

The final session finishes the C# 101 notebook's control flow and loops, then leaves the notebook for a real console app, so that the boilerplate hidden since day one is finally explained. It ends with a Windows Forms app and a web app built in the same language on .NET 5, and an invitation for viewers to say whether more advanced notebook courses are wanted.

Conditions and switches. Hanselman recaps the even-seconds example and shows that chains of if/else get chaotic fast. With ||, short-circuit evaluation skips the second test once the first passes, like a bouncer who sees you are over 18. A switch on the day of the week, with several cases sharing one branch, reads more cleanly than the equivalent if; leaving out break makes execution fall through. A viewer's question leads him to explain DayOfWeek as an enumeration.

Loops. He splits a for header into setup, test and step, and treats off-by-one errors as the classic trap, joking that the two hard things in programming are naming and off-by-one errors. A loop can also leave through its own break. He prefers foreach as reading like English; Cherita is unconvinced until he writes the same loop both ways and triggers an index-out-of-range error with <=, at which point she says foreach is easier. Zero-based indexing is where the off-by-one errors come from.

A real program. From a terminal inside VS Code he runs dotnet new console, lists the templates and explains Program.cs: using System saves typing, the namespace and class are named however you like, and static void Main is the entry point. He rewrites display as his own helper, reads a name with Console.ReadLine, is caught out by an unsaved file, and uses breakpoints to watch values change. Repeating it in Visual Studio 2019 shows the IDE doing the same work behind a GUI.

Breadth. A Windows Forms window and a dotnet new web page close the demo. He points viewers to the 19-part .NET 101 series and Microsoft Learn, and floats 200- and 300-level notebook courseware if the audience asks for it.

  • Switch statements beat long if chains when cases share outcomes. Hanselman shows a day-of-week switch where several cases fall through to one branch, which as an if would be "pretty hairy"; break must be intentional, and DayOfWeek is an enumeration rather than a special case syntax. He also explains short-circuit evaluation: with ||, the second test never runs once the first is true.
  • A for loop is setup, a question, and an after-step. He breaks the one-line header into its three parts and warns that off-by-one errors live there; <= against an array's length throws an out-of-bounds index error because arrays start at zero. Cherita was "on the fence" about foreach but called it easier to read after seeing both versions side by side.
  • The boilerplate the notebook hid is a namespace, class and entry point. After dotnet new console, Hanselman explains using System as a shorthand, the namespace as "a space to make room for names", and static void Main as the program's front door. The notebook's display was a helper wrapping Console.WriteLine, which he rewrites by hand.
  • Visual Studio does the same thing the command line does, hidden. He takes input with Console.ReadLine, runs it with dotnet run, sets breakpoints to watch variables change, then pastes the code into a Visual Studio 2019 console project to show the GUI route. He describes console.log versus interactive debugging as a cultural choice; Cherita says her team uses browser debuggers all the time.
  • One language reaches desktop, web and more. He creates a Windows Forms app and a dotnet new web app on .NET 5, and points to the 19-part .NET 101 video series and Microsoft Learn. He asks viewers whether to build 200- and 300-level notebook courseware, described as an idea rather than a plan.
Technology and FriendsHattan Shobokshi on Getting the Most Out of Bash Scripts [TECHNOLOGYANDFRIENDS 666]
  • A shebang line turns a script into an executable-like tool. Shobokshi says a #! line naming the interpreter at the top of a file means it no longer has to be run through the bash keyword or carry a .sh extension, so a file called foo can be invoked like any executable; he uses this for small helper utilities and calls one of the shebang forms more portable than the others.
  • Split long scripts into files and source them as libraries. His team's install script for a custom framework grew to 3,000 lines as it had to behave differently per cloud and work stream, and he now breaks even small scripts into files pulled in with the source keyword so the pieces can be reused. He points to Gruntwork's bash-commons and to an argument-parsing library of his own on GitHub (the captions render it as "sh arg"), written because parsing input is something he and others look up every time.
  • Bash scripts deserve unit tests too, and ShellSpec makes that workable. ShellSpec is a BDD-style framework with a Gherkin-like DSL that exercises real bash, supports setup and teardown, and can mock bash functions. He mocks a function that fetches an API token so tests use a fake value, and says the tests have found edge cases in the team's more advanced scripts.
  • Structure scripts as functions, with main invoked at the bottom. Shobokshi says this makes scripts easier to test and read than a flat list of commands. The catch is that return only gives back an integer status code, so strings are returned by echoing them inside the function and capturing the output into a variable at the call site.
  • Turn on set -e and set -u in every script. With -e the script stops when a subcommand such as Terraform exits non-zero, where bash would otherwise carry on; he allows there are edge cases where that isn't wanted. With -u an undeclared variable, typically a typo that bash would silently create, causes an exit; the host likens it to Visual Basic's Option Explicit.
Crosstalk Solutions01 PBX Planning - FreePBX 101 v15
synopsis

The opening module of the host's FreePBX 101 course for version 15 lays out the planning process Crosstalk uses with its own customers. Every phone system is three decisions: the server, the service that connects it to the public telephone network, and the phones. Throughout, the recommended option is often one Crosstalk sells.

Server. On-premises hardware suits a single site. Crosstalk's appliances, sized by concurrent calls (from about 10 on the 715/716 with analog ports up to 500 users and 100 calls on the 760), carry 2-year warranties. Deployments over about 100 phones want RAID, redundant power or a warm spare. Hosted servers suit spread-out firms such as a restaurant chain on one hosted PBX. They deploy in an hour but double the bandwidth of internal calls and want static IPs. The host recommends Vultr, which also runs Crosstalk's paid hosting, and advises against virtual machines for most people.

Service. POTS lines cost about $25–40 a month each and are kept mainly as a backup line in schools and hospitals. PRIs (23 voice channels, about $500–750 a month) move easily between servers. Both may ride an internet circuit anyway. SIP trunking comes metered, per-channel or enterprise. It is cheap and quick but depends on the internet connection and on provider documentation. His preferences are Crosstalk SIP channel plans, ClearlyIP where Kari's Law and RAY BAUM'S Act E911 rules make per-room addressing costly, and voip.ms for small metered use.

Phones. He sorts phones into receptionist, standard, utility and miscellaneous. They are judged on FreePBX app compatibility, build quality and price: he calls Cisco and Digium overpriced at up to $400. He urges standardizing on a few models. Crosstalk's own 270, 250 and 230 phones map onto the first three categories.

  • Pick on-premises for one building and hosted for scattered sites. The host breaks every phone system into server, service and phones. On-prem suits a single 50-person office, keeps extension-to-extension calls off the internet and takes POTS or PRI cards, but needs IT upkeep and replacing every three to five years. He recommends against virtualized FreePBX unless you really know VMs, because misallocated resources or networking show up as call-quality problems.
  • Hosted PBXs double internal-call bandwidth but survive a site outage. Each extension-to-extension call goes out to the server and back, and every site should ideally have a static IP. If a site's internet drops, the hosted server can still answer and send calls to voicemail. The host recommends Vultr, which Crosstalk's own paid PBX hosting runs on, with QA'd monthly updates, snapshots, off-site backups and no contract.
  • The host keeps POTS mainly as backup for schools and hospitals. POTS costs about $25–40 or more a month per line before usage, and caller ID follows whichever line a call used. A PRI carries 23 voice channels (an E1 elsewhere, 30) for roughly $500–750 a month. Both are often delivered over an internet circuit now, so ask the provider whether outages take them down.
  • SIP trunking is where the host saves customers the most money. It is metered, per-channel or enterprise with SLAs, and fast to deploy with flexible caller ID, but it depends on internet quality and good provider documentation. He ranks first his own Crosstalk SIP: 5 channels with about 4,000 minutes or 10 with about 8,500. Next come ClearlyIP for complex sites needing Kari's Law and RAY BAUM'S Act E911 compliance, then voip.ms for small metered use.
  • Standardize on FreePBX-compatible phones and skip over-priced brands. Phone apps for call forwarding, queues and visual voicemail need FreePBX support, and he calls Cisco and Digium phones overpriced at up to $400 a handset. Crosstalk's own phones, sold through its store, are the 270 (receptionist, sidecar, Wi-Fi, Bluetooth), the 250 (standard users) and the 230 (break room), with colour screens, gigabit pass-through and 2-year warranties.
Scott HanselmanGet Busy Living with Abel Wang - Hanselminutes Podcast #793
synopsis

Abel Wang, a Microsoft colleague of Hanselman's living with recurrent colorectal cancer, ends the conversation holding that nobody gets to wait for the right time: he does what makes him happy on the days he feels well, and for him that is coming back to work, while insisting that this is his way rather than advice for anyone else.

The recurrence. Declared cancer-free after treatment following a diagnosis about three years ago, Wang buried himself in work through the pandemic while feeling steadily worse. By March scans showed the cancer had spread to liver, lungs, lymph nodes, bladder and pelvis within about nine months. Over a video call he was given two months without treatment or roughly a 14% chance with intensive treatment.

No obligation to be inspirational. Asked by Hanselman about the pressure to be inspiring, Wang says he is mostly stuck in his head and his mind can go dark quickly, though he posts only the positive. His point is that everyone carries something, and that waiting for life to get easy before deciding to be happy means waiting a long time.

Treatment and where it stands. This round of chemo was the worst yet; Wang is also trying diet changes and his mother's Eastern remedies, since he does not know what works. The cancer has been pushed back, with the main remaining spot on his liver not growing, and he describes living day to day rather than by the odds.

Work as his choice. Rather than a bucket-list trip, he returned to work because problem-solving and coding are what make him happy, though he would generally tell people to back away from work. He did his Build keynote cameo, written for him by producer Isaac Levin, straight from chemo with a hidden pump.

Nerves and practice. Wang still panics before every talk and manages it by rote repetition learned from violin practice; Hanselman's "don't accept the defaults" he accepts only as "figure out what makes you happy".

  • Wang's cancer returned fast and spread everywhere. Diagnosed with colorectal cancer about three years earlier and declared cancer-free after a year to a year and a half of treatment, he felt ill from around November, ignored it, and in March scans showed spread to liver, lungs, lymph nodes, bladder and pelvis. He was told over a video call that he had two months without treatment and about a 14% chance with intensive treatment.
  • You cannot wait until life stops being hard to be happy. Wang says he is "pretty selfish these days", his emotions spike and his mind goes to dark places he does not share on social media; but everyone is going through something, so he does what makes him happy now. Hanselman says he catches himself planning for "when I'm 55".
  • He is throwing "the kitchen sink" at it, with partial success. The latest chemo, six sessions, was worse than any before and "almost broke me"; he has also cut back meat, eats mostly vegetables and fruit, and takes Eastern remedies and mushrooms his mother sends. He reports the cancer pushed back, with the largest remaining spot on the left lobe of his liver not currently growing, and does not know how many more rounds he could take.
  • He chose to return to work because it brings him joy. Wang says it is not for financial reasons and he would advise most people the opposite; he wore a portable chemo pump hidden under a hoodie for his cameo in the Build developer keynote, his second keynote with Hanselman while on chemo. He takes up Hanselman's "don't accept the defaults" only as "figure out what makes you happy", pointing to his daughter's work-life balance as equally valid.
  • Stage fear never leaves; rote repetition is how he controls it. He traces this to his mother making him play violin pieces three times in a row without a mistake before moving on, and says the nervousness, which he links to imposter syndrome, drives him to practise more. Hanselman says after 20-plus years only his recovery afterwards has got faster.
Crosstalk SolutionsLong Range 60GHz airFiber 60 LR Setup and Testing
  • Ubiquiti sells the airFiber 60 LR as a long-range bridge. The point-to-point radio, model AF60-LR-US lists at $399 a radio, about $800 for the pair. Ubiquiti rates it to 12 km and 1.8 Gbps full duplex, with GPS sync and Bluetooth setup. A Ubiquiti contest's longest link stood at 24.69 km at the time of recording.
  • The host measured near full speed across his own test link. At 27 m, which he calls overkill for this radio, the built-in speed test gave 854 Mbps receive and 853 Mbps transmit, just over 1.7 Gbps total, with 0.85 ms ping. A laptop iPerf test through three switches and a few hundred feet of cable gave 681 Mbps single-threaded and 869 Mbps with five threads. A client's 5.8 km link showed 86.5% link potential and 1.75 Gbps capacity.
  • Crosstalk typically backs a 60 GHz link with a 5 GHz one. 60 GHz suffers in rain and snow, and the LR has no backup radio. So Crosstalk mounts a second 5 GHz point-to-point on the same poles and runs OSPF between them for failover or load balancing, as on that 5.8 km client link. This also allows upgrading one pair at a time.
  • The radios have almost no settings to tune. Wave AI adjusts the link automatically, and there is no power-output setting. The host sets both ends up over Bluetooth from the UISP app. A static IP without DNS servers left the radio unable to reach UISP until he added DNS, after which GPS suggested the nearby UISP site. A precision alignment mount helps aim the dishes.
  • For shorter links, the host points to the standard AF60. At $299 a radio and rated to 2 km, it has an integrated 5 GHz backup radio that handles failover itself, with no OSPF needed.
GCastWriting unit tests with xUnit.net [GCAST 111]
  • Visual Studio's xUnit template sets up the test project; no download needed. xUnit.net is a free, open-source framework for testing .NET applications, found at xunit.net. Giard picks the C# template, names the project DemoXunit.Tests (one test project per project tested, and one test class per class), and uses .NET 3.1, which he calls the current long-term-support version. The test project needs a reference to the project under test and a using for its namespace.
  • Giard structures each test as arrange, act, assert. Arrange sets up variables or objects, act calls the method under test, and assert checks the outcome; he types these as comments first and favours long, descriptive test-method names. xUnit's Assert class offers checks for equality, true or false, and not null, and Assert.Equal takes the expected value first, then the actual.
  • The [Fact] attribute is what makes a method a test. Once it is added, the test appears in Test Explorer (Test > Test Explorer), listed under its class, project and solution. Tests can be run or debugged at any of those levels, or from the code: right-clicking inside a method runs that test, and inside the class but outside a method runs the whole class. Debugging adds breakpoints and stepping.
  • A deliberately broken function shows a failing test's report. With the add method changed to a bug, the test failed and reported it expected 45 but got -15. Mid-demo, unexplained build errors cleared after he closed and reopened Visual Studio, cleaned and rebuilt, which he puts down to cached results.
  • Test edge cases beyond the happy path. He copies the test for negative inputs (-15 + -30 = -45) and mixed inputs (-15 + 30 = 15), and suggests zero or unexpected formats as other cases worth checking. A blue exclamation point in Test Explorer marks a test never yet run.
Crosstalk SolutionsGrandstream WiFi Phones - Any Good??
  • Wi-Fi phones roam on existing access points, unlike DECT handsets. Crosstalk normally sells DECT cordless systems (Snom, Yealink W60P and Yealink's new multi-cell), which only work within range of their bases. The host's earlier Wi-Fi phone, from another maker, kept losing Wi-Fi. Spectralink is said to be robust, but the first handset with its required support contract, charger, battery and cables comes to over $1,200.
  • The host, usually no Grandstream fan, will stock both phones. He says the video is not sponsored. Grandstream phones are normally not fully FreePBX-compatible and its PBXs are convoluted, so Crosstalk doesn't sell them. But he likes the WP810 and WP820 enough to recommend them and add them to the Crosstalk store. Both auto-provision from Crosstalk Cloud or FreePBX Endpoint Manager.
  • The host recommends the WP820 over the cheaper WP810. At $145 against $114.95, the extra $30 buys a larger 2.4-inch screen, Bluetooth 4.2, Android 7.0 and video calling. Both have dual-band Wi-Fi, 1,500 mAh batteries, two SIP accounts and a programmable push-to-talk/panic button. The WP820's swivelling belt clip juts out enough to stop him holding it on his shoulder, so he would drop it.
  • Roaming between access points worked in the host's home test. On one call he hopped access points five or six times, each hop beeping and cutting about a second of audio, yet the conversation stayed usable. He stresses this depends wholly on the Wi-Fi. Firewall or access-point timeouts on the registration can stop the phone ringing on inbound calls.
  • The WP820 shows incoming video but sends none. It has no camera. It displayed 30 frames-per-second video from a Yealink T58A, useful for a video door phone. Calls from the WP820 to the Yealink never started video, and the host could not tell whether that was a limitation or his configuration.
GCastRenaming Projects and Folders in a Visual Studio Solution [GCAST 110]
  • Renaming a project in a .NET solution is non-trivial. Other projects reference it, and Giard's own conventions mean the namespace and the project's folder should change to match. Renaming the folder breaks the solution's path to it. He warns that some files, such as JavaScript or Blazor files, sometimes have trouble being renamed automatically.
  • Rename in Visual Studio, then close it and rename the folder. His steps: rename the project (F2), replace every occurrence of the old name, close Visual Studio, rename the folder, then fix the project's path in the .sln file in a text editor. He knows of no way to change the project's location from inside Visual Studio. In the demo a project became VideoManager.Lib.
  • Replace occurrences one at a time, not globally. He uses Ctrl+H across the entire solution with match case and whole word on, but says even that is not enough, so he reviews each hit and replaces it (Alt+R) or skips it. That way he avoids renaming similarly named libraries he has not yet handled.
  • After reopening, clean the solution before rebuilding. He waits for background restore tasks to finish, then cleans the solution, because cached build output can get in the way after radical changes. The rebuild is the first clue that something broke.
  • A successful build does not prove nothing broke. Giard runs a manual smoke test of the app and says a change this large warrants full regression: integration, automated, unit and manual tests. He notes the rename makes source-control history look odd, which he says cannot be avoided, and advises making a backup and committing to source control first.
Technology and FriendsMichael Scherotter on Creativity and Technology [TECHNOLOGYANDFRIENDS 665]
  • Scherotter coaches technologists who want creativity in their work. Trained as an architect at the University of Arizona before a software career, he began mentoring informally, partly through Microsoft programs, and this year put up techcreativecoaching.com, a WordPress site whose only cost was the domain. He coaches people in India, Ireland and Africa from his home office, does not charge, and is exploring it as a future possibility while staying at Microsoft.
  • Creativity is a muscle he exercises by keeping sketchbooks. He has filled leather-bound journals for 30 years with drawings, paintings and anything flat, and says this "paintbrush creativity" keeps him in shape for solving problems creatively as a program manager. Much of that is spotting metaphors, since in his view few problems are absolutely new.
  • A career is a series of jobs converging on what you love. He frames a tech career on three axes: the technology (blockchain, machine learning, creative tools), the type of work (coding, UI design, program management, testing) and the domain (financial services, public sector, his own media and communications). Each job should bring what you are good at and what you like closer together, and he says early-career people get frustrated expecting to have all of it at once.
  • Show your creativity openly, in a way that is authentically yours. He tells people to use their own imagery in presentations instead of stock photos or clip art, and points to the 3D printer behind him, which he actually builds with. Most people keep it hidden for fear of critique, which he counts as part of growth: without feedback it is "just a little art project on the side."
  • He gets new ideas by combining things not combined before. When the pandemic stopped his travel and his journaling stalled, he flew Microsoft's new Flight Simulator to New York, Sydney Harbour, Giza and San Francisco, paused it and painted the scene, which he calls virtual flight sketching. On a freelance project he built a virtual gallery of Hebru Brantley's work, called Solus, in Babylon.js for an auction house show in Hong Kong, adding the navigation and interactivity to a supplied model over a couple of weeks.
Crosstalk SolutionsHome Assistant Automation - Sonoff RF Bridge and PIR Motion Sensor
synopsis

The host builds a Home Assistant automation that switches RF-controlled LED strip lights on when a Sonoff PIR motion sensor sees movement, and off again 90 seconds after it stops, using a $15.99 Sonoff RF Bridge on Home Assistant 2021.6.2 running on a Raspberry Pi 4.

Pairing in eWeLink. The bridge is first adopted in Sonoff's eWeLink phone app. It must join a 2.4 GHz network, ideally a separate IoT one, because his hardware version has no 5 GHz support. It then learns the strip light's remote buttons and the motion sensor, which is added as an alarm, each within a 60-second window. The app's per-motion alarm notifications are worth switching off.

Bringing it into Home Assistant. The SonoffLAN integration, installed through HACS, logs into eWeLink with credentials placed in configuration.yaml and runs in local-and-cloud mode by default. YAML's sensitivity to spacing is why the host points viewers to his GitHub repository for the snippets.

Finding the command codes. A temporary automation posts a notification for every RF event the bridge hears. This shows that learned codes are numbered from 0 in order: on is 0, off is 1, motion is 2. Two scripts sending commands 0 and 1 become on and off buttons in a horizontal-stack card on his office dashboard.

Tying motion to the lights. The sensor is declared a motion device with a 60-second timeout that restarts on each detection. One automation sends "on" when it changes from off to on. A second sends "off" once it has been off for 30 seconds, so the light stays on for 90 seconds after the last motion. The host calls the timings arbitrary, and concedes his blog post had wrong command numbers to correct.

  • A cheap Sonoff RF bridge brings RF remote devices into Home Assistant. The host's build is the Sonoff RF Bridge ($15.99 on Amazon), a Sonoff PIR motion sensor ($17.19), any RF LED strip lights and Home Assistant 2021.6.2 on a Raspberry Pi 4, with HACS and a file editor installed. He calls the Pi great for learning but expects heavier users to move to a VM on a Synology NAS or an Intel NUC.
  • Pair the bridge in eWeLink on a 2.4 GHz IoT network. His hardware version of the bridge does not support 5 GHz. It signals pairing mode with two short blinks and one long for 300 seconds. Each remote button and the motion sensor (added as an "alarm") is learned within a 60-second window. He turns off the app's alarm notifications, which fire on every motion event.
  • The SonoffLAN integration links eWeLink to Home Assistant. Installed through HACS, it defaults to local-and-cloud mode, with cloud-only and local-only as options. The eWeLink email and password go in configuration.yaml. Because YAML is finicky about spacing, he suggests copying from his GitHub repository instead of the web page.
  • A notification automation reveals each learned RF command's number. Commands are numbered from 0 in the order learned: his on button was 0, off was 1, the motion sensor 2. Scripts sending commands 0 and 1 then become dashboard buttons. An automation needs a unique 14-digit ID to be editable or switchable in the UI. He admits his blog post had wrong command numbers he meant to fix.
  • His motion lights turn off 90 seconds after motion stops. The sensor is declared with device class motion and a 60-second timeout that restarts on each detection. A second automation waits a further 30 seconds after the sensor goes off before sending the off command. He calls both timings arbitrary and suggests tuning them.
Crosstalk SolutionsMy Starlink VLAN Setup
  • The host's Starlink VLAN exists only on the switches, not the firewall. VLAN 574 ("STA" in leet speak) carries Starlink from his garage to an EdgeRouter X in his office. It is created in UniFi as a "VLAN only" network with that tag and does not exist on his Netgate SG-1100 pfSense firewall, since it needs no DHCP or routing. His other networks are the main LAN, guest VLAN 10 and IoT VLAN 107.
  • An untagged port at each end puts Starlink on the VLAN. The Starlink PoE injector's data port plugs into port 5 of a USW Lite 16 PoE, set to a Starlink-only profile. All VLANs then ride trunk ports ("All" profile) through the attic and rack switches. Port 5 of a US-8-150W, again Starlink-only, feeds the EdgeRouter X's WAN. The link still showed 100 Mbps full duplex because of his separate Starlink fault.
  • A trunk port carries one untagged network plus tagged VLANs. Anything plugged in lands on the untagged network, and VLAN-aware devices can also use the tagged ones. That is how one access point serves the main, guest and IoT Wi-Fi. A port untagged for a single VLAN gives its device nothing else, even if that device understands VLANs.
  • Best practice keeps the Starlink VLAN off every non-trunk port. The host builds a "non-Starlink VLANs" profile (native LAN plus IoT and guest) and shows it applied to his U6-LR's port. That keeps a device on an ordinary port from joining VLAN 574. At home he leaves most ports on "All" because he controls all the equipment, but in an enterprise he would segregate further.
Crosstalk SolutionsAnnouncing the Crosstalk Cloud PBX!
  • Crosstalk's own Cloud PBX, powered by ClearlyIP, is out of beta. It targets 2–20 seat businesses that want normal phone-system features without per-extension cloud pricing like RingCentral's or 8x8's. Crosstalk bills by minutes used and calls "unlimited minutes" plans a scam. Features include ring groups, queues, time conditions, call recording, a web call panel, and a softphone per user (browser or the Clearly Anywhere mobile app, set up by QR code).
  • Service is priced per extension, plus numbers and minutes used. It is $5 per extension a month. Setup is $250 for the first two extensions and $50 for each additional one, plus $50 shipping. Taxes typically add 15–20% to the monthly bill. There is no contract, and Crosstalk phones carry a 2-year warranty.
  • Crosstalk claims to undercut RingCentral by more than half over five years. It puts the saving at 55%. In the company's example of nine phones, three numbers and 4,000 minutes, upfront cost is $1,863 ($1,163 of it phones) and service $83 a month before tax. Year one totals $2,859 against about $3,022 for RingCentral at $27.99 per extension per month. After that it is $996 a year, so five years cost $6,843 against $15,114. The company claims an average saving of 50% or more.
  • Onboarding is pitched as the main selling point. Crosstalk says it designs inbound and outbound call flows, configures and ships the phones ready to take calls, then guides the customer through number porting.
Technology and FriendsSasha Rosenbaum on Growth Mindset [TECHNOLOGYANDFRIENDS 664]
synopsis

Rosenbaum argues that believing your abilities can change, Carol Dweck's growth mindset, makes for a happier life whether or not it brings more achievement, and that schools and praise habits push people the other way.

The concept. She contrasts the fixed mindset, which treats talent and intelligence as inborn, with Dweck's view that people are mostly defined by practice and learning. Microsoft took it up under Satya Nadella. She gives the talk unprompted because she wishes she had read the book at 13 rather than at 30. Giard offers his own parallel: happiness rests on believing your actions can change your circumstances.

How fixed mindsets form. She cites a study where teachers given random "superstar" labels produced superstars, and Dweck's praise study, where children praised as smart abandoned hard puzzles and then failed easy ones. Her own case is a gifted high-schooler who froze at riddles and struggled through college computer science.

Getting there. Read the book, then argue yourself past each "I'm not smart enough"; she says it takes a couple of years. She likens it to cognitive behavioural therapy's graded exposure.

Limits of practice. Pressed by Giard with the Serenity Prayer, she concedes predispositions are real but calls talent overrated, citing failed prodigies and Michael Jordan. She adds that practice teaches only in "kind" domains with feedback, not "wicked" ones.

Stereotypes. Finally, she suggests, while flagging that research here is thin, that growth mindset can blunt internalized stereotypes about women and math.

  • Abilities are mostly built by practice, not fixed at birth. Rosenbaum, now a senior manager at Red Hat, explains Carol Dweck's growth mindset against the fixed mindset that treats capability as inborn, and says Microsoft adopted it under Satya Nadella because he saw learning as the key skill for people and organizations. She read Dweck's book Mindset at about 30, wishes she had at 13, and gives an unsponsored talk on it because technologists have to learn every day and that is a struggle under a fixed mindset.
  • Labels and "you're so smart" praise create fixed mindsets. She cites a study in which teachers told that randomly chosen students were superstars got superstar results, and Dweck's study (on four-year-olds, she thinks) where children praised as smart rather than hardworking gave up on hard puzzles, lied about their scores and then did worse on easy ones. She recognises herself: praised as smart, she could solve any "problem" but froze at a "riddle", skated through high school, and was miserable studying computer science in college while a friend simply reread and asked for help until he understood.
  • The payoff is a better life experience, not necessarily more achievement. Her route is to read the book, then talk yourself through each hard problem that seems to prove you aren't smart enough; she says it takes a couple of years and rests on research, not just her say-so. She likens it to cognitive behavioural therapy's graded exposure, after Giard describes building public speaking as a muscle.
  • Talent exists but is overrated, and practice works best with feedback. Answering Giard's Serenity Prayer question, she grants that a short person probably won't make it in basketball, but says most people quit after a week or a month, many prodigies fail when they reach a hard problem, and Michael Jordan is remembered as gifted rather than as the most practised player. Practice helps most in "kind" domains with feedback, like public speaking, and least in "wicked" ones, like a doctor who never learns whether a prescription worked.
  • Growth mindset may free women and minorities from internalized stereotypes. She cites findings that reminding women of their gender before a math test lowers their scores while reminding Asian students raises theirs, and argues that not being defined by what you were born with also means not being defined by gender. She flags that research here is thin and calls it her opinion, adding that it does not replace fixing stereotypes or investing in diversity.
Crosstalk SolutionsStarlink on the Fritz!
  • The host's Starlink injector won't hold a gigabit link to third-party gear. The service itself works, but the injector's data port auto-negotiates to 100 Mbps full duplex on a UniFi USG, a USW Lite 16 and an EdgeRouter X. On a Netgate SG-1100 it would not negotiate at all until he forced 100 Mbps full duplex. In his earlier Starlink-with-UniFi video the same port showed gigabit.
  • Starlink support saw a fault alert remotely and replied within an hour. Their first reply flagged an alert suggesting cable or port damage and listed eight troubleshooting steps: photos of pins, bends, pinched or nicked cable, debris, and bypassing the router. The host infers from how fast this canned list arrived that other customers have hit the same problem.
  • A slightly depressed pin in the injector looked like the culprit. Pin 8 on the injector's port sat a millimetre or so low. Prying it up with a paper clip, or just replugging, brought back gigabit and speed tests of 217, 206 and 175 Mbps in his office. It fell back to 100 Mbps after about an hour each time.
  • Starlink is replacing the power brick; the fault persisted at recording. The RMA was under way and he was still at 100 Mbps full duplex and planned a follow-up video. He says he isn't upset because Starlink is a beta product, and praises its support as quick, right first time and friendly.
Crosstalk SolutionsEdgeRouter X Complete Setup with Starlink
  • The EdgeRouter X is a cheap router with headroom for Starlink. The host says the ER-X processes far more packets than Starlink can push through it; MSRP is $59, and he has seen it on sale for about $35. On his test it showed Starlink's CGNAT address on eth0 and ran a speed test at about 80–85 Mbps.
  • Setup is a standard ER-X build with Starlink on eth0. Factory reset with a paperclip held 10 seconds, connect a laptop to eth0 with a static address in 192.168.1.x, log in at 192.168.1.1 with ubnt/ubnt, then run the "WAN + 2LAN2" wizard with "use only one LAN" so eth1–eth4 act as one switched LAN. Then move Starlink's cable (the one normally in Starlink's router) to eth0 and the laptop to eth1.
  • Move the LAN off 192.168.1.x, and never use 192.168.100.x. He changes the default because nearly every router ships with 192.168.1.x, which risks conflicts; he uses 192.168.42.1/24 with the DHCP server on. 192.168.100.x is off limits because Starlink uses it, and the static route to the dish will not work if the LAN overlaps it.
  • A static route is needed to reach the Starlink dish interface. Without it, 192.168.100.1 (stats, stowing the dish, support tickets) is unreachable from behind the ER-X. Add an interface route to 192.168.100.1/32 with next-hop interface eth0 and distance 1.
  • The default DHCP pool and DNS settings are worth changing. The wizard hands out an odd pool of .38–.243, which he resets to .100–.254, and the router is clients' only DNS server, so he adds 1.1.1.1 as a backup. He also sets system name servers 1.1.1.1 and 9.9.9.9, and notes the DHCP page can carry a UniFi controller's IP to help devices find a cloud-hosted controller.
Crosstalk SolutionsOn the Road 2.1
  • Revive the old NVR first, to save resetting every camera. At a Newport, Oregon client, a UniFi Video NVR on a Shuttle PC he had built three to four years earlier was off and stuck at a BIOS prompt that needed F1. Booting it let him verify the camera password and take a backup, so he would not have to factory reset cameras on ladders.
  • The UniFi Video backup restored into UniFi Protect cleanly. On a pre-built UNVR the restore imported only the cameras (no users), alongside two existing Protect cameras, and 19 of about 20 updated and came online. The stuck one finished after a PoE cycle from UNMS; a "failed" camera came back on a different port of the 24-port EdgeSwitch, leaving the client its replacement G4 Dome as a spare. He spent about 2.5 hours on site, the last hour training three employees.
  • Each viewport and each camera belongs to one Protect instance. A viewport shows views from a single Protect server, so it cannot combine cameras from several systems. A camera records to only one Protect device: as of recording, the UNVR, UNVR Pro, UDM Pro or Cloud Key Gen2 Plus. As far as he knows there is no limit on the number of viewports.
  • Smart detections work only on G4 cameras and the doorbell. Answering a viewer with G3 cameras considering an upgrade for that feature, the host says only generation-4 models (G4 Pro, G4 Bullet, G4 Dome) and the doorbell can do smart detection.
  • A separate UNVR allows a camera VLAN that UDM Pro's Protect does not. To his knowledge Protect on a UDM Pro cannot be put in its own VLAN; he speculates firewall rules plus manual adoption might work but would lose auto-discovery. A UNVR and a UDM Pro run fully separate Protect instances: no shared drives, no user replication, no combined dashboard. To use the UNVR's capacity or RAID, uninstall Protect from the UDM Pro.
Technology and FriendsJeff Wilcox on Open Source and Microsoft [TECHNOLOGYANDFRIENDS 663]
  • Microsoft went from refusing contributions to embracing GitHub. Wilcox recalls the Silverlight Toolkit on CodePlex publishing its code but accepting no pull requests, and the Azure SDK team needing executive approval to be among the first teams to take contributions on GitHub; he puts Microsoft employees on GitHub today at over 30,000. He credits the cloud's interoperability (Linux or Windows containers, Redis run locally, on AWS or Azure) and engineers' wish to use what everyone else uses, such as React and Kubernetes.
  • Every Microsoft build automatically inventories its open-source components. Wilcox, who works in Microsoft's Open Source Programs Office (OSPO), says a Node project with 800 npm dependencies gets recorded at build time, so the company can later trace which builds used a given version when a vulnerability surfaces. The same record checks license compliance and raises alerts where a license carries obligations such as publishing source code.
  • Microsoft releases under MIT and accepts obligations from others' licenses. Wilcox says the company is fine using almost any license provided it meets the requirements, citing the large body of source it must publish for the Edge browser. He notes it is often the same lawyers as five years earlier who have since changed their stance and reduced the burden.
  • A network of "open source champs" scales the small OSPO team. Wilcox says champions sit in organizations across the company so that, for example, someone on Windows has a nearby person who has done it before; his team otherwise acts as "highly paid network routers". Much of the job is reassuring teams that they may start a project in the open before it is polished.
  • Engineers are being encouraged to contribute back, including outside Microsoft. Wilcox says recent hires treat fixing a bug or docs via pull request as second nature, while older staff were unsure whether they needed approval. He says contributing to, say, a Linux Foundation or Google project is easy, and that Microsoft also sometimes sponsors outside projects financially.
Technology and FriendsOvetta Sampson on Mindful and Ethical AI [TECHNOLOGYANDFRIENDS 662]
  • "Mindful AI" is preferable to "ethical AI". Sampson, an adjunct professor at DePaul University, says ethics is loaded and contextual, so stamping one group's ethics on a universal technology is a problem; mindful means being deliberate in designing machine-learning products. She uses design as a verb, after Victor Papanek's "purposeful application of meaning and order to chaos", which implies action and responsibility.
  • AI should be designed as human-machine symbiosis, not human replacement. Sampson draws on J.C.R. Licklider's "Man-Computer Symbiosis" paper and treats AI as a design tool rather than a technology foisted on people. She argues the 1956 Dartmouth founders made AI more rational than humans will ever be, so a self-driving car would only beat human drivers if there were no humans around, and that automation bias means people trust a machine that is right nine times in ten.
  • Released models keep learning from people their builders never chose. Sampson tells students their model is not trained only by them once it is out, which she says is what happened to the Microsoft chatbot the host raised, racist within 24 hours. She cites an IDEO principle of listening for unintended consequences and says good data scientists iterate on models rather than setting and forgetting them.
  • Bias enters through what data is collected, used and ignored. Sampson's examples are a zip code classified as a low-income neighbourhood, car facial recognition she says was trained on Stanford students and misses darker skin, and Kodak's "Shirley cards", a white model's image used for colour balancing that she says still shapes sensors such as automatic faucets. She argues mindful AI starts in model making, with diverse people asking about training data and preferring an interpretable regression to an unauditable neural network.
  • Facial recognition and predictive policing are risky AI use cases. Sampson says unless everyone was in the training data the software will make mistakes, citing a Detroit man suing the Detroit police department. She describes Chicago's "strategic subjects list", which she says flagged people such as Robert McDaniel through their social networks without any crime, was released only after people sued, and was disproportionately Black and Latino.
Crosstalk SolutionsProtect UNVR Complete Setup
synopsis

The host builds a new UniFi Protect UNVR from unboxing to a working camera system with restricted users. He uses it to replace a client's ageing UniFi Video appliance, and says the same steps apply to the seven-bay UNVR Pro. He flags the defaults that catch installers out: app updates are off, setup needs a cloud login, and users live in UniFi OS.

Drives and hardware. He installs three 8 TB WD Purple drives (a fourth was back-ordered). Most drives work, with testing up to 16 TB. The drive count sets RAID automatically, and the newer RAID 10 and hot-spare options cost capacity: four 8 TB drives give 24 TB in RAID 5 but 16 TB in RAID 10. The RAID 5 sync took an estimated 12 hours, and the array is not redundant until it finishes. Setup wizard and security. The browser wizard requires a Ubiquiti single sign-on account, with no local-only option. So he insists on 2FA and a separate camera VLAN behind firewall rules.

UniFi OS settings. He gives the device the old appliance's static IP, 192.168.1.4. Updating UniFi OS does not update Protect unless the separate applications switch is on. He recommends the official release channel, SSH as an escape from a stuck update, and powering off from the interface. Versions as recorded: UNVR 1.4.9, Protect 1.18.1.

Cameras, views and events. A G4 Dome on the same LAN appears for adoption and is updated to Protect's firmware. Views can cycle two cameras in one grid square and feed a viewport. His defaults: always record, a 2-second motion trigger with 5 seconds either side, time, date and name overlays, motion and privacy zones, and RTSP for third-party systems. Time-based purge meets legal retention limits, and alerts should be kept sparse.

Roles and users. He creates a view-only "building A" role in Protect, then a local-access-only limited admin in UniFi OS who is assigned that role. Ubiquiti-account users get remote access. He suggests setting up each user's default views for them.

  • Almost any hard drive works; RAID choice trades capacity for redundancy. Ubiquiti has tested drives up to 16 TB, and the incompatible-drive list mostly covers drives whose screw holes miss the trays. By default one drive is no RAID, two are RAID 1, three or four are RAID 5; a newer "half of disks" option gives RAID 10 and a hot spare can be set. With four 8 TB drives, RAID 5 gives 24 TB and RAID 10 gives 16 TB.
  • Setup forces a cloud account, so enable 2FA and isolate cameras. The wizard offers no local-only user, so the Ubiquiti single sign-on account should have two-factor authentication. He recommends putting cameras and the NVR on their own VLAN with firewall rules, so someone who knocks a camera off a wall and plugs into its cable cannot reach the main LAN.
  • UniFi OS auto-updates do not update the Protect app. A separate application auto-update switch is off by default, so the device can show up to date while Protect has an update pending. He advises the official release channel in production, enabling SSH to fix a UNVR stuck "updating", and powering off from the interface rather than unplugging.
  • His camera defaults: always record, 2-second trigger, 5-second padding. He sets overlays to time, date and camera name without the UniFi logo, and saves 5 seconds before and after motion. Motion zones skip a busy street, privacy zones black out areas illegal to film, RTSP feeds Home Assistant or other NVRs, and time-based purge meets legal retention limits.
  • Roles live in Protect, but users live in UniFi OS. Camera roles (e.g. view only for one building) are made in Protect, then assigned to users made in UniFi OS. A Ubiquiti account gives remote access through ui.com; "local access only" users log in on the LAN. He suggests logging in as each new user and setting up default views for them.
Crosstalk SolutionsUVC-G4-Dome Night Vision Fix
  • G4 Dome night fog is IR light reflecting back into the dome. The host found a Ubiquiti article on G4 Dome night-mode issues: do not mount within 24 inches of objects or walls, keep overhangs out of view, and avoid wall mounting too close to the ceiling. His own camera sits within two feet of an eave without trouble.
  • Cleaning and properly seating the bubble cover fixed his camera. He cleaned the inside of the dome with a lens cloth, lined up the numbered peg (his read "2") with the notch below the lens, pressed it fully in, twisted to lock, then cleaned the outside. Before, a person 35 feet away was invisible; after, visible though not recognisable. He suspects the poorly seated cover was the main cause.
  • Moisture and a damaged rubber seal also cause fog. The same article lists water droplets on the outside of the dome, which may need periodic wiping where rain hits it, and a chipped rubber seal around the lens, which leaks infrared light. For client installs he now cleans and seats the dome as soon as he adjusts the lens.
GCastUsing the Video Indexer AI Tool [GCast 109]
  • Video Indexer analyzes video with AI and needs no code. It is a Microsoft tool at videoindexer.ai, signed into with a Microsoft account; Giard says it integrates with Azure Media Services and Cognitive Services, and that he first used it about four years before this recording.
  • An upload takes a source, title, language, visibility and agreement. The video can come from a web URL (a YouTube video, for example) or the local machine; the language helps its speech-to-text, and Giard keeps his video private. Upload stays disabled until a checkbox is ticked; Giard says Microsoft currently does not allow police departments to use the technology, and the uploader must have rights to the video.
  • Indexing took longer than the video itself ran. Giard's low-quality 2010 charity-event video, 744 MB and 16 minutes long, took about a minute to upload and about 19 minutes to index; he offers that as a gauge for other videos.
  • The results break the video into people, topics, emotions and scenes. It tracked each face across every appearance, even in the background, without naming non-famous people, and matched two of his friends to celebrities they are not (one at 70.5% certainty). It also listed topics, keywords, labels and named entities from the transcript; emotions from facial expressions; sentiment from speech on a 0-to-1 scale; and 12 scenes, each split into shots with key frames usable as thumbnails.
  • Captions and insights download for use in other applications. Closed captions come in standard formats, VTT among them, optionally with audio effects, and each line carries a confidence score (about 78–84% in his file); the insights download as JSON with start and end times for every emotion, scene and the like. Giard lists uses: better video search, highlight reels, closed captioning, content moderation, pointing to specific moments, and feeding the data to other machine-learning models; he says much of it works on audio too.
Technology and FriendsJoel Cochran on Azure Synapse [TECHNOLOGYANDFRIENDS 661]
synopsis

Cochran, who prepares national-scale data for analysts at Causeway Solutions, ends up arguing that Azure Synapse is the future of big-data work on Azure and will replace Databricks, because its three engines and built-in tooling let a small team solve each problem the best way.

The data warehouse leg. Synapse first appeared publicly as a rename of Azure SQL Data Warehouse, now its dedicated SQL pool: 60 SQL Servers behind a controller node. Version two's clustered indexes made row-level joins workable. His firm runs 500 DWUs, about $5,000 a month, and a three-year reservation cut that to 33% of the original cost, breaking even after a year.

Serverless SQL. The leg he finds most intriguing queries CSV or Parquet in Azure Data Lake Storage with no loading, paying only for query time. Two environments took about 45 minutes to set up, and views hide the OPENROWSET syntax from analysts.

Spark. Spark pools autoscale between set node limits; notebooks mix Python, Scala, SQL and C#, though not R at recording. He says all of it executes as Scala, and pools can load PyPI libraries. Spark tables are queryable from serverless SQL, and Spark can read the dedicated pool.

Around the core. Azure Data Factory pipelines are built in, which he calls the best Azure product in years because it lets him, largely alone, keep processes running; Power BI connectors and Azure Purview round it out.

  • Synapse is an umbrella over three processing engines. Cochran describes dedicated SQL pools (the former Azure SQL Data Warehouse), serverless SQL and Spark, all sharing one data lake. The dedicated pool is a massively parallel system of 60 SQL Servers behind a controller node; version one (around 2014–2015) supported only clustered columnstore indexes, and version two's clustered indexes enabled the row-level joins his work needs.
  • Three-year reserved pricing cuts dedicated-pool cost to about a third. Cochran's firm runs production at 500 DWUs, roughly $5,000 a month, against a top end of 30,000; he would not recommend 100 and says around 300 performs decently. He says the commitment breaks even after the first year, so even 18 months to two years of use saves money.
  • Serverless SQL queries data-lake files directly, paying only per query. Cochran can drop a customer's CSV into Azure Data Lake Storage, right-click and query it with no loading, ETL or schema, and says two new Synapse environments took about 45 minutes to set up. His firm writes large data sets out as Parquet and puts views over the OPENROWSET syntax so analysts see ordinary tables.
  • Spark notebooks mix Python, Scala, SQL and C# cell by cell. R was not supported at recording, which Cochran expects to change. He says PySpark is the default but everything executes as Scala at runtime, that pools autoscale between set minimum and maximum nodes on consumption pricing, and that each pool can carry its own PyPI libraries; serverless SQL can query Spark tables.
  • Cochran predicts Synapse will replace Databricks in Azure. He cites built-in Azure Data Factory pipelines, native Power BI connectors and Azure Purview for governance. He says Data Factory lets him, often the only data engineer at Causeway Solutions, a New Orleans analytics firm holding data on every US adult, automate an outsized amount of work.
Scott HanselmanRegister for Microsoft BUILD 2021 this year! Here's a SNEAK PEAK of the First MINUTE!
  • A comedy teaser promoting BUILD 2021, with no argument. The 64-word caption track is music and unattributed skit fragments: another Teams meeting, "then don't go to Seattle", "the world's okay programmer", a drive-through-style order ("4c with cheese", "first window"), and a "second dose" given to someone with the last name Hanselman ("relax your arm"). Beyond the title's call to register, the text carries no claims, dates or event details.
Technology and FriendsDani Diaz on IoT and Azure Percept [TECHNOLOGYANDFRIENDS 660]
  • Cheap cloud analytics turned manufacturers' old data collection into IoT. Diaz, on Microsoft's IoT global black belt team for about five years, says manufacturers long fed plant data into historians but found it too expensive to use; now almost every manufacturer he talks to has an IoT initiative. He cites a Microsoft investment of $5 billion over five years and Azure Digital Twins, newly GA, for modelling a factory, building or vehicle digitally.
  • Latency and bandwidth push AI decisions to the edge. Diaz says about 70% of IoT deployments will include AI at the edge within a couple of years, a forecast. A drill that must stop on a reading cannot wait for a cloud round trip, and video for people counting or licence plates is too costly to send up.
  • IoT Edge runs Docker containers deployed to fleets from the cloud. Diaz says devices can be provisioned zero-touch with the Device Provisioning Service, then a manifest pushes modules to one device, a subset or the whole fleet. A teammate is automating the retrain-and-redeploy loop so a new model reaches the edge about monthly without hands-on work.
  • Azure Percept bundles reference hardware with low-code model deployment. Diaz describes a dev kit built by Asus to Microsoft's reference design, with a camera and optional microphone array, running IoT Edge, plus Percept Studio for prebuilt models or custom TensorFlow or ONNX ones. In his demo a model swap was just a zip delivered via the module twin, and he notes camera angle and zoom matter; Percept was not offered under "create a resource" in the portal and had to be reached from the docs.
  • Percept's voice side reuses Microsoft's existing speech services. Diaz shows command sets for inventory and hotel use woken by the keyword "assistant", aimed at uses like a hospital patient calling a nurse, though his demo did not display the response. He values that Percept builds on IoT Edge and Cognitive Services rather than reinventing them, and says his pre-sales team engages at no charge through a company's Microsoft account team.
Crosstalk SolutionsExpertly Built Phone Systems by Crosstalk Solutions!
  • Crosstalk sells its PBX systems in three deployment forms. The video is the company's own pitch: on-premises PBX on Crosstalk-supplied servers, hosted PBX for multi-site or home-user organizations with ongoing updates and backups, and a forthcoming Crosstalk Cloud PBX, still in beta, which the host pitches against RingCentral and 8x8 on price. All are built on the open-source Asterisk engine.
  • Crosstalk's servers scale from 40 extensions to 500 phones. All ship with the FreePBX distro and a two-year warranty, extendable to five. The company says the 715 and 716 handle up to 40 extensions and about 10 concurrent calls, with built-in FXO/FXS ports, and the fanless 710 handles 100 phones and 30 concurrent calls. The 1U 745 handles 150 extensions and 45 calls with up to eight analog ports, and the 1U 760 handles 500 phones and 100 calls.
  • Any two servers can run as primary and warm spare. According to the company, the second server stays synchronized, so it can take over if the primary fails.
  • Crosstalk's branded phones come in three tiers. All have a two-year warranty, colour displays and gigabit pass-through, are VPN-capable, and run on either a power adapter or 802.3af PoE. The 230 is for break rooms and warehouses, the 250 has eight programmable keys for standard users, and the 270 has 10 keys and takes up to six Crosstalk 200 sidecars.
  • The service covers call-flow design, E911 compliance, porting and cutover. Crosstalk says it handles Kari's Law and RAY BAUM'S Act compliance and project-manages the number porting. Customers get 30 days of post-deployment support, after which ongoing support is available without a maintenance contract.