Souk's Notes - Unofficial Summaries
GCastGCast 24: Azure Function CosmosDB Binding
- A binding attribute does the database insert with no data-access code.
Giard decorates a to-do item parameter of an HTTP-triggered (POST) function
with a Cosmos DB attribute giving the database name, collection name and a
connection-string setting, which maps to the connection string pasted into
local.settings.json; the function body only deserializes the request, logs and returns HTTP 201, yet the posted documents appear in the collection. He uses a typed class with JSON property attributes (lowercase in JSON, mixed case in .NET) because Cosmos DB is schemaless and he wants the application to validate documents before they are stored. - Reads come back by declaring an enumerable parameter with a query.
The get-all function binds an
IEnumerableof the to-do type with the SQL queryselect * from itemsand returns the list with HTTP 200. A second function changes only the query, adding awhereclause on the is-complete field, and returns just the completed items. - A single document is fetched by binding the ID to a route variable.
The binding has a special
Idparameter; rather than hard-code it, Giard sets the function's route togetitem/{id}, where the curly braces mark a variable, and passes that variable to the binding. A null result returns 404, a found document returns 200 with the item. - Giard's case for bindings: less code means fewer bugs. He calls them "a really powerful tool" because less code generally means fewer bugs and less to test. The project was built as a Visual Studio C# Azure Functions version 2.0 project against a SQL API Cosmos DB account, and he publishes it in an "Azure Function Demos" repository on his GitHub, with a blog article, "Cosmos DB binding in Azure Functions", walking through each of the four functions.
Crosstalk SolutionsUbiquiti nanoHD
- The nanoHD and UAP-AC-Pro are near-perfect substitutes for each other. The host says a home user will never max out an AC Pro or notice the nanoHD's 4x4 MU-MIMO, though a crowded office might. Even so, he expects Crosstalk to start deploying the nanoHD in place of the AC Pro for its MU-MIMO, smaller size and skins. He did no performance testing here and promises a comparison video later.
- The nanoHD costs about $30 more than the AC Pro. MSRPs are $179 for the nanoHD, $149 for the AC Pro and $349 for the UAP-AC-HD. On Amazon as of November 8 he found $160.99 for the nanoHD, $136.18 for the AC Pro with PoE injector or $125.90 without, and $286.09 for the AC HD.
- Headline throughput is an aggregate across many clients, not per-client speed. Ubiquiti rates the nanoHD at about 1,733 Mbps on 5 GHz, against 1,300 Mbps (3x3 MIMO) for the AC Pro, but the nanoHD has a single Gigabit port where the others have two. On 2.4 GHz the ratings are 300, 450 and 800 Mbps for nanoHD, AC Pro and AC HD; concurrent users are 200+, 200+ and 500+.
- The nanoHD needs 802.3af PoE and is indoor-only. It ships with a 48 V, 0.5 A Gigabit PoE injector, unlike the 24 V passive power of models such as the UAP-Lite. The AC Pro takes 802.3af or 802.3at, the AC HD only 802.3at, and both are rated indoor and outdoor.
- The nanoHD's accessories are its main draw over the AC Pro. They include an adapter bracket fitting existing AC Pro mounts, a recessed low-profile ceiling mount (on the website, possibly not yet shipping), and colour, woodgrain, marble and camouflage skins for places like theatres and restaurants. For high-density areas such as auditoriums the host still adds AC HDs alongside AC Pros.
GCastGCast 23: Azure Logic Apps
- Logic Apps are cloud workflows built from drag-and-drop shapes. Giard gives three advantages: they run in Azure and inherit its reliability and scalability, they have a graphical designer, and they ship connectors that replace code you would otherwise write, including SQL Server, Oracle, MySQL, Cosmos DB, Mongo, Azure Table Storage, queues, SAP, email, Event Grid, HTTP requests and functions. A logic app is created under Integration in the portal, and its welcome page offers quick-start triggers (Service Bus queue message, timer, HTTP request) and fuller templates.
- Pasting a sample payload generates the HTTP trigger's schema. For a "when an HTTP request is received" trigger, Giard skips typing a schema definition and pastes sample JSON instead; the designer infers ID, first and last name as strings and quantity as an integer, and the types can be edited. The trigger's URL is generated only once the app is saved; if it is unwanted, he says an Azure Functions proxy can front it.
- Table Storage entities need a unique partition-and-row-key combination. The first step is an Azure Table Storage "insert or replace entity" action, so a repeated ID replaces the existing row. Giard hard-codes the partition key ("all") and uses the posted ID as the row key, storing the whole request body as the entity.
- A Condition control acts as an if statement with true and false branches. Giard tests whether quantity is greater than or equal to 100 and, on the true branch only, inserts the same body into a second "big customers" table with the partition key hard-coded to "big". A test post with quantity 100 landed in both tables; one with quantity 90 landed only in the all-customers table.
- Testing needs real posted data and a JSON content-type header.
Running the app from the portal with no payload fires the trigger and then
errors because the ID cannot be found. Giard posts from Postman with
Content-Type: application/jsonset explicitly, "otherwise it might just think it's just a string of text", and gets back HTTP 202.
GCastGCast 22: Creating an Azure Function Proxy
- A proxy puts a friendlier URL in front of a back-end service.
Giard gives two reasons: to replace an ugly, hard-to-remember URL with a
shorter one whose arguments have meaningful names, and to make a service
conform to an organization's URL standards. His back end is the default
HTTP-triggered function (built in GCast episode 19), whose URL carries
/api/plus the function name and a longcode=key in the query string. - The route template maps the public path onto the back-end URL.
Under Proxies in the function app, Giard adds a proxy with the route template
greet/nameand a back-end URL that appendsname=David, which returns the hard-coded name whatever is passed. Changing the template to take a variable in curly braces and passing it into the back-end query string makesgreet/name/Jonathanreturn "Hello, Jonathan". - Several route variables can be combined into one back-end parameter.
With a template of first name slash last name, he builds the back-end
namevalue as first name, a space, then last name, so a two-segment path returns the full name. He calls the result a URL that "probably would be a good standard for my company to use".
GCastGCast 21: Azure Functions Continuous Deployment
- Deployment Center wires a function app to a source repository. It sits under Platform features in the function app and lists the supported sources, including Visual Studio Team Services (which Giard notes is now Azure DevOps but still shows the old name), GitHub, Bitbucket and local Git. He picks GitHub; the Azure account may need authorizing to read the repository.
- Finishing the wizard adds a webhook and runs a first deployment. Giard selects the GitHub account, the repository and, if there are several, the branch (his has only master), then confirms a summary page. Azure adds a webhook to the repository and, after a couple of minutes, pulls the code and deploys it, so the previously empty function app shows the project's one function.
- Every push to the repository then redeploys automatically. Giard adds a second HTTP-triggered function in Visual Studio, commits it locally and pushes to the master branch, and it appears in the function app without further action; he had planned to wait about two minutes but did not need to. He skips testing the new function, saying he ideally should run automated tests first but that this is "a demo for deployment not for functions".
Crosstalk SolutionsAlgo 8180 SIP Audio Alerter
- The Algo 8180 is both a SIP loud ringer and a paging speaker. It needs two FreePBX extensions, one for ringing and one for paging, and has an external-speaker output, an amplifier output and a dry-contact relay. A button on the back reads out its DHCP address, and the default login is algo. VoIP Supply sent the unit, and the host says Crosstalk has sold "a ton" of them.
- Under chan_sip, the ringer needs its own extension plus Find Me/Follow Me. The host enables Follow Me with ring-all, initial ring time zero and both the phone and ringer extensions listed. He dislikes this because it ties up Follow Me, which you might want for ringing a cell phone.
- PJSIP lets the ringer register as a second endpoint on the phone's extension. Raise the extension's max contacts from the default 1 to 2 and give the Algo the phone's credentials. The Algo supports only one SIP server, so the pager extension must move to PJSIP too, and the server's PJSIP port (5160 on his system, against the default 5060) goes on the SIP domain.
- It is very loud. On the host's meter, a 44 dB room reached 107.6 dB at ring volume 4 of 10 and 123.6 dB at 10. For paging, Algo notes that most tones end in silence, so only the page-notify tone should be used; it also accepts multicast paging, and custom ringtones can be uploaded.
- One unit can ring for up to five extensions, each with its own tone. In a warehouse, that lets staff tell whose phone is ringing from far away. The relay can trip on ring, on page only, or be disabled, and the host believes it is what drives Algo's strobe and colour-light visual alerters.
Technology and FriendsEpisode 541: JD Marymee on Blockchain
- A blockchain builds trust among parties who don't trust each other. Marymee defines it as a replicated, distributed ledger running on untrusted hardware: where you trust a bank for its name and federal oversight, partners on a blockchain each hold a stake in the shared database, so if one forges an entry the others see it.
- Trading partners can use a shared ledger to speed up reconciliation. His public case is Webjet, which he likens to an Expedia for Australasia: an online agency, the hotel and other partners normally reconcile across separate databases, which "take forever", and a ledger they all trust replaces that.
- A private chain can attest licensed 3D-printed parts. For an unnamed customer, a vehicle part broken in the field could be printed on site, with the chain recording that the design was paid for, that it was printed, and the print conditions (temperature, tolerances) in case the part fails. In his hypothetical Department of Defense case, four branches plus the licensors make five actors, who would run their own nodes as a private chain.
- A blockchain one party controls, or keeps secret, is a database. Marymee says customers who ask for blockchain because it is fashionable, then want to run it alone or encrypt it, want "the antithesis of a blockchain": its values are value transfer, attestation and transparency. Where details must stay private, his teams put only metadata on the chain and keep the details off chain with a reference.
- Consensus is moving from proof of work to proof of stake. In proof of work, Bitcoin miners race on GPUs or ASICs to produce a hash and win Bitcoin, and public chains depend on no one holding a majority of nodes; Bitcoin is capped at about 21 million coins, after which, he says, "we'll see what happens". Proof of stake is like posting a bond, say $1 million, that a partner forfeits for forging, and Ethereum instead pays nodes "gas" in ether for executing transactions.
Technology and FriendsEpisode 540: Bill Wagner on Nullable Reference Types
- C# 8 will treat reference types as non-nullable by default. Wagner, who writes the C# documentation for docs.microsoft.com, says the compiler will statically analyse the code and assume any reference type (string, List of T, any class) is never meant to be null, so null reference exceptions are caught at compile time; a nullable one is declared with a question mark, as in
string?. C# was then at 7.3. - Turning it on produces warnings, not errors, because it breaks code. It is switched on per project or per file. Warnings mark a non-nullable variable the compiler cannot verify is never null, or a nullable one used without a null check, so Microsoft avoids "here's a thousand errors" after a compiler upgrade.
- The team reused the question-mark syntax so adoption would be easy. The alternative, Wagner says, was three kinds of reference type (today's, never-null and maybe-null), which would have slowed adoption because nobody would sweep their code to change them. Code that already null-checks properly should compile mostly clean. In Mads's person example, first and last name are non-nullable and middle name is
string?, which moves the warnings to where middle name is used. - The feature can be tried before C# 8 ships, which has no date. A CTP adds the nullable feature now, and Wagner expects public previews of Visual Studio 16 to carry a C# 8 preview, also undated; he advises trying it early to see what needs fixing before it is released.
Technology and FriendsEpisode 539: Brady Gaster on Marketing Azure
- Gaster left engineering for Azure marketing to get back to the community. He moved from the ASP.NET and .NET team, then documentation, to the Azure marketing demo team, which builds the demos for Microsoft's keynotes and general sessions, including Scott Guthrie's keynotes and parts of the Ignite keynote.
- Marketing shows how products work together, closer to customers' reality. Engineering goes deep on one topic, he says; on the demo team he looks across products (Functions with storage, adding AI) in the way he thinks customers actually have to.
- Each demo is a storyline built around the new announcements. Months ahead, the team asks the lead speaker (for Scott Hanselman's Ignite general session, Hanselman plus five speakers) what to show and how it should feel, then works as a trio of the demo team, product marketing and the product group, prioritising what is new. For Connect 2017 they invented a hotel chain, Smart Hotel 360, with a Xamarin app that unlocks a door and Functions handling data.
- Long-running steps are pre-baked, in what the team calls the "cookie show". Creating a VM takes five to ten minutes, so the presenter starts the process, then switches to one already made: "a few minutes later, here it is". Machines and web servers are also warmed up in advance so the first request is not slow.
- Every demo machine has a live backup behind a KVM switch. Hanselman's session needed at least 12 computers, a primary and a backup for each of six presenters; Gaster saw three or four 40-foot tables double-stacked with machines, and stages use switches of up to 24 ports, so a presenter whose machine fails presses a button and carries on. He says his past job putting on concerts prepared him for Microsoft more than anything else.
Technology and FriendsEpisode 538 Jeff Fritz on Live Streaming Coding
- Live coding replaces slow feedback with instant questions from viewers. Fritz codes live on Twitch in a "Bob Ross or Julia Child" style, but where TV cooks offered a recipe by stamped envelope weeks later, his viewers act as "pair programmers", flagging a missing parenthesis or asking why he did something. He aims it at learners who lack the money for books, training or conferences: C# and its tools are free, "so let's make learning it free, too".
- One ongoing open-source project works better than a new build each week. Building something different each week was hard to sustain and lost viewers, so since March 2018 he has built Core Wiki, a wiki/CMS in ASP.NET Core that runs on Windows, Mac and Linux, on GitHub under csharpfritz. Viewers send pull requests he reviews on air; at one viewer's request he added a deploy-to-Azure button and an Azure DevOps build and release pipeline.
- The setup is cheap; the main cost is a good video card. He streams through Twitch, whose transcoding is free, and names YouTube live and Microsoft's Mixer as alternatives; Azure Media Services would let you build your own service, but you pay for the networking. He composes scenes in the open-source OBS, switches them and plays sounds with a Stream Deck of 15 programmable LED keys, and has moved from a Logitech C920 webcam to a Razer Kiyo.
- He moderates chat with Twitch's tools plus a bot of his own. The bot follows posted links and sends posted images to Cognitive Services to detect adult content, and it can ban an offender for five minutes; he invites Giard to help add Cognitive Services features to it.
- He streams four mornings a week and archives each show to YouTube. At recording he had been streaming since November and had reached show 137, on Tuesday, Thursday, Friday and Saturday at 10 a.m. Eastern. He ran a month of .NET on a Mac in May and planned October 2018 as a month of .NET on Linux ("Ubuntu-ber"), with more F# to come.
Technology and FriendsEpisode 537: Robert Green on DevOps
- DevOps is the ability to ship faster, at a pace you choose. Green, a senior program manager in Microsoft's commercial software engineering group, says it is not about shipping five times a day or weekly: it is about delivering value to users more quickly than one- to three-year release cycles do. Enterprise desktop users might want updates every two or three weeks, weekly in a busy season and monthly otherwise; he gets about four updates a week to the internal build of Outlook.
- What changed was recognising the practices, plus tools that make them easy. The idea always existed, he says, but now there is tooling: TFS and its online version, renamed from Visual Studio Online to Visual Studio Team Services to Azure DevOps Services, or third-party and open-source tools such as Jenkins, mixed and matched as needed.
- Continuous integration catches code that works alone but breaks together. A server builds the whole codebase on check-in and runs everyone's unit tests, not just your own, so a broken integration shows up right away and source control shows who made the change. He says CI can be set up in Azure DevOps or VSTS in 10 minutes.
- Continuous deployment automates releases, with gates between environments. The build goes to testing and on to production once the test team signs off, and the developer can check in and leave without staying for build or deployment. More advanced practice rolls a release out to 5% or 10% of users first, for web, services and mobile apps.
- Start with source control, then CI, then CD, then smaller releases. Any one step makes a team better, Green says, and from there practices can be adopted incrementally: release one bug fix, then a feature plus a fix, until the cycle drops from three months to three weeks or a week. Too many updates, he argues, is a better problem than too few and too slow; the Azure DevOps docs have walkthroughs for setting up CI/CD.
Technology and FriendsEpisode 536: Hao Luo on Rust
- Rust is meant to replace C and C++ without their memory headaches. Luo, a senior software engineer in Microsoft's commercial software engineering org who is still learning the language, says Rust was created by Mozilla about three or four years earlier and targets pointer and memory management; he cites the newest Firefox, built on Rust, as proof it works at the scale of millions of users.
- Rust is designed for developers, not just for the system. Package management was planned in before the first release, unlike NPM, which came after Node, and C and C++ have no standard package manager. Errors in the terminal point to the exact character, and a VS Code extension gives syntax highlighting and errors as you go.
- Ownership is Rust's novel idea and its steepest learning curve. You specify which scope owns a variable, and its memory is freed immediately when that scope ends, which sits between garbage collection and manual memory management; lifetimes can be set per function parameter. It is statically typed, has traits rather than classes, encourages a functional style, and makes immutability the easier path. Luo says it is "really not similar" to JavaScript or PHP, so come to it without preconceptions.
- Rust can be imported into JavaScript, through WebAssembly, for speed. With the Parcel bundler you can import a function straight from a .rs file, and Parcel compiles it to WebAssembly; the reason to do so, as he understands it, is performance, such as matrix multiplication in a tight loop. He learned from the official documentation, "The Book", and the podcast New Rustacean.
- His bot library Wolf replaces chains of if statements with declarations. He and a teammate, Kevin, built Bot Builder Wolf: you declare the "slots" to collect, such as name, age and workplace, and when a user gives three of five in one sentence, Wolf asks only for what is missing, rather than the developer coding every branch.
Technology and FriendsEpisode 535: Rajasa Savant on Serverless Azure
- Serverless means the servers are hidden from you, not absent. Savant, a Microsoft developer in Commercial Software Engineering who works mostly on serverless and sometimes IoT, says Azure handles where code is deployed, the maintenance and updates, and moving it between VMs, so the developer manages only their own code.
- Azure Functions bindings remove the integration code, including authentication. A function is invoked by a trigger (a timer, an event hub, an HTTP request, a queue message, blob storage) and its output goes through a binding. For a blob storage output binding you supply only the container, the path and a connection string, and the binding handles authentication; she compares Functions with AWS Lambda.
- Logic Apps is an executable flowchart of drag-and-drop connectors. A ticket workflow that sends emails is built by dropping in an Outlook connector and filling in its address and subject, with no code. She says there are more than 200 connectors, including third-party ones such as Twitter and Facebook, as well as Databricks and Azure Storage.
- Event Grid routes notifications between services when something happens. She calls it a fairly new offering: a queuing system for events, used to notify one microservice when an event occurs on another.
- The three combine into one end-to-end messaging pipeline. In her example a message goes into Event Grid, which triggers a function that preprocesses it and sends it through Event Hubs to a second function for sentiment analysis with Cognitive Services; bindings then store the result in Cosmos DB or Azure SQL. Logic Apps can orchestrate the whole flow and send an email when a conversation starts.
GCastGCast 20: Creating an Azure Function in Visual Studio
- Visual Studio offers Azure Functions as a project type. Giard creates one in Visual Studio 2017 under File, New Project, and says a missing template means the latest Azure SDK and tooling are not installed. The trigger choices listed are blob insert, Cosmos DB, event hub, HTTP request, queue, service bus and timer. He picks the HTTP trigger, which needs a storage account; for local testing he uses the storage emulator installed with the SDK rather than one in Azure.
- The template's code greets a name or returns a bad request. The boilerplate looks for a
nameparameter in the query string, then in the request body. It returns HTTP 200 with "Hello, <name>" if it finds one, and HTTP 400 with "Please pass a name on the query string or in the request body" if not. Giard says the code can be changed to do anything, such as write to a database or call another function or web service. TheFunctionNamedecoration sets the function's name, which he changes from "Function1" to his own. - The function runs and is tested locally before any deployment. Running it compiles and hosts the function locally, and the console window ends with a local URL. In a browser, that URL with no parameter returned the 400; adding
?name=Davidreturned 200 and "Hello David". - Right-click publishing is quick but not for real use. Giard publishes by right-clicking the function app and choosing Publish, but warns "don't do this in the real world": code should go into source control and continuous integration. The Publish dialog creates a new App Service, or uses an existing one. He gives it a function app name that must be unique, a new resource group, Central US, and a new storage account on default settings.
- A Visual Studio–deployed function cannot be edited in the portal. In the portal it shows only metadata, not code; changing it means editing in Visual Studio and redeploying. Giard thinks that is probably the better model, because it is easier to get the code into source control from Visual Studio. It can still be tested there with Run (a POST, with the name in the body or as a parameter). It can also be called at its Azure URL, which carries a long code Azure appends for security, and it accepts both GET and POST.
GCastGCast 19: Creating an Azure Function in the Azure Portal
- A function app must be created first to hold the functions. Giard calls Azure Functions "serverless" because the server is abstracted away, not absent: apart from choosing Windows or Linux, he never deals with it. In portal.azure.com the function app is under Create a resource, Compute. Its name becomes a
<name>.azurewebsites.netURL, so it must be unique. He picks the consumption plan because it charges only when the function runs, which suits code that runs infrequently. Other choices are Central US, a .NET runtime (JavaScript or Java are also offered), a storage account, and optional Application Insights; creation took about 60 seconds. - The trigger decides when the function's code runs. New functions can be built in Visual Studio, VS Code, another editor, or in the portal; Giard uses the in-portal option here and leaves the others for a later episode. The quick choices are "Webhook + API", which runs on an HTTP GET or POST and makes the function a web service, and a timer that runs every X seconds. Other templates fire on a message dropped on a queue, event hub or service bus, or on a change in a database. He picks the HTTP trigger and keeps the default name, though he says a meaningful name is better.
- The sample C# code returns a greeting or a bad request. It logs information, which Giard notes is one way of debugging. It reads
namefrom the query string or the request body, which it deserializes with Newtonsoft.Json. With a name, it returns HTTP 200 and "Hello, <name>"; without one, HTTP 400 and a message asking for a name. - The function can be tested in the portal, browser or HTTP tools. The portal's Run button sends a POST with the body pre-filled as name "Azure", and it accepts a query parameter instead. The function URL is the app's azurewebsites.net address plus
/apiand a long key, which Giard says can be given to users to protect the function. Pasted into a browser, it needs&name=appended because the key is already a query parameter. He says Postman, Fiddler or one's own code work too.
GCastGCast 18: Azure Data Factory
- Azure Data Factory is SSIS-style ETL that runs in the cloud. Giard describes it as a cloud integration tool for extract, transform and load. He compares it to SQL Server Integration Services, which came free with SQL Server but runs on-premises. His demo moves a comma-delimited file from an Azure Blob Storage container named "Imports" into an empty Customers table in Azure SQL Database. The file has four rows of first name, last name, city and state, and he built the table to the same schema, though he says a transform would let them differ.
- Copy Data is a wizard reached from Author & Monitor. Giard creates the factory with the latest version, in the same resource group as the database and storage account to make them easier to manage. He says the location should be close to the data to minimize latency; he uses East US, and creation took about 30 seconds. Author & Monitor opens a new browser tab, where he chooses Copy Data. He picks "run once" over a regular schedule, because he likes to test before scheduling, and says he would later schedule it to pick up a file of each day's new customers.
- The source connector auto-detects the file format. Giard makes a new Azure Blob Storage connection, filtering the long connector list by "Azure", and browses to the container, which he says is analogous to a folder. The wizard guessed the format from the file itself: comma column delimiter and carriage-return/line-feed row delimiter, either of which can be changed. With no header row, it named the columns Prop 0 to Prop 3, and he renames them in the schema.
- The destination needs a connection, a table and a column mapping. Giard connects to the Azure SQL Database with SQL authentication as the server's admin user, and tests the connection before saving. He then picks the target table, which he notes matters once a database has several. The wizard mapped the renamed columns to the table columns in order, which can be changed, and it offers optional pre-copy scripts.
- By default, the first bad row aborts the whole copy. For bad rows, such as a string going into a number column or a value too long for its column, the alternative is to skip them and optionally log them. Giard keeps abort because he wants to know about a problem. In the Monitor tab, the run showed in progress after about six seconds and then succeeded, and the four rows appeared in the table.
Technology and FriendsEpisode 534: Raymond Comvalius on Transitioning to the Modern Workplace with Windows 10
- Large companies could not finish each Windows 10 upgrade within its support window. Comvalius, an independent consultant and trainer for 20 years, says each version had 18 months of support, and testing, building and deploying across thousands of seats can take 18 months, so the next version is out before rollout ends. Microsoft announced a change to the enterprise and education support period the month before; the transcript's new figure, "13 months", contradicts his point and is unreliable. The version with 10 years of support, the long-term servicing channel, is not meant to run Office, so most companies cannot use it.
- Desktop Analytics predicts which applications will break before an upgrade. An agent on each client sends data to the company's Azure tenant, and Microsoft's analysis, which in the new version also covers custom in-house apps by the APIs they use, leaves at most about 10% of applications to test by hand. The product is Windows Analytics renamed as Desktop Analytics.
- Applications that run on the older Windows are now guaranteed to run. Microsoft guarantees that an application running on Windows 7 will run on Windows 10; if one does not, it can be submitted to Microsoft, which will create the fix; Windows 10 keeps a large database of compatibility shims, such as those from the Vista era, that trick old apps into working.
- Microsoft says to stop building images and deploy with Autopilot. A device is registered in the cloud and, the first time it boots online, it finds its profile, enrolls in Intune and pulls down the company's apps and settings. New devices can then ship straight to users, even at home, freeing IT staff, though cloud licences are required.
- Intune can finally deploy ordinary Win32 applications. Comvalius calls this the main restriction of Microsoft's cloud device management until now; it is "not perfect, but it's moving in the right direction".
GCastGCast 17: Azure CosmosDB with Other APIs
- Cosmos DB's other APIs let existing apps move without major rewrites. Giard's case is an application already on MongoDB. Choosing MongoDB as the API at creation lets it move to Cosmos DB for its global distribution, scalability and speed without modifying a lot of its code. The API is chosen per account, and each account gets its own
<name>.documents.azure.comREST endpoint. - Each API needs a separate Cosmos DB account. Giard creates four in one resource group, all in Central US because he is in Chicago: MongoDB, Cassandra, Azure Table, and Gremlin, which he describes as the graph API. He says to place an account near the applications or users. He names each one after its API so he can tell them apart, and all four finished deploying in about five minutes.
- The non-SQL Quick Starts give code samples, not a full app. Unlike the SQL API's downloadable .NET to-do application from the previous episode, the MongoDB Quick Start gives a connection string and snippets. Its fuller samples cover CRUD (create, read, update, delete) in .NET, Node.js, the MongoDB shell, Java and Python, with links on migrating to Cosmos DB. The Table and Cassandra Quick Starts offer .NET, Node.js, Java and Python, plus shell for Cassandra. Gremlin offers .NET and the Gremlin console, and a downloadable Visual Studio application once a container is created.
- Per-API libraries hide the REST calls underneath. Giard says every API is REST under the hood, abstracted away by the libraries for each API. He presents the Quick Start code as something to copy into an application and modify.
GCastGCast 16: Azure CosmosDB with SQL API
- Cosmos DB is fast because it enforces no schema. Giard describes it as a globally distributed, highly scalable NoSQL database that evolved from Azure DocumentDB. "NoSQL" here means the database enforces no schema, relationships or referential integrity. He says that is why it can be very scalable and very fast.
- One database service offers several APIs to ease migration. The API is chosen at creation: SQL, MongoDB, Cassandra, Azure Table or Graph. Giard says code already using one of these can be moved to Cosmos DB more simply for its scalability, global distribution and fault tolerance. The account name becomes a
<name>.documents.azure.comendpoint, so it must be unique. He picks the SQL API and Central US, leaves the other defaults, and says creation takes a couple of minutes. - Quick Start builds a collection and a runnable sample app. Quick Start offers SQL API samples in .NET, .NET Core, Xamarin, Java, Node.js and Python. Choosing .NET Core and "Create Items collection" creates the collection and downloads a zip holding a Visual Studio 2017 solution. It relies on the NuGet package Microsoft.Azure.DocumentDB.Core, which Giard says keeps Cosmos DB's original name. He describes it as an abstraction layer over the REST API that uses syntax very similar to SQL.
- The sample code covers CRUD but hard-codes its credentials. Giard calls the key and URL in the repository code "a very bad practice"; they belong in a config file. The constructor creates the "ToDoList" database and the "Items" collection if they do not exist. Every method is async because each one is a web-service call across the internet. They include GetItemAsync by ID, GetItemsAsync filtered by a boolean expression, and create, update and delete. He suggests using it as a starting point rather than as is, because it is specific to a to-do list.
- Items added in the sample app appear as JSON documents. The sample is an ASP.NET Core web application for a to-do list. Giard adds three items, and they show up in the portal's Data Explorer stored as JSON documents.
Technology and FriendsEpisode 533: Jeffrey Palermo on DevOps for Mid-Market Companies
- Enterprise DevOps messaging misses mid-market teams, which have no dev/ops divide. Palermo is CEO and chief architect of Clear Measure in Austin, which sells DevOps architecture and automation to Microsoft-platform teams. He says the interpersonal dev-and-ops changes fit Fortune 500 firms, but at mid-market companies (about $500 million to $1 billion in revenue, often in warehousing, logistics or insurance, with developers reporting to a CFO) the developers already get the phone call when something goes down in the middle of the night.
- Mid-market companies can adopt a simpler pipeline faster than enterprises. The template is the same, but with less legacy technology and inertia they can be more nimble, while in an enterprise each step can take a month or more to configure.
- One build script runs locally and in CI; deployment uses packages. Move source control to Git, write a private build script developers run locally, and have the continuous integration build in Azure Repos run the same script plus extra tests. It packages the components into NuGet (Azure Artifacts), and the Azure Pipelines release hub deploys them across environments. For virtual machines or complex deployments he adds Octopus Deploy, and for significant databases Redgate's SQL change tools.
- Stream all application logs to one place and query them. Beyond exception alerts, this lets a team know what the application is actually doing, so it can approach a user about a problem before the user reports it.
- Microsoft-built systems belong in Azure. Palermo argues a system built on Microsoft technologies "fits like a glove" there; it can run on AWS, but with much more work yourself.
Technology and FriendsEpisode 532: Christos Matskas on Visual Studio for Mac
- Visual Studio for Mac is Xamarin Studio, extended to cross-platform workloads. Matskas, its new product marketing manager, says it grew from the tooling Microsoft acquired with Xamarin two years earlier. It now adds .NET Core, ASP.NET Core and Azure Functions (develop, debug and deploy to Azure), with ASP.NET Core/.NET Core and Xamarin the biggest workloads. Windows-only workloads such as WPF, which rely on native Windows APIs, are not available.
- Every .NET developer should also be a mobile developer. Matskas argues that existing .NET skills carry over to mobile apps through Xamarin, for enterprises or pet projects. Xamarin Forms gives WinForms and WebForms veterans a familiar experience: one control that renders as the native control on each platform.
- One solution can be worked on from Windows and Mac. A UWP project in the solution cannot be edited on the Mac, but the shared code can, and pushing views into shared components can bring code reuse up to 90%, leaving a thin layer of UI tweaks. VS for Mac also does watchOS and Apple TV apps and .NET Standard libraries.
- It matches Visual Studio for Windows on most tooling, except extensions. It is a full IDE using Roslyn for IntelliSense, unlike the text-editor-plus-extensions VS Code, and supports deployment to Azure, Git, TFVC through an extension, and the same Community (free), Pro and Enterprise licences under the same login. It has far fewer extensions, which Matskas concedes is a limitation for some users.
- It is the default IDE for Unity game developers. Scenes are built in Unity's graphical editor, and when C# scripts need editing or debugging the work moves to Visual Studio for Mac, which is integrated with Unity's editor.
Crosstalk SolutionsSolar Powered WiFi Part 3
- Unprotected outdoor components fail within a year. The host's $50 Bluetooth dongle for the Victron BlueSolar 75/15 MPPT charge controller died after a year in a non-weatherproof box, so this rebuild moves everything into a locking 14 x 11 x 5 inch NEMA-rated polycarbonate/ABS pole-mount enclosure on an 8-foot cemented pole. He sized the box with room for a future switch.
- Brandon Yarborough would oversize panels after the Indonesia build. Crosstalk's wireless ISP expert powered each UniFi mesh access point from a 50 W panel for the Castaways TV project, but foliage cut direct sun to 3–4 hours of an expected 12, and the system had outages during the monsoons. In hindsight he would use 75 W or 100 W panels.
- A 100 W monocrystalline panel easily powers one NanoStation. Replacing a 45 W Harbor Freight panel with a Renogy 100 W 12 V panel raised yield from 10–20 Wh to 60–70 Wh a day. With only the NanoStation attached, the controller spent over 50% of each day in float (about 75% on sunny days), and the link never dropped in UNMS over a month of summer.
- The design stays DC throughout to avoid conversion losses. Power runs from the controller's load output through a 12 V-to-24 V boost converter into a gigabit PoE injector, then through a Ubiquiti ETH-SP surge protector grounded to a 4-foot copper rod. A camera can draw 24 V passive PoE from the NanoStation's passthrough port. Brandon says an inverter to 110 V would waste efficiency. Everything is fused, with a 35 Ah 12 V deep-cycle battery. The mount was made for 3-inch pipe, so the thinner pole wobbles.
- Adding a G3 camera exceeds this setup on the Oregon coast. At roughly 150 Wh a day of consumption the panel was maxed out. The NanoStation and UVC G3 ran around the clock for about eight days, then the controller's low-voltage cutoff left them up only 14–16 hours a day (off from about 5–6 a.m. to 4–6 p.m.). The host expects winter to cut that to about a third of the day. He guesses doubling to 200 W plus a second parallel battery might keep it up 24 hours but did not test it, so he removed the camera.
GCastGCast 15: Creating an Azure Web App
- A web app's name must be globally unique because it becomes its URL. Giard creates it from "Create a resource" > Web > Web App; the name becomes the public address http://<name>.azurewebsites.net (his demo is dgtestweb). The app can run on Windows, Linux or a Docker container. Creation took about a minute and produced a sample page at that URL.
- The App Service plan sets both the hosting location and the machine size. Giard says to place it near your users, near any back-end resources the app calls, and near yourself while building; being in Chicago, he picks Central US. The pricing tier buys more or faster processors, more memory and solid state drives; he takes the standard tier.
- Web apps support ASP.NET, PHP, Python, Java and Node. The settings choose which languages are on and their versions, for example Python 2.x or 3.x, along with the default page and authentication or authorization.
- Code can be deployed by FTP, through staging slots, or continuous deployment. Deployment credentials set an FTP username and password. Deployment slots give a staging copy to test in Azure and then swap into production, and several slots can serve different test stages. Continuous integration and deployment can pull from Visual Studio Team Services, OneDrive, a local Git repository or GitHub.
- Giard values that all App Services share one feature set. Web apps, mobile apps, logic apps and web services get the same settings, so, as he puts it, a feature added to one is added to all. Hosting them on the same platform also makes it easier for one to call another and pass identities between them.
Technology and FriendsEpisode 531: Walt Ritscher on LinkedIn Learning
- LinkedIn's job data steers which courses get made and recommended. Ritscher, a LinkedIn Learning staff instructor and former Lynda.com contract author, says LinkedIn bought Lynda.com for its training quality and feeds its "economic graph" of jobs and skills into planning courses six to 12 months out and into spotting skills a member is missing against thousands of people in the same job. With over 14,000 courses across tech, creative and business, he frames the problem as filtering down to what is relevant, including skills a learner does not know they need.
- Visual Studio was too big for one essential-training course. Ritscher says even an eight-hour course could not cover it, so he proposed a series, one area per course (debugging, the code editors, 90 minutes on IntelliSense), totalling about 15 courses and almost 40 hours. He has also run a weekly five-minute Visual Studio tips series for about a year; his favourite feature is Ctrl-Q, which searches every menu command and dialog.
- Authors build the whole course; production handles the rest. Instructors write the curriculum, demos and slides; as staff, Ritscher records in his home office while the production department does editing and art, with English courses made at Carpinteria, California and foreign-language ones in Graz, Austria. He puts output at about 150 courses a month in around seven languages, Chinese and Portuguese newly added, and says Azure instructors are wanted, though established instructors have already picked their courses for the next two or three quarters.
- The company is steering customers from Lynda.com to LinkedIn Learning. Ritscher says the same content publishes to both sites and millions still use lynda.com, but LinkedIn suits enterprise sales to Fortune 100 and 500 companies better. LinkedIn Learning can be bought alone and is bundled with most premium LinkedIn accounts.
- His planned Azure course is a developer overview, not a deep dive. Ritscher says Azure is too large to cover whole, so he intends to show what is essential for developers (web apps, databases and storage, Azure Functions, Logic Apps) a little at a time, decided only the week before and possibly becoming a series. He also plans a VS Code course for Q1 of the following year.
Technology and FriendsEpisode 530: Chris Woodruff on HTTP and REST
- Developers use HTTP constantly without understanding its language. Woodruff argues that most people do not know what HTTP can give them and so underuse it in REST APIs. He describes REST, from Roy Fielding's PhD dissertation (which he places at the University of Texas), as building on HTTP's own constraints rather than inventing everything from scratch.
- Every request is a sentence: a verb acting on a resource. Woodruff says each request needs a verb and a resource identified by a URI, and developers should know what each verb means: GET retrieves, POST creates or sends new information, PUT updates, DELETE deletes. He points to lesser-used ones: HEAD returns everything but the response body, so it can check whether a large resource exists, and OPTIONS is the call seen before cross-origin (CORS) requests to validate that the verb is allowed.
- APIs should return the status code that says precisely what happened. Woodruff says the response code tells the caller whether it succeeded, whether the client or the server failed, and what to do next: 2xx is success, 4xx a client error such as a bad URI or missing authentication, 5xx a server error. A successful DELETE should return 204, success with no body, while a GET should return 200 with the resource in the body.
- Design caching in from the start. Woodruff says he has been burned by trying to wedge caching into a finished system. He urges caching on the server side (ASP.NET Core 2.1 Web API or Node) and using HTTP response headers that mark resources cacheable and for how long; because HTTP is only a protocol, a client calling an API from JavaScript or .NET must implement that caching itself or through a library, though some browsers do it built in.
Technology and FriendsEpisode 529: Dan Rey on What's New In Windows 10
- Windows 10 now ships in six-monthly releases instead of big bangs. Rey, lead trainer at Brainstorm, says Windows 10 was finalized in July 2015 and now updates every six months, the coming one being the Windows 10 October 2018 Update, called Redstone 5 in beta; he says this lets Microsoft respond to features users request through UserVoice. Fall releases are supported for 30 months for Enterprise, Education and, he believes, Pro, while spring releases are smaller and businesses tend to standardize on the fall one.
- Businesses control their rollout; home users just receive updates. Rey says a company's IT decides when a new version installs, helped by Windows Insiders and Project Olympia, which provides an Azure Active Directory at olympia.windows.com into which a tester can join a device. Home machines get updates automatically, though Microsoft has added controls, after feedback, over when the download and reboot happen.
- A cloud clipboard will sync clips across devices. Rey says Windows key+V opens a clipboard that holds more than the last item and synchronizes across machines, so something copied at home can be pasted at work. He thinks it is in the preview for spring 2019 but was unsure whether it is in Redstone 5; Giard gives his own use case, moving screenshots between computers for his blog.
- The Snipping Tool is being replaced by Snip & Sketch. Rey says the new tool, first called Screen Sketch, works much the same but supports pen and touch, and he understands the Snipping Tool's delay feature is coming to it. The Snipping Tool remains for now with a prominent notice that it will go away.
- Focus assist blocks notifications for a set period. Rey says it suppresses Action Center notifications and pop-ups such as new Outlook mail for, say, two or three hours, while chosen priority contacts such as a manager still break through. It sits in the Action Center.
GCastGCast14: Creating an Azure Storage Account
- A storage account holds blobs, queues, tables and files under one unique name. Giard creates it at portal.azure.com from "Create a resource" > Storage > Storage account. The name must be unique because it becomes a URL under core.windows.net, and users reach the account through a REST API at that URL. Files are built on top of blobs and emulate a file share for applications.
- The replication choice decides where the extra copies of your data live. Azure always stores several copies. Locally redundant keeps them in one data center on different fault domains, so they share no rack or power supply but sit within about a hundred yards of each other. Giard says paying a little more for geo-redundant storage keeps a copy in another region, such as Texas for a Chicago data center. A third option also makes that copy readable by your users.
- The rest of the creation form is mostly defaults and optional extras. Giard picks a general-purpose account in East US and the standard performance tier rather than premium ("I'm a cheapskate"). The form also sets secure transfer, the subscription and a resource group, which he describes as a logical grouping of resources managed together. Optional settings put the account on a virtual network for secure access from VMs on it, and enable Data Lake storage.
- Automation options export the configuration for repeatable creation. Before creating, the automation options offer an ARM template with its parameters, plus code in CLI, PowerShell, .NET and Ruby. Giard thinks it downloads as a zip file, which can recreate exactly the same storage account.
- The created account's blades manage containers, tables and queues directly. Creation took about a minute. Under blobs he creates a container (the name must be lowercase, a rule he says he always forgets) and can upload files to it. Tables take an access policy, and both tables and queues show a REST endpoint. Further blades cover security, scalability, CORS and encryption, each linking to documentation.
Y CombinatorMichael Seibel - Building Product
synopsis
Michael Seibel argues that building product is a repeatable process, not a flash of genius: define a narrow, solvable problem for a specific customer, ship a bad MVP to the most desperate users, measure with event-level metrics, and iterate in short written-spec cycles for as long as two years. He offers it as the lesson of Justin.tv breaking nearly every rule. He credits its survival to a deeply technical team, very low burn and founders whose egos were bound to the company, and says losing any one of the three would have killed it.
The problem and the customer. Seibel asks founders to state the problem in one sentence, to have ideally lived it, to narrow it to who can be served first, and to ask whether it is solvable at all. Poppy, an on-demand babysitting company, shows the last test: for infants, the supply of trusted sitters largely sits in well-paid nanny jobs. Problems should be frequent and intense. Uber passes on both counts; car-shopping sites fail for buyers who return every seven years, and are really built for dealers. Customers should be reachable: a US B2B company could email a thousand prospects a week from LinkedIn, while a Chinese one could not.
Pricing and the first users. He holds that charging from the start almost always beats free, because free invites users without the problem whose feedback misleads. A structured discount differs: he describes how a Zenefits founder used a 30-day deadline, with the product priced 15% higher, to speed sales. The first customers should be the desperate ones willing to use something bad, not friends, investors or impressive accounts stuck in six-month sales conversations. Abusive customers should be fired, as Justin did at Exec.
Metrics. He tells founders to replace Google Analytics as their primary tool with an event-based product, start with five to ten stats, name them carefully, and write the measurements into each feature's spec.
The development cycle. Justin.tv shipped every three months from unwritten product meetings, spent three months arguing over a background colour, and threw away most of its work. Seibel's fix at Socialcam: one top-line KPI with three contributing numbers (new users, retention, new content), an open brainstorm where every idea goes on the board, easy/medium/hard sizing to strip ego from the debate, a written spec, and two-week cycles with no other meetings. A pivot changes the customer or problem and should be rare. Iterating on the solution is normal and, he says, takes about two years. The first iPhone, which he calls poor in almost every way, is his evidence that the "real" Steve Jobs iterated.
Twitch. Gamers had been about 20% of Justin.tv traffic for years and were ignored. Asking them what they wanted and shipping even mundane fixes made them evangelists. Seibel says the company went from nothing to about $24 million in five years, then to roughly $1 billion in three more.
- Define the problem narrowly enough to know if it's solvable. Seibel's tests: state it in one sentence, ideally have had it yourself, and pick who you can serve first. His case is Poppy, an on-demand babysitting company: narrowed to infants, the problem may be unsolvable, because sitters skilled enough for parents to trust tend to hold well-paid full-time nanny jobs.
- Frequent, intense problems make businesses, and charging tests them. He notes car-buying sites keep failing for shoppers, who buy about once every seven years, and are really built for dealers with daily quotas. He argues starting with a price almost always beats starting free, since free attracts users without the problem whose feedback leads you astray.
- Sell a bad MVP to desperate users, not friends or investors. An MVP is bad by definition, so find the customers who will go out of business without you. A friend he names as Steve said he could finally delete Socialcam once it sold, and Justin fired an abusive Exec customer after four refunds. Twitch came from finally talking to gamers, about 20% of Justin.tv traffic for years.
- Event-based metrics, specified with each feature, are a prerequisite. Seibel says Google Analytics is the wrong primary tool; use an event-based product such as Mixpanel, Amplitude or Heap. Start with five to ten stats (for Instagram: open, create account, take photo, apply effect, share), name them for future readers, and put the expected metric changes in the spec.
- A disciplined two-week cycle replaced Justin.tv's three-month argument spiral. He describes his process: one KPI (revenue, or daily active users if never charging), an open brainstorm, easy/medium/hard sizing, a written spec, and a single meeting per cycle. He calls changing customer or problem a pivot, which should be rare, and expects iterating toward a solution to take about two years, not two months.
GCastGCast 13: Azure Media Services - Closed Captioning
- Encoding a video does not by itself give it captions. Giard creates the Media Service from Create a Resource with a new resource group and a storage account for the media, uploads a video on the Assets blade, and encodes it with the defaults. Encoding runs as a job that moves through scheduled, queued, processing and finished; its length depends on the video's length and size, and the result is a second asset with no captions.
- An Analyze job on the original video generates the caption files. By default it writes captions in three formats, all checked; Giard thinks VTT is the most popular and uses it. The same job can also produce index files for SQL Server full-text search and a keyword file; he keeps the defaults with English as the language. Analysis is also queued, which Giard explains as Azure using resources efficiently for a one-time, non-critical process, and it yields a third, indexed asset.
- Auto-generated captions need checking, and the VTT is plain text. To get a download URL, the indexed asset must first be published with a progressive locator; Giard then downloads the file with curl (
curl -o poe.vtt <url>) because his browser could not work out its MIME type. The captions of his reading of Poe's "Annabel Lee" contained mistakes, which he corrects by hand in Notepad before uploading the file as captions to the encoded asset. - Streaming requires publishing and a running streaming endpoint. After publishing the encoded video, the portal shows the streaming endpoint in red until it is started; Giard notes that with no restrictions added, anyone can view it, and that restrictions can be added later.
- Azure Media Player shows captions only after you add a track. Giard pastes the playback URL, without the
http:but keeping the//, into the Azure Media Player demo page; by default there is no captions menu. Under the advanced options he adds a track of type captions or subtitles, with a label (several caption sets are allowed), a language, and a URL at the same location as the.ismmanifest but ending in the VTT file's name, after which an English captions menu appears. He says step-by-step instructions are in an August 2018 post on his blog.
GCastGCast 12: Azure Media Services - Live Streaming
- Live streaming runs through a channel on the live streaming blade. Custom create lets you set the encoding type, name, description, auto-start, streaming protocol and IP restrictions; quick create takes the defaults, which gave Giard pass-through encoding and RTMP ingest. He warns that you are charged while a channel is running, so it is worth being diligent about stopping it.
- The channel's ingest URL is where the streaming software points. The channel blade lists a primary and a secondary ingest URL, and either works. The channel came with a live event named "default", already started and published but not streaming until a source is sent to it.
- Separate streaming software sends the stream to the channel. Giard uses Telestream's Wirecast, priced at $449 to $949, on its free trial, which stamps a watermark about every 60 seconds, fine for testing but not for production, in his view; install needed one restart. In Output Settings he chooses an RTMP server as the destination, pastes in the ingest URL, adds a screen-capture source (layers can add a camera or branding), moves the preview to live, and starts the RTMP server.
- Viewing needs the streaming endpoint running, and "live" lags. The stream does not play until the streaming endpoint is started; then Watch in the portal shows it. Giard notes it runs a few seconds behind, since there is always latency going out to the web and back.
- Anyone can watch through Azure Media Player.
He pastes the channel's
.ism/manifestURL, without thehttp:prefix, into ampdemo.azureedge.net to share the stream with people outside the portal.
GCastGCast 11: Azure Media Services - Uploading, Encoding, and Sharing a Video
- A media service comes with storage and a streaming endpoint. Giard creates it from Create a resource, under Mobile, giving it a resource group, a region (he advises one close to you or your viewers) and a new storage account, whose name has to be unique. Deployment took under a minute and created the resource group, storage account, media service and streaming endpoint.
- An uploaded video cannot play until it is encoded. The encode dialog offers several formats; Giard keeps the default MP4 and job names. The job goes from queued to processing to finished and encodes into several formats for adaptive streaming, leaving the original and an encoded asset side by side.
- The encoded asset must be published and streaming started. Play stays disabled until the asset is published and the streaming service is started; a checkbox on the publish step starts it too. In his demo this took about three minutes, after which the portal's own player played the clip.
- Sharing outside the portal needs a generic web player.
Because viewers may not have Azure access, Giard uses Azure Media Player: he pastes the playback URL, which must contain
ism/manifest, minushttp:, into the free player at ampdemo.azureedge.net. The player then gives a link to send to people, and code to embed the player in a web page.
GCastGCast 10: Using Chocolatey
- Chocolatey installs Windows software and its dependencies in one line. Giard calls it one of his favorite tools: a free package manager, Windows-only, installed by pasting the command from chocolatey.org into a PowerShell or cmd window, probably with administrator rights.
choco installtakes the package name from the site's package list. Running as administrator, he installs Visual Studio Code with the command shown on its package page. Without-yChocolatey asks before running each script (twice for this package);-yanswers yes to all of them.- A batch file of installs rebuilds a fresh machine unattended.
When he reformats and reinstalls Windows, Giard runs a batch file with one
choco install <package> -yline per tool, such as Node.js, an FTP client and a PDF reader, and comes back a couple of hours later to find it all installed. - The result is the same as a manual install.
Command-line tools need a new command window before they are recognized; after that
code .launches Visual Studio Code, and it also shows up in the Start menu, as if downloaded and installed by hand with its prerequisites. choco uninstallremoves the app and its dependencies. Uninstalling Visual Studio Code with-ytook it out of the Start menu, andcode .was no longer recognized in a new window.
Crosstalk Solutions'Castaways' Live Stream - 8/3/2018
synopsis
A two-hour live stream in which the host and Brandon Yarborough, Crosstalk's wireless ISP expert, show for the first time the photos from a mesh network Brandon set up about six months earlier for Castaways, an ABC survival show premiering August 7. The network worked, but only after the site broke the design's main assumption: the solar sizing expected full sun, and the gear went up in shade. The second half is open Q&A, where the two place UniFi as SMB equipment with clear limits and send anything harder to Ubiquiti's Edge line or other vendors.
The brief and the trip. The show's producer, who had also produced Alone, found the channel through the host's videos of access points strapped to backyard trees. The job was a mesh covering about seven miles of coastline on a South Pacific island the NDA keeps unnamed. It carried no internet: it was an internal LAN for security cameras and staff communications watching the contestants, which the host says saved the production money compared with staffing that watch. Brandon's trip took about 40 hours of flights and layovers. He was booked for 10 days, stayed 12, and left the day shooting began after teaching the producer to make changes. Local rules let him give technical advice only, so local crews did the labor. The job was privately funded and Ubiquiti had no part in it.
The design. The network was all Ubiquiti on standard non-AC 5 GHz, chosen because 2.4 GHz had too few channels for that many links. Brandon would have liked 3.65 GHz or 900 MHz to get through trees, but that equipment cost more. Each site was a NanoStation backhaul, a Rocket M5 with an omni, and mesh access points, more than 100 mesh locations in all, with up to four or five mesh units between backhauls where links failed. A NanoStation M5's pass-through port let one PoE injector power both it and the Rocket, so no switch was needed. The mesh radios needed a solid 24 V, so boost PoE injectors stepped the 12 V supply up. Everything used static addressing, with no DHCP and no QoS, and was managed from a Cloud Key; in hindsight Brandon thinks a local controller would have been safer. The equipment was configured in the US before shipping, and the gear was painted, LEDs taped over and masts made of bamboo and driftwood to keep it out of shot.
What the site changed. Brandon had been promised 12 hours of sun and had found in his New Mexico tests that it kept the gear running around the clock. On arrival the panels sat in foliage, about a third of the locations were in thick mangroves, and it rained for the first three or four days. He estimates the panels delivered maybe 20% of their rated output, which caused the outages. The fixes were cutting foliage, moving panels into the sun, adding panels at key relays (one critical site ended up with four), and at some locations swapping batteries every couple of days, recharged on the generator-equipped boat. The gear was 150 W panels and roughly 30 Ah sealed lead-acid batteries. Next time he would use 250 W or two 150 W panels per site and two batteries in parallel, though bigger panels are harder to hide. Customs would not pass the solar charge controllers, so those were bought locally.
The raft and the links not built. A pontoon relayed signal around a headland. Its directional antenna would not hold aim even with three anchors because the tidal swing was so large, so it got two omnis on different frequencies. A link of a little over 30 miles from a neighbouring island with internet was considered and dropped: airFiber could make the distance, but towers tall enough to clear earth curvature and keep the Fresnel zone off the water were not feasible. Brandon says tides affect the Fresnel zone and a blocked lower lobe can cost up to 50% of throughput. Rain fade was no concern at 5 GHz over links of four to five hundred feet; foliage was the main problem.
Cameras and throughput. The off-brand PTZ cameras, identified in chat as Zavio, needed only 2–4 Mbps each. Each sat in a custom enclosure with a small switch, the 24 V boost transformer, a 5 V converter and a Raspberry Pi that recorded HD locally while sending low-bit-rate video over the mesh; SD cards were swapped daily. Brandon expected 30–40 Mbps through the mesh after desert tests with mesh units 600 feet apart, but there was no time for iPerf testing on site.
Where UniFi stops. In Q&A the host says the Cloud Key Gen2 costs $179 and the Gen2 Plus $199 with a 1 TB drive and a battery for safe shutdown. He would put no more than about ten cameras on a single-drive ARM NVR, and warns that original Cloud Keys on unbacked PoE corrupt their databases when power fails. Both men rate UniFi as SMB and power-user gear. It lacks port security and solid UTM, and it cannot run site-to-site and client VPN together without JSON edits that Crosstalk refuses to make. Their alternative is the EdgeRouter X at about $50. For hotels of 500-plus rooms the host would use Ruckus. They do not recommend VoIP over wireless links, citing packet loss and half-duplex radios, and they turn off zero handoff.
Lifecycle and learning. Moving sites from a 5.6 to a 5.8 controller left older single-band UAP Outdoor units unprovisionable within two to three years of install, so the host advises budgeting a refresh cycle of roughly that length and phasing out old equipment. For learning, both prefer buying lab gear to paid certifications: a USG, a UAP AC Lite and a US-8-60W to learn UniFi, or an EdgeRouter X and an EdgeSwitch to learn networking.
- The Castaways network was a LAN-only Ubiquiti mesh for cameras. Brandon Yarborough, Crosstalk's wireless ISP expert, built it for an ABC survival show (premiering August 7) across seven miles of South Pacific coastline: 100-plus mesh locations, NanoStation backhauls, Rocket M5s with omnis, all on non-AC 5 GHz, static IPs, no DHCP or QoS. Cameras needed only 2–4 Mbps each against an expected 30–40 Mbps mesh; the job was privately funded, with no Ubiquiti involvement.
- Shaded solar, not undersized panels, caused the outages. Brandon sized the 150 W panels and 30 Ah sealed lead-acid batteries for 12 hours of full sun, based on his New Mexico tests, but the crews had hidden gear in trees and mangroves, leaving maybe 20% of rated output. Fixes were moving panels, adding panels at key relays, and swapping generator-charged batteries every few days; next time he would fit 250 W (or two 150 W) panels and twin batteries.
- Tides defeated a directional antenna on the anchored relay raft. Even with three anchors the pontoon swung too far, so it got two omnis on different frequencies. A planned airFiber link of just over 30 miles from an internet-connected island was dropped: towers tall enough to clear earth curvature and the Fresnel zone weren't feasible, and Brandon says tides can cut throughput up to 50% when the zone's lower lobe is blocked.
- The host and Brandon rate UniFi as SMB gear, not enterprise. They cite no switch port security and VPN that needs JSON edits to run site-to-site and client VPN together, which Crosstalk refuses to do, recommending an EdgeRouter X (about $50) instead. For hotels of 500-plus rooms the host would use Ruckus, not UniFi. They also advise against VoIP over wireless links and against UniFi's zero handoff.
- Budget a two-to-three-year access point refresh cycle. The host says moving client sites from a 5.6 to a 5.8 UniFi controller left older single-band UAP Outdoor units end-of-life: still passing traffic but impossible to update or provision, within two to three years of install. He recommends phasing out older equipment on that cycle rather than replacing everything at once.
GCastGCast 9: Azure Linux Virtual Machines
- Azure supports Linux virtual machines extensively, despite the Microsoft name. Giard says that the last time he read, about 30 to 40% of the virtual machines in Azure were Linux. Under Compute in the portal he names Red Hat Enterprise Linux 7.2, Ubuntu 17.10, CentOS and SUSE. Some images are managed by Microsoft and some by third parties, so he tells viewers to check the licensing on each.
- A Linux VM is created the same way as a Windows one. He picks an Ubuntu Server 14.04 LTS image managed by Canonical. He chooses a regular hard drive or a solid-state drive, then public-key or password authentication (he takes password because "passwords are easier"). He creates a new resource group and picks South Central US for low latency from Chicago. The size he selects has 2 CPUs, 8 GB RAM and 4 data disks, at about $81 a month if left running for 30 days straight.
- Optional settings cover redundancy, networking, extensions and cost-saving shutdowns. He points out availability sets for fault tolerance, a shared virtual network or subnet, and extensions such as antivirus and backup, but uses none of them. An automatic daily shutdown at a set time and time zone, with an optional email notice, saves money. Downloadable templates let the same machine be created again from PowerShell, the CLI or .NET.
- Remote access requires opening the inbound SSH port. This setting is required. He opens 22, the default SSH port, and accepts the portal's warning that exposing a port to the Internet is a potential security risk. Deployment took about five minutes.
- Linux connects through an SSH command, not a Remote Desktop file.
Clicking Connect on the overview page gives the command
sshfollowed by user@IP address, where a Windows VM gives a downloadable RDP file. He pastes the command into a command prompt, confirms the prompt about the machine having no certificate, and enters the admin password. From there everything happens at the command line, such as installing software and launching services.
Technology and FriendsEpisode 528: Hamayal Choudhry and Samin Khan on SmartArm
- Prosthetics force a choice between affordable and functional. The team says cosmetic prosthetics are cheap but cannot grasp objects properly, while bionic arms cost tens of thousands of dollars because their myoelectric, neuromuscular interfacing is programmed for each individual and so cannot scale. Their aim is a product amputees can be handed and learn to use themselves, with the arm "learning along the way".
- Computer vision chooses the grip instead of neuromuscular sensing. The arm is 3D printed; a camera in the palm feeds frames to an onboard computer, which detects the object and picks the appropriate grasp, and a muscle sensor worn on the arm triggers the grab on a flex and releases it when the muscle relaxes. In the on-camera demo the first attempt narrowly missed the object, though the host notes it used the right grip, and the second succeeded.
- They moved recognition onto the device so it works offline. The team says they started with Cognitive Services image recognition but hit problems with objects' differing shapes and sizes, so they moved to a Custom Vision model deployed through IoT Edge; the model runs locally and the arm needs no internet connection.
- The project grew from a hackathon entry to world champion. It began in January at a University of Toronto hackathon, where it won Microsoft's API award and the host urged them to enter the Imagine Cup; they won the Canadian national finals in Vancouver and were announced world champions, representing Canada, the day before recording in Redmond. Choudhry, who studies robotics, was interning in California with the hardware while Khan, a computer science student, wrote code in Toronto and sent it to him to deploy and test.
- They intend to turn SmartArm into a business. Choudhry says they have meetings lined up with a Canadian federal ministry for innovation and economic development to plan the launch, and that everyone they have told says it fills a gap; he returns to Canada in September. The prize includes a mentorship with Microsoft CEO Satya Nadella, cash and Azure hours.
GCastGCast 8: Azure Virtual Machines
- Azure VMs are portable between the cloud and on-premises. Giard describes a virtual machine as a file that emulates a physical computer, with its memory, disk, software and data. Because Azure uses the same hypervisor technology (Hyper-V) as on-premises virtual machines, he says they move between the cloud and a local machine or network "with relative ease".
- The image gallery offers operating systems and pre-installed software. Under Compute in the portal there are versions of Windows Server, Linux distributions such as Red Hat and Ubuntu, and images with software already installed, such as SQL Server. He picks Windows Server 2016 Datacenter. He then sets a name, a regular or solid-state drive, admin credentials (the password must meet rules shown by hovering the warning icon), a subscription and a new resource group.
- Pick a region for latency; bring or rent a Windows license. He says to place the VM near you, your users and any Azure or web resources it talks to, and picks East US. If you already own a Windows license you can use it. Otherwise Microsoft rents you one and the hourly cost goes up a little.
- You pay only while the machine is running. The listed monthly cost assumes running 24 hours a day for 30 days. Starred sizes are the ones available in the chosen region. The summary page showed about 37.6 cents for 60 minutes, billed by the minute. An auto-shutdown, for example every day at 7 p.m. Central, avoids charges for the hours after that. He also notes availability sets, a shared virtual network or subnet, extensions such as antivirus, and downloadable templates (PowerShell, CLI, .NET) to automate creating the same VM.
- Remote Desktop access requires opening its inbound port. This setting is required. He opens 3389, the default Remote Desktop port, despite the warning about Internet exposure. After about five minutes of deployment, the overview page shows the status, region and public IP, with buttons to reset, stop or connect. Connect downloads an RDP file that opens in the Remote Desktop app. He accepts the warning about the missing certificate because he just created the machine, and notes that the first login is slower while it sets up a profile.