Thursday, 25 October 2018

Migrating npm packages to Azure Artifacts

Azure Artifacts is the new name for VSTS Package Management. It's a "one stop shop" for storing NuGet, npm, Maven, Gradle and "Universal" packages.

I'd previously been using another private npm registry server and wanted to shift over to using the Azure Artifacts npm registry instead. As part of this move, I needed to somehow grab the packages that were currently stored in the old registry and then re-publish them to the Artifacts one. Here's how I did it. Artifacts do support configuring 'upstream' sources, but that's not really a long term solution for migration.

Downloading packages

npm pack "@myscope/mypackage@^1.2.3456" --registry http://my.oldnpmserver

You'll now have a file with a name similar to myscope-mypackage-1.2.3456.tgz

Repeat this for all the packages you need.

Re-publishing packages


First off, create a new file named .npmrc and enter in the details for your Artifacts registry url. If you have packages with scopes (like I did above), then add in those as well.

@myscope:registry=https://myorg.pkgs.visualstudio.com/_packaging/MyArtifacts/npm/registry/
registry=https://myorg.pkgs.visualstudio.com/_packaging/MyArtifacts/npm/registry/

always-auth=true

Azure Artifacts are password-protected, so you'll need to authenticate. Your options here are to either make use of the vsts-npm-auth tool or generate credentials that can be pasted into the .npmrc file. Click on the Connect to Feed button from the Azure Artifacts page in the DevOps portal to find out the details.

Now use npm publish to push all the .tgz files up to the Artifacts repository (with a bit of help from PowerShell)

Get-ChildItem *.tgz | ForEach-Object { npm publish $_ }

Saturday, 13 October 2018

A Jon Skeet Meetup retrospective

This week we hosted Jon Skeet at the Adelaide .NET User Group. Jon demonstrated some of the new language features coming in C# 8, and it was probably the biggest attendance we've had in a really, really long time.

Because we had so many registrations, I lined up some extra help with my two oldest kids (conveniently on school holidays). They helped set up the room, liaised with the pizza delivery guy, and helped pack up everything. I think they even found a few things familiar with Jon's use of Fibonacci sequences in one example and similarity of programming language features (my eldest daughter has been doing some Python coding at school).

Jon lives in the UK, and we're in Australia, so whilst we would have loved to have Jon in person, the next best thing was to have him present remotely. We've had remote presentations before using Google Hangouts, but this time I opted to use Skype (and made use of the new recording feature).
I don't use Skype a lot, but we got the call up and running without too much difficulty.

I set up a webcam in the meeting room, along with a boundary microphone (an MXL AC404 USB Conference Microphone). The intention is that the presenter can see the audience, and the boundary microphone allows people to comment and ask questions from a fair way away (eg. right at the back of the room) and still be heard. This seemed to work pretty well - people up the back were able to ask questions and Jon seemed to hear them ok. Jon's video feed was pretty good. I think our feed back might have been a bit jumpy, but for the most part I think it was ok.

I left it to the last minute to arrange for access to the WiFi network at our venue. I ended up using my phone's 4G data for the call, which worked well. It was only after we'd finished that I discovered that an email had come through just before the start of the meeting with the WiFi details. At least I've got them for next time.

We also picked up a meeting sponsor this month in Simon Cook from Encode Talent Management. Being able to not charge attendees (to cover the cost of pizza) was great, and hopefully this relationship might continue in the future.

Snapshot from Skype recording, showing Jon Skeet in top, audience in bottom


Skype notes:
  • The recording doesn't include the extra buttons/overlays/controls (which is good)
  • The recording will record a split-screen of web cams if they're both active. If you just want to have one webcam in the recording then you'll need to disable the other one. When screen sharing, then just that is recorded.
  • Taking a 'snapshot' follows similar rules as for recording. eg. a snapshot would include both webcams if they're active, or just the shared screen if one is being shared.
  • If the presenting person isn't using a headset, then to avoid echo it's probably best to mute the microphone (and just un-mute it for questions)
  • Making the overlay controls slide out of the way was inconsistent. Sometimes moving the mouse off the screen worked, but one time it didn't. Would be good to figure this out.
  • F11 makes Skype go full screen
  • Skype now supports NDI. This means it should be able to talk to software like OBS Studio if you wanted more control over broadcasting or recording. I don't know if the feed it sends is just the video/shared screen or if that also includes the control overlays etc.
Other notes:
  • Our regular room can hold a decent crowd if necessary.
  • People will eat as much pizza as there is available to eat
  • People don't drink much water (but this might change if it was warmer weather)
  • Organise wifi access earlier!
  • Windows 10 has simple video editing via the Photos app
The recording of Jon's talk is up on YouTube. I won't be giving up my day job to become a YouTube broadcaster anytime soon, but it's nice to have a record of a great presentation.