tech

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

Technology and FriendsChris Judd on Technical Skills That Are Most In Demand [TECHNOLOGYANDFRIENDS 695 ]
  • Cloud skills are the single biggest area of demand. Judd, CTO and partner at Manifest Solutions, bases this on 150 open positions across 14 client companies and 75–100 interviews a year, and says his Columbus, Ohio base may make it regional. AWS and Azure dominate and only one client uses Google Cloud; demand spans serverless, VMs, CI/CD, AWS CDK, Terraform, DynamoDB, Cosmos DB and Kafka, and he recommends cloud certifications because they currently carry weight and those without them are "behind the eight ball."
  • Beyond cloud, demand concentrates on a stable, mainstream stack. He lists React and Angular (jQuery still hanging on, little call for Vue.js), Docker and Git as table stakes, Kafka and RabbitMQ, and GraphQL newly catching on next to REST. Also in demand: Spring Boot, Maven, Gradle and JUnit for Java; C#, .NET 5, .NET Core, SQL Server and Entity Framework; Jenkins, Azure DevOps and GitHub Actions; Jira; and Scala for ETL. Mobile demand comes from one client and has been slowing for a couple of years.
  • Hiring follows the hype curve's slope of enlightenment, not the hype. None of the 150 openings is in AI or ML and only one, a data-science role, asks for Python, which he attributes to his firm doing little data science. He argues most jobs arrive after the trough of disillusionment, so that is the time to apply; Giard adds the catch that you must upskill beforehand, which Judd says is what conferences are for.
  • The firm grows its own talent through a paid boot camp. Manifest takes recent computer-science graduates "from 20 to 60 miles an hour" in a six-week Java or .NET full-stack program, run about four times a year for 11 years. Judd says graduates have gone on to Microsoft, AWS, NASDAQ and Google, and that a client said this week one graduate, three months in, was outpacing its senior people; the firm also ran a two-week version twice for a bank team moving from .NET to Java.
  • Let target employers' job postings choose what you learn. Judd advises picking five to ten companies you would like to work for, finding the technologies common to their requirements, and using them in a pet project you can discuss at interview. He also recommends contributing to open-source projects in those technologies, since answering "have you used X?" with "I've contributed to it" is the strongest answer.
Crosstalk SolutionsAmongUs 3D print
  • The host 3D-printed an Among Us figure for his kids. He judges that it came out pretty well; the short is a personal aside with no networking content.
Crosstalk SolutionsWiFi 6E U6-Enterprise Announced!
  • The U6 Enterprise is Ubiquiti's first announced Wi-Fi 6E access point. Per Ubiquiti's launch video it adds a 6 GHz radio to 4x4 MIMO, claims over 10 Gbps combined over-the-air throughput and 600+ clients, runs on PoE+ rather than PoE++, and upgrades the LAN port to 2.5 Gbps, which the host calls its most notable feature.
  • Over-the-air speed ratings exceed what single-gigabit ports can deliver. The host explains Ubiquiti's 1.5 Gbps U6 Lite and 5.3 Gbps U6 Pro (300+ clients) figures are client-to-client totals behind 1 Gbps ports. He calls the $99 U6 Lite the best bang-for-buck AP he has tested, enough for most homes at one or two units; he has not yet reviewed the U6 Pro.
  • Ubiquiti's Enterprise switches target small-enterprise cores, not homes. The host cites $1,298 for the Enterprise XG24 (24 x 10G RJ45, two 25G SFP28) and about $1,599 for the Enterprise 48 PoE. He believes all but the Enterprise 8 have layer 3 features, though not yet a full layer 3 implementation.
  • Ubiquiti appears to be moving toward home automation. All U6 APs carry Bluetooth Low Energy for UniFi IoT devices such as the $59 UP Sense multi-sensor; the U6 In-Wall, U6 Extender and UniFi Protect door lock were early access at recording, while the U6 Mesh is available. The host's expectation of more such devices is his suspicion.
  • WiFiman's signal mapper now maps coverage room by room. The host says it works with a UDM Pro or UDM SE on the latest firmware plus the current WiFiman phone app, walking a floor plan to find dead zones; he defers his assessment to a later video.
Technology and FriendsBrent Ozar on What Every Developer Needs to Know About Databases [TECHNOLOGYANDFRIENDS 694]
  • Pick the database you already know and stick with it. Ozar, a SQL Server performance consultant, says learning a new database for each project leads to botched basic implementation decisions and slower shipping. He says it does not matter whether that is SQL Server, Azure SQL DB, MySQL, Postgres or SQLite.
  • Base architecture on your data-size tier, not famous sites. He sorts databases into 1–10 GB (architecture barely matters), 10–100 GB and 100 GB–1 TB, and says his advice differs by tier, so copying Stack Overflow, a top-50 website, is copying a different problem. He calls the biggest early decision whether to put each client in its own database, which he favours: one shared database is easier to develop but harder to tune as it grows.
  • Keep data you never join out of the relational database. Ozar compares relational databases to Ferraris: fast but expensive to run and maintain with specialists. Caches, queues, files, and XML or JSON data can go to cheap cloud file and queuing services, which scale far more easily than relational servers.
  • Query rate sets how careful you must be. He sorts load into 1–10, 10–100 and 100–1,000 queries per second: at the low end even SQLite is fine, while from 100–1,000 a single bad query can take the database down, so that is the point to cache in the front end or in Redis. He says relational databases can go far higher, citing a client running over 100,000 queries per second.
  • Lean on managed services for work that doesn't make money. Ozar says developers must know early which regulations their data falls under, since some databases make compliance easier; in his view quickly built NoSQL databases such as MongoDB lack the compliance and security features of enterprise databases. In 2022, he argues, the default should be a database someone else manages and patches; though a DBA of over two decades, he uses hosted cloud databases for his own applications.
Crosstalk SolutionsNetwork Rack Installation - Start to Finish!
  • The host split test gear into its own rack to protect production. He bought a NavePoint 15U Performance Series rack for about $320, kept his 12U StarTech rack for production, and took about 1.5 hours to assemble it. Its sides lock and lift off for access, the back is bolted, and it rolls on casters or bolts down.
  • The rack's shallow depth limits it to networking gear. At 450 mm deep, the host found the Patchbox 365 needed about 1.5 cm more, its cable arms would hit the door, and the deeper of two shelves clashed with rear power cables. He moved the Patchbox and the USP RPS to the deeper rack, and shifted the front rails back to give fiber room to bend; a 600 mm version exists.
  • The rack's bundled fans are loud enough to leave off. His meter read about 55–56 dB ambient and about 70 dB with the fans on. He runs them from an early-access UniFi PDU so they can be switched from UniFi, keeps them off for now, and may swap in quieter fans.
  • Old phone jacks wired with Cat5e made easy cross-connects. The host traced two RJ11 runs to the attic and re-terminated them as Cat5e keystones into a USW Industrial switch carrying all his house VLANs. He recommends the Untwist Tool version 2 from TechToolSupply, with six channels, a rubberized back and an optional Wow Stick driver, for anyone terminating cable regularly.
  • Any toolless cage-nut replacement beats standard cage nuts. The host used Rack Studs Series 2 Duo, which Rack Studs sent him, holding both screws of a 1U device in one piece, and also showed Patchbox's metal clip-on alternative. He found both worked and did not know which is cheaper.
Technology and FriendsBarry Stahl on Patterns for Reliable Systems [TECHNOLOGYANDFRIENDS 693]
  • Changing system state twice in one execution context cannot be reliable. Stahl calls this the dual-write anti-pattern, e.g. a Web API call that both sends an email and updates a database; distributed transactions would fix it but "absolutely destroy scalability". He says wrapping the email send inside an open SQL transaction makes things worse, since the transaction can fail after the email has gone, and even sending the email first (it is the less reliable step, roughly "three nines") leaves an inconsistent state whenever the database write then fails, with no compensating action possible for an email.
  • Split the steps from the start rather than patching failures afterwards. A side process that retries only the failed second step duplicates that step's code and runs only under rare conditions, so Stahl argues it atrophies; since that separate service is needed anyway, he would chain both steps as separate services from the beginning.
  • Streaming, Outbox and change data capture all persist first, then act downstream. Stahl prefers streaming: push the message to a topic (Kafka, Azure Service Bus, Redis streams), return a GUID or token to the caller once it is on disk, then fan out to consumers that retry until eventually consistent, coordinated either by a saga orchestrator or by choreography where each service consumes, transforms and republishes. He discourages Outbox (two records written in one database transaction) because it uses the database as a queue, and praises Cosmos DB's change feed for CDC; he says SQL Server supports CDC in many SKUs but not the Azure cloud instance. Giard adds that dropping a message on a bus also frees the client quickly, which Stahl accepts as a speed and scalability benefit alongside safety.
  • Making downstream actions idempotent lets a failed process simply retry. Stahl contrasts an email send, which produces a second copy if repeated, with a database upsert given the same data, which ends in the same state; if the first step is idempotent, the whole process can be rolled back and rerun safely. He ties this to maintainability, since every unknown state and separate failure path makes troubleshooting harder.
  • Never add a new requirement onto an existing execution context. Bolting an email onto a working database-write API is the simplest thing that could work, but Stahl says the inconsistent states grow exponentially as steps reach five, six or seven; instead, subscribe to an event that already exists. He says this fits the single responsibility principle and lets each piece be deployed and scaled independently, e.g. when one is far more CPU-intensive.
GCastAzure Data Explorer Materialized Views [GCast 122]
  • Materialized views trade slower inserts for faster aggregate queries. An ADX materialized view stores a query's already-summarized result, so the count, min, max and average are computed in advance rather than at query time; each insert takes a performance hit to redo the aggregation. Giard says it is meant for aggregations run repeatedly, especially slow ones over millions or hundreds of millions of rows, not his 10-row demo table.
  • The view must be an aggregation query, or creation throws. The syntax is .create async materialized view with (...), then the view name, the source table and the query; Giard always creates them asynchronously. His demo summarizes a customers table's year-to-date sales by postal code (10 rows, six postal codes).
  • Backfill defaults to false, so existing rows are skipped. With backfill=false only data arriving after creation is summarized; Giard generally sets backfill=true to cover the whole table, warning that a large table with heavy calculations can take a long time to backfill. Other properties he points to are a docstring for a longer description and a folder for organizing many views.
  • The view is queried like a table and altered or dropped by command. It can be ordered, filtered and further summarized just like a table, and appears in the database's object list. .alter materialized view takes near-identical syntax to change the query (he drops the min column), and .drop materialized view removes it, after which querying it errors.
GCastAnalyzing Geographic Data with KQL [GCast 121]
  • geo_distance_2points gives the distance between consecutive positions. It takes the longitude and latitude of two points and returns meters. Giard sorts a vehicle-location table by vehicle ID and timestamp, pulls the previous row's coordinates with prev(), and gets distances such as 1,659 m and 260 m between readings; he notes this is straight-line distance, not the route actually travelled.
  • geo_point_in_polygon tests whether a point lies inside a shape. A polygon is a dynamic object built from an array of longitude/latitude pairs, with the first point repeated to close it; the function returns true or false. He drew a rectangle in Manhattan at geojson.io to get the coordinates, and two of one vehicle's readings (10:45 and 11:30) fell inside. He suggests uses such as detecting a restricted zone or leaving an area.
  • S2 cells divide the globe into rectangles at chosen precision levels. Per the s2geometry.io material he shows, level 0 is six cells about 7,800 km across and level 30 is about 7×10^18 cells of 8–9 mm; level 9 is roughly 18–20 km. geo_point_to_s2cell takes longitude, latitude and level and returns a cell token, so asking whether something stayed in the same cell can be faster than measuring how far it moved. At level 9 one vehicle's readings all shared a cell; at level 30 every reading was unique.
  • Pre-filtering by S2 cells speeds point-in-polygon queries on large data. geo_polygon_to_s2cells returns the minimum set of cells at a given level that covers a polygon; Giard filters rows to those whose level-12 cell is in that set before running geo_point_in_polygon. The result matched the unfiltered query, and he says it should run much faster on millions of points scattered worldwide, though his nine-row demo cannot show that.
  • Giard calls the geospatial function family a KQL strength. He points to related functions: distance from a point to a polygon, point-in-circle tests, and converting an S2 cell back to its central point. He says other query languages generally lack these.
GCastAnalyzing Time Series Data with KQL [GCast 120]
  • The prev function reads a value from the preceding row. It works only after an order by; the first row returns null. On drone telemetry logged about every 15 minutes, Giard extends a battery-life-change column as battery life minus prev(battery life), exposing how much charge dropped in each interval, which he says could be plotted against other factors. He says this is hard in SQL and most query languages; KQL also has a next function and a cumulative-sum function.
  • The bin function rolls rows up into fixed-size buckets. Used inside summarize ... by, bin takes a column and a size: a time span for time series, or a number such as every 5 or 10 for numeric data. Giard bins 15-minute readings by one hour to get one row per hour, as a way to avoid showing millions of rows.
  • arg_max keeps the whole last row of each bucket. Rolling up forces a choice of which value represents the bucket; besides averages, arg_max and arg_min return all the values of the row with the highest or lowest value, here the last reading in each hour. Giard's hourly results were not exactly on the hour because some sample data was missing.
grantsandersonSolving Wordle using information theory
synopsis

The video builds a Wordle solver around entropy, the expected number of bits a guess will reveal. A version that also weights common words and trades information against the chance of winning now averages about 3.6 guesses. Under perfect play an average of 3 is out of reach, because two guesses cannot supply the roughly 11 bits needed.

Scoring a guess. Rules of thumb like "hit frequent letters" ignore letter position, so he wants a number. Hitting a rare W with "weary" can cut about 13,000 allowed words to 58, but informative patterns are by nature unlikely. Information is defined as log₂(1/p), the count of halvings. Averaging it over all 243 patterns gives the guess's entropy: 4.9 bits for "weary", 5.8 for "slate".

Version one. The first bot picks the highest-entropy guess at every step, with every word equally likely. Over the 2,315 real answers it averages 4.124. It plays the endgame poorly, chasing information even when two candidates remain.

Weighting common words. A sigmoid over Google Books frequency rankings gives each word a probability of being the answer. Entropy then also measures the uncertainty that remains: four plausible words among sixteen matches come to 2.11 bits, not 4.

Version two. For each candidate, the bot weighs the probability that it is the answer (58% for "words" in the example) against the uncertainty left if it is not. The remaining guesses come from a function fitted by regression to version-one games; one bit, for example, needed about 1.5 more guesses on average. The average falls to about 3.6, with occasional losses.

The ceiling. Using the true answer list and a two-step search, he reaches about 3.43, with "crane" as the best opener. Two guesses yield at most about 10 bits, which leaves about one bit of uncertainty.

  • Information measures surprise: count how many times possibilities are halved. An observation with probability p carries log₂(1/p) bits, so a fact true of about half of five-letter words (containing an S) is 1 bit and one true of a quarter (a T) is 2. The log is used because information adds where probabilities multiply: a 2-bit guess followed by a 3-bit guess gives 5 bits.
  • A guess is scored by its entropy, the expected information over patterns. Each of the 3⁵ = 243 colour patterns is weighted by its probability times its bits. "Weary" gets 4.9 bits, since all-grey turns up about 14% of the time; "slate" gets 5.8, with all-grey at about 6%. Entropy rewards a flat distribution and many outcomes; a uniform spread over all 243 patterns would give the 7.92-bit maximum.
  • The same entropy measures remaining uncertainty once common words are weighted. He builds a prior from Google Books word frequencies, passed through a sigmoid on the sorted list so that common words all count as plausible rather than in proportion to frequency. Four likely words plus twelve one-in-a-thousand words give 2.11 bits, not 4. Likewise 526 matches at 8.02 bits behave like about 259 equally likely answers.
  • Maximising information alone loses to minimising the expected score. The pure entropy bot averaged 4.124 guesses over all 2,315 real answers. Version 2 adds the chance of winning outright: "words", at 58% likely, is valued as a win on that guess, otherwise as a later finish. The extra guesses are estimated by a function fitted to version-1 games. It averages about 3.6, but occasionally needs more than six.
  • Two guesses cannot supply enough information to average three. Using the true answer list and a two-step lookahead, his best average was about 3.43, and "crane" came out as the best opener. The list starts with a little over 11 bits of uncertainty, but brute force finds at most about 10 bits from two guesses. That leaves about one bit, so he argues an average of 3 is unreachable.
GCastKusto Query Language Basics [GCast 119]
  • KQL chains operators with pipes, starting from the table name. A table name alone returns every row and column; a | feeds that output into the next operator, as in a bash script. take 5 returns just a sample, which Giard uses to inspect a table's structure quickly, noting ADX limits how much data it will return. order by followed by take 3 gives a top-N query, here the top three customers by year-to-date sales.
  • order by sorts descending by default, unlike SQL. Ascending needs asc added. Giard says he writes desc explicitly anyway, because he expected SQL's ascending default when he started.
  • project limits columns, and later operators only see projected ones. where filters rows, for example last order date greater than a datetime of 2022-01-09. Because each step's output is the next step's input, a where on a column left out of a preceding project fails with an unknown-column error.
  • extend adds calculated columns without dropping the rest. A calculated column can be written inside project (profit as year-to-date sales minus year-to-date expenses) or with extend. Giard says extend is needed when one calculated column feeds another, and when you want every column plus the new one without listing them.
  • summarize aggregates, and explain translates SQL into KQL. summarize with the sum of year-to-date sales by postal code returns one row per postal code. Prefixing a SQL query with explain returns an equivalent KQL query, which Giard calls a great tool for SQL users learning KQL, though he says it is not one-to-one and suits simple queries.
Crosstalk SolutionsStarlink Premium?!? What's this all about??
  • Starlink Premium costs five times standard service. Starlink's announcement lists a larger dish with more than double the antenna capacity, 150–500 Mbps down, 20–40 ms latency, 24/7 priority support and delivery from Q2 2022, at a $500 deposit, $2,500 dish and $500 a month. Standard service is a $100 deposit, $500 dish plus $50 shipping and $99 a month.
  • The host judges Premium not worth the extra cost for homes. The extra is $400 a month. His own standard dish gets about 80–160 Mbps (162.9 Mbps that morning), fine for a home user. He sees little in priority support for a set-and-forget dish, having needed only about two email RMAs for a modem or power brick.
  • Unlimited service locations is the real business benefit. Managing many dishes from one account suits firms moving between sites, the host argues, such as construction crews on six-to-eight-month projects or a Crosstalk client, a TV and film production company that shoots at remote locations for a few weeks at a time.
  • The host suspects throttling and a cash grab. He asks whether standard users will be deprioritized to deliver Premium speeds. He notes buyers waiting since early 2021 may be overtaken, and that someone estimated the original dish cost $2,000–2,400 to make against a $500 price. Talk of SpaceX financial trouble he labels pure speculation.
  • A static IP and bridge mode would make Premium attractive. Standard Starlink uses CGNAT, which the host says hampers VoIP and inbound access to a NAS or intranet. Businesses also want the modem to bridge through to their own firewall, and neither feature had been announced at recording.
Crosstalk SolutionsPATCHBOX - Simplify Cable Management
  • Patchbox replaces loose patch cables with retractable cassettes. Its frame holds 24 cassettes of Cat6A UTP or STP copper or fiber, which extend to length and lock; the Patchbox 365 suits shallower network racks and the Patchbox Plus spans a 42U rack. The host configured 20 Cat6A and four OM4 multimode LC-LC cassettes. Patchbox, an Austrian company, sent him one unit plus a second for a giveaway.
  • A fully populated unit costs several hundred dollars. A Patchbox 365 with Cat6A cassettes is $540 from Synergy Micro Solutions, the only US distributor the host found. Built piecemeal, cassettes are $17 each for Cat6A and $20.50 for fiber on top of the frame. He also liked Patchbox's Setup.exe arm, a temporary shelf for seating heavy servers.
  • The short-depth model would not fit his shallow test rack. In the 450 mm-deep 15U rack the Patchbox 365 needed about 1.5 cm more depth and stuck out enough to hit the door, so he moved it to his deeper production rack. There its side-mounted cable management arms do not fit because the rack's sides are closed.
  • The host calls it overkill for a small rack. It works best beside a 24-port patch panel. In his rack it gives exact-length runs to four link-aggregated NAS ports, an EdgeRouter 4 and Raspberry Pis, and serves as a quick temporary patch for adopting new UniFi gear.
  • The price is justified only by admin time in large racks. Against the cost of 24 plain patch cables, the host argues the savings come from labelled cassettes, tracing a link with a tug, and always having the right cable length. The heavy packaging he received was an ordering mistake; Patchbox says units normally ship pre-assembled in one box.
GCastManaging Azure Data Explorer Tables with ADX Commands [GCast 118]
  • Production tables should be scripted with commands, not wizards. That is Giard's case for this episode's Azure Data Explorer commands. He adds a database (gcastdb, all defaults) from the cluster's overview blade, then works in the fuller web UI at dataexplorer.azure.com, reached from the database's query blade via "Open in Web UI". Commands run with the Run button or Shift-Enter. He mentions ARM templates and the Azure CLI as other ways to automate, possibly for a later video.
  • Creating a table means declaring an enforced schema. .create table takes comma-separated name:type pairs, here string, datetime and decimal columns for customers. Giard says ADX resembles a NoSQL store in not enforcing relationships or primary keys, but each table's schema is enforced.
  • Inline ingestion takes comma-delimited rows in column order. .ingest inline into table followed by one row per line inserts data typed in directly; values must match the column types, using the built-in datetime() function for dates. Giard pastes 10 rows of well-known technologists as sample customers.
  • Re-running create table on an existing table silently changes nothing. Adding a column to the .create table statement and running it again appears to work, but the column is not added because the table already exists. .create-merge table, with almost the same syntax, creates the table if absent or else adds the new columns.
  • Renaming a column does not break positional ingestion. .rename column changed postal code to zip code, and a later inline ingest still loaded correctly because the rows do not name their columns.
Technology and FriendsJeff Blankenburg on AI Assistants in the Future [TECHNOLOGYANDFRIENDS 692]
  • Future assistants will act on your behalf without being asked. Blankenburg, who joined the Amazon Alexa team just over five years ago, says the Star Trek computer analogy is too narrow and compares the future to a human assistant who brings the coffee before the 10 o'clock meeting unprompted. His example is a notification that a dental appointment is booked for Tuesday at 9 a.m., because the system knows your calendar, the dentist's, the six-month interval and your healthcare provider; he says all of this is possible today and the obstacle is context.
  • Companies hoarding data in walled gardens will make this hard. Blankenburg says firms keep data and APIs to themselves because "data is king". A grocery chain told him it has the store-layout data to sort a shopping list into walking order but will not share it, because it wants shoppers to get lost and find products they would not otherwise buy.
  • An assistant could manage finances, not just pay bills. Blankenburg imagines it moving money to savings, a 401k and IRAs first, deciding which bill can wait for the next paycheck, and reporting that it refinanced your mortgage and saved $80 a month; he leaves open whether a person or an AI drawing on thousands of others' outcomes decides better. Giard says he already automates most of this but sets the rules in advance and keeps changes, such as a bonus, as his own decision.
  • Trust is foundational, and he argues users should own their data. At a healthcare startup before Amazon, Blankenburg built a medical record system around a single patient-owned record, shared selectively (a psychologist need not see unrelated conditions), and he proposes extending that model to all personal data. Giard raises privacy and an employer seeing a past cancer diagnosis; Blankenburg argues that, as with cell phones, people accept tracking once utility outweighs the concern, and concedes to Giard that it happens gradually, not instantly.
  • Amazon builds around things customers will never ask for. Blankenburg cites Jeff Bezos's "absolute truths": no one asks for slower delivery or longer checkout, which he says led to fast delivery and Amazon Go stores. He says his team raced to buy a sandwich, snack and drink in under 10 seconds, and his attempts to fool the system by hiding products in his coat or moving them around the store failed; he has heard unconfirmed stories, "not internally", of the technology going into full grocery stores.
Crosstalk SolutionsUniFi Dream Machine SE - Unboxing and Setup
  • The UDM SE is worth its premium only for PoE or faster-than-gigabit internet. At $499 against the UDM Pro's $379, the host says the extra $120 pays off if you want to power a few cameras, access points or VoIP phones without a separate PoE switch or injectors, or if your connection is 1 Gbps or more; his 600 Mbps plan tested at 712/42 Mbps.
  • The SE fixes the UDM Pro's most-requested gap: PoE on the LAN ports. All eight front ports are gigabit RJ45; two are 802.3at PoE+ and six are 802.3af PoE. The WAN port moves from 1 Gbps to 2.5 Gbps, the two 10G SFP+ ports remain, and the power cord now locks in, which the host's older UDM Pro lacks.
  • The built-in 128 GB SSD is too small for real Protect use. The host says even one or two 1080p cameras fill it quickly and recommends adding a drive of around 8 TB (he guesses that is the maximum), such as a WD Purple. With only the internal SSD, Protect offered no always-on recording, just "never" or "detections", in his test.
  • Opened up, the SE carries a much larger power section and a separate PoE board. Side by side with the UDM Pro, he found a bigger power board (he assumes for PoE), a raised PoE management board, a Kingston M.2 SSD and a revised display board; the airflow layout is unchanged. He notes he is not a component expert.
  • He disables automatic updates during setup and runs them manually. Setup works via the UniFi app or 192.168.1.1; the default is a daily 3 a.m. update check, which he turns off so that any breakage can be tied to an update he just ran. Updating the base UniFi OS on his unit also updated Network and Protect.
Technology and FriendsArthur Doler on Giving and Receiving Feedback [TECHNOLOGYANDFRIENDS 691]
  • Receiving feedback is the neglected half of the skill. Doler says manager training concentrates on giving feedback and "shoving" it at people, so his eight-hour CodeMash workshop centres on how brains receive it, which he argues also makes people better at giving it. He works at Aviture, a software consulting firm in Omaha, Nebraska, coming up on eight years in March.
  • Coaching feedback drowns out appreciation, so the feedback sandwich backfires. Doler separates appreciation (which must be sincere, specific, and in a form the person values; calling a stage-shy person up at an all-hands is a punishment), coaching, and evaluation, and says each is "louder" than the one before. Wrapping coaching in praise means the praise is not heard, and employees learn to brace for a hit whenever they are appreciated.
  • Deliver the evaluation first and discuss it days later. Doler says a score is the loudest feedback, so coaching given in the same meeting goes unheard while the employee chews on the rating. He suggests emailing the evaluation and meeting about two days later, once the person has had the argument in their own head.
  • Feedback labels like "be more assertive" must be unpacked into behaviours. Doler says words such as assertive are categories each person builds differently, so someone can act on their own idea of assertiveness and go the wrong way. Ask what the giver means and drill down to the data behind the label, such as a salesperson handing over a card, mentioning the 30-day guarantee and asking for the sale, rather than cornering the customer.
  • Truth, relationship and identity triggers block feedback from landing. Doler says people discount feedback by finding fault with it or the giver (a manager who does not know React, a jerk's tone), fixate on what it says about the relationship, or let it flood a self-image built on being a good developer. He recommends a sturdier self-story ("a developer who tries hard" rather than "smart"), and in the workshop he deliberately manipulates the Lego-building instructions so partners' feedback provokes these triggers in a safe setting.
Technology and FriendsChris DeMars on Accessibility [TECHNOLOGYANDFRIENDS 690]
  • Web accessibility covers everybody, not only blind or deaf users. DeMars lists partial vision loss and colour blindness, partial deafness, cognitive disabilities such as dyslexia and autism, mobility conditions such as cerebral palsy, arthritis and MS, temporary injuries, and hidden ones such as his own diagnosed health anxiety. He argues anyone with a hand in a web or software application, back-end developers and VPs included, should care; his own motivation came from a Marcy Sutton talk and from his mother, who has multiple disabilities.
  • Colour contrast and alt text are the low-hanging fruit. DeMars says light grey on white fails an audit, and a larger font can make it pass while the contrast is still poor. Alt text should describe the image specifically (which car, which dog) without running to a paragraph; a decorative image needs no text, but the alt attribute must still be present, as an empty string, or automated audits flag it.
  • Never remove the focus ring without restyling it back in. DeMars says designers and marketing often ask to remove the browser's default ring as ugly, which breaks the experience for keyboard-only users, such as someone with an injured hand, and for screen-reader users who are told which element has focus. Restyle it to match the brand rather than dropping it.
  • Captions serve hearing loss; plain language and font choice serve cognition. DeMars says audio and video without captions or transcripts are unusable to deaf users, and auto-generated captions are better than nothing. For cognitive disabilities he advises avoiding long technical jargon, and says dyslexic users read slanted or slightly wavy fonts more easily, which makes Comic Sans a good fit.
  • Automated tools catch only part of the errors, so test manually too. DeMars uses axe from Deque, available in CI/CD as axe-core and as a free browser extension, which he puts at catching 20% to 50% of automated accessibility errors; the rest needs screen readers, keyboard-only navigation and contrast simulators. Lighthouse runs axe-core underneath and gives a score out of 100, and he warns that its results can differ from the extension's where enterprises pin browsers several versions behind.
Network Chuckcreate the ULTIMATE hacking lab in 5min!! (Docker Containers STREAMING Kali Linux to your browser)
synopsis

By the end, Chuck has a working Kasm Workspaces server that launches disposable, isolated Kali Linux, Ubuntu, or browser sessions in seconds, lets him test hacking tools inside a container instead of his own machine, and deletes the evidence when he's done — free, on the community edition.

What Kasm does. Kasm streams Docker containers to any browser using its open-source KasmVNC engine. Chuck's core use cases are a fresh Kali Linux instance for hacking tests and opening risky links inside an isolated container tied to the server's IP, then trashing the session.

Setting up the server. Minimum specs: 2 vCPUs, 4 GB RAM, 50 GB storage, cloud or on-prem. Chuck provisions a $20/month Linode 4GB plan on Ubuntu 20.04 — 21 failed him — while Cameron mirrors it on Proxmox; Cameron creates a swap partition, downloads and unzips the installer, then runs it with sudo bash for admin credentials. Kasm Workspaces sponsored the video.

Isolated browsing. Kasm's Chrome extension adds a right-click "open in Kasm" option that launches a chosen default image — Chuck picks Brave — for any link, keeping cookies, history, and IP address off his machine; deleting the session leaves no trace.

Enabling Kali and going root. Kali ships as a disabled image; Chuck enables it in the admin panel and adds {"user": "root"} to its Docker run config, then runs su - inside to get root.

Users, filtering, and limits. Chuck adds accounts for his daughters and a web-filter policy denying all sites by default except a whitelisted domain, with per-user activity visible in the admin dashboard. The free community edition matches nearly all Enterprise features but caps five sessions and withholds branding and web categorization. Cameron notes businesses use Kasm to replace VDI tools like Citrix, with no endpoint installs, nightly-updated images, and DevOps APIs.

  • Kasm Workspaces streams isolated, ephemeral Docker containers straight to a browser. Chuck demos launching Chrome, Kali Linux, or Ubuntu instantly, then deleting the session entirely so a risky link or malware never touches his own machine, IP address, cookies, or history.
  • Kasm's server requirements are modest enough for a budget VPS. Chuck sets his up on a $20/month Linode 4GB plan (2 vCPUs, 4 GB RAM, 50 GB storage) running Ubuntu 20.04 — he warns 21 didn't work — while Cameron mirrors the same specs on a Proxmox VM at home; Kasm Workspaces sponsored the video.
  • Kali Linux ships disabled, and root access needs a manual JSON tweak. In the admin panel's image editor, Chuck checks the disabled Kali image on and adds {"user": "root"} to its Docker run config, then runs su - once inside to get full root.
  • The free community edition matches almost every Enterprise feature. Chuck notes it's capped at five simultaneous sessions and excludes branding and web categorization; he demonstrates adding user profiles for his daughters and a web-filter policy that denies all sites by default except a whitelisted domain, with per-user browsing tracked in the admin dashboard.
Technology and FriendsGreg Huber on Maker Space [TECHNOLOGYANDFRIENDS 689]
  • The CodeMash Makerspace began as an experiment and will continue. It started at the 2020 conference. Huber, an IT director at agricultural supply-chain company The Andersons and a CodeMash volunteer for about 10 years, says the space returned for its second year after good feedback. He argues that, as IoT and operational technology converge with software, companies want people who mix electronics with software, which makes it a skill worth learning even if less mainstream than the latest JavaScript library.
  • Soldering mistakes become lessons in desoldering. Jamie Hampton runs a guided or self-paced learn-to-solder session on a beginner kit that blinks LEDs; Huber says attendees who put transistors in backwards or resistors in the wrong place are then taught to desolder or use hot-air rework. His daughter, on staff for the first time, built the beginner kit one day and the advanced UFO board, with its surface-mount decade counter and 555 timer, the next.
  • A conference demo can start a child on a years-long path. Huber tells of Andrew Fuller, who at about nine saw Bill Steele printing chess sets on a 3D printer at CodeMash, later got a printer, learned CAD, and at 19 exhibited a Portal 2-inspired piece and gave a kids' session on 3D printing.
  • A tightly constrained hobby-built printer prints far faster. Huber says his Voron 0.1 prints roughly two to three times faster than his other printers at high quality, against about three and a half hours for a controller case on a stock machine. He describes the workflow as designing in CAD, slicing layer by layer, and sending G-code that the printer processes in real time.
Scott HanselmanMy Top Tips for using Windows Terminal like a Pro
  • Modifier-clicking Settings opens the raw JSON files. Hanselman shows that Shift-clicking Settings opens settings.json, the text version of the graphical settings, while Alt-clicking opens defaults.json; he notes the editor flags invalid entries, so "don't be afraid" of breaking the file.
  • Tabs can be renamed and coloured to mark environments. Right-clicking a tab renames or recolours it (his example labels one "production" as a warning), and the same tab colour can be set permanently per profile in the JSON, where VS Code supplies a colour picker.
  • Mouse and drag-and-drop shortcuts are commonly overlooked. Ctrl+scroll zooms the font for the session and Ctrl+Shift+scroll changes background opacity; a "use acrylic in tab row" setting, which he describes as not quite official yet, makes the tab bar transparent too. URLs in output are Ctrl+clickable, and dropping a folder onto the tab bar opens a tab in that folder.
  • Experimental HLSL pixel shaders restyle the whole terminal. Beyond the built-in and custom colour schemes and a scan-line retro effect he finds "a little bit in my face", an experimental pixel-shader path setting with no UI yet loads a shader per profile. Editing one (turning tint off, a black-and-white variant) crashed the terminal once, which he blames on his own shader rather than the terminal.
  • Rebind new tab and close pane to browser keys. He recommends Ctrl+T and Ctrl+W in place of the defaults Ctrl+Shift+T and Ctrl+Shift+W, so tabs and panes open and close one-handed; he also binds split-pane keys (Ctrl+Shift+minus for horizontal, pipe for vertical), though he is unsure of the default split shortcut on camera.
Scott HanselmanExploring COVID Vaccine response in your Lab with Dr. W. Shawn Carbonell, MD, PhD - Hanselminutes
synopsis

Carbonell, an MD PhD who runs Brazen Bio and the nonprofit Cure Glioblastoma, ends up arguing that his own lab data vindicate the vaccines: a booster raised his antibodies about fourfold, the science was never rushed, and an annual combined flu and COVID shot is the likely destination, though not yet.

Teaching science on TikTok. TikTok recruited him into its educational accelerator after years of Instagram micro-blogging. His most viral, July's four-month data, reached 16.6 million views and over 20,000 mostly negative comments; he stepped back for a month, and stays for viewers who say he is why they got vaccinated.

The assay. Nervous about mRNA himself, he has tested his serum since his first dose on Valentine's Day 2021, noting self-experimentation is normally barred and he can do it as CEO. His sandwich ELISA layers recombinant spike protein, diluted serum and a marked detection antibody in 96-well plates; a standard curve gives the reference, and acid stops the reaction, turning blue wells yellow for the plate reader. Hanselman restates it as a gradient with a fixed y-axis and a timed stop.

What was rushed. Regulation and logistics, he says, not science: mRNA has decades behind it, first as a cancer vaccine, so design took about a week after sequencing. His own brain-cancer drug, from 10 years' work, is still in phase one.

Waning and the booster. Levels fell below 50 by five months, which he calls the body not wasting resources. The booster gave a roughly 400% rise, four times rather than 400 times, more than he would have bet; he credits memory B cells and says both those and circulating antibodies matter. Against a reported 95% efficacy, more has diminishing returns but could decide hospitalisation.

Outlook and his own work. He expects another booster in 2022, possibly modified, depending on Omicron, before any yearly combined shot. His glioblastoma drug has enrolled several patients at Moffitt Cancer Center, and Brazen Bio gives STEM creators equity.

  • He measures his own vaccine antibodies with a sandwich ELISA. Carbonell, an MD PhD who co-founded Brazen Bio and the nonprofit Cure Glioblastoma, says he began testing his serum because he was himself nervous about mRNA vaccines; he coats 96-well plates with recombinant spike protein, adds diluted serum and a marked detection antibody, reads absorbance against a standard curve, and stops the reaction with acid, which turns blue wells yellow. He caveats that self-experimentation is normally not allowed and he can do it as CEO.
  • Only regulation and logistics were rushed, not the science. He says mRNA technology has existed for decades, first tested as a cancer vaccine, so a design followed within about a week of sequencing; everything after was manufacturing, logistics and regulatory. By contrast his own brain-cancer drug, from about 10 years of work, is still in phase one.
  • The booster raised his antibodies about fourfold, beyond his expectation. He measured roughly a 400% increase over post-second-dose levels, stressing that this is four times, not 400 times, after levels had waned below 50 by five months. He attributes the jump to memory B cells, calls waning normal resource-saving, and says gains have diminishing returns against a reported 95% efficacy at six months but could still decide hospitalisation.
  • He expects an eventual yearly combined flu and COVID shot. Carbonell says many groups are working on one but it is not yet feasible mid-pandemic; his forecast is another booster in 2022, possibly modified, depending on how the Omicron variant goes.
  • Viral reach brought mostly hostile comments but real persuasion. His most viral TikTok, July's four-month data, drew 16.6 million views and over 20,000 comments he believes were mostly negative, and he stepped back for a month. He stayed for the dozens of "you're the reason I got vaccinated" comments; Brazen Bio now signs STEM creators for equity, and his glioblastoma drug has enrolled several patients in a phase one trial at Moffitt Cancer Center.
Scott HanselmanMy WebAPI broke! Using Azure Functions, C#, and Blob Storage w/ JSON in a new format for my Web App
synopsis

Hanselman restores azurefriday.com after its upstream API vanished by putting a scheduled Azure Function between Microsoft Docs and the site: it reshapes Docs' paged data into a single JSON blob in Azure Storage, so the site itself did not change. His point is that the work was mostly trade-offs, not code.

What broke. The site cached one JSON dump of every show from Channel 9's API. When Azure Friday moved to Microsoft Docs, which also cut the catalogue from about 700 shows to roughly 350, the site showed "error loading".

The new API. Docs pages at most 30 results and returns only title and URL; thumbnails and video links need a details call. Batching 30 IDs a call still means about 25 calls instead of one, which he does not want his website or its visitors' browsers making.

The design. A timer-triggered function, described as a cron job in the cloud, makes those calls and writes the JSON he wants to a public, nearly free blob. He argues this decouples data shape from the site, could feed RSS or an app later, and need only be as fresh as a twice-weekly show.

The code and deployment. A C# loop pages until an empty page, collects episode records, then fills thumbnails and YouTube URLs from batched details calls. One dump method serves a console app and the function, which runs daily at 3 AM with run-on-startup on (recommended off), takes its connection string from configuration, and uploads as application/json, not octet-stream. He tests locally with Functions Core Tools, publishes from Visual Studio, and plans GitHub-driven deployment and a fix for his podcast site.

  • azurefriday.com broke when its upstream API moved. The site, built with a friend, cached a single JSON dump of shows from Channel 9's API; when Azure Friday moved to Microsoft Docs it showed "error loading". Docs also pruned the catalogue from about 700 shows to roughly 350.
  • The replacement API turned one chunky call into many chatty ones. Docs pages results at a maximum of 30 and returns only title and URL, so thumbnails and video links need a separate details call; batching 30 IDs per call still means about 25 calls where one used to do, which Hanselman says is not his website's job.
  • A scheduled function reshapes the data into blob storage. His fix is a timer-triggered Azure Function, described as a cron job in the cloud, that calls Docs, projects the result into the JSON shape he wants and writes it to a public Azure Storage blob the site reads. He argues this decouples data shape from the site, costs pennies, could later feed RSS or an app, and only needs to be as fresh as a show released a couple of times a week.
  • Shared C# code runs as both console app and function. The code loops pages until one comes back empty, fills a dictionary of episode records, then fills in thumbnails and YouTube URLs from batched details calls; the same dump method backs a console app (about 3,500 lines of output) and the function. The function runs daily at 3 AM with run-on-startup on, which he notes is recommended off, takes its connection string from configuration, and uploads with an application/json content type rather than octet-stream.
  • Most of the work was trade-offs, not code. He lists alternatives (an ASP.NET background worker, a Logic App, a batch file on his own machine) and says the thinking was about availability, error handling and data shape. He published straight from Visual Studio for the demo and plans continuous deployment from GitHub and a similar fix for his podcast site next.
Crosstalk SolutionsG4 Doorbell Pro - Finally Announced!
  • Ubiquiti's official announcement confirms the leaked G4 Doorbell Pro's dual cameras. Per the announcement video the host reacts to, it pairs a 5 MP main camera with a downward-facing package camera; he reads it as the main camera doing person and vehicle detection while the package camera does motion only, and judges its wide view big enough for most porches.
  • The reader is fingerprint plus NFC, so it should pair with UniFi Access. Ubiquiti says you can unlock the door by finger or card swipe but does not say how it ties to a lock; the host suspects Ubiquiti smart locks are coming soon, while admitting he has no inside knowledge, and wonders whether it works directly with Access-controlled door strikes.
  • Power options now include PoE via an adapter, answering earlier complaints. It runs from existing doorbell wiring, USB-C, or a USB-C-to-Ethernet PoE adapter; the host defends the original's lack of PoE because few homes have Ethernet at the door, and notes the adapter shown is bulky to leave inside the wall.
  • Other announced features: custom screen messages, chime support, flashlight and weatherproofing. The 1.3-inch colour screen shows custom messages (the promo also shows weather), it works with mechanical and digital chimes, has IR night vision and a motion-triggered white LED, and two-way audio.
  • At $299 the host calls it reasonably priced, and it sold out fast. It went on sale in Ubiquiti's Early Access store around 7:30 a.m. Hawaii time and sold out in under 20 minutes; he notes EA pricing is subject to change and says he would have bought one to replace his G4 Doorbell.
Crosstalk SolutionsUniFi Protect AI 360 Camera - Unboxing, Setup, and Testing
  • The AI 360 is a top-down ceiling camera the host loves for wide spaces. It is UniFi Protect's first 360 camera: 5 MP, a square 1920x1920 fisheye image at 30 fps, 802.3af PoE, IPX4 and IK08 rated, $299 from Ubiquiti. He sees it suiting retail stores, cash registers and mechanics' shops.
  • De-warping works on live view and on recorded playback. Using arrow keys or the mouse he could pan around footage already recorded and follow a subject, or look somewhere other than the main action; a chosen view can be saved into a live view.
  • Software limits at launch: one shared angle, and no de-warp on Viewport. Whatever direction you set in one live view carries over to all live views, and the UniFi Viewport shows only the raw fisheye circle; he hopes firmware fixes both.
  • Smart detection only appeared after reopening the camera's settings. The host also gives his fix for a UNVR that stopped person and vehicle detection: add a new smart detection zone covering the whole frame, set sensitivity to about 80 with both types selected, then delete the default zone.
  • The vandal-resistant dome cover made no visible difference to the picture. The box includes a second, IK08 dome cover and a rubber wrench for swapping it; side-by-side screenshots looked almost identical. Adoption was automatic, but the firmware update took five to six minutes, longer than any camera he has seen.
Crosstalk SolutionsInsty Connect Mobile Internet Router - The Best RV WiFi Solution?
  • The host rates Insty Connect well for RVers who need fine control. He likes that it gives nomadic users tools to tune their signal, built by an RV owner unhappy with existing products; it is a small company with 3D-printed antennas. The base 4G package (router, LTE modem, 15 ft USB cable, omnidirectional Angel Wings antenna) is $549; a 5G version was expected in Q1 2022.
  • The directional Binoculars antenna roughly doubled his roadside speeds. Off Interstate 5 in Oregon, under a quarter mile from a tower, his iPhone 13 on LTE got 4.7/4.7 Mbps; Angel Wings gave 19.8/8.8 Mbps, and Binoculars (about $250, LPDA antennas) pointed at the tower gave almost double. He expects a bigger gain farther from towers.
  • Tower and band locking lets you hold the best connection found. The wizard lists nearby towers and bands with RSRP/RSRQ colour-coded; you pick an all-green option and lock it so the modem does not drift. Towers can be cross-referenced on CellMapper to aim the directional antenna.
  • In the field it failed to see the SIM until factory reset. It worked perfectly in his office (about 55/17.5 Mbps on Angel Wings indoors), but on the road it lost the SIM and internet; he suspects the cold, possibly the SIM, and a reset and rerun of the setup wizard fixed it.
  • Crosstalk sells the SIMs he recommends, AT&T-backed and unthrottled. The host advises a major-carrier SIM and pitches Crosstalk's own unlimited, unthrottled AT&T-based SIMs, the one he used in testing (it registered as FirstNet LTE). Setup is phone-friendly via an open "Insty Connect Setup" SSID that the wizard removes at the end; run a software update first.
Scott HanselmanBad Date Comparisons in C# - if (DateTime.Now.ToString() == "01/01/2022 00:00:00")
  • The brand's New Year snippet could never have run true. The code, tweeted by an unnamed popular brand, compared DateTime.Now.ToString() to "01/01/2022 00:00:00"; running it on his en-US machine (recorded 1/3/2022 on the US west coast) shows the culture's short-date format omits leading zeros, so the strings could not match even at midnight.
  • Culture and time zone are hidden inputs to date code. ToString draws its format from Windows region settings, and Now uses the ambient time zone; switching to UtcNow already returned the next day. He advises doing date comparisons and arithmetic in UTC, warning that code that works locally fails on a server set to UTC.
  • Compare dates as dates, never as strings or ints. He suggests constructing a new DateTime(year, month, day) or using ParseExact, since ordinary parsing has the same implicit inputs (month-day versus day-month). Dates should be stored and passed as dates, written as ISO 8601 if they must be strings, and converted to the user's format only at display.
  • The output line shows signs of being pasted from Word. He points out an escaped quote the string did not need, possibly a JavaScript habit, and a single Unicode ellipsis character in place of three dots, which he and Safia Abdalla both noticed; it rendered oddly when run.
Crosstalk SolutionsUbiquiti's 6U Toolless Mini Rack - Unboxing, Setup, and Review
  • The rack genuinely needs no tools to assemble or load. The Ubiquiti U-Rack-6U-TL lists at $249 and ships with a blank 1U 24-port patch panel, locking casters and handles; side rails push into slots and carry captive screws, with engraved alignment lines, that also take Phillips or flathead drivers for snugging.
  • It fits only newer UniFi hardware, not mixed racks. The captive screws match newer UniFi rack-ear patterns; older UniFi gear with built-in ears will not mount, and the host's QNAP NAS sat loose because its length and ear pattern don't match. Only non-UniFi gear with identical width and screw pattern would fit.
  • Short-depth UniFi gear can also mount at the rear. The back rails carry captive screws too, so equipment designed to go in either the front or rear of a rack can be secured from behind.
  • Desktop use works but the feet may scratch. With the casters removed, hard, non-rubberized plastic nubs remain underneath and can mark wood surfaces; the host knows of no wall-mount option, though a shelf would do.
  • The host sees it suiting all-UniFi networks and customer staging. He suggests it for matching UniFi aesthetics and for staging small-business or prosumer deployments, not for racks mixing in a NAS, EdgeRouter or pfSense box. The patch panel takes standard keystone jacks; he wishes Ubiquiti sold silver keystones or blanks, a larger (e.g. 15U) version, and advises removing casters once wall cabling is punched down.
Crosstalk Solutions13 - Updating the UDM-Pro - UDM-Pro Complete Setup
  • Update UniFi consoles now because of Log4j. Recording in mid-December 2021, the host urges updating any UDM Pro, Cloud Key or hosted controller, and specifically getting UniFi Network to 6.5.55, which he says addresses two separate Log4j vulnerabilities.
  • Back up first, then update UniFi OS before the apps. He downloads a configuration backup from Advanced settings, updates UniFi OS from 1.10.0 to 1.10.4 (the console reboots, which he watches with a persistent ping -t to 192.168.1.1), then updates Network, Protect (to 1.20.1, under two minutes), and even uninstalled Access and Talk so they're current when installed.
  • Stay on the official release channel in production. The release-candidate channel carries builds still being tested, and the beta channel is bleeding-edge software that has not been properly QA'd and may cause problems.
  • The host turns auto-update off so breakage is traceable. If an unattended update breaks something, he might not realize the update was the cause and would troubleshoot the wrong thing; he prefers manual updates followed by checking that each app still works.
  • New app versions can bring device firmware updates. After the Network update his USW Pro 24 PoE showed a firmware update, which he applied; the UniFi OS update also added UID, a beta identity-as-a-service access-control app he has not yet explored.
Crosstalk Solutions27 - Queues - FreePBX 101 v15
synopsis

The host builds two FreePBX call queues, sales (5050) and customer service (5051), and finishes with BLF buttons on the phone for logging agents in and out and pausing them, so that no call is ever stranded and calls reach agents as efficiently as possible. His rule: queues are for when calls outnumber agents, and ring groups are for when agents outnumber calls.

General settings. A caller ID prefix ("Sales:", "CS:") and alert info tell agents which queue a call came from. He uses round robin with memory, turns autofill on so waiting callers ring agents in parallel instead of in line behind the first call, and skips busy agents only when they are on queue calls. Calls are recorded, and failover goes to the department voicemail.

Agents. Static agents always ring. Dynamic agents log in and out, and priority values hold back higher-numbered agents until all priority 0 agents are unavailable.

Timing and capacity. Max wait time (strict or loose), a 10-second agent timeout with 5-second retry, wrap-up time for CRM notes, and auto-pause for agents who walk away. Max callers, plus join-when-empty no and leave-when-empty yes, send calls to failover when no one can take them. Position and hold-time announcements, an IVR breakout, and an SLA service level for reporting are optional. He passes over iSymphony because he dislikes its licensing.

Agent controls. Feature code *45 logs an agent in or out and *46 pauses, either across all queues or with extension and queue variables. These are hard to teach, so he adds BLF keys using the __SIP_USER_1__ template variable, which turn red when logged in or paused. He says only Crosstalk/Clearly IP phones, which his firm sells, support this, not Yealink. A test call shows auto-pause triggering on an unanswered call.

  • Use a queue when calls outnumber agents; otherwise a ring group. Both distribute calls to several people, but queues add ring strategies, agent login and pausing, and capacity and timing limits; the host builds a sales queue (5050) and a customer service queue (5051), each failing over to its department's voicemail with the unavailable greeting.
  • Turn on autofill so later callers don't wait on the first. With autofill off, a second caller sits until the first is connected, even while the first rings agent after agent; with it on, each waiting call rings the next agent in the round-robin-with-memory order. Skip busy agents is set to "queue calls only" so personal or internal calls don't block queue calls.
  • Static agents always ring; dynamic agents log in, with priorities. A dynamic agent such as a manager can join only for overflow, and priority 1 agents get calls only when every priority 0 agent is busy, paused or unavailable. The host sets a 10-second agent timeout with 5-second retry, 10-second wrap-up, and auto-pause so an absent agent stops adding 15 seconds per caller.
  • Timing and capacity rules decide when callers hit failover. Max wait (e.g. 5 minutes, strict or loose), max callers (e.g. 10, then the 11th goes straight to voicemail), and the host's usual join-when-empty no, leave-when-empty yes keep calls from stranding; position and hold-time announcements, an IVR breakout and an SLA service level for reports are also available. He declines iSymphony over its licensing.
  • BLF keys beat feature codes for agent login and pause. 45 logs in or out (optionally 45extqueue) and *46 pauses, but users struggle to learn them; a BLF key using the __SIP_USER_1__ template variable shows status by colour. The host, whose firm sells them, says this variable works only on Crosstalk/Clearly IP phones, not Yealink, and cites it as why he promotes them.
Technology and FriendsTudor Damian on Pandemics and Security [TECHNOLOGYANDFRIENDS 688]
  • Companies knew remote work was possible but not at this scale. Damian says sending whole staffs home at once strained internet links, data-centre bandwidth and the devices handling secure traffic, and companies licensed for a set number of concurrent VPN connections had to buy more; IT staff also had to support people using home Wi-Fi and home setups for the first time.
  • Attackers used COVID as a ready-made pretext for phishing. From March–May 2020 Damian saw phishing themed on the pandemic, such as links about doing groceries under lockdown or claiming April COVID benefits; he argues the fear was already built in, so attackers barely had to work on the message, and the more personal or serious the hook, the more people click.
  • State-sponsored supply-chain attacks grew in size and complexity. Damian says from about the second half of 2020 attackers targeted security vendors and software used by managed service providers, gaining access to every customer at once; he cites NotPetya, spread through the update mechanism of a Ukrainian accounting package, infecting perhaps 80% of its SMB customers within hours (he says he does not recall exact numbers). IT staff working from home added hours or days to incidents needing someone on site.
  • The pandemic pushed adoption of zero trust and "assume breach." Damian describes zero trust as explicitly verifying identity, location, device health and the workload requested, flagging anomalies (an Excel user at 3 p.m. Wednesday versus two terabytes downloaded at 2 a.m. Saturday) and granting just-in-time, just-enough access that is revoked automatically. He says attackers on average keep access for six to nine months before detection because organisations are not looking for signs of breach, so they should plan how to detect, block and remediate one. He also says companies that adapted quickly survived, often by compressing digital-transformation plans from months or years into weeks.
  • Security work is shifting from reactive to proactive. Damian describes three waves of GDPR demand: panic in the six months before it took effect, renewed requests once the first large fines hit, and a third driven by remote access to data; he argues the principles should apply to all data, not just personal data. He says roughly 90–95% of security requests used to follow a breach, customer demand or compliance requirement, and he now sees more companies coming proactively. Giard frames this as companies finally treating the risk seriously rather than checking boxes after a cookie-banner first wave.
Scott HanselmanConnecting USB devices to WSL on Windows with usbipd-win for Linux IoT device support!
  • USB devices can now be used inside WSL through a third-party project. Loewen, the WSL product manager, says the open-source usbipd-win, with contributions from a Visual Studio team intern, unblocks USB workflows now, while better-integrated USB support in WSL itself is "longer term". Hanselman discloses that he sponsors the project's maintainer, who is based in the Netherlands, on GitHub.
  • It tunnels USB traffic over IP without leaving the machine. The tool wraps USB packets in IP and unpacks them in a Hyper-V guest or WSL2, and Hanselman calls it "a wormhole for USB". Loewen explains that WSL depends only on the Virtual Machine Platform component, a subset of Hyper-V, which Hanselman notes means it runs on Windows Home.
  • Linux flashing instructions now work without fighting Windows drivers. Hanselman shows a Wilderness Labs Meadow board, an STM32 microcontroller, in DFU bootloader mode with no driver installed. usbipd wsl list showed it at bus ID 9-4, and usbipd wsl attach asked for a sudo password and handed it to Ubuntu, where lsusb saw it. meadow flash os then succeeded once it was run under sudo with its full path. He says the setup took him about five minutes.
  • Serial COM ports remain unsupported, so that work stays in Windows. When the flashed board rebooted it came back as a USB serial device on COM9 in Windows, and Ubuntu lost it. Hanselman went back to Visual Studio in Windows for the app, and both speakers raise COM port support only as a possibility for the future.
  • The subsystem now ships separately from Windows, for faster updates. Loewen says WSL is available in the Microsoft Store, with a new logo. It is the same runtime and works the same way, and coming through the Store means it gets updates faster and more easily.
Crosstalk Solutions26 Ring Groups
  • Ring groups suit lines where answerers outnumber calls. The host's rule of thumb: a receptionist or accounting group that gets occasional calls should ring everyone at once, while a call centre with more callers than agents needs a queue. Anything beyond the ring-all strategy, he says, usually means you want a queue.
  • Every ring group needs a failover destination so calls aren't stranded. His reception group (5000) rings two extensions for 20 seconds (about four rings at roughly 5 seconds each), then goes to the general voicemail's unavailable greeting. Accounting (5001) goes to an announcement and then to a voicemail box with instructions only. A test showed that with no members registered, calls skip straight to failover.
  • Callers to a front desk should hear ringing, not hold music. For a small organization whose receptionist answers every inbound call, hold music sounds wrong to callers on first contact. Queues can use hold music while callers wait.
  • Caller-ID prefixes and alert info tell staff which group rang. A prefix such as "GEN" marks ring-group calls. Alert info sets a distinct ringtone on Sangoma, Crosstalk, Clearly IP and Digium phones. The host typically uses separate internal and external ringtones, and a ringer volume override is also available.
  • The host usually enables "ignore call forwarding settings". Otherwise a receptionist at lunch with Find Me/Follow Me on would have group calls forwarded out to them. Skip busy agent is situational. With it on, a third caller while both receptionists are busy goes to failover. He thinks receptionists should be able to put a caller on hold and pick up the second call instead.
Crosstalk Solutions25 - Announcements - FreePBX 101 v15
  • An announcement plays a recording, then moves on without caller input. Unlike an IVR, the caller cannot press keys to skip or choose. The host builds weather, holiday and general closure announcements, each sending callers to the general voicemail box (6000), leaving the other options at their defaults.
  • Pair an announcement with "instructions only" voicemail to replace a personal greeting. The accounting no-answer announcement drops callers into an individual's mailbox with instructions only. Callers hear the department message plus the standard "leave a message after the tone" prompt, not that user's own outgoing greeting. The other choices are the busy greeting, the unavailable greeting, or no message.
  • Announcements suit messages callers must not bypass. The host's example is "your call may be recorded for quality assurance purposes" before a queue. He describes this as serving as two-party consent where call recording requires it.
Scott HanselmanPair Programming with Microsoft's Damian Edwards - Retrieving and parsing JSON with .NET 6
synopsis

Hanselman and Edwards set out to repair azurefriday.com, and by the end they have a .NET 6 console app. It calls the new paged episode API, deserializes each episode into a small C# record and prints the titles. Fanning out across pages and making the batch media call are left for a follow-up. Along the way the session argues that analysis and explicit trade-offs come before code, that early-career engineers should not be put off by having only one of many valid answers, and that iteration rather than first-time correctness is how code gets written.

The broken feed. Hanselman's site held every Azure Friday episode, about 700 of them and "like a meg", in memory for instant client-side search. The data came from one Channel 9 API call that the Channel 9 team had extended to skip paging. Since Channel 9 joined Microsoft Learn, that URL redirects. The replacement docs hierarchy service pages results at no more than 30 and returns no media, so thumbnails need a second batch call keyed on entry IDs. One GET has become what Edwards calls "cascading calls".

Probing the API. Before writing code they tested the API in the browser. Counting "uid" in VS Code confirmed 30 entries a page. An oversized page size returned a clear error, and a page past the end returned an empty array, which gives them the loop's stop condition. Edwards noted that there were no hypermedia-style next-page links. The batch endpoint gave good validation errors, did not remove duplicate IDs, and accepted 30 and then 31 IDs. Around 300 drew an HTML bad request, then a 404, and Hanselman suspects Azure Front Door blocked him for what looked like an attack. They settled on 30 a page. The API reported 351 episodes rather than 700.

Choosing an architecture. Edwards frames the first choice as fanning out on each request versus building the data periodically. The periodic route brings in cache invalidation and the question of what runs the job. Hanselman proposed an ASP.NET background worker that caches to local disk at startup. Edwards listed what can go wrong with that: write access, containers, redeploys, concurrent writes and scale-out. He describes "step functions": going from one instance to two changes far more than going from two to ten. Hanselman answers growth to 200 with "that's a great problem to have" and YAGNI. His plan is a console app now, later an Azure Function or cron job that drops a JSON file into storage.

Experience and failure. Hanselman says the difference between early- and late-career engineers is suffering, such as having been rate limited before. Edwards puts it as learning from failure over time: what you need to remember is the failure modes, not the APIs. Hanselman worries that "you poser" comments chase newcomers out of tech. Edwards says published content hides the iteration everyone relies on, and that code which is right today can be wrong after a 10x traffic promotion.

Writing the code. Edwards says HttpClient is still the default, with lifetime management and DNS caching as the server-side complications. An interpolated string is evaluated when it is created, so they used a string.Format placeholder for the page number. Hanselman reached for System.Text.Json.Nodes and walked the response node by node, and the total count came out through an explicit operator cast to int. Edwards said he would have started with JsonDocument, and that JSON path is supported in Json.NET but not yet in System.Text.Json. They finished by passing each episode node to JsonSerializer.Deserialize into a Show record with matching property names. The code is not yet defensive about nulls.

  • An upstream API migration broke his site's single-call episode feed. Channel 9 has joined Microsoft Learn. Hanselman's azurefriday.com loaded every Azure Friday episode (about 700) in one call from the old Channel 9 API. The replacement docs hierarchy service pages results at a maximum of 30 and carries no media. Thumbnails and the rest need a second, batch call keyed on entry IDs, which turns one GET into "cascading calls".
  • Probe the API's edge cases before writing code. They found that an oversized page size returns a clear error, that a page past the end returns an empty array (so that is the stop signal), and that there are no next-page links. The batch endpoint accepted 30 and 31 IDs without removing duplicates. Around 300 IDs drew an HTML bad request, then a 404, and Hanselman suspects Azure Front Door blocked him. The reported total was 351 rather than 700; his guess is that older episodes were cut off.
  • Every design is a set of trade-offs, so limit the scope. Edwards frames the first choice as fanning out per request versus building the data periodically, and says the second raises cache invalidation and the question of who runs the job. A startup worker writing to disk raises further questions: write access, containers, redeploys, concurrency and scale-out. Edwards argues the step from one instance to two changes the most. Hanselman answers growth to 200 with "that's a great problem to have" and YAGNI. His plan is a console app for now, later an Azure Function or cron job writing a JSON file to storage.
  • Senior judgment is remembered failure, and public content hides iteration. Edwards says you learn from failure over time, and what you need to retain is the failure modes you have hit, not the APIs. Hanselman worries that "you poser" comments drive early-career people out of tech. Edwards replies that published code hides the iteration everyone relies on, and that what is correct today can be wrong after a 10x traffic spike.
  • Navigate loosely with JsonNode, then deserialize into a record. In a .NET 6 console app, Edwards says HttpClient is still the default answer but that servers have to manage its lifetime and DNS caching. An interpolated string is evaluated when it is created, so a string.Format placeholder suited the page number. They walked the response with System.Text.Json.Nodes and an explicit cast to int, then handed each episode to JsonSerializer.Deserialize into a Show record whose property names match the JSON. Edwards would have started from JsonDocument or a typed response instead. The run printed titles; the paging fan-out and the batch call were left for a follow-up, and the code is not yet defensive about nulls.
Crosstalk SolutionsUbiquiti Breach Update - Mind Blowing New Info!
  • The DOJ says the 2021 Ubiquiti "whistleblower" was the attacker. Citing BleepingComputer and a Southern District of New York indictment, the host reports that former senior developer Nickolas Sharp was charged with stealing data using his own cloud-admin credentials. The indictment alleges Sharp then posed first as an anonymous hacker and then as a whistleblower; he faces four counts carrying a maximum of 37 years if convicted on all.
  • The indictment says an internet outage exposed his home IP address. The alleged sequence: he cloned about 155 GitHub repositories over SSH in December 2020 through Surfshark VPN, but one clone command came from his home IP in Portland, Oregon right after his internet went down. The host blames a missing VPN kill switch and recommends Private Internet Access for having one.
  • The indictment alleges he covered his tracks and lied to investigators. He set a one-day log-retention policy on AWS, joined Ubiquiti's own incident-response team, and denied using Surfshark. His ransom email asked 25 bitcoin for the data plus 25 for a "backdoor"; the host puts the 50 at about $1.9 million. Sharp then lied to the FBI after its March 24, 2021 search.
  • His planted stories allegedly cost Ubiquiti over $4 billion in a day. Per the reporting, the stock fell roughly 20%, from $349 on March 30 to $290 on April 1, 2021, after the Krebs on Security story. Sharp's claim that Ubiquiti kept no logs was, by the indictment's account, a result of his own tampering.
  • The host retracts his April 2021 criticism of Ubiquiti and apologizes. He says he fell for the story "hook, line and sinker" because Krebs on Security is a trusted source. His advice on resetting credentials and MFA still stands, but he calls everything else in that video baseless.
Crosstalk Solutions24 - General Voicemail Boxes - FreePBX 101 v15
  • A general voicemail box is a virtual extension shared by a group. The host creates virtual extensions that never SIP-register: 6000 for general/after-hours, 6001 for sales and 6002 for customer service. Each has voicemail enabled, a password matching the extension so the first dial-in runs the setup wizard, and email notification with the WAV file attached.
  • *97 checks your own mailbox; *98 checks any other. *97 assumes the calling extension, like the envelope button, while *98 prompts for which mailbox. Dialing * plus an extension (*6000) goes straight to that mailbox to leave a message.
  • A BLF key on *98+mailbox lights when messages wait. The host sets a template line key to BLF with value *986000, which turns green when the box is empty and red when it holds messages. Because it lives in the phone template, every phone using that template gets the shared indicator, and he suggests separate templates for receptionist, sales or service phones.
  • Test voicemails shorter than 5 seconds aren't kept. The host warns that a quick "test test" message never appears because the system ignores recordings under 5 seconds, which he says has tripped people up.
Crosstalk Solutions23 - System Recordings - FreePBX 101 v15
  • A system recording is a reusable audio entity. One recording, such as the main IVR greeting, can be used in many places across the PBX. The host makes five for his design: main IVR, closed general, closed weather, closed holiday, and an accounting no-answer message. He concedes a single "closed" recording would serve.
  • Recordings can be made in three ways. You can call an extension and record over the phone, which must then be named and saved. You can record in the browser, which needs a valid HTTPS certificate such as Let's Encrypt for microphone access. Or you can upload a WAV or MP3 file. For customer systems the host records with a good microphone in Audacity, trimming the silence at each end.
  • Linking a recording to a feature code lets staff re-record without the admin GUI. In the host's example, *291 re-records the main IVR. This suits often-changed weather or holiday messages, with a printed sheet of codes by the responsible person's phone. A feature-code password stops accidental or unauthorized re-recording.
  • An announcement in front of a mailbox replaces the personal greeting. Unanswered accounting calls get a department message first. They then drop into an individual's mailbox with no outgoing greeting. The host notes Allison Smith, the voice of Asterisk's prompts, can be hired so custom recordings match the system voice.
Crosstalk Solutions22 - IVR Design - FreePBX 101 v15
  • Inbound calls pass a manual weather toggle before anything else. The host's design for the fictional Dunder Mifflin starts with a call flow control (a feature code, *280, flips it) that, when switched, sends every call to a closed-due-to-weather announcement and then the general voicemail box.
  • Two time conditions follow: holidays first, then business hours. A holiday match plays a holiday announcement; outside Monday–Friday 8 am–5 pm and Saturday 8 am–12 pm a closed announcement plays. Both end in the general voicemail box, and only open-hours calls reach the main IVR.
  • Each IVR option ends in its own fallback voicemail. Pressing 0, timing out or pressing an invalid digit rings the receptionist ring group, then general voicemail; 1 rings the sales queue, then a sales voicemail; 2 a customer service queue and its voicemail; 3 an accounting ring group, a no-answer announcement, then one named person's voicemail.
  • The design is deliberately broader than most real IVRs. The host built it to touch many FreePBX features and will implement it over roughly the next ten videos, starting with system recordings; he says it mirrors what Crosstalk builds live with customers as part of its turnkey installation service, and offers the diagram as a PDF download.
Crosstalk SolutionsYubikey Backups - How to TOTP Across Multiple Yubikeys
  • Backup YubiKeys must all be enrolled in the same setup. The host says you cannot add TOTP to one key and add backups later; you disable 2FA on the site (here the Ubiquiti account at account.ui.com), re-enable it, and scan the one QR code into Yubico Authenticator on every key before confirming with a code.
  • Generate fresh backup codes after re-enrolling. The host treats the site's backup codes as the final fail-safe if every key and phone is lost, so you are not left begging the company to restore access; he stores them somewhere safe.
  • The host splits codes between YubiKeys and Google Authenticator. He prefers hardware keys because switching from an iPhone 8 to a new iPhone carried the Google Authenticator app over but none of its codes; he puts daily-use codes on his YubiKey 5 NFC and 5Ci keys and rarely used ones on the phone, while noting apps like Authy do sync across devices.
  • A keychain YubiKey has held up for over a year. The host reports no durability problems from daily pocket carry, and mentions a new Yubico protective sleeve for those worried; product links in the video are affiliate links, he says.
Crosstalk SolutionsUniFi Protect G4 Instant - Specs and First Impressions
  • The G4 Instant's case rests on lens, weatherproofing and smart detection. Ubiquiti lists it at $99 in early access (already sold out) against $29 for the G3 Instant; it moves from 1080p to 2K at up to 30 fps, though Ubiquiti's video says 4 megapixels and its product page 5, and it adds IPX5 weatherproofing.
  • Smart detection is the host's assumption, not Ubiquiti's claim. G4 cameras generally detect people and vehicles and G3 ones do not, so he expects it here, but the launch video never says so; the field of view also narrows from 133° to 102.4°, still wide angle in his view.
  • It is still not battery powered. It joins the network over Wi-Fi but needs power, likely USB-C like the G3 Instant, the host suspects; he puts little stock in its two-way audio, which he found not very usable on earlier UniFi cameras.
  • Buy the cheaper G3 Instant indoors, the G4 outdoors. The host uses his $29 G3 Instant in his garage to see whether a car is there and thinks it ideal for that; he would pay $99 only for an outdoor camera, and warns availability is unknown given chip shortages, with the G3 itself long out of stock.
Scott HanselmanPair Programming with OhMyPosh's Jan De Dobbeleer - Together we code a Nightscout segment in Go!
synopsis

Over a little more than two hours, Hanselman and Oh My Posh creator Jan De Dobbeleer build a working Nightscout segment in Go that shows Hanselman's live blood sugar and its trend arrow in his prompt, coloured by thresholds he sets in his theme, and cached so it costs nothing on most renders. The segment runs and caches by the end; units, staleness handling, tests, documentation and the pull request are left for Hanselman to finish.

The problem. Hanselman is diabetic and runs a personal instance of Nightscout, the open-source, non-profit project he has long been involved with: a sensor sends readings to his phone, the phone to the cloud, and a REST API returns them. One reading is a serum glucose value (139 at the start, after an apple he ate on purpose to show the number move) and a direction string. His earlier prompt integration, built with a friend, had a Windows service or cron job write to a text file the prompt read, which broke whenever he forgot to run it. De Dobbeleer says the weather segment already does what is needed: call an API, cache, display.

Latency first. De Dobbeleer's first question is how often to fetch, since nobody wants a slow prompt. Hanselman says a short pause once every five minutes is fine, and five minutes is also the most often the sensor reports. De Dobbeleer says the git segment is usually the slow one.

Setting up. Hanselman forked the repository and opened it in the project's VS Code dev container, which a contributor added to lower the barrier to contributing. It installs Go and the extensions, sets up every supported shell so a change can be checked in all of them, and also works on github.dev. De Dobbeleer joins via Live Share from Belgium, midnight for Hanselman and 7 a.m. for him. Hanselman repeatedly pitches this as an underused way to work, "Google Docs for code", and De Dobbeleer says he has considered using it for contributor help, since asynchronous reviews can be slow and daunting.

Copying the weather segment. They copy the OpenWeatherMap segment and take it apart. De Dobbeleer walks through its shape: an enabled function deciding whether the segment shows, a string function returning only text, and an init that receives the user's properties and an environment interface through which all I/O passes, so tests can mock everything. Colouring used to live in segment code; he has recently moved it into templates, with background and foreground templates that can branch on any exposed value, because adding colour properties for every API field does not scale. Hanselman wants only the full Nightscout URL, token included, as the one property, so the segment is not "in the business of building URLs". De Dobbeleer agrees and names the property simply url, since properties are scoped to the segment. Hanselman had assumed the cache was shared across segments; De Dobbeleer corrects him that keys are per-segment.

The array envelope. The API returns an array even with count=1. They debate caching the raw response against extracting the first element, and settle on parsing the array, taking element zero and copying its values onto the segment struct so templates can use .Sgv and .Direction. Doing it this way also tolerates a user leaving count off the URL. Hanselman notes the result deserializes and reserializes JSON on the way to the cache and calls it an optimization for later. Asides along the way: Go's implicit interfaces, which De Dobbeleer says are powerful once you get used to them, especially for mocking, and Copilot completing his enabled function.

Wiring and the first failure. They register the segment type and its mapping per the contributing guide, rebuild, and get nothing. The binary was the old one: the PowerShell profile in the container loads the module's executable, and the build task's readlink step failed, so they rebuilt into the module path by hand rather than rebuild the container and lose Live Share. Write-PoshDebug then showed the 20 ms default HTTP timeout being hit; raising it in the theme brought the number up.

Trend icons. For the seven direction values Hanselman lays out three options: hard-code them, write a large template, or add icon properties with defaults. De Dobbeleer picks the third as fastest and readable, following the git segment's upstream icons, with a Go switch returning each property or its default. His rule is that a default right 99% of the time should ship. Hanselman worries that double arrows will change the segment's width; De Dobbeleer notes git already varies.

Colour and caching. Background templates turn the segment yellow above 150 and red below 60; Hanselman, colour-blind, adds a black foreground template. Testing with hard-coded values exposes that the cache never worked: get and set used different keys, which they fix while hard-coding the timeout to five minutes. A lingering 1,200–1,500 ms lag proves in the debug timings to be the git segment over the container's volume mount, with Nightscout at zero.

What is left. Glucose units (mg/dL against mmol/L) are not in the API response and need a property or discovery. Hanselman wants to show readings as stale after an hour, and tests, segment documentation with a sample config, and the PR remain. De Dobbeleer says a segment normally takes him about 20 minutes plus tests; Hanselman, having estimated 30, says he could now do one in an hour.

  • A prompt segment can replace a background service for live data. Hanselman, who is diabetic, wanted his Nightscout blood sugar in his Oh My Posh prompt; his earlier approach with a friend, a Windows service or cron job writing to a text file, was a hassle he kept forgetting to run. De Dobbeleer, Oh My Posh's creator, says it fits the existing weather segment's pattern: call an API, cache the result, display it.
  • Nothing may slow the prompt, so calls time out and cache. The default HTTP timeout is 20 ms, after which the segment is simply hidden; they had to raise it for Nightscout. The cache is set to five minutes because the glucose sensor only reports that often, and a cache-key mismatch between get and set was the bug that kept it from caching. A 1,200–1,500 ms lag turned out, via the debug output, to be the git segment over a dev-container volume mount, with Nightscout at zero from cache.
  • Segments stay dumb; display logic belongs in user templates. De Dobbeleer explains a segment is an interface (an enabled check, a string output) with all I/O behind an environment interface that tests can mock, and that colour logic was recently pulled out of segments into background and foreground templates. Hanselman's thresholds went in the theme config: yellow above 150, red below 60. He also chose to take the user's full Nightscout URL with token rather than build URLs in code.
  • Configurable icon properties with defaults beat templates or hard-coding. For the seven trend directions, De Dobbeleer rejected a long template switch evaluated every render and chose icon properties with defaults set in a Go switch, mirroring the git segment's upstream icons. His rule: if a default is right 99% of the time, ship it and let people override.
  • Dev containers and Live Share made the remote pairing workable. Hanselman argues few people use them enough: setup took him five minutes and they edited one file across nine time zones. The session still ran 2 hours 10 minutes against his 30-minute estimate, partly on a broken build task because the container's PowerShell profile loads the module's binary; De Dobbeleer says a segment normally takes him about 20 minutes plus tests. Units (mg/dL against mmol/L), staleness, tests, docs and the PR were left for later.
Crosstalk SolutionsScammer Update - What to do When You Get Scammed!
  • Report even attempted scams to the FBI. Within four hours of the earlier video an agent from the FBI's Oregon Cyber Task Force in Portland asked the host to file at IC3.gov, which he did without hearing back; the agent wrote that aggregated complaints tie cases to rings, and that Oregon business email compromise losses this year were $1.2 million from just 15 reports, likely about three times higher.
  • A tracking link exposed only a VPN exit and the browser. The host sent the scammer a Grabify link, which logs a visitor's details before redirecting; it showed a Los Angeles VPN or proxy, Windows 10 and Chrome. He warns scammers use the same tool.
  • Reporting the domain early cost him contact with the scammer. Namecheap took down the fake clemsonedu.school domain after the host emailed abuse@namecheap.com, and the scammer stopped responding; he calls this premature because he had hoped to keep the scammer engaged.
  • An AirTag parcel stalled at the reshipper. Sewn into a Clemson stuffed animal and mailed 13 October 2021, it went via Portland and Dallas–Fort Worth to Newark on 16 October and a reshipping company in Sayreville, New Jersey on 18 October. As of 18 November it had not moved, with about 80% battery left.
Technology and FriendsNick Kwiatkowski on Dialogflow CX [TECHNOLOGYANDFRIENDS 687]
  • The bot gathers details first so humans only confirm them. Kwiatkowski, telecom and converged engineer at Michigan State University, says the university's hospital clinics came to his team with wait times that were too long and trouble hiring qualified staff. Booking an appointment took five to six minutes on the phone; with Dialogflow CX collecting the data in conversation and handing it to the agent for a sanity check, he puts the call at about a minute and a half. He reports that the system misroutes calls "very, very rarely", and that callers' frustration is mostly with talking to any computer system at all.
  • Non-programmers get most of the way; conditionals and integrations need developers. In the browser console you type 10–15 different phrasings of a question ("when are you open?", "what are your hours?") and the machine learning builds the intent from them. He says someone with no coding background gets about 80% of the way, and his analysts, among them a psychologist and a former telephone-wiring worker, built intents this way. If-then routing logic and REST calls out to systems such as an appointment database are where programming knowledge or a developer comes in.
  • Per-minute pricing costs far less than the staff it relieves. Billing is by minutes of audio and response, effectively per transaction. For the hospital system's 14 clinics, at close to 100,000 interactions a month, he puts the bill at "a few thousand dollars a month"; the host suggests nurses' salaries for staffing phones would cost far more, and Kwiatkowski agrees.
  • Done well, the same tools improve service rather than just cut cost. His team's next iteration for the hospital is outbound calls that give a patient a test result, explain in conversation what a high number means, and escalate to a nurse if needed. He describes a Michigan automotive manufacturer using the product as "agent assist": it listens to a live call and puts help articles in front of the agent without them typing. He also describes a system that drafts FAQs and help articles from a senior engineer's calls. He warns that a bot used only as a front door, after which callers repeat everything to a human, "doesn't make anybody happy."
  • Novices should start with Dialogflow ES before CX. He says ES suits one question leading one way, such as a simple menu or decision tree. CX handles "multi-turn" conversations: filling a form of, say, six required items without re-asking ones already given, and keeping context, so a caller who mentioned sports medicine is not asked about radiology. The host proposes that a novice start with ES and move to CX, and he agrees.
Scott HanselmanUnderstanding Windows 11 new security requirements with David Weston
synopsis

Weston's position is that Windows 11's hardware bar is a data-driven line for a guaranteed experience — security, performance and reliability together — and that its security half rests on turning on by default a trusted-computing stack Windows 10 already had: measured boot, virtualization-based security and DMA protection. Older machines, he says, are not left behind; they can stay on a supported Windows 10 and enable most of it by hand.

Why a fast PC fails the check. Hanselman opens with his own 7th-gen Intel machine. Weston says the bar weighs drivers and reliability statistics from millions of machines, agreed with silicon vendors, alongside security features, and that speed alone does not clear it. Hanselman adds his own experience: enabling VBS meant converting from MBR to GPT and removing nine unsigned drivers.

Optional security is exclusive security. Weston compares optional features to overclocking: enthusiasts tweak, most people never touch them. TPM requirements date to Windows 10 logo systems in 2015, so the chips were mostly already there.

Boot first, then everything else. Secure boot validates signatures; trusted boot adds TPM measurements that unseal BitLocker. Attackers take the easy path, Weston says, but go to firmware for stealth, since whoever runs first wins. He frames this as building a foundation rather than chasing individual malware.

Ring minus one. VBS uses the hypervisor to own page tables and other critical state, creating a secure kernel with its own "trustlets" for credentials and attestation. He credits the cloud hypervisor team: the same multi-tenancy code, brought to the client because everyone runs as admin.

Physical attacks. Sub-$100 DMA devices let an attacker patch memory; the IOMMU blocks new DMA devices while the machine is locked, and biometric matching moves inside VBS.

Advice. Asked about unsupported installs, Weston calls it a support question outside his area but advises against it: turn the features on in Windows 10 instead.

  • The CPU cutoff balances security, performance and reliability, not speed. Weston, partner director of OS security at Microsoft, says a machine like Hanselman's 7th-gen Intel gaming PC is fast and has the security features but fails on drivers and published reliability data; the line was drawn from crash and performance analytics across millions of machines, with silicon vendors agreeing. He says Windows 10 remains supported with driver updates, and personally advises against registry hacks to install 11 on unsupported hardware.
  • Windows 11 makes on-by-default what Windows 10 left optional. Weston argues optional security is "exclusive", like requiring overclocking to game, since most people assume what Microsoft didn't enable shouldn't be touched. The TPM is not new: Windows 10 logo systems required one from 2015, announced around 2012, and most Intel and AMD chips have had it for a decade, so the $14 add-on TPMs scalpers pushed to $100 were mostly unnecessary. Users staying on 10 can enable core isolation, memory integrity and secure boot in Windows Security.
  • Early-boot integrity is the foundation every other defence depends on. Secure boot checks signatures on boot components; trusted (measured) boot adds TPM measurements, which is why a changed component triggers the BitLocker recovery screen. Weston says attackers, state actors included, take the easiest path such as phishing or macros, and go to firmware only for stealth against well-defended targets, because "whoever boots their code first wins" — his red teams prefer it for that reason.
  • Virtualization-based security keeps admin compromise from being game over. The hypervisor creates a "ring minus one" secure kernel that controls page tables, MSRs and I/O and applies policy, such as requiring signed code, before granting access. Weston says it is the same hypervisor technology Microsoft built for multi-tenant cloud, shrunk to the client, and it lets Windows curate which kernel drivers run — relevant to supply-chain attacks, for which he cites UltraEdit's compromise.
  • DMA attacks are now cheap, and the IOMMU blocks them when locked. Weston says a PCILeech-style device costs under $100 with code from GitHub; on Microsoft Mechanics he used one to patch the biometric process to "return true". Windows uses the IOMMU to cut off DMA to new devices while the machine is locked, and enhanced sign-in security moves biometric matching inside the VBS boundary; he says he wants to overturn the old law that a machine out of your possession is no longer yours, as Xbox already has.
Crosstalk SolutionsPhishing Email Dissection - Educate Your Users!
  • A plausible billing email fooled the host into clicking. The "problem authorizing your payment method" message claimed to be WordPress with a WooCommerce Subscriptions logo, matching his site and store; the only visual clue was a small, low-resolution, off-centre logo, and he clicked without hovering over the link.
  • His password manager's silence was the first real warning. LastPass offered no saved login on the page, which it would for a genuine WordPress site, and every link, even "back to wordpress.com", led to the same unfamiliar domain.
  • The link domain's age was the strongest lookup clue. The domain the link first resolved to passed scam-checker sites and blacklists and dated from 2014 behind Cloudflare privacy; the one it redirected to by filming was registered about two months earlier, which the host calls typical of scams.
  • The hidden sender address settled it. His ticketing system showed only "WordPress" until expanded, revealing an unrelated, apparently compromised business address; the host's only remedy is to delete it and mark it spam.
  • Such campaigns can target any WordPress-WooCommerce site. The host reasons that attackers can scrape sites using both platforms plus a public email address, and harvest logins from the share who click; user education is his answer.
Crosstalk Solutions20 - Outbound Routes - FreePBX 101 v15
synopsis

The host builds three outbound routes on FreePBX 15: a default route, an emergency route that sends each extension's own E911 number, and a dial-8 route that sends a second caller ID.

Default route. The route's caller ID overrides the trunk's, but an extension's own caller ID overrides the route's. Trunks are tried in sequence. The dial pattern wizard produces 7-, 10- and 11-digit patterns, and the host prepends digits so that every call goes out with 11. He adds a +1 pattern for older Yealink phones, which redial with a plus.

Toll-free. A toll-free number cannot call another toll-free number. A company whose outbound ID is toll-free therefore needs a separate toll-free route with a local ID, placed above the default because the first match wins.

Emergency. The host says Kari's Law and RAY BAUM'S Act require every extension to reach 911. Once a route is flagged as emergency, each extension's own emergency caller ID takes over, so home workers send their home address. The route matches 911 variants, plus 933 for address testing and 988. It goes at the top, sends email alerts and forces call recording.

Prefix and testing. A dial-8 route strips the 8 and sends a different caller ID, which he suggests for two organizations sharing one system. Calls to 933 read back the provisioned address, and a test call shows a caller ID ending 2040 normally and 0266 when 8 is dialed first.

  • Caller ID follows a hierarchy across extension, route and trunk. An extension's caller ID overrides the outbound route's, which overrides the trunk's, unless the route's "override extension" is set; trunks in a route's sequence are tried in order, failing over to the next.
  • The host normalizes every dialed number to 11 digits. Using the wizard's 7-, 10- and 11-digit patterns (N for 2–9, X for 0–9), he prepends 1272 to seven-digit dials and 1 to ten-digit ones, and adds a +1 pattern because some Yealink phones, at least historically, redialed from history with a plus and would otherwise fail.
  • Toll-free callers need their own route with a local caller ID. Most US toll-free providers will not accept calls from another toll-free number, so a company whose outbound ID is toll-free needs a route matching 800, 888, 877, 866, 855, 844 and 833 placed above the default, since the first matching route wins.
  • The emergency route is what the host calls the series' most important step. Under Kari's Law and RAY BAUM'S Act every extension must reach 911, and he says the company or even the installer could be held responsible otherwise; flagged as emergency, the route uses each extension's own emergency caller ID, so a home worker's 911 call carries their home E911 address.
  • The host's emergency route also covers 933, 988, alerts and recording. It matches 911 variants, 933 (which reads back the provisioned E911 address on Crosstalk SIP, his own firm's trunk service, and other good providers), and 988 for the suicide hotline. It sits at the top of the route list, emails a group on each match, and forces recording, though he notes he is no lawyer on consent rules.