Souk's Notes - Unofficial Summaries
Crosstalk SolutionsPhone Number Porting Explained
- Porting is carrier-to-carrier, and the losing carrier decides. The customer gives the new carrier a letter of authorization (LOA: the numbers, address and company details, plus consent) and usually a copy of the latest bill from the losing carrier; the new carrier submits the port, which the losing carrier accepts or rejects. The host notes that some very small rural carriers cannot port at all, so check that first.
- Losing carriers reject any imperfect request because porting loses them business. The host says they are obliged by law to port numbers but have no incentive to make it easy. In his experience about 75% of port requests are accepted first time, and most of the remaining 25% fail for the reasons below.
- An address mismatch is the most common reason for rejection. The address with the new carrier and on the LOA must match the losing carrier's billing address exactly; "Street" spelled out against "St." is enough to have a port rejected, so copy the address from the old bill.
- Bundles, account numbers and contracts each block a port. Phone service bundled with internet or TV may have to be split into its own account first. Where the main number doubles as the account number, add a temporary number as the account number before porting the rest. Under contract, keep one number with the old carrier until the term ends, and watch for automatic renewal at expiry.
- Ports happen on a set day with no time window. Once accepted, the losing carrier gives the new carrier only a date. The host advises having the new service fully configured beforehand and watching it closely that day so the numbers ring through correctly the moment they move.
Crosstalk SolutionsSFP Module Installation
- Both ends of a fiber link must match in type, speed and fiber. SFP is 1 Gbps and SFP+ is 10 Gbps; the modules on each side and the patch cable must all be the same speed and the same fiber, single-mode or multimode. LC-to-LC is the standard patch-cable connector. The host demonstrates with 1 Gbps multimode between a UniFi Switch 8 150W and a 24-port EdgeSwitch Lite.
- Installing the link is plug-and-click once the parts match. Remove the rubber stoppers from the modules and switch ports and the white caps from the cable ends; modules fit only one way and click home. In his demo a persistent ping dropped when he pulled the Ethernet cross-connect and resumed as soon as the fiber went in.
- The host used 10Gtek modules only because Ubiquiti's were unobtainable. Ubiquiti's own SFPs had been released but were out of stock when he bought, and he says new Ubiquiti products typically take 2 to 3 months to become widely available. He paid for the 10Gtek modules, says they are not a sponsor, and found them about the cheapest available and reliable.
- Ubiquiti's own SFPs are probably the safest bet for Ubiquiti gear. He has not used them yet but believes they cost about the same as 10Gtek. For other third-party modules he points to Ubiquiti knowledge-base articles and forum posts listing compatible SFPs. His description links to both are Amazon affiliate links.
Crosstalk SolutionsUniFi Enterprise Networking
- The host chose UniFi here for remote manageability, not as a default. The client, a new-build retirement home in Texas, had no local IT person able to manage the gear while he is in Oregon; UniFi lets him make changes himself at any hour instead of arranging remote-desktop sessions with someone on site. Price was about the same as the EdgeSwitch/EdgeRouter line, and he says he still picks per customer need and budget. He would not have trusted UniFi at this size before controller 5.3.8.
- He would now use UniFi fiber switches instead of EdgeSwitch XGs. Each of three closets has an EdgeSwitch 16 XG and two UniFi Switch 48s, with a USG Pro on Comcast Business, 26 UAP-AC Pros and a Cloud Key. The UniFi 16 XG was not supported until controller 5.4.9, still in beta when he ordered, so he used EdgeSwitch XGs with every port a trunk. He was disappointed the USG Pro's SFPs are WAN-only, forcing an Ethernet LAN link.
- The cabling contractor switched to single-mode fiber mid-project. Multimode was unavailable, so the 10 Gbps closet-to-closet links became single-mode while switch-to-XG cross-connects stayed multimode, leaving him with spare modules. Third-party 10Gtek SFP and SFP+ modules worked on every combination, bought because Ubiquiti's were out of stock; he rates Beyondtech patch cables well above his old ones. An iperf test across the single-mode link hit 823–833 Mbps, limited by the 1 Gbps client NICs.
- Three networks separate management, main LAN and guest traffic. Management is the native VLAN 1 on 192.168.1.0/24, reachable only from XG ports and ports 1–2 of each 48-port switch; ports 3–42 put devices untagged on VLAN 10, a 172.16 range far larger than needed with DHCP locked down; the last six ports carry access points, addressed on management and tagging VLAN 10 and guest VLAN 20, which is bandwidth-limited and secured with UniFi guest policies.
- Set access-point channels and transmit power manually in dense deployments. Using the UniFi map of the property's 24 placed APs, the host staggered channels on 2.4 and 5 GHz and set power to medium on 2.4 GHz and high on 5 GHz for good overlap without interference. He estimates the network will serve about 200 devices, up to 300 including Wi-Fi.
Crosstalk SolutionsMulticast Paging with CyberData VoIP Paging Server
- Ordinary page groups don't scale, because each page is many calls. FreePBX opens a separate channel to every device in the group at once, and since setting up a call costs Asterisk far more CPU than keeping one going, FreePBX caps page groups at 40 devices. The host says some lower-end servers cannot handle even 40.
- Multicast paging sends one channel that every device listens to. Asterisk opens a single channel to a multicast IP address and port, and the phones and paging devices subscribed to that address all play it. The host calls it "absolutely the way to go" for large paging deployments such as hospitals, schools and retirement homes.
- Any multicast address works if every device in the group matches. The CyberData paging server defaults to 234.2.1.1 on port 2000, then 234.2.1.2 on port 2002, and so on; Wikipedia lists 234.0.0.0/8 as unicast-prefix-based space and 239.0.0.0/8 as private-use under RFC 2365. The host says he is still learning multicast and asks viewers to correct him.
- FreePBX's built-in page-group multicast needs a newer Asterisk. It requires Asterisk 13 or higher, and on his Asterisk 11 the Page Pro commercial module's RTP multicast option is greyed out. Multicast still works by setting the address in Endpoint Manager phone templates: comma-separated addresses join one phone to several groups, and a Sangoma S500 line key can page a multicast address directly. He tested this with an S500 and a Yealink T23G.
- A self-contained paging server is his pick for hospital-scale paging. The CyberData VoIP V3 paging server registers as one FreePBX extension (251 in his lab). Callers dial it, enter a two-digit zone from 00 to 99 and, optionally, a security code. It also bridges legacy analog paging over RCA line in/out, and has a relay, a night ringer and up to 10 custom audio files.
Crosstalk SolutionsFreePBX Holiday Time Conditions
- Holiday time conditions need updating for this year's observed dates. The host warns that Christmas 2016 is observed on Monday 26 December rather than the 25th, and New Year's Day on 2 January, so FreePBX holiday entries left on the usual dates will not route calls to the holiday destination on the actual days off.
- Put a holiday time condition ahead of normal call routing. In the host's design, inbound calls hit the holiday time condition first: on a match they go to a holiday announcement (then voicemail or hang-up); otherwise they flow on to an extension, the main IVR, or a further business-hours time condition.
- Holidays live in a time group keyed only on dates. Under Applications > Time Groups the host builds one "holidays" group using only month-day and month ranges, ignoring times and weekdays, then points a time condition at it. Because holidays such as Thanksgiving and Labor Day move each year, he sets a calendar reminder for early January to re-enter the whole year's dates once.
Crosstalk SolutionsCyberData VoIP Paging Amp
- The CyberData SIP paging amplifier makes a loud, simple SIP paging system. The host lists MSRP at about $550 for the amplifier and about $76 for a CyberData horn speaker, adding that nobody pays MSRP. In his own test, without the +4 dB volume boost, a page was clearly audible outdoors at about 30 yards from one horn.
- Power comes only over PoE, and the PoE standard limits horns. The unit has no separate power input, so it needs a PoE switch or injector; it runs one horn on 802.3af and two on 802.3at, and auto-senses which. CyberData's documentation gives a 25-foot maximum per speaker run and claims about 5,000 sq ft of coverage at full volume.
- FreePBX setup uses two extensions and Endpoint Manager. The host registers account one as the pager (extension 250) and account two as a "night ringer" (extension 252) that just plays a stored audio file. He provisions with the CyberData template plus DHCP option 66; SIP accounts and two backup servers can also be set by hand.
- Endpoint Manager leaves the default admin/admin login in place. Unlike other devices it provisions, where the password gets changed, the host found this unit's web login stays admin/admin even after configuration, so it has to be changed separately.
- The unit does far more than the host uses it for. He points to a DTMF-triggered relay (code 123), a slot for a CyberData strobe, a sensor input that can fire the relay, 10 multicast groups, and up to 10 custom audio files. He has not worked out how to dial in and play stored files, or what the relay is for in a paging setup.
Crosstalk SolutionsComplete UniFi Setup Start to Finish
- Factory-defaulted UniFi gear works at once and shows solid white. The host's build is a USG, a UniFi Switch 8 150W, a UAP-AC-Pro and a Cloud Key, each reset by holding the button about 10 seconds. A solid white LED means "ready for adoption", blue means adopted. The USG defaults to 192.168.1.1 and hands out DHCP, so a DHCP client gets internet before any configuration.
- The Cloud Key's setup wizard adopts everything in one pass. The host sets WAN type (DHCP, static or PPPoE) on the USG's own page first. He then finds the Cloud Key with Ubiquiti's Discovery Chrome plugin and runs its wizard on controller version 5.3.8. The wizard adopts all three devices, creates the main and guest SSIDs, and links to Ubiquiti cloud access.
- Move the LAN off the default subnet, with fixed infrastructure addresses. He re-addresses to 192.168.99.0/24, giving the USG .1, the switch .2 and the Cloud Key .3, while the access point stays on DHCP. DHCP runs from .100 to .254 so statics have room, and DNS points to the USG first and 8.8.8.8 second.
- Changing the subnet strands the DHCP devices until rebooted. A running ping shows when connectivity returns. Power-cycling the PoE switch also reboots the Cloud Key and access point it powers. When the discovery tool failed to find the Cloud Key again, the host deduced its new address from the order in which DHCP had handed out leases.
- The Cloud Key's static IP is set on its own configure page. The host sets it there, not in the UniFi controller, and sets the switch's static IP under its configuration in the controller. Each change briefly drops whatever hangs off the switch. He finishes by upgrading each device's firmware, and says his product links are Amazon affiliate links paying him about 3–4%.
Scott HanselmanASP NET Community Standup - November 22nd, 2016 - 1.1 and testing AerialSpaces
synopsis
The 22 November 2016 ASP.NET Community Standup, hosted by Hanselman with John and Damian Edwards, is both a trial of a new streaming tool and a status report after ASP.NET Core 1.1 shipped. Its payoff is Edwards' account of where performance and tooling stand: a first TechEmpower showing that is strong only in plaintext, a pipelines API and a community Kestrel patch meant to close the gap, and tooling and versioning behaviour he openly calls unfinished.
Trying Aerial Spaces. The show runs on Aerial Spaces, a startup's WebRTC-based tool, in place of Google Hangouts, from the startup's staging site. The hosts say it needed no plugins and gives viewers control of the camera layout. They count 150-plus viewers with nothing crashing. Viewers reported trouble in Edge, which the hosts guess is browser detection, and the hosts keep getting booted by links that navigate away. Edwards added the embed to the live.asp.net site himself and live-streamed the coding.
Release news and community links. John covers the ASP.NET Core 1.1 RTM post, .NET Core 1.1, ASP.NET Core support in Visual Studio for Mac, and ASP.NET Core on App Service on Linux, which uses Docker under the hood, all announced at Connect. Community items include an EDI serializer for .NET Core, URL rewriting behind an AWS load balancer, and Orchard running on 1.1, which is not yet feature-ready. Edwards says the SignalR port used in one post "has no future" because a team is rebuilding SignalR from the ground up.
TechEmpower round 13. This is the first round to include ASP.NET Core, on version 1.0.1. It placed 10th in plaintext and about halfway down in JSON, database and fortunes. Edwards explains that the middleware entry counts as a micro-framework because ASP.NET Core exposes no raw-server API, and he says even full MVC beats raw Node on plaintext. A host compares the test to a 0–60 time: a constrained measure of how fast a server speaks HTTP. Round 14 is hoped for in January, and the stated goal is top ten in every test.
Pipelines. Edwards presents pipelines, formerly called channels, as the basis of the next round of performance work. The pipeline owns and pools the buffers, a job Kestrel currently does by hand, and it comes with non-allocating serialization primitives. He relays an MVP Summit demo in which allocation fell from hundreds of megabytes to about 14 KB. A community member wrote a TLS wrapper over pipelines using SSPI and OpenSSL. In Q&A he says the basic API is far along but has not been through formal API review.
The Kestrel magic-number PR. A community member, Ben, used a de Bruijn sequence to locate the matched byte in Kestrel's vectorized parser. The PR was open for four months, drew in other community members and the JIT team, and yielded about 5% in plaintext. In review, reordering two lines broke Kestrel because the lock synchronization had not been commented. A host draws the lesson that large community PRs need patience, and Edwards says Ben has found more "low-hanging fruit" of the same kind.
Roadmap and tooling. Edwards plans a write-up of the "big rocks" for the version after 1.1 within weeks. He calls the Preview 3 MSBuild SDK in the VS 2017 RC alpha quality and gives no ship dates. On the downloads page, he says it serves first-time visitors and experienced users with one design. A host compares it unfavourably with Node's two-button page.
Q&A. Developers should install the SDK and servers the runtime. Installing both 1.0 and 1.1 requires two installs. Apps roll forward to new patch versions but not minor ones, and Edwards says that behaviour will be revisited. MVC 3 and 4 projects, which cannot be opened in the RC, are coming back. Route-based culture localization shipped in 1.1. Azure SDKs await the API restoration planned for the first half of next year. HttpClient should be used as a single instance, though it caches DNS. Native compilation via CoreRT remains a long-term effort.
- ASP.NET Core is finally on TechEmpower, but only tops plaintext. Edwards says round 13 is the first to include ASP.NET Core, measured on 1.0.1 rather than the just-shipped 1.1, and it landed 10th in plaintext but "kind of halfway down" in JSON, database and fortunes. He hopes round 14 lands in January on 1.1, and says the goal is top ten in every test, with much larger gains expected from the version after 1.1.
- Pipelines invert the Stream model so the framework owns memory. Edwards describes pipelines (formerly "channels", in the corefxlab repo) as handing the caller a pooled buffer instead of the caller allocating one, with providers planned for sockets, the file system, libuv and Windows registered I/O. He relays an MVP Summit demo where naive stream code allocated "many hundreds of megabytes" against about 14 KB with pipelines; MVC users would get the benefit without code changes.
- A four-month community PR made Kestrel about 5% faster. A community member, Ben, replaced a binary search for the matched byte in Kestrel's vectorized HTTP parsing with a de Bruijn-sequence "magic number"; Edwards puts the plaintext result at roughly 5.25 million requests per second. Review found that reordering two lines broke Kestrel because lock synchronization was uncommented, and the JIT team made fixes as a result.
- Developers want the SDK; minor versions do not roll forward. Edwards says the SDK carries only the single runtime it was built against, so anyone wanting both 1.0 (LTS) and 1.1 (current) must install both. An app built for netcoreapp1.0 will roll forward to new patch versions but will not load on a machine with only 1.1 unless forced with a dotnet.exe argument, a behaviour he says he is not satisfied with and the team plans to revisit.
- The new MSBuild tooling is alpha; csproj aims to RTM with VS 2017.
Edwards calls the Preview 3 SDK shipping in the VS 2017 RC "alpha quality",
with side-by-side issues alongside VS 2015, while the plan of record is for
csproj tooling to ship final with VS 2017 RTM. He says
dotnet build --native(CoreRT) is a much longer-term effort outside both the VS 2017 and post-1.1 timeframes.
Crosstalk SolutionsUniFi Switch 8 Unboxing and Setup
- The 150-watt UniFi Switch 8 suits a small office powering phones. It has 8 gigabit ports with 802.3af PoE and 2 SFP ports, any port settable to Ubiquiti's proprietary 24V passive PoE for its cameras and lower-end access points; MSRP is $199. The host reckons the 150 W total budget would easily carry four or five demanding devices such as UAP-AC Pros or VoIP phones.
- Cheaper eight-port UniFi switches are coming, per Reddit photos. One, shown at WISPAPALOOZA in Las Vegas, takes AC or 802.3af PoE in on its first port and passes PoE out on its last, with no PoE to other devices, useful where there is no AC power, such as an attic. A 60 W version powers only its last four ports. The host assumes both will undercut $199 but has no price or ETA.
- The host's first review unit arrived dead on arrival. It showed no fans or lights across several cables and outlets, and the RMA replacement took about 20 days; meanwhile he bought two new units for the customers they were meant for, and the replacement powered up normally.
- Adoption needs the set-inform command sent twice. He found the switch in Ubiquiti's Device Discovery Chrome plugin only under the UniFi family filter, sent set-inform to http://<controller>:8080/inform with the default ubnt/ubnt credentials, and adopted it; it then went disconnected until set-inform was repeated, which he says also applies over SSH.
- The host still prefers full EdgeSwitches to UniFi switches. He concedes the UniFi controller is quickly catching up in capability, offering per-port VLAN trunking, mirroring, aggregation, port isolation and storm control, but thinks much of the UniFi switch's popularity is Ubiquiti marketing: users liking every bubble green on the controller dashboard.
Crosstalk SolutionsEdgeSwitch 48 Unboxing and Setup
- The EdgeSwitch 48 is a data-center switch priced well below HP or Cisco equivalents. The host quotes about $760 US for the 48-port 500 W model and about $875 US for the 750 W model; each has 48 ports plus two SFP+ and two SFP ports, and he says he has installed a number of them without problems. Ubiquiti forum threads list which SFP modules are compatible.
- Size the PoE budget by how many ports carry PoE. Rather than adding up each device's wattage, the host tells customers to buy the 500 W version if half or fewer of the 48 ports will power PoE devices (phones, access points, cameras), and the 750 W version if half or more will; he says the rule has not let him down so far.
- Out of the box the switch takes a DHCP address and default credentials. Find it with the Ubiquiti Discovery tool or the DHCP leases and log in as ubnt/ubnt. The host changes the password first (best practice would also change the username, which he skips here), then sets a static IP under System > Connectivity > IPv4; the browser does not follow the switch to its new address.
- Changes must be saved explicitly with Save Configuration. On the shipped 1.0.1 firmware a popup warns of unsaved changes; on later firmware the Save Configuration button in the upper right glows red instead.
- Firmware is upgraded through the backup image slot, then a manual restart. The host uploads the new image (version 1.6.0, as of 19 September 2016) as the backup firmware, which takes about four to five minutes, and sets it as next active; contrary to what he expected, the switch does not reboot on its own and must be restarted under System > Utilities.
Scott HanselmanASP.NET Community Standup - October 11th, 2016 - Where is Scott
synopsis
This standup ran without Hanselman, who was flying between Copenhagen and Paris. Its substance is an ASP.NET team member's status report. The minor release after June's 1.0 is locking down a set of practical features. SignalR, Razor Pages, MSBuild and .NET Standard 2 are longer efforts expected next year, with SignalR RTM around mid-2017 as of the recording.
Community links. Jon runs through community posts, and the team member adds context. He says Kestrel is not yet approved as an edge server and should sit behind IIS or nginx. EF Core has no database initializers or seeding, so a command-driven migrate-and-seed pattern is reasonable for now. The CLI's dispatch rules allow project tools, but a global tools install "doesn't exist yet". He calls Immo's .NET Standard 2 post a statement of plans, not shipping tooling.
The 1.1 feature set. The team member lists URL rewriting, response caching, WebListener, middleware as MVC filters and view components as tag helpers. The filter bridge lets request localization run after routing, so the culture can come from a URL token. Razor view pre-compilation at publish avoids loading and JIT-ing Roslyn at startup, which he puts at "multiple seconds". A cookie-based TempData provider removes the need to set up session. An Azure method on WebHostBuilder turns on portal logging and IIS integration, and Key Vault is still being worked through.
Longer-lead work. SignalR is being reimagined on "ASP.NET Core Sockets", a channels abstraction for allocation-light byte pumping that could also let Kestrel swap its transport. He gives a preview "probably early next year" and RTM "mid next year", with Razor Pages alongside. Web API token issuance and Azure identity integration are open questions. The MSBuild and .NET Standard 2 work is under way in public repos without a public summary yet.
Release cadence. Asked how community optimizations reach shipped Kestrel, he points to a coming post on cadence under the LTS/FTS policy. He tells the story of a De Bruijn sequence suggestion that ended in a pull request with a variable named "Ben's magic number", and adds that the team does not take every such change.
Questions. The default TempData provider throws without session. ASP.NET Core session does not lock pessimistically the way System.Web's did, and that locking is why SignalR has no session. Azure web roles can host ASP.NET Core, but not turnkey. Tooling RTM follows VS "15", and he did not know whether the .NET SDK would be made public.
- The ASP.NET Core minor release is locking down its features. An ASP.NET team member (Hanselman is travelling and absent; Jon presents the community links) lists what is on the roadmap for what "effectively" becomes 1.1, after the June 1.0 release: URL rewriting and response caching middleware, the WebListener server, middleware usable as MVC filters (so request localization can run after routing and read a culture token from the URL), view components as tag helpers, and a single Azure integration method on WebHostBuilder that turns on App Service logging and IIS integration and is planned to cover Key Vault. A command-line Razor view pre-compilation tool, run at publish, is meant to cut startup time by avoiding loading and JIT-ing Roslyn, which he says costs "multiple seconds".
- A cookie-based TempData provider fixes MVC's out-of-the-box failure. The default TempData provider goes through session, which MVC does not depend on, so calling TempData in a new MVC project "explodes" unless session is configured. The new provider round-trips the data in a cookie encrypted with the app's data protection setup. He concedes cookies have size limits, but argues they suit post-redirect-get status messages, and notes that session in ASP.NET Core does not use System.Web's pessimistic per-session lock.
- SignalR is being rebuilt on a new byte-pumping abstraction. Working name "ASP.NET Core Sockets", built on "channels": a layer for memory-efficient movement and parsing of bytes, with pooling and few or no allocations. He says it could let Kestrel switch between libuv, .NET sockets or Windows RIO without changes further up the stack. As of the recording, a SignalR preview is expected "probably early next year" and RTM "mid next year", with Razor Pages, now past its prototype, on the same timeline.
- Several large efforts are running in parallel, mostly landing next year. He names the MSBuild move, which is happening in public repos but has not been summarized because of heavy churn; .NET Standard 2, which promises to bring back many APIs; and the web API token and Azure identity story, where IdentityServer4 is the current option. A post on release cadence under the new LTS/FTS support policy is promised "soon". In Q&A he says tooling reaches RTM on the VS "15" timeline and that the docs are intended to move to docs.microsoft.com.
- Kestrel is still not approved as a public-facing edge server. Discussing Rick Strahl's post on external access to Kestrel, the team member says they always recommend treating it as an application server behind a reverse proxy such as IIS or nginx. Other links note that EF Core lacks the old database initializers and seeding, and that a formal CLI "global tools" install story is wanted but "doesn't exist yet".
Crosstalk SolutionsFreePBX Blacklist
- FreePBX ships a little-known caller-ID blacklist, installed by default. Under Admin > Blacklist, numbers on the list are routed automatically to one blacklist destination. The host urges setting that destination even if it only terminates the call, so a listed caller is hung up on immediately, every time, for as long as they stay listed.
- The destination can be Lenny rather than a hang-up. In Settings the host points blacklisted calls at Lenny, which keeps telemarketers talking to a recording, and links his separate video on setting Lenny up in FreePBX. In his demo, a blacklisted number calling in reached Lenny straight away.
- Feature code *32 is the easiest way to add numbers. Dialled from a phone right after a call, it blacklists the last caller's number after reading it back for confirmation (press 1). Numbers can also be added in the GUI with a description, or with feature code *30 by keying in the number followed by the pound key.
Scott HanselmanHow to run Linux on Windows 10 with "Bash on Ubuntu on Windows!" - Windows 10 Anniversary Edition
- Bash on Windows is real Ubuntu user mode, not a virtual machine. Hanselman enables the Windows Subsystem for Linux (marked beta) under "Turn Windows features on or off", with no Hyper-V, reboots, and the first run downloads Ubuntu's user-mode bits and ELF binaries from the Windows Store, "distributed by Canonical". There is no Linux kernel: Linux system calls are captured and redirected to the Windows kernel. He shows it on an Insider preview and relays rumours of an August release in the Anniversary Edition, which he expects will still carry the beta label.
- It behaves as its own Linux world beside Windows.
Each Windows user gets a private Ubuntu filesystem (Ubuntu 14, "Trusty", per
lsb_release -a);/home/scottis notC:\Users\Scott, and Windows drives appear under/mnt. Root/sudo is separate from Windows administrator rights, andapt update/upgradepull from Ubuntu's servers, not Microsoft's. Windows files show as all readable, writable and executable because the two permission models differ. - It targets developers at the command line, not servers or GUIs. Kernel-mode work such as talking to a USB device will not work, GUI apps like Firefox for Linux are out of scope, and he says it is "not for server workloads" like moving office machines onto Apache.
- It runs native Linux binaries, not recompiled ports, near native speed. He describes Cygwin as GNU utilities recompiled for Windows; this runs the real Ubuntu packages instead: he installs htop, Emacs 24 and build-essential, then compiles and runs a GCC hello world from a Linux tutorial site. He puts its speed at "99%" of native in his experience, says it feels far lighter than a VM, and reports running TensorFlow with Python on an Insider build.
- The upgraded Windows console host serves Bash as well. In Windows 10, command prompt, PowerShell and Bash share conhost, so all three get transparency, resizing, Alt+Enter full screen, ANSI colour and word wrap. Monospaced fonts such as Ubuntu Mono now show up in the font list without the registry edits once needed.
Scott HanselmanASP NET Community Standup - June 21st, 2016 - Mads Visits
synopsis
Hanselman is absent ("we're just assuming he's on vacation"), so Damian hosts with Jon, and Mads joins to explain the main change in the ASP.NET Core project templates shipping with the following week's RTM. gulp and npm are gone from file-new, replaced by Bundler & Minifier, his community tool. It runs the same from Visual Studio, VS Code and the command line, and all the existing Node tooling in Visual Studio stays. The rest of the hour is Q&A, which ends with Damian arguing that web development will never come down to one blessed stack.
Release status and interns. Damian says .NET Core and ASP.NET Core 1.0 RTM remain on track for the following week, the same week as Red Hat DevNation, alongside tooling preview 2. Nightly tooling builds are already on the tooling repo's GitHub releases tab, and he calls them bleeding edge: build-to-build upgrades are supposed to work, but setup can break. Two summer interns have started. One is building URL-rewriting middleware along the lines of IIS URL Rewrite or mod_rewrite, sketched on a whiteboard minutes before the show. The other is building a tag helper provider that exposes every view component as a tag helper. Damian also wants the validation helpers, unchanged since MVC 3 in about 2010, to support Bootstrap error styling. He targets an MVC Core 1.x release within about 12 months and a high-level roadmap about 10 days after RTM.
Community links. Jon's links include TypeScript set up with npm and gulp for an Angular app. That prompts Damian to ask whether TypeScript should simply work when added to a new project, without a full SPA tool chain. Mads says that scenario is coming, built jointly with the TypeScript team.
Why gulp and npm left the template. Mads gives four reasons. Publishing ran npm install, which was slow. Node, npm and gulp added concepts to ASP.NET Core, which was already new to most developers. node_modules put about 1,500 files and 5–7 MB on disk even after scrubbing. And not everyone agreed npm and gulp were the right answer to bundling and minification. Damian adds the paradox: TypeScript type definitions were about to ship only through npm, so the team is making a perceived step back and has not solved everything. Mads stresses that it is "different", not better. Grunt, gulp and now webpack each had their year, and Task Runner Explorer and the rest of the Visual Studio integration are untouched.
The demo. Mads says Bundler & Minifier is a year-old hobby extension with almost 140,000 downloads, which he designed from the start to be portable to .NET Core. It ships as a NuGet tool referenced in project.json, not as an extension, and runs dotnet bundle before compile from a single bundleconfig.json that maps inputs (globbing supported) to outputs. Installing the suggested extension adds right-click minify, clean and bundle commands that keep the config current. In VS Code the same commands run as tasks, including clean and a watcher, though the watcher does not yet integrate with dotnet watch. Mads insists it is not a gulp replacement but a static JSON config that will only ever do what the tool does. He shows a prototype of runtime bundling middleware and a tag helper that read the same config, built on a new .NET Core port of AjaxMin by the author of the Markdig parser. Per-bundle options cover CSS, JavaScript and HTML minification and gzip output. Damian notes that the static file middleware cannot yet serve pre-compressed files, which is on the post-1.0 list.
Q&A. Damian explains that the web root holds files the server serves directly, while the content root holds non-source files the app reads at runtime, such as Razor views and appsettings.json. He calls the name terrible. Mads describes the route from extension to product: his web analyzer linter was rebuilt into the preview 1 tooling, and Visual Studio will increasingly prompt users to install community extensions. Asked about Aurelia, Damian says to use whatever makes you happy. Steve Sanderson's SPA integrations are beta and suit people who have already chosen a framework, and Mads says framework-specific support follows customer demand. Damian closes the theme by arguing that the web is an open platform, so it will always have gray areas and will never reduce to a single stack. After RTM he expects SignalR 2.2.1 to ship and work on SignalR Core to begin.
- New ASP.NET Core templates drop gulp and npm, not the tooling. Mads lists four reasons. npm install made publishing slow. Node and gulp added concepts for newcomers to learn. node_modules put about 1,500 files (5–7 MB) into each new project, even after scrubbing. And not everyone agreed npm and gulp were the right answer to bundling and minification. Task Runner Explorer and the gulp, Grunt and npm integration all stay, and Bower is still used for third-party libraries.
- A community bundler-minifier replaces gulp, and is no task runner. Mads
calls Bundler & Minifier a year-old extension with almost 140,000 downloads,
now a .NET Core NuGet tool. It runs
dotnet bundlebefore compile from a single bundleconfig.json and works the same from Visual Studio, VS Code tasks or the command line on Mac and Linux. Its watch mode does not yet integrate with dotnet watch. He shows a runtime tag-helper prototype that reads the same config, and says Visual Studio will prompt users to install community extensions like this one. - Summer interns are starting long-wanted MVC and middleware features. Damian says one intern is building URL-rewriting middleware and another a tag helper provider that exposes view components as tag helpers. He wants validation helpers, unchanged since MVC 3 (about 2010), to support Bootstrap error styling, targeting an MVC Core 1.x release within about 12 months.
- The team follows customer demand rather than blessing a client stack. Damian says the team cannot build a full experience for every JavaScript framework, and that Steve Sanderson's SPA integration work is beta. Mads says support for a framework like Aurelia would follow a swell of customer requests, as JSX editor support did. Damian also wants TypeScript to work by default in a new project without a SPA tool chain, which Mads says is coming jointly with the TypeScript team.
- After RTM, work turns to a roadmap and SignalR. RTM of .NET Core and ASP.NET Core 1.0 with tooling preview 2 was due the following week, and Damian hoped to publish a high-level roadmap about 10 days after it. He says developers will then ship the long-ready SignalR 2.2.1 and begin SignalR Core, including rewritten JavaScript and C# clients.
Scott HanselmanASP.NET Community Standup - June 2nd, 2016 - Hunter visits
synopsis
Hanselman is absent from this standup. Damian hosts, and Jon reads the community links. Hunter joins to argue that the month's two blog posts, one on bringing APIs back to .NET Standard and one on moving from project.json to MSBuild, are refinements and not a change of course. The end-of-June 2016 RTM of .NET Core and ASP.NET Core stands, tooling stays in preview, and the move off preview tooling is promised to be automatic.
Community links. Jon runs through about 25 posts written since RC2: three RC1-to-RC2 migration guides, Docker deployment, Kestrel URL configuration, Entity Framework 6 with ASP.NET Core, tag helpers, and debugging on Ubuntu 16.04 when 14.04 is the supported version. Damian notes that the official migration guide on the docs site was updated that week.
.NET Standard. Hunter says Microsoft wants both a strong mobile story (Xamarin, UWP) and a strong server story. Bringing back API from mscorlib serves the first without undoing small web apps, because the linker can still cut at the assembly boundaries created during the refactoring. He separates mscorlib from the wider BCL and from .NET Standard: some restored API may stay out of the standard. Damian says nothing in the coming RTM changes and no .NET Standard 1.8 or 2 has a date. The direction was set at Build, only days after the Xamarin acquisition closed, and the first real design meeting was the week before.
MSBuild. Hunter says that making project.json do everything MSBuild does would have taken about two years. The team will carry what project.json taught it into MSBuild and csproj, and xproj was already technically a csproj.
Runtime RTM, tooling preview. Hunter's case is that the tooling had been holding back frameworks that were ready: they had been through stress labs and security reviews, and customers running RC1 in production wanted a supported release. The DNX-to-CLI move, planned for January but landing in May, is why he will not wait on MSBuild. He calls the split "weird" but points to UWP as precedent. Customers who need to interoperate with other csproj projects should wait for the VS15 tooling. He promises the conversion will be automatic: "We fail if we can't make that happen."
One team, one channel. Hunter rejects the complaint that the .NET team spoiled ASP.NET's work. The two teams merged in late January, and former ASP.NET members started the push away from project.json. Both hosts commit to weekly blog posts as the single channel for announcements, and Damian looks forward to discussing ASP.NET features again after RTM, naming SignalR, response caching and web pages.
- Bringing APIs back to .NET Standard is additive, not a reversal. Hunter says the compatibility blog post means more of the mscorlib surface will return to .NET Standard, so code and packages move across Xamarin, UWP, .NET Core server and Unity, which he calls "the unification of .NET" and "taking .NET back". He and Damian say nothing in the coming RTM changes, mscorlib and .NET Standard are not the same thing, there is no date for a .NET Standard 1.8 or 2, and the first real design meeting was the week before.
- The runtime ships RTM while tooling stays preview. The hosts give the target as the end of June 2016 for .NET Core and ASP.NET Core RTM, with tooling preview through the VS15 wave. Hunter argues the frameworks are ready (stress labs, security reviews) and that customers already in production on RC1 want a supported release. He cites the DNX-to-CLI move, planned for January but landing in May, as the reason not to wait, and points to UWP as precedent.
- Migration off preview tooling is promised to be automatic. Hunter commits that opening a project will convert it and it will build and run, with no hand-converting of project.json or Startup.cs. He frames this as a pass/fail test: "We fail if we can't make that happen."
- Returning to MSBuild beats stretching project.json to do everything. Hunter says making project.json do everything MSBuild does would have taken about two years. The plan is to carry its lessons into MSBuild and csproj, and he notes xproj was already technically a csproj. He adds that the push away from project.json came largely from former ASP.NET team members, since the ASP.NET and .NET teams merged in late January.
- Announcements are to be centralized on a regular blog. Damian and Hunter say remarks made on the standup lose their context and "get out of control". The team commits to roughly weekly posts, with questions taken in the post comments rather than on Twitter, Slack or the show.
Crosstalk SolutionsTips for IT Consulting
- Keep your day job and build a client base first. While still employed, the host did after-hours and weekend work for local businesses he knew, charging less than half his current rate, and had five or six regular customers when he went independent. He says those customers then supplied referrals and larger jobs, such as a phone system or website. This was his second try: the first failed after about a year and a half, and 18 months into this one he was only just matching his old salary.
- Save a full year's living expenses before quitting. The host says you can't count on any income at first, so rent, car, food and the rest come out of savings. He expects new income to stretch that cushion to about two years. He suggests cutting expenses under a plan of up to five years to build it, or using a windfall. He funded his own start by cashing out his 401(k), which he does not recommend to everyone.
- Cast a wide net, then narrow to what pays. At first the host took any job he could do well (websites, phone systems, networking, computer repair), then cut back to specialist services as work grew. He treats marketing the same way: with no billable hours, he says, marketing is your full-time job, at least eight hours a day. Of his channels (Google AdWords, Craigslist, the Chamber of Commerce, door-to-door, a newspaper ad), YouTube paid off most. The newspaper ad brought no calls in four months. By then he made two to three videos a week, which plus word of mouth was nearly all his marketing.
- Once established, charge your worth and turn customers down. The host's maxim is that you pay a consultant for the value they bring to the hour, not for the hour. He says a customer who won't pay that is probably not one you want. He uses the first consultation partly to vet the client. He turned down a home EdgeRouter user who wanted his Wi-Fi shared with a neighbour but locked down far past best practice, and could never say why. He notes this contradicts the wide-net advice and applies only later on.
- Don't spend time on people fishing for free advice. Because the host gives away a lot of information on YouTube, he gets many emailed questions and has to sort real leads from the rest. His rule is one emailed answer or five minutes on the phone, spent deciding whether the person will become a paying customer. His example: a FreePBX viewer sent a long list of SIP trunking and caller-ID questions, and when offered the hourly rate, replied that a consultant should answer for free. The host deleted it, saying a proper reply would have taken an hour.