Souk's Notes - Unofficial Summaries
GCastConditional Logic in Power Automate [GCast 80]
- A Condition control step is Power Automate's if statement. Control steps include loops, if statements and switch statements; Giard adds a Condition, which evaluates to true or false and runs an "if yes" or an "if no" branch.
- Trigger values must be initialized as variables first. Giard could not select the quantity directly in the condition, so he added Initialize variable steps, an integer "quantity" and an integer "order ID", taken from the SQL insert trigger's output; this makes them available to later steps. He renames each step to say which variable it initializes.
- The demo branches the file name on a quantity of 50. If the quantity is greater than or equal to 50 the flow creates a second OneDrive file named "big_order_" plus the order ID plus ".txt"; otherwise "small_order_" plus the order ID plus ".txt". Both go in the same folder as the standard order file, which he also changes to end in .txt so it opens without downloading first.
- A flow can be tested against a previous run's data. This avoids inserting another row; re-running the last run (quantity 55) took the yes branch and produced the big-order file. Triggering it live with a new order of quantity 5 took the no branch, and the run view shows whether the condition was true or false and which branch ran.
Crosstalk SolutionsUniFi Smart Power Plug
- The plug exists only to reboot the ISP modem automatically. The USP-Plug-US, at about $19, sits between the wall or UPS and the ISP's modem or router and power-cycles it when the UniFi controller detects the internet is down. It has almost no settings: name, DHCP or static IP, and a side button for power on/off and a five-second factory reset.
- Ubiquiti's stated requirements are wrong in two places. The product page says it needs a Dream Machine, but the host confirmed with Ubiquiti that any controller on 5.12.42 or newer works, plus an access point, since the plug adopts over Wi-Fi. The quick-start guide's "5.12.32" he takes to be a typo: his Cloud Key Gen2 Plus on 5.12.35 would not detect the plugs.
- Running it required beta controller software at recording time. As of 28 January 2020 the latest stable release was 5.12.35, so the host moved his UDM to the beta release channel (new settings, Updates, Advanced) with private release channels enabled on his Ubiquiti account.
- The controller does not yet treat it as its own device type. It appears with an access-point icon, reports its model as "UP1" rather than USP-Plug-US, and an unplugged unit shows on the dashboard as an offline access point. The host also saw a STUN connectivity error he could not resolve and hopes a firmware update clears it.
- No scheduling or appliance control, which the host calls a missed opportunity. Unlike typical smart plugs it cannot be switched or scheduled, and he speculates (with no inside knowledge) that firmware could add this. He had not tested an actual outage recovery or learned how it retries; it fits only US Type B outlets, and his modem's Type A plug sat loose in it.
GCastCreating a Workflow from Scratch in Power Automate [GCast 79]
- A blank flow starts as one of four types. Under My Flows > New at flow.microsoft.com: automated fires on a trigger, instant on a button click, scheduled on a timer, and business process includes some templates. Giard picks automated and names it DG Test Flow.
- The SQL Server insert trigger needs a table with an identity column. The "when an item is created" trigger watches a table for inserted rows; Giard says the identity column is "just a rule". He adds a new connection using SQL Server authentication to an Azure SQL database, with no gateway, which he says is for servers behind a firewall.
- Testing lets you perform the trigger action yourself. The Test button starts the flow waiting for its trigger; inserting a row produced a successful run whose inputs and outputs, including the row data from SQL Server, can be inspected.
- A OneDrive Create file action drops one file per order. The file goes in a folder named "flow stuff", named "ORD_" plus the order ID, with the order text as its contents. An inserted order ran within seconds and the file appeared; Giard says he should have appended .txt so it would open properly. The flow's page lists test and triggered runs and its connections, and the flow can be turned off there.
GCastCreating a Workflow from a Microsoft Power Automate Template [GCast 78]
- Flow is a graphical workflow engine for non-coding power users. The narration calls the product Microsoft Flow throughout, not Power Automate as the title does. Giard describes its audience as "power users or citizen developers" who understand software but don't want to write much code; it lives at flow.microsoft.com and comes with an Office 365 subscription.
- Templates are the simplest way to build a flow. Under New, Create from Template there are hundreds of templates, each wired to connectors for Office 365, SharePoint, OneDrive and third-party applications. Giard picks "Save Office 365 Email Attachment to OneDrive for Business", which uses the Office 365 Outlook and OneDrive for Business connectors; you may need to sign in to both before clicking Create Flow.
- The flow's page shows its connections, owners and run history. Owners can be added beyond the creator. The history lists each run with its date, time and status (running, succeeded or failed).
- The trigger's advanced options filter which emails fire the flow. The "on new email" trigger defaults to the inbox and can point at another folder. Under Advanced it can filter by recipient, CC, sender, importance, attachment and subject; Giard sets subject equals "Flow" so only those emails trigger it.
- The second step saves each attachment to a chosen OneDrive folder. "Apply to each attachment" creates a file using the email's attachment name and contents; Giard points it at a folder he had already made. In the demo a test email with the subject "Flow" and a photo attached triggered the flow about 60 seconds after it arrived, and the photo appeared in that OneDrive folder.
Crosstalk SolutionsDNS Server Lockdown
- Firewall rules can force clients onto whitelisted, filtering DNS servers. The aim is to stop savvy users bypassing Pi-hole or content-filtering DNS by setting 1.1.1.1 or 9.9.9.9 manually; it can be applied per VLAN, such as a guest or student network only. Statically addressed devices, including the router itself, must have the allowed DNS servers set by hand since they skip DHCP.
- Use address groups so DNS servers change in one place. On EdgeOS the host keeps a group of his three Pi-holes (192.168.200.201, a Docker Pi-hole on his Synology NAS at .210, and a test one at .206) and an RFC 1918 group; changing a group updates every rule that uses it.
- Three ordered rules do the work: allow, let filters out, drop. On LAN in: allow established/related, accept TCP and UDP to port 53 on the whitelisted group, allow the Pi-holes themselves to reach any DNS server (they forward to Cloudflare's 1.1.1.1), then drop all other port-53 traffic. Order matters because rules are processed top-down; he notes the Pi-hole forwarding rule could be tightened to 1.1.1.1 only.
- An IoT VLAN can use main-LAN Pi-holes while staying otherwise isolated. Its rule set allows port 53 to the Pi-hole group, drops other DNS, then drops all traffic to RFC 1918 ranges, so devices reach the secure LAN only for DNS. No outbound rule for the Pi-holes is needed there since they sit on the main LAN.
- UniFi does the same with an address group and a port-53 port group. On a Dream Machine (Internet Security, Firewall) the host whitelisted 1.1.1.1, 9.9.9.9 and the UDM for demonstration, saying a real lockdown would use Pi-hole or OpenDNS. Testing showed whitelisted servers resolving and 4.2.2.2 timing out, matching his EdgeOS nslookup tests.
Technology and FriendsArthur Doler on Mental Health in the Workplace [TechnologyAndFriends 597]
- Talk about mental health as experience, not diagnosis. Doler, speaking at CodeMesh on his talk "Owning Your Experience", argues that clinical terms are artificially precise and say nothing about how a person experiences something, that not everyone has or can afford a diagnosis, and that medical language at work runs into HIPAA and HR trouble. Ordinary events, such as a pet dying, affect how people do their jobs whether or not anything is diagnosable.
- Teams should plan for bad stretches the way they plan vacations. He recommends looking back at the situations you have handled badly and deciding what to do when they come round again; friends of his with seasonal affective disorder know to start preparing around October, with a lamp mimicking the sun's wavelength and plans made in advance so they do not isolate themselves.
- Shame and "facile optimism" cut people off from help. Doler says the habit of insisting something isn't affecting us, and the belief that we should power through alone, makes people feel worse when they can't, and can lead to clinical problems. He says he was in a depressive state for months without noticing until others raised it, and that acknowledging something as beyond his control, as in the 12-step idea of a higher power, took away the blame and let him put coping strategies in place.
- Tech carries its own pressures and draws people seeking control. He argues that digital work is seen as instantly changeable, so changes that a 1950 graphic designer would have had days or weeks for are now expected at once. His "pet theory" is that neurodivergent people and people who have had little control in their lives gravitate to computers because they behave predictably.
- Evidence that tech has more mental-health challenges is thin. Doler cites a lightning talk he attended (not his own) mentioning only two studies, one from '96 in Japan and one from the 2000s in India, plus the annual developer survey of the Open Sourcing Mental Illness nonprofit, for which he volunteers. He concedes that survey is opt-in and not scientific, but says it points to a higher rate in tech, which he believes, and he wants to address the issues without waiting for proof.
Technology and FriendsCourtney Eaton and Gabrielle Sempf on KidzMash [TechnologyAndFriends 596]
- The kids' conference is free to attendees' families. Eaton and Sempf say KidzMash, a conference within CodeMash for attendees' children, usually draws 500 to 600 children and 300 to 400 adults from Tuesday through Friday at the Kalahari in Sandusky, Ohio. The host adds that Jim Holmes, CodeMash's original organizer, told him the first CodeMash had 240 attendees in total.
- The program is STEM sessions plus a maker space and family area. They run 16 one-hour sessions, six two-hour "dives" for ages 12 to 17, and nine to 11 maker-space projects during the week, plus Hangouts, a free space for families with small children built partly from emptied conference sweatshirt boxes. A static-electricity "Wizarding 101" session drew 107 kids.
- Many sessions are taught by children. About half of the one-hour sessions end up being given by a parent with their child or by the child alone, which they describe as a starter place for learning to present; a kid taught 16 kids to build a Discord bot, and three siblings gave a session on being an astronaut. Speakers come through a call for papers and are treated as fully ticketed CodeMash speakers.
- It grew from hallway meetups and is now out of space. In year two there was no KidzMash, just mothers meeting in the halls; Melissa Insko then got a room from Jim Holmes for an evening story time, and later Brian Prince asked for it to become a four-day program. It now fills four rooms for four days and, they say, cannot grow further because there are no more rooms, so they expect few changes beyond this year's extra staff and more dives.
- The organizers frame it as giving back to the community. One of them says her family's technology company owes its position to the Columbus and Ohio tech community and that KidzMash is their way of returning that. Their own children have grown up through it and now work as interns, which they offer as the first sign of kids moving from KidzMash into CodeMash itself.
GCastConnecting Azure Synapse to External Data [GCast 77]
- Synapse can query external Hadoop-style data in place through external tables. Giard follows a Microsoft Docs tutorial using SQL Server Management Studio and SQL Server Authentication, against the Synapse database (formerly Azure SQL Data Warehouse) created in the previous episode. The external data is a Microsoft-hosted, comma-delimited dataset on New York City public transportation.
- Setup needs a master key, file formats and a separate schema. The master key encrypts the database and is created once per database. He then defines uncompressed and compressed delimited file formats describing the data, and creates a schema named "ext" to hold the linked tables.
- Creating external tables links the data rather than copying it. The dataset is split into multiple tables (dates, geography, taxi licenses, trips with pickups and drop-offs, weather and others). Creation ran quickly because nothing was copied, and the tables then appear under External Tables in Management Studio.
- Giard copies the external data into local tables because querying it remotely is slow. A plain select from the date table took a few seconds. He creates local tables, about seven by his count, from each external table with indexes added, which took several minutes. Comparing ext against dbo versions showed matching first rows and identical row counts.
- System request tables show the history of external work. A query in the master database joining request details on request ID lists the tables, number of files affected and gigabytes processed for external operations. The unjoined request table shows everything run on the server, which Giard says on a busy server includes work by other users and background processes.
GCastCreating an Azure Synapse database [GCast 76]
- Azure Synapse is the renamed Azure SQL Data Warehouse. Giard says it is not a new product but has a few new features; in the portal it is found under Create a resource as "Azure Synapse Analytics (formerly SQL DW)".
- The database sits on a logical server, existing or new. Giard uses the logical server from the previous episode, in West Central US, which is where the data will be stored, and a resource group he describes as a logical container for managing related assets together.
- The performance level sets scale and cost. Gen 1 is no longer available and Gen 2 is required; a slider shows performance against cost, and Giard lowers it for testing while saying an enterprise might raise it. Additional settings offer sample data and tags, and the review page shows the hourly compute cost, which he finds useful. Deployment took about a minute.
- Connect from SQL Server Management Studio with the server name. The server name is copied from the database's overview page and used with SQL Server authentication in SSMS, which Giard notes is a free download. Sample tables appear because he chose the sample data; a blank database would be empty.
GCastCreating an Azure SQL Server Logical Server [GCast 75]
- A logical server can be created in advance, empty. Creating a SQL database or data warehouse otherwise prompts for a new or existing logical server; Giard creates one on its own from the portal's "SQL Server (logical server)" resource.
- The server name must be globally unique and lowercase. The server is addressed as name.database.windows.net, so a name someone else has used is rejected; reserved words and capital letters are not allowed, and the portal flags violations immediately.
- The admin login and password have rules. "admin" was rejected as too common, and the password must meet a length requirement and mix numbers, letters and special characters.
- "Allow Azure services" lets other Azure resources reach the server. Giard says it is generally a good idea, for example when an app service uses the server's databases. He skips advanced security, an extra-cost option; the review page flags problems and disables Create until they are fixed, and offers a template for scripting the deployment with the CLI or PowerShell. Deployment took about two minutes.
- The firewall blocks any IP address not explicitly allowed. In the server's firewall settings, Add Client IP allows the current machine so local tools such as SSMS or Visual Studio can connect; any server that needs access must have its IP address added too.
Crosstalk SolutionsRaspberry Pi Touchscreen
- The official Pi touchscreen swapped in for the surveillance monitor without reconfiguration. After breaking the micro-USB connector on his old HDMI 7-inch display, the host moved his existing Raspberry Pi 3 camera-feed setup onto the official Raspberry Pi 7-inch touchscreen (about $75), connected by ribbon cable; it booted straight into the four camera feeds.
- The only change needed was setting the output to 800×480. The new screen's resolution was noticeably lower than the old one's, so he logged in and matched the display output to it. Touch was left unused, since the surveillance view needs none; he says it would suit Raspbian with the full GUI or any touch application.
- The PoE HAT became redundant because one cable powers both. In the SmartiPi Touch 2 case, a supplied splitter (dual micro-USB for a Pi 3, USB-C for a Pi 4) feeds both display and Pi, so a PoE HAT would only power the Pi and still leave a second cable. He kept a wired network connection, saying hardwired is always better for camera feeds.
- The host likes the SmartiPi Touch 2 case. It holds the Pi under a removable fan door with no screws, offers a low- or high-speed fan on the GPIO, accommodates a Pi camera with a longer ribbon cable, and has 100×100 VESA holes as an alternative to its stand. Product links in the description are Amazon affiliate links, which he discloses.
GCastContinuous Deployment with Azure DevOps [GCast 74]
- Two triggers automate commit-to-deploy in Azure DevOps. Building on the build and release pipelines from earlier episodes, which deploy an ASP.NET Core app to an Azure web app, Giard's goal is that every commit to master is compiled and tested and, if it passes, deployed.
- Build pipelines enable continuous integration on the Triggers tab. A checkbox starts a build on every commit to master, with an option to combine commits that arrive while a build is in progress rather than build each one. He saves without queueing and adds a save comment to keep track of pipeline changes.
- Release pipelines use the artifact's continuous deployment trigger. The lightning-bolt icon on the release pipeline's first artifact turns it on, so a successful build starts a release automatically.
- One commit ran both pipelines without further action. Giard edited the welcome page directly on master in the browser; the build ran, release 5 was created and deployed, and the change showed in Azure. He notes committing straight to master is not the desired way; you would probably use a pull request.
- Giard argues CI exists to catch combined changes breaking. Diligent developers who compile and test locally can still break each other's code when their changes meet, his "butterfly effect"; CI gives feedback on compile and test results as soon as a commit lands.
GCastCreating an Azure DevOps Build Pipeline [GCast 72]
- A build pipeline automates pull, compile, test and publish. Giard says automating these steps lets them run often and find problems early. His demo is an ASP.NET Core web app with a test project holding one unit test that always passes (asserting 1 + 2 = 3).
- Giard prefers the classic editor to YAML. He says it is more graphical and some things are easier there, but YAML is fine to use. The ASP.NET Core template supplies the steps: get the code from the master branch, restore the .NET environment and NuGet packages, build, run tests (it assumes test projects end in "Tests"), and publish. Save and queue runs it on an agent, a computer that executes the job.
- A failed step stops the run; the useful error is higher up. The first run failed at restore with an unhelpful "packages failed to restore"; the line above said the agent's .NET SDK did not support targeting .NET Core 3.1. Giard retargeted both projects to 3.0, rebuilt and ran locally, synced, and the rerun passed in about a minute and a half.
- A failing test halts the pipeline before publishing. After he added a test asserting 1 + 2 = 4, the code compiled but the test step failed (2 tests, 1 passed, 1 failed) and nothing was published. Giard says that is what you want: compiled code that fails its tests should not continue through CI/CD.
GCastBuild an Azure DevOps Release Pipeline [GCast 73]
- A release pipeline deploys what the build pipeline produced. Giard says a build verifies the app compiles and passes tests but does nothing for end users; the release pipeline takes the published binaries and pushes them to an Azure app service.
- The Azure App Service deployment template needs its task configured. Under Pipelines > Releases > New pipeline, stage 1 uses the "Azure App Service deployment" template; a red exclamation mark shows until the task has a subscription, the app type (web app on Windows) and the app name. The app service must already exist.
- The artifact points the release at the build pipeline's output. Giard takes the defaults, the latest version, then renames the pipeline from "New release pipeline" to something descriptive and saves with a comment, treating pipeline changes like source control.
- Releases are numbered and still started by hand. Release 1 queued on an agent and deployed the default welcome page. After he edited the page to say "Welcome to GCast", he ran the build (1 minute 38 seconds) and then created release 2, which deployed quickly and showed the change.
Crosstalk SolutionsRaspberry Pi Network Troubleshooting
- A Pi can capture packets only while the internet is down. The host's script pings 8.8.8.8 once every 5 seconds; on a failed ping it kills any running tcpdump and starts a new capture to a date-stamped file, stopping when connectivity returns, so the pcap can be read later in Wireshark. Any Linux box would do; a Pi 4 with 4 GB is overkill, and a Pi Zero W or Pi 3 would suffice.
- Three script improvements were in progress at recording. The ping target and the network interface (wired or wireless) are being made variables, and pcaps taken during an outage will be uploaded automatically to an FTP server once connectivity returns, replacing his manual retrieval. The script is offered for download.
- The firm's phone-home system gives remote access without firewall changes. Crosstalk devices check in with what it calls its RMS system on boot; ticking "connect with VPN" makes the Pi open a VPN tunnel to the RMS server the engineer is also connected to. He planned to leave it on site for a week or two and check for captures remotely.
- The client fault takes down only wired clients, sporadically. In a roughly seven-person office with under 30 devices, wired clients lose both internet and LAN (including a Synology NAS) for 5 to 20 minutes, from three times a day to once a week; wireless clients are unaffected. During outages the UniFi controller loses the downstairs US-24 switch but still sees the USG and the UAP-AC-Pro.
- Swapping both switches and testing the cable ruled nothing in. Firmware was current, the junky upstairs switch was replaced with a TP-Link 8-port, the roughly 100-foot cross-connect tested clean, and a spare replaced the US-24 with no change. His suspicions, all unconfirmed, are a broadcast storm, malware, a rogue device ARPing as gateway, or the large Canon copier, which staff once power-cycled to clear an outage.
GCastIntegrating a Visual Studio Solution with an Azure DevOps Repo [GCast 71]
- Team Explorer connects Visual Studio to the Azure DevOps organization. In Visual Studio 2019 the Manage Connections icon, a plug, connects to a project in the organization. Giard uses a new ASP.NET Core app but says the process is the same for any project type.
- "Add Solution to Source Control" creates only a local Git repository. Lock icons appear on the files, but nothing is in Azure DevOps yet.
- The first Sync asks whether to publish to GitHub or Azure DevOps. Choosing a Git repo in Azure DevOps, with the repository name defaulting to the solution name, and clicking Publish repository creates the project in the organization with the files under Repos.
- Git changes are committed locally, then synced to the server. Giard commits with a comment on the Changes page, then syncs; he prefers syncing both ways, though one direction is an option. To simulate a teammate he edits a file in the browser, and syncing again (or a fetch or pull) brings that change down.
Technology and FriendsTibi Covaci on Migrating to the Cloud [Episode 595]
- Many customers now need to redo a badly done first move. In their words they want to go "from the bad cloud to the good cloud". Covaci says some of his customers are new to the cloud, with anywhere from a couple of hundred to about 10,000 applications to move to Azure, while others moved early without governance or structure. He blames early best practice, including advice he himself once gave, such as putting everything in separate subscriptions, which left customers with hundreds of subscriptions they find impossible to manage.
- Treating the cloud as another data center wastes it. He argues that running the cloud like a data center misses the platform- and software-as-a-service offerings, and that work such as manually managing backups and rotating tapes should be automated so engineers can do smarter work. His analogy is electricity: owning your own capacity means paying for spare you may not use, which leaves hardware underutilized.
- Educate staff first, then use the move to clean house. Covaci's key recommendation is education, because people who feel unprepared or obsolete will cause problems in the long run, followed by keeping the existing governance rules in force in the cloud. He says that of one customer's almost 10,000 applications, about 10% could be dropped or replaced with off-the-shelf software.
- Lift-and-shift is easy in theory, harder in practice. He says applications were set up by hand from step-by-step documents, so moving one often breaks on undocumented steps, and he sees infrastructure as code and DevOps practices taking a strong hold as the fix. He finds developers adapt to DevOps more easily than IT staff, who face learning more PowerShell, scripting and programming.
- Infrastructure as code frees teams from hardware-bound software versions. Covaci says servers tied to hardware leave teams stuck, for example unable to run .NET Framework 4.5 because IT has not installed it, whereas fully automated deployment would let them adopt .NET Core 3.1, released "the other week", on disposable infrastructure they can test on and throw away. The host adds his own point that painless deployment encourages deploying more often.
GCastDeleting an Azure DevOps Project [GCast 70]
- Project deletion is in Organization settings, not the project. Giard says it took him a long time to find because the project's own menus have no delete; from the Azure DevOps main page, Organization settings (bottom left) > Projects lists every project with a Delete button, and deletion must be confirmed by typing a name.
- A deleted project can still be restored. Organization settings > Overview lists recently deleted projects, and selecting one and clicking Restore brings it back. Giard's verdict: not hard to do, but placed where it is not intuitive.
Crosstalk SolutionsGen2 UniFi Switches - USW-24-POE
- Only the Pro Gen2 switches get 10G uplinks and layer 3. Of four released models, the USW-16-PoE ($299: 8 PoE+, 8 non-PoE, two 1G SFP) and USW-24-PoE ($379: 16 PoE+, 8 non-PoE, two 1G SFP) are layer 2. The USW-Pro-24-PoE ($699: 16 PoE+, 8 PoE++, two 10G SFP+) and USW-Pro-48-PoE ($1,099: 40 PoE+, 8 PoE++, four SFP+) get layer 3 in a future software update, Ubiquiti says.
- The USW-24-PoE is fanless and shallower than Gen1. Its depth is 7.9 inches against 11 for the older fan-cooled switches; the host's Gen1 24-port needed its loud fans replaced with Noctuas. He relies on others' reports, including a teardown video by another channel, for its heat dissipation.
- Gen2 drops 24V passive PoE output. The port settings no longer offer it, so a 24V passive device such as the host's camera now needs a PoE injector. The first 16 ports are 802.3af/at.
- Update the firmware before judging the touchscreen. The switch arrived on 4.0.49, where tapping the screen only cycled a few statistics; 4.0.66 brought large improvements, and the host recommends updating. UniFi site settings cover LED and screen on/off, brightness, a 300-second timeout and rack multi-screen synchronization for stacked switches.
- The touchscreen gives useful per-port detail at the switch. It shows which ports are linked and at what speed, real-time traffic and PoE watts per port (3.4 W for a ClearlyIP phone, 7 to 11.5 W for a Cloud Key Gen2 Plus), total throughput, CPU and RAM, PoE draw against capacity, and IP, uptime, MAC and firmware. A speed test on his roughly 400/20 connection showed on the live graph; background colour is settable only on the switch.
Technology and FriendsEpisode 594: Christian Geuer Pollmann on Erlang and Elixir
- Erlang was designed for telephone-switch reliability, and multicore makes it relevant again. Geuer-Pollmann, who works for Microsoft, says Erlang came out of Ericsson research around 1985 to give phone switches very high uptime, with fault detection and process restarts built into the virtual machine and an actor model of tens of thousands of lightweight processes that share nothing and only exchange messages. With clock speeds no longer doubling and Azure VMs offering around 128 cores, he argues these battle-tested ideas now fit how compute has to be spread.
- The Erlang system has several layers, and Elixir is the gentler entry. He describes the BEAM virtual machine, the Prolog-inspired Erlang language, and the OTP libraries for supervision and state, and says the language did not click for him when he first looked about 10 years ago. Elixir, created by Ruby on Rails core-team member José Valim, gives the BEAM a Ruby-like syntax, and the Phoenix web framework on top of it delivers HTTP responses in the microsecond range; his advice is to learn Elixir first and dig into Erlang later.
- He would build his large notification system on Elixir today. In 2014 he and a German partner built an Azure backend with .NET and SignalR to hold 2 million-plus WebSocket connections and push sub-second notifications, first for a German TV quiz show and later for the Eurovision Song Contest. He says that if he designed it today he would use the Erlang VM with Elixir.
- Fair scheduling is the BEAM's appeal for heavily concurrent systems. He says every process with work is guaranteed scheduled, so under load performance degrades but work still happens, and even an infinite loop cannot take the whole CPU; a CPU at 100% on an Erlang deployment just means you are using the cores you paid for. He contrasts a Java or .NET node that freezes during garbage collection and cannot be told apart from a dead one, and cites the WhatsApp backend, Riak, RabbitMQ and Discord's presence system for about 11 million players (Elixir plus Rust) as users.
- He wrote open-source Azure SDKs for Elixir as a hobby. They wrap the Azure Resource Manager management APIs through client code generated from Microsoft's Swagger files, plus a hand-written library for Azure Storage, because Azure lacked Elixir support while Google and Amazon had some. He also built a tool that evaluates ARM template expressions locally in about half a second while keeping whitespace and line positions, which he says replaced waiting about two minutes for Azure to report a missing brace.
Crosstalk SolutionsSnom M85 Ruggedized DECT Handset
- Snom's system costs far more than the Yealink kit Crosstalk usually sells. The Yealink W60P kit is $189 with base and one handset (extra handsets about $92), whereas the Snom M700 base is $259 and the M85 handset $329, almost $600 for the first phone. The host plans to add the Snom gear to the phones he sells.
- The premium buys multi-cell scale. The M700 supports up to 253 base stations with handsets roaming between them and up to 1,000 handsets, against the single base (plus repeaters) of the older Yealink kit; Yealink's own multi-cell product the host has not tried. The base is PoE-powered.
- Many vendors' DECT phones are the same rebranded hardware. The host shows the Snom M25 office handset and base matching Sangoma's and Mitel's single-cell DECT products, built by one licensing manufacturer, so shopping around between them changes little. Snom also offers the mid-range M65.
- The M85 suits harsh sites needing emergency features. It is IP65 dust- and weather-resistant, with Bluetooth and a 3.5 mm headset jack, a hard-to-press red alarm button that dials a preset number, a man-down motion sensor and a wrist-loop pull alarm, which the host has not tried. His deployment was a retirement home that wanted handsets able to survive heavy abuse; one of five arrived defective and was replaced by RMA.
- The M700 setup has a few non-obvious steps. Its web interface failed for him in Chrome but worked in Firefox; the default login is admin/admin. Set country and time zone by region plus an NTP server, enter the SIP server as registrar, and create extensions with the PBX SIP credentials and *97 as the FreePBX voicemail number. The handset registers using the base's access code, default 0000.
GCastAzure DevOps Branch Policies [GCast 69]
- Without branch policies anyone can push straight to master. Giard pulls, edits the readme, and commits and pushes directly to master, which succeeds.
- A minimum-reviewers policy blocks direct pushes to master. Policies are set from Branches > the three dots on master > Branch policies, which Giard calls a little hard to find. He requires at least one reviewer and allows requesters to approve their own changes; his next push to master was rejected.
- Changes then reach master only through a pull request. He creates a branch with git checkout -b, pushes to it, and opens a pull request; it cannot be completed until approved, and after he approves it himself it merges into master.
- "Check for linked work items" blocks completion until one is linked. With that policy added, an approved pull request still showed "no work items linked" marked as required but not satisfied. Linking an existing work item, searchable by name or number, let it complete.
Technology and FriendsEpisode 593: Annie Bougie on Autonomous Driving
- Autonomy comes in levels, from driver aids to no driver. Bougie describes level 0 as no features (her son's 2006 Ford Fusion), level 1 as driver aids such as adaptive cruise control and lane assist, and level 3 as hands-off driving in predictable settings such as highways or valet parking, with the driver available to take over. She says Tesla Autopilot is currently considered level 3, at least on high-end Teslas.
- The highest levels are not yet commercially available. In her description, level 4 lets the driver nap and the car safely pulls over if it cannot cope, and level 5 needs no driver or steering wheel and exists only in geofenced areas. She predicts more manufacturers will release level 3 within the next five years and that level 4 will come, but she will not give a date.
- Liability and government approval matter as much as the technology. Bougie raises who is responsible in an accident, and says governments must certify the cars as safe; she reports the German government is preparing for level 3 cars over the next few years, and that driverless shuttles at the Frankfurt car show were not yet operational.
- Training relies mostly on simulation before real roads. She says models need hours of training and testing, done in simulation because errors there are cheapest, before cars go out on public roads. A friend in San Francisco saw a test car hesitate to change lanes until its safety driver took over.
- Her own Microsoft work writes scenarios for a driving simulation. She works in automotive commercial engineering at Microsoft, on a level 3 autonomous driving platform being built with a car manufacturer, where her part is describing scenarios and creating the files that define them for the simulation. The work is not published and there are no plans to publish it; the episode was recorded in mid-November.
Crosstalk SolutionsClearlyIP Phone Provisioning
synopsis
The host walks through auto-provisioning ClearlyIP phones onto FreePBX with ClearlyIP's free device module, ending with a factory-reset phone that finds its PBX through ClearlyIP's redirect server and comes back up as its extension untouched. Once the setup is in place, he says, it is close to bulletproof and lets a reseller drop-ship phones that configure themselves.
The module. Provisioning takes four steps: an extension, the module, a MAC-to-extension mapping, and a way for the phone to find its file. The module is uploaded once from ClearlyIP's wiki URL and then updates like any other. He sets the phone-apps and provisioning servers to the FQDN over HTTPS with a Let's Encrypt certificate, so a later migration needs only a DNS change. He opens TCP 2579–2580 in the FreePBX firewall to the local zone only.
Defaults, templates and models. The hot-desk wizard creates a logout extension, 999, taking up to 100 registrations and able to dial 911, so a logged-out phone never loses emergency calling. Templates carry per-location global settings: host FQDN, a 24-hour resync, backlight, line labels, time zone, and BLF presses (long press *80 to intercom, in-use short press * to transfer to voicemail). Models carry a phone's keys and expansion modules; a mapping ties extension, template, MAC and model together.
Getting the phone to its file. Manually, the provisioning URL is pasted into the phone's web interface, and an echo test on *43 confirmed registration. At scale, ClearlyIP's reseller-only redirect server holds each location's server details and the phones' MACs, by hand or CSV. After a factory reset, his CIP 270 checked in, was redirected and returned as extension 225. The portal also shows check-ins and firmware, and can lock out a non-paying customer's phones.
- Auto-provisioning lets phones configure themselves, even when drop-shipped. Phones download configuration files built from a MAC-to-extension mapping, so button changes push out to every phone; as a reseller the host drop-ships phones and they set themselves up when plugged in. The ClearlyIP device module is free, unlike Sangoma's paid Endpoint Manager, and works similarly.
- Point provisioning at an FQDN, not an IP, and open its ports. The module is uploaded once via Module Admin from ClearlyIP's wiki URL, using a newer version than the link gives, then updates like other modules. Using the server's FQDN lets phones follow a later migration by a DNS change. TCP 2579 (phone apps) and 2580 (provisioning) must be opened in the FreePBX firewall, unless Sysadmin Pro's ports are used instead.
- Logged-out phones should fall back to an emergency-capable extension. The hot-desk wizard creates a default logout extension (the host's is 999, allowing up to 100 registrations) that can dial 911 and internal extensions but not outside lines. An unmapped phone shows a "not registered" image and a login button, so staff can log in with extension and voicemail password instead of a MAC mapping.
- Templates hold global settings, models hold per-model keys. The host uses one template per customer location, with resync every 1,440 minutes and its own time zone, and models for key layouts (here a CIP 270). He sets BLF long-press to prefix *80 for intercom and in-use short-press to prefix * for transfer to voicemail, which he says helps receptionists.
- ClearlyIP's redirect server provisions factory-fresh phones by MAC. At devices.clearlyip.com, which needs reseller sign-up, MACs entered singly or by CSV redirect a defaulted phone to the customer's PBX; the host was adding about 30 this way. It shows check-ins and firmware, which module updates push to phones, and offers a reseller lock-out for customers on per-extension monthly plans who stop paying.
GCastGCast 68: Azure DevOps Work Items
- Work items are created from the Boards section, by type. In an Azure DevOps project, Giard expands Boards in the left menu, opens the Work Items subsection, and clicks New Work Item, which offers types including task, bug, feature and epic. A title is the only required field he names.
- Some fields depend on the type; others appear on every item. Giard says the type-specific questions differ, while fields such as priority, estimated hours, remaining hours and completed hours are common to all work items. Priority numbers have no meaning in themselves; only their order relative to each other matters.
- Linking items as parent and child builds a hierarchy that rolls up. He creates an epic ("a grand container" for other work items), a feature under it, and a task under the feature. Each link is made under Related Work with "Add link" to an existing item, setting the other item as parent. Giard says how you structure the hierarchy is up to you.
Crosstalk SolutionsRaspberry Pi 4 Getting Started
- The host recommends a CanaKit starter kit as the easiest start. It sells at $79.99, $89.99 and $99.99 for the 1 GB, 2 GB and 4 GB Pi 4 respectively, through links in the description that are Amazon affiliate links. He calls 1 GB fine for testing but would take 4 GB for any graphics or desktop use. The kit includes a 32 GB class 10 microSD card, heatsinks and an inline power switch he uses constantly to avoid wearing out the USB-C port.
- The kit ships only one micro-HDMI cable for two ports. Dual monitors need a second micro-HDMI-to-HDMI cable; with one monitor, use the port labelled HDMI 0, nearer the power connector. He puts keyboard and mouse on the USB 2.0 ports to keep the blue USB 3.0 ports free for fast devices like external drives. He also prefers wired Gigabit Ethernet over the onboard Wi-Fi for initial setup.
- Triple-check the drive letter before formatting the microSD card. SD Card Formatter will just as readily wipe a USB drive, unrecoverably. A brand-new card can skip formatting. The host then copies the unzipped NOOBS files onto the card. Without a network connection, NOOBS offers only Raspbian Full; other operating systems appear once it can reach the internet, wired or over Wi-Fi.
- The first-boot wizard's software update can fail; update manually instead. It has failed for the host before, though it worked on this recording, so he shows the manual fallback:
sudo apt-get updatethensudo apt-get upgrade -y. The wizard is also where to replace the defaultpiuser's password, "raspberry", and tick the black-border box to fix overscan. - Disable auto-login, then enable SSH and VNC for remote access. Both settings are under Raspberry Pi Configuration. Windows 10's command prompt can now SSH natively, but the host prefers PuTTY because it saves sessions. RealVNC Viewer reaches the desktop, and he advises against saving the password in it, as less secure.
Technology and FriendsEpisode 592: Jes Schultz on Data Engineering
- Data engineering is the work of making data usable. Schultz, speaking after her PASS Summit session on the role of the Azure data engineer, says data scientists get the attention, but there is a whole discipline behind them that gets data ready for analysts and data scientists. Whether data scientists or dedicated data engineers do that work depends on the size of the team, the company and the project.
- Five pillars make up the discipline, whatever the technology. Schultz lists them as: building the compute and storage infrastructure, ideally as infrastructure as code; identifying and ingesting disparate sources (relational, non-relational, IoT); building pipelines from source to destination; data modeling (star or snowflake schema, warehouse or data lake), where she puts processes ahead of tools; and storage that is highly available, resilient and not corrupted.
- Choose ETL when the questions are known, ELT when not. In her account ETL (extract, transform, load) cleans the data before loading, fixing types and dates and merging sources, which suits users who know what they want to ask. ELT loads raw data, typically into a data lake, and leaves analysts and data scientists to transform it, which suits large, wide-ranging data where the questions are open.
- Databricks is a keystone of Azure's data toolkit; learn Python. Schultz maps the pillars onto Azure: Event Hubs, Stream Analytics and Azure Data Factory for ingestion; SQL Server, MySQL, Postgres, Cosmos DB, blob storage and Data Lake for storage; and Databricks, a wrapper around Apache Spark, for fast in-memory computation on large data. Python is her recommended language because so much data work now runs on it.
- Demand comes from companies wanting prediction, not just hindsight. Schultz argues that "no company has less data than they did a year ago" and companies want to predict the future from past data, which is why almost 100 people came to her session. She says the move to the cloud makes the Azure Data Engineer Associate certification, which takes two exams, more valuable; she passed both by June 2019 and says studying taught her streaming, IoT data and data lakes, which were new to her in November 2018. Giard says he has mixed feelings about certifications, and she agrees they have limits.
Technology and FriendsEpisode 591: Martin Kearn on Document Recognition and Knowledge Extraction
- OCR alone returns a mass of text; extraction needs context. Kearn, a Microsoft software engineer in the UK, names three Azure services as the basis of knowledge extraction: OCR in the Computer Vision API; Form Recognizer, about six months old, which pulls specific fields such as amount, date and vendor from templated documents like invoices; and Azure Search, which adds cognitive skills to indexing. He thinks Azure Search may have been renamed Cognitive Search at Ignite but says he is not sure.
- Routine customer emails can be answered with no human involved. His example is a large company that gets thousands of emails about orders and quotes, where people now read, triage and route each one. Understanding the email's intent and pulling out its key data, together with Logic Apps, Office Graph integration and LUIS, can answer an order-status inquiry automatically. Giard adds that the customer also gets a faster answer, not just the company a lower cost.
- Confidence scores send uncertain extractions to human review. Asked about the risk of mistakes in UK prescription processing his team has worked on, Kearn says any machine-learning result carries a confidence level, and below a threshold the document goes to a person. He says he does not know the legal implications.
- A public repository of recipes is meant to fill the services' gaps. At a hackfest with a team of about 30, Kearn and his colleague Shane Peckham were building Python code modules, samples and docs drawn from common project scenarios, modeled on Microsoft's NLP recipes repository on GitHub. He expected it at something like microsoft/knowledge-extraction-recipes by the end of the calendar year, but said it was not up yet.
Crosstalk SolutionsUniFi Industrial Switch
- The UniFi Industrial Switch is a niche part for high-power PoE. The USW-Industrial has 10 ports: two non-PoE gigabit uplinks and eight that auto-sense 802.3af, 802.3at or 802.3bt (PoE++). With the 450 W power supply it can deliver 60 W per port on all eight at once. At $499 MSRP ($506.15 on Amazon at recording), the host says he can think of few of his own projects that would have needed it.
- Its value is the ruggedized build, not its UniFi features. It is fanless and plenum rated, mounts horizontally or vertically in a wall, and has a die-cast aluminium case powder-coated against corrosion. It weighs 8.5 lb (3.85 kg). It runs at −40 to 50 °C on the 450 W supply, or −40 to 60 °C on 240 W. The host found nothing special in the UniFi controller beyond the PoE++ flag, and pitches it as a set-and-forget switch for rafters and attics, or in place of the Netonix ruggedized switches his firm uses on wireless ISP jobs.
- Its intended loads are 802.3bt devices such as the USW-Flex. It can feed the USW-Flex outdoor switch with 60 W, or power the UniFi BaseStation XG (for stadium coverage) and the XG access point. The host says that on 802.3at power alone, the USW-Flex had only managed one G4 camera before devices started rebooting.
- In his test, one 802.3bt port ran five devices through a USW-Flex. One port fed a USW-Flex, which powered a G4 Pro camera, a Cloud Key Gen 2, an In-Wall HD and a UAP-HD access point, and all of them stayed up. The host says the switch stayed cool to the touch under that load.
Crosstalk SolutionsUniFi FlexHD
- The FlexHD is a nanoHD in an indoor/outdoor body. The host says the UAP-FlexHD-US has essentially the same specifications as the UAP-nanoHD: 802.11ac Wave 2, 4x4 MU-MIMO at about 1.7 Gbps on 5 GHz, and 2x2 MIMO at 300 Mbps on 2.4 GHz. It has one gigabit Ethernet port and a reset button, and is rated for −30 to 70 °C.
- It is weather-resistant only when mounted upright. It carries no IP66/IP67-style rating and its mounts leave the Ethernet port exposed. The datasheet says outdoor units must be mounted vertically, right side up, so gravity keeps water off the port. Mounting upside down in a drop ceiling is for indoor installs only.
- For $12 more than the nanoHD, it adds mounting options. It cost $186.20 on Amazon at recording, and comes with a tabletop stand, a wall/pole mount and an 802.3af PoE injector. A recessed ceiling mount exists, but the host could not find it on sale. He guesses it will cost about $20, like the $19 G3 Flex camera ceiling mount.
- The host calls it steep for home users but good for business or outdoors. His example is covering a pool area. In his test it adopted and provisioned through the UniFi phone app in just over two minutes, with firmware 4.0.69 offered. He expects it to behave like any other UniFi AP, and plans to swap it in for the In-Wall HD in his office, mainly because it looks better.
Technology and FriendsEpisode 590: J Tower on .NET CLI
- The .NET CLI was designed as a first-class tool from the start. Tower says the compilers and MSBuild have always had command lines, but those were "a bit of an afterthought". The .NET CLI, around since .NET Core began, brings all the tooling under one tool: build, NuGet restore, run, debug, packaging and deployment.
- Its main use is automated builds on machines without Visual Studio. His own most common use is DevOps: scripting builds, releases and packaging so the full IDE does not have to be installed on the build machine. It is not a scripting language with loops or conditions; it runs one command at a time, typed or called from a pipeline.
- Mixed-platform teams need it even if you use Visual Studio. Tower says developers on macOS or Linux, or using other editors, can work on the same .NET Core project only if everyone shares the same tooling, and the CLI is that tooling.
- Every command has four parts: runner, verb, arguments, options. It starts with
dotnet, then a command such as build, run or restore, then arguments such as the project or solution file, then options such as the output directory or Release or Debug configuration. Tower says it works much like the Azure CLI and npm and unlike PowerShell's style; Giard puts the pattern down to Linux CLIs. - The CLI scares people but is simple to pick up. It ships with the .NET SDK, and Tower says Visual Studio users already think in its commands. The .NET Core CLI tutorial on docs.microsoft.com explains how to set up tab completion, which is not on by default on every platform, and
--helpgives documentation at any point in a command.
GCastGCast 67: Azure DevOps Repos, Branches, and Pull Requests
- Files can be added, edited and committed entirely in the browser. Under Repos (Files is selected by default) in the project from the previous episode, Giard adds a file with New File, edits it, and commits it to the master branch with a comment. He notes a commit can also be associated with a work item, which he leaves for a later video.
- With several users, commit to a branch rather than to master. Giard's reason is that committing straight to master may break what others are doing or collide with their commits. He creates a branch from the branch selector, commits a change there, and shows that master's copy of the file stays unchanged until the merge.
- A pull request is what merges the branch into master. He creates one under Repos, Pull Requests. The title defaults from the commit when there is a single change and can be overridden. Policies can be set to require review before merging. Because he has none set, he completes the merge himself, and master then shows his change.
- The same flow applies from Git commands or an IDE. Giard says most developers will do this at the command line or in Visual Studio or Visual Studio Code rather than the browser, but the process is the same: edit, commit to a branch, open a pull request, and have someone approve the merge.
GCastGCast 66: Creating a Repo in Azure DevOps
- A new project takes a name and a visibility setting. Giard describes Azure DevOps as an application lifecycle management suite available to anyone with an Azure or Office 365 subscription, reached at dev.azure.com. A project gets a name, an optional description, and one of three visibilities: private (invited people only), public (anyone on the internet), or available only within your enterprise.
- A project's repo can be initialized with a README and edited in place. Under Repos, Files, he clicks "Initialize" to add a README containing boilerplate text. Giard says the repo can be cloned to the desktop and used with Git tools, or edited in the browser, as he does here, replacing the placeholder text and committing directly to the master branch.
Crosstalk SolutionsUniFi Building Bridge
- The Building Bridge is a 60 GHz short-range gigabit link with 5 GHz fallback. The UniFi Building Bridge sells as a pre-paired set of two antennas for $499 MSRP. The 60 GHz radio reaches up to 500 m (1,640 ft) with clear line of sight, and the 5 GHz backup covers rain or snow fade. Each unit runs on 802.3af (an injector is included) or 48 V passive PoE. Rated limits are −40 to 70 °C and 125 mph (200 km/h) wind.
- Setup on his UniFi Dream Machine failed; a Cloud Key Gen 2 worked. On the Dream Machine, only one of the two units would take a firmware update and the link would not come up. Adopting to his Cloud Key Gen 2 worked, at 97/100 link quality. While both units sat in his office, the host suspects they were interfering with his other wireless.
- His iperf tests at about 9 m gave roughly half a gigabit. He measured about 500 Mbps one way and 550–575 Mbps the other, and about 750 Mbps combined with both directions running at once. UniFi reported 1.75 Gbps capacity, which the host calls ambitious: the link is not full duplex and the Ethernet ports are only gigabit.
- Widening the 60 GHz channel hurt the reported link but not throughput. Moving from HT1080 to HT2160 dropped reported link quality to 66/100 and capacity to 1.17 Gbps, while iperf held at about 550 Mbps; he reverted the change. Only the access-point side can set channel width, and the 5 GHz backup allows only a manual channel. The LED ring colour can be changed, which the host calls cool but unnecessary.
- The host likes it but finds it overpriced against MikroTik. He puts the MikroTik Wireless Wire at about $200, also out-of-the-box. In his view, the Building Bridge's extra $300 buys looks and easy UniFi integration.
Technology and FriendsEpisode 589: Tobiah Zarlez on Gender Identity
- They are non-binary: neither male nor female. Zarlez uses they/them pronouns and prefer "non-binary" as an umbrella term, with "genderqueer" as a more fluid alternative. They say the status is legally recognized in California, where they live, and in Washington State, and appears on their birth certificate and driver's license. It is not on their passport because the US does not recognize it federally.
- Meeting another non-binary person showed them it was possible. Zarlez says they were never taught non-binary was something you could be, and their experience did not fit the stereotype of "a woman trapped in a man's body". Passing as male was easy, and being affirmed takes active effort. Since starting therapy about three years earlier and coming out a couple of years before the interview, they say they have found much of their lifelong anxiety came from gender dysphoria, and that hormones and laser hair removal, which they call technology, have helped.
- They rejected the idea that biological children show a male side. Giard raised their marriage to a woman and their biological children. Zarlez answered that families come in all combinations, that their son is adopted, and that people overemphasize biological genetics in family structure.
- Tech's exclusive-club culture pushes out people who aren't straight white men. Zarlez says tech is steeped in a self-reinforcing toxic masculinity, and that people who are not straight white men leave tech much sooner. They say escaping toxic co-workers is the number one reason women in tech change jobs. Some colleagues have become closer since they came out and others the opposite, and they choose their own comfort over others' discomfort. They credit Microsoft with a strong stance on inclusion and call this conversation itself progress, recalling that about 10 years earlier same-gender marriage was still being debated.
- Allies should listen, learn the history and question "new". Zarlez argues transgender people "have been around forever" and were written out of history. Their example is a German institute for transgender care and research that the Nazis raided and burned in the 1930s, and they cite third genders in many Native American cultures. Their advice is to question where an assumption that something is new comes from.
Crosstalk SolutionsUniFi Dream Machine
- The Dream Machine undercuts buying the equivalent UniFi parts separately. At $299 it combines a 4x4 802.11ac Wave 2 MU-MIMO access point, a Cloud Key-style controller, a USG-style firewall and a four-port gigabit switch (no PoE) with one WAN port; the host prices a nanoHD ($172), Cloud Key ($179) and USG (~$139) at just under $500. The trade-off is that the built-in access point sits wherever the internet terminates, though extra APs can be adopted.
- The host aims it at home users and SOHO, not medium businesses. He sees it as an entry point to UniFi for enthusiasts and for small businesses with "vanilla" needs, such as a tanning salon. Criticisms he has heard online but not tested (no adoption to a hosted controller, no multi-site, no JSON file editing) matter to IT people like himself, not to that audience.
- Its CPU should beat the USG, but he could not test gigabit. He does not recommend the USG above about 300 Mbps with IDS/IPS and DPI on; the UDM has a 1.7 GHz quad-core ARM Cortex-A57 and ships with DPI enabled by default. Turning on threat management shows a note citing 850 Mbps maximum throughput, which he could not verify on his roughly 400/20 Mbps connection.
- Setup supports two-factor login through the Ubiquiti account. The host believes 2FA was not yet available in standard UniFi controllers or Cloud Keys. The UDM ran UniFi Network 5.12.22 as of November 26, 2019, and he advises home users to leave automatic firmware updates on, judging security fixes worth the risk of a buggy release.
- There is no backup slot and no battery, so download backups. There is no microSD card for auto-backup, so a failed unit could take its backups with it; he advises downloading one after initial setup and any major change. Pulling the plug shut it off instantly, and he says it remains to be seen whether it avoids the Cloud Key Gen 1's database corruption.
Technology and FriendsEpisode 588: Walt Ritscher on Try .NET
- Try .NET turns static C# documentation samples into live, editable code. Ritscher says Microsoft built it for authors of technical documentation and announced it at .NET Conf "a couple weeks ago": the reader gets an editor beside the sample, can change it and press run, and sees compile errors in the browser. It is written in Blazor and runs as WebAssembly; his guess, since he has not seen the code, is that each edit is recompiled to WebAssembly and rerun.
- For now it supports only C# and a single runtime version. Ritscher says it works only with C# on .NET Core 3; F# is planned and he does not remember whether VB is. All the demos in his roughly 30-minute LinkedIn Learning course on it, released alongside .NET Conf, were console applications; he has not tested ASP.NET Core or UI projects and does not know whether they work.
- Authors pair a markdown page with a real, compiling project. Ritscher says you wrap the code to show in a
#region, and code outside it, such as database setup, stays hidden but still runs on every execution. In the markdown you extend the usual triple-backtick code fence with parameters naming the project, the class and the region, so one project can feed several samples on a page. - A local command verifies and runs the docs, so deployment can wait. Ritscher says you install a few pieces from try.net, including a local runtime and project templates; running the
try .netcommand from PowerShell checks that the code fences resolve, the assemblies are found and the code builds, then opens a browser with it running. He has not been through the deployment process himself. Asked by Giard whether powerful C# code could do harm, he says he does not know, though WebAssembly runs in a sandbox. - Power Apps suits forms over data, not full line-of-business systems. Ritscher, previewing his VS Live talk, says a developer can build a small team app in an hour or less instead of a full Visual Studio project, though its main audience is Microsoft's "citizen developers" among what he puts at 750 million Excel users. Like Excel, he says, it becomes a trap when people build entire applications on it; Giard, whose son built complex Power Apps for an employer, agrees.
Technology and FriendsEpisode 587: Robert Green on Microsoft Graph
- Microsoft Graph lets you query Microsoft 365 information as data. Green describes it as a RESTful API over 65 services, including mail, contacts, tasks, calendar items and SharePoint folders and files, plus Azure Active Directory and, he thinks, some Azure services. The point, he says, is that the processing happens on the server where the data lives and only the answer comes back.
- Small queries replace context switches into Outlook and SharePoint. Green's examples: an app that checks on vacation for high-importance mail from his manager and shows a smiley or frowny face without opening Outlook; a query for contacts with a recurring all-day "birthdays" category event; and a customer app that checks whether a SharePoint folder named for the customer holds a contract file. None of this does anything you could not do by hand, he says, but it automates it.
- Earlier Office automation needed Office running; Graph does not. Green, who did a lot of Office development, says VBA, Visual Studio Tools for Office and COM automation suited a world where you lived in Office or did not mind starting it, but they work poorly on a phone or a server.
- You can use the .NET SDK or build the query string yourself. Green says the Microsoft.Graph NuGet package gives a fluent client (along the lines of
me.messageswith a filter on importance and sender), usable on phones through Xamarin, while from another language such as Ruby you append the query to the URL and send it over HTTP. Field selections are strings rather than strongly typed and casing matters; filtering support is not the same across all data types, which he expects to converge as product teams build out their APIs. - Start with Graph Explorer, the docs, and explicit permissions. Green says Graph Explorer, linked from the docs, runs sample queries and shows the query string and the JSON returned, including obscure Outlook contact fields. The docs include sample apps and walkthroughs for UWP, ASP and Xamarin with Azure Active Directory sign-in, and each app must declare permissions, such as sending mail on your behalf, that the user approves at first login. He says OneDrive and Teams files are SharePoint behind the scenes, so the same reads and writes apply.
Crosstalk SolutionsClearlyIP Now Available!
- Crosstalk's own web store now sells the full ClearlyIP lineup. It joins the Sangoma and Yealink phones the store already carries, with free shipping. The host, who calls this a sales video and promises a proper review later, says the people behind ClearlyIP are familiar names from the FreePBX community.
- The ClearlyIP 710 server suits small businesses, not its rated maximum. It costs $610 and is fanless, with a 2 GHz quad-core Celeron, 4 GB RAM, a 64 GB SSD and four gigabit ports. It is rated for 100 phones and 50 concurrent calls, but at that scale the host would buy an enterprise-grade server or run two 710s as primary and warm standby.
- Every phone shares community-requested features and free provisioning. All have gigabit pass-through, a stand that doubles as a wall mount, OpenVPN, the G.722 and Opus HD codecs and a two-year warranty, extendable by three years for about $90. ClearlyIP's phone apps and Clearly Device Manager are free, so the paid FreePBX endpoint manager is not needed.
- The range runs from receptionist phone to utility handset. The 270 ($179), the host's daily phone for months, has 10 programmable keys with four pages, a 4.3-inch colour LCD, Bluetooth and Wi-Fi. The 250 has a 2.8-inch screen and eight keys, the 230 the same screen and four keys. The 200 sidecar ($179) adds 40 keys and works with the 270 and 250.
- Bundles were on offer through the end of 2019. A phones bundle (270, 250 and 230) is $349, about 15% off, and a complete bundle adding the sidecar and 710 server is $999. The host asks volume buyers to contact him for discounts, and says the company is young, lacks some phone apps so far, but has a strong roadmap.
Scott HanselmanCode Pages, Character Encoding, Unicode, UTF-8 and the BOM - Computer Stuff They Didn't Teach You #2
- ASCII is just an agreement about which byte means which character. Hanselman explains that bytes were scarce, so the first 128 characters (2 to the 7th) were fit into 7 bits, with "A" as 65 decimal or 41 hex and lowercase "a" at 61 hex. He shows this with a small C# console app that writes bytes 0 to 127 to a file: the editor flags it as an unsupported text encoding, because the low values are control characters rather than printable text.
- Past ASCII's range, the code page decides what a byte means. When he extends the program to bytes 0 through 255, the upper half depends on which code page is applied. He names 1252 for Windows graphical apps, OEM 437 for the console, and ISO 8859-1, which he says are identical up to 127. Past that, the same byte might be a euro sign, a non-breaking space or an accented "a". His point is that a string means nothing without its code page, and that displaying it correctly also needs a font that supports it.
- Without the encoding, software can only guess, and guesses wrong. Opened in Notepad, his 256-byte file came up as garbage because Notepad guessed UTF-16. A second editor guessed ANSI (code page 1252). Pasting a Chinese character ("mother") and switching the file to a basic 8-bit encoding brings up a warning, and he cautions that saving without minding the encoding can lose information. His closing line is "when you get a string and you don't know the encoding of the string the best you can do is guess".
- A byte order mark tells the reader what to expect. Saved as UTF-8, the Chinese character took three bytes. Saving "with signature" added three more bytes in front, the Unicode BOM, which says how the bytes that follow are stored. When he hard-codes EF BB BF ahead of the 256 bytes, the editor detects "UTF-8 signature" and renders the high bytes. The DOS console still showed the character wrongly until he changed its code page, "because that's how things are going to work for a while".
Scott HanselmanWhat's a Carriage and Who's Feeding it Lines? CRLF - Computer Stuff They Didn't Teach You #1
- CR and LF are typewriter motions surviving as control characters. Hanselman explains that the carriage carried the paper: at the end of a line you pushed it back (carriage return) and turned the knob to advance the paper (line feed). In a hex dump of a file holding "ABC" plus Enter, he shows 61 62 63 followed by 0D 0A, which is 13 (CR) and 10 (LF) on the ASCII chart.
- Operating systems disagree on line endings, and you cannot see them. As he puts it, Windows text files "even today" end each line with CR LF, Linux with LF alone, and a Mac with CR alone. That matters when files move between systems, because an editor shows no visible mark for the ending. Notepad in recent Windows 10 does label the file "Windows (CRLF)" in its corner.
- Git on Windows rewrites line endings behind your back. He cloned the same readme from his crlf-examples repo on Windows and in Ubuntu under WSL. The hex dumps showed CR LF on Windows and LF only on Linux, because core.autocrlf was true on Windows and unset on Ubuntu. Git's installer default checks files out Windows-style and commits them Unix-style, so for cross-platform projects "git is lying to you". The stored file is LF everywhere except on your Windows disk.
- Modern editors cope, so check line endings when things look odd. VS Code lets him switch a file between CRLF and LF in its status bar, and the hex dump changed after saving. He says the new Notepad, Visual Studio and VS Code handle both, and that things have mostly standardized on LF, so "our great national nightmare is mostly over". His advice for puzzling bugs, such as a file showing up on one line: check the endings and your git setting, and avoid editors that are not line-ending aware and may silently switch them.
Crosstalk Solutions35km PTP in Manila
- The link's line of sight depends on a tall Manila-side mast. A viewer planned a 35 km (about 22 mile) link from a hillside near Calamba, at roughly 500 ft elevation, to a Manila suburb at about 100 ft, partly over water. In the host's airLink simulation, hills block the Fresnel zone below about 72 ft and line of sight is gone by 50 ft, so the viewer's 82 ft (25 m) mounting height is needed. airLink ignores trees and buildings.
- A Rocket Prism setup gives about 200 Mbps for roughly $1,100. It uses a Rocket 5AC Prism Gen 2 ($209) with a 31 dBi RocketDish ($339) on each end. airLink predicts 100% signal and 545 Mbps, but the host expects about half that in practice. He rejects the airFiber 5 at $999 per side (about $2,000 for 768 Mbps estimated) as nearly double the cost for little gain, needing a 50 MHz channel in likely crowded 5 GHz.
- The host recommends the airFiber 5XHD (LTU) with 30 dBi dishes. With the AF-5G30-S45 dish, it costs about $1,100 for the pair, only $10–12 more than the Rocket setup. Opened to a 100 MHz channel, airLink estimates 100% signal and 1,094 Mbps, almost three times the throughput. He is unsure a 100 MHz channel would hold up in practice.
- Licensed 11 and 24 GHz options cost more for similar results. An airFiber 11FX pair with 35 dBi dishes and four duplexers totals $2,754 for 1,376 Mbps at 56 MHz. The airFiber 24 (about $3,000 a pair) predicts 33% signal and 515 Mbps, and the 24 HD 50% and about a gigabit. US use needs an FCC licence; the host does not know the Philippine rules.
- A nearby university rooftop could replace the tower and serve a neighbourhood. The host notes that a university building near the Manila end has clear sight over the hills. Leasing roof space there would allow point-to-multipoint coverage of the area, potentially as a wireless ISP. He stresses that airLink is a starting point, not a real-world site survey of interference and obstacles.
Technology and FriendsEpisode 586: Jim Wooley on Entity Framework Performance
- Legacy apps can keep full Entity Framework on .NET Core. Wooley says .NET Core 3 added support for Entity Framework 6.3, which matters because EF Core still cannot model many-to-many without the join table as an entity. Existing object models with such relationships therefore cannot just be copied or upgraded to EF Core unchanged.
- Don't drop Entity Framework over one slow query; learn its SQL. Wooley says the usual cause of customers' performance problems is not paying attention: you can use EF without knowing SQL, but performant apps need you to understand the SQL it generates and whether queries use the indexes. EF will not tune indexes; he says Azure SQL can, generating indexes from the queries it runs and rolling back any that degrade other queries.
- Unnoticed lazy loading is the biggest problem he finds. Iterating five customers and touching
.Orderscosts one query plus five more, and it compounds across levels, though Wooley grants lazy loading helps when you never reach the later records. One customer had loops nested four levels deep, each with about five logging calls that ran.First()against the database and wrote the log to the database, with no business logic; deleting the code fixed it. - Several free tools show the generated SQL, with different trade-offs. Wooley's standby, SQL Profiler, shows every statement server-side but cannot tie it to a line of code. EF logging in both Core and full .NET records the generated SQL but omits parameter values by default because they may hold PII; EF Core has a setting to include them, which he would only enable when really troubleshooting. Visual Studio's diagnostic tools can filter to ADO events and jump from a statement to the responsible line, and App Insights can also be hooked in.
- Start free, but a paid profiler can pay for itself fast. Wooley names EF Prof, from people behind NHibernate, and MiniProfiler among third-party tools, some of them paid. He says a roughly $200 license can easily cost less than the time spent hunting a problem without one.
Technology and FriendsEpisode 585: Angela Dugan on Team Dynamics
- High-performing teams come down to paying attention to each other. Dugan, who has just moved from directing her consulting firm's Chicago office to a company-wide people role, says the secret is noticing what teammates need to succeed and treating them as whole people, not just "the person next to you slinging code". Her talk rests this on three pieces: understanding your team, building trust, and leadership skills such as active listening, mediation, coaching and assessment, which developers tend to skip as "soft skills".
- A quiet colleague is not necessarily an introvert. Dugan calls this "the introvert myth": she is strongly extroverted but goes quiet from shyness and social anxiety, and others may be quiet because a past workplace punished speaking up. It matters because introverts and extroverts need different work environments: she thinks out loud at a whiteboard with someone else, while introverted coworkers do better given a few hours alone before they talk. The definition of extroverts as drawing energy from people and introverts as being drained by them is Giard's.
- Personality tools give a team usable information about each other. Dugan recommends 16Personalities as an approachable version of Myers-Briggs. When she posted her own result on her company's Slack, coworkers posted theirs, and she found the firm has only a handful of extroverts. She also covers CliftonStrengths, DISC, Johari and Nohari windows (comparing the words you pick for yourself with the words others pick, as a measure of self-awareness), and personal journey lines.
- Teams of similar people cause more friction in the long run. Dugan says a team of like personalities has less friction at first, but an all-introvert team has no one to rally whiteboard brainstorming, and balancing analytical, tactical and user-minded people produces better software for humans. She adds that a team split evenly by gender can still turn out to be all introverts, so personality is one more variable in building a team. The point that diversity inside the team mirrors a diverse user base was Giard's, and she agreed.
- Personal README files tell teammates how to work with you. Dugan picked up the idea from an attendee at Agile Midwest after asking how she could keep track of the needs of her 34–35 people: each person writes a text file saying whether they are an introvert, what hours they keep, how strict their work-life balance is, and so on. She is writing her own with a few coworkers to settle a format before rolling it out at the company, and says README files and journey lines build trust because people tell their own story.
Technology and FriendsEpisode 584: Phil Japikse on .NET Core Support Cycle
- .NET Core support is far shorter than .NET Framework's. Japikse contrasts the roughly 10 years of bug and security fixes Microsoft has given the .NET Framework (4.8 being current) with .NET Core's two tracks. An LTS (long-term support) release is supported for three years or for one year after the next LTS release, whichever is longer; a "current" release is supported for only three months after the next release ships, and then gets no patches at all.
- A higher version number is not a longer-supported one. Japikse says 1.0 and 1.1 were both LTS, 2.0 was current and is already dead, 2.1 is LTS and supported to, he believes, 2021, and 2.2 is current. Since 3.0 shipped on 23 September, 2.2 stops being patched after 23 December. A group of 10 people from one company in his workshop had production code on 2.2, often because Visual Studio's template defaulted to it, and "freaked out" when he told them.
- The next release line repeats the pattern. 3.0 launched as a current release, and 3.1, scheduled for 5 November, will be the LTS, leaving 2.1 and 3.1 as the supported releases. His own opinion, which he says is not Microsoft's, is that 2.1 was made LTS because it carried GDPR support and enhanced HTTPS.
- Most teams on the short-lived release should roll back. Japikse advises going from 2.2 back to 2.1, saying the only significant 2.2 feature is IIS in-process hosting, a performance gain, so for most projects rolling back is a project-file change plus a couple of settings: follow Microsoft's 2.1-to-2.2 migration doc in reverse. Moving to 3.0 is a much bigger job, because 3.0 no longer runs on the .NET Framework, internal NuGet packages and other dependencies must move to .NET Standard 2.0, and most of the breaking changes are in EF Core.
- Whether to roll back or upgrade depends on risk and testing time. For a new, isolated project with no dependencies, Japikse would go to 3.0. With dependencies that cannot be updated in the month or two left, he says roll back now and migrate later, especially for a high-risk line-of-business or financial application where a rushed move to 3.0 would skimp on testing; for something like a conference website it matters less. Recorded around mid-October 2019 at VS Live Chicago.
GCastGCast 65: Artificial Intelligence, Whale Sharks, and WildBook
- Wildbook uses AI to identify individual animals by their markings. Giard describes the Wild Me application as treating stripes and spots like fingerprints (a zebra's stripes, a leopard's or whale shark's spots) to track individual animals' locations, movements and populations. Sightings can be reported by hand at whaleshark.org, but because that does not scale, Wildbook crawls the web and social media for photos and videos of the animals.
- The bot turns a found video into a dated, located sighting. In what Giard says is a demo of the process rather than the bot itself, a Spanish-language whale shark video is run through language detection and translation (Azure services), keyword analysis ("whale sharks", "world's biggest fish"), keyframe extraction, detection of the shark in each frame, and text extraction from the frames. The "when" came from the upload date, September 26, 2017, and a "last month" in the text; the video gave no "where".
- When location is missing, the bot asks the uploader. It posted a reply asking where the shark was seen; the uploader answered that it was while diving east of Isla Contoy, Mexico, which completed the record so the shark's migration can be tracked. The bot then replied that the uploader was helping a research project and linked the shark's own page.
- Spot patterns are matched against known sharks, with confidence scores. The demo matched the video to a shark catalogued as H019 at a score of 520, with 66% of the spot triangles matching; the next candidate, BZ010, matched only about 23%. A higher score means a higher-confidence match.
- Adopters can name a shark; the project is backed by AI for Earth. H019's page shows where it was spotted and nearby sharks, and an adopter has named it "John Cena". Giard points to microsoft.com/AI for Earth for the sponsoring program and whaleshark.org to adopt a shark.
Technology and FriendsEpisode 583: Edward Thomson on GitHub Actions
- GitHub Actions first set out to host repository automation. Thomson, product manager for GitHub Actions at GitHub, says the version announced about a year earlier was aimed at work like labelling or assigning a newly opened issue. Before it, you built an app that listened to GitHub's webhooks and had to provision your own compute for it; Actions supplied the compute.
- Users wanted CI/CD, so GitHub paused the beta and retooled. Thomson says the original ran inside Docker containers on Linux with little computing power, which suited a small Node.js build but choked on large builds, iOS apps or Windows work. GitHub stopped admitting people to the beta and rebuilt it on real virtual machines running Linux, macOS and Windows, so it now covers build, test and release as well as repository automation.
- Workflows are YAML; actions are the reusable pieces. A workflow is YAML started from the Actions tab using starter templates, for example running npm build and tests on every pull request or push to master. Repeated steps such as a Docker login-and-push or a Kubernetes deploy can become an action with parameters, published in a repository and referenced by name. An action is either a Dockerfile, which GitHub builds and runs, or JavaScript; Thomson prefers JavaScript because it is cross-platform and comes with a toolkit and Octokit, GitHub's REST and GraphQL client for Node.js.
- People are using actions well beyond build and deploy. Thomson's examples are a stale bot that runs nightly and proposes closing inactive issues, and a joke action inspired by Untitled Goose Game that deletes any issue lacking the word "honk". Giard suggests that stale issues might be better sent to someone for review than closed.
- Actions was still in a largely public beta. Thomson says you sign up at github.com/features/actions and GitHub aims to admit people the next day, slowing admissions when capacity is short. He says continued investment in documentation and examples is one reason it is still in beta, and that announcements were coming at GitHub Universe in San Francisco on 13–14 November.