Create a new workspace containing the two branches for which you want to remove merge candidates (*). For example:
Open the “Developer Command Prompt for VS 2019”
Change the directory to the root of your newly created workspace: C:\TFS\Temp
Run this command to see which candidates are available for merge:
1 | > tf merge /candidate Production Delivery /recursive |
This will return a list:
1 | Changeset User Date Comment |
The changesets 117308, 117284 and 117270 are the ones that I want to remove as merge candidates.
For each of the changesets you don’t want as merge candidates run a command like this to remove them:
1 | > tf merge /discard Production Delivery /recursive /version:117270 |
To push this change to TFS you must perform a check-in:
1 | > tf checkin /comment:"Discarded Prd > Dlv merge candidates for CS 117270" |
Do not try to do multiple > tf merge /discard
commands followed by a single tf checkin
: doing that failed to remove the unwanted merge candidates for me!
*) This was needed to overcome an error running tf merge
:
All specified files must reside in the same workspace. Workspace Delivery contains C:\TFS\Foo\Delivery.
Check out the TF Merge Command documentation here:
https://docs.microsoft.com/en-us/azure/devops/repos/tfvc/merge-command?view=azure-devops
(I love the number on my badge: 242)
The opening keynote by Mirjana Kolarov (from Novi Sad, Republic of Serbia) had “Learn & Explore” as the motto.
She ended here presentation with a GIF showing the experience of tester vs client, which inspired me to look for one myself:
Which may be funny but is of course not a good representation of the average Nextens customer, who are more of the athletic type as demonstrated by this recent marketing video:
Amir Rustamzadeh - senior engineer for JavaScript End to End Testing Framework Cypress - showed me that everything that we struggle with in Selenium might be solved by Cypress!
The web went from document viewer to application platform, but the test tools did not adept to a web that went from stateless to stateful.
Because testing is hard it’s important to remove friction.
Some features of Cypress:
> npm install -D cypress
If you make testing simple enough people will start writing tests!
Shelley Lambert is the Test Lead for IBM Runtime Technologies team and told about her journey from inheriting legacy test code to running 87 million tests every night.
Some principles:
Human Challenges:
Technical Challenges:
Dorothy Graham is amazing - she has been at the forefront of many discoveries in software testing (and might not have always gotten credit for it because of her gender):
Dorothy has worked in software testing for over 40 years. Originally from the US, her first job was developing testing tools for Bell Labs in New Jersey. She then worked as a developer for Ferranti Computer Systems in Manchester before moving to the National Computing Centre where she developed training courses in software engineering.
She later became an independent consultant specialising in software testing and founded Grove Consultants in 1988. Over the next 20 years, Grove gained a reputation for the high quality of their training courses, materials and presentations establishing a world-wide client base. In 2008 she left Grove to work again as an independent consultant. Dorothy now uses her experience to help educate and motivate others through her popular and entertaining conference presentations.
She is co-author of five books: an introductory book for software testing together with more in depth books on Software Inspection and Test Automation.Recently she has worked with Seretta Gamba developing a Wiki of software testing patterns. Their latest book has now been published showing how patterns can be used to help solve testing problems.
This was (probably) her final keynote on the continent - some quotes:
The essence of testing:
14:10 - 15:10 | SRE40 | Elicium 2 | Jeramiah Dooley
“Tailwind Traders has realized that it will need to focus on scaling their application and infrastructure to both handle more traffic than originally expected as well as increase resiliency in the case of failures. Their business demands reliability, so we’ll explore how Azure products can help with delivering it. In this module, you will learn about scaling our application and infrastructure for increased loads as well as how to distribute workloads with Azure Front Door and Azure Availability Zones to protect against localized failures.”
“There’s a spectacular deploy script in the Northwind Trader repo” - Couldn’t find it - @jdooley_clt is looking for it after I asked him via Twitter.
15:30- 15:30 | SRE50 | Elicium 2 | Emily Freeman
“Tailwind Traders has done a tremendous amount of good work using modern operations principles and practices to create, deploy, monitor, and troubleshoot their applications and infrastructure in the cloud. As an initial effort, this has been superb, but the engineers know that putting processes in place for continuous learning and continuous improvement are the only sure way to provide continuous value to the customers. In this module, we’ll do more than just talk about these processes, we’ll see how they work in action. We pick up the story right in the middle of Tailwind Traders first significant outage. Everything is on fire (metaphorically) and the engineers are struggling to understand the problem and remediate it as fast as possible. We’ll demonstrate not just how the outage is brought under control, but even more importantly, how Tailwind Traders is able to learn from their experience after the fact and improve their systems while doing so. Understanding this process is one of the most important keys to continuous improvement, “leveling up” our operational practices, and getting the most value from our cloud investments.”
This was my second talk of the day by Emily. She started her talk with an image showing a variation on the This Is Fine meme. This is the original:
Some terms:
Some quotes:
Demo: using Azure Logic App and Application Insights Action Groups
to create a Teams channel with incident number, and post a message to it using string interpolation. Which looked somewhat like this:
1 | incident: {incident-number} |
Sev1 | critical | Complete outage |
Sev2 | critical | Major functionality broken, and revenue affected |
Sev3 | warning | Minor problem |
Sev4 | warning | Redundant component failure |
Sev5 | info | False alarm or unactionable alert |
Something Emily inspired me to try to organize: just like we have our yearly fire drill - collectively walking down 16 flights of stairs - we should practice our incident response! Just randomly break on of our dev environments and let the teams fix it ASAP without calling in the help of OPS. Award a prize to the team that has the lowest MTTR.
]]>12:10 - 13:10 | SRE30 | Elicium 2 | Jason Hand
“Tailwind Trader’s modern monitoring and alerting processes are working great. So great they have detected some issues with our application and how it is behaving in the cloud. It’s time to make sense of what’s going on and how to resolve trouble. In this module, we will explore the processes and tools available to us to troubleshoot issues as they come up with running applications and infrastructure on Azure. Participants will gain exposure to querying log data found in Log Analytics as well as what to look for within Application Insights and Network Monitor to lead engineers to understanding and solving problems quickly.”
Jason did not forget to tweet a selfie with the audience for this session:
https://twitter.com/jasonhand/status/1108712279623852034
Besides some open doors (check if it’s only you via https://azure.microsoft.com/en-us/status/) his demo of creating alerts via Service Health was really interesting!
The “Service Health“ service (“Personalized alerts and guidance when Azure service issues affect you.”) - never been there!
His demo inspired me to try to create an alert via a Webhook to our Operations channel of Teams whenever an Azure service issues affects us. That’s something I tried before via the RSS feed of Azure status but that contained too much noise (and not enough Actionable Alerting) because we couldn’t filter on region and resource type. The webhook has been created, so hopefully we have some Azure outages soon to see the posts in our Teams channel! :-)
This part is not in the Powerpoint so I hope my notes reflect his points correctly!
From my notes: “slow requests by name”. Sounds good, but where is that then dear notes? :-)
Looking at this demo (and the power of the Kusto query language) I made a mental node that I could use these whenever the log queries of our Management Portal let us down!
The other two of the sessions of this day are covered in part three of this blog post.
]]>09:30 - 10:30 - SRE10 - Auditorium RAI Theater - Emily Freeman
“Deploying applications to the cloud can be as simple as clicking the mouse a few times and running “git push”. The applications running at Tailwind Traders, however, are quite a bit more complex and, correspondingly, so are our deployments. The only way that we can reliably deploy complex applications (such as our sales and fulfillment system) is to automate it. In this module, you’ll learn how Tailwind Traders uses automation with Azure Resource Management (ARM) templates to provision infrastructure, reducing the chances of errors and inconsistency caused by manual point and click. Once in place, we move on to deploying our applications using continuous integration and continuous delivery, powered by Azure DevOps.”
Site Reliability Engineering is an engineering discipline devoted to helping an organization achieve the appropriate level of reliability in their systems, services, and products.
“A characteristic of great teams is that everyone trusts each other.”
Emily talked about the importance of small batches (when every release contains small amounts of new code the lines causing the problem are easier to find), but that got me thinking: doesn’t that introduce a new problem? When you have many deployments in a short period of time how can you be sure which of these introduced the bug or regression?
Added to my reading list: The Small Batches Principle - Reducing waste, encouraging experimentation, and making everyone happy
Demo: deploying Resource Manager templates from Azure Cloud shell. That’s also to be found in docs.
10:50 - 11:50 - SRE20 - Hall 11 - Jason Hand
“Tailwind Traders runs its entire business in the cloud and we need to understand what is happening with our cloud resources 24/7. To do that, we’ve implemented Microsoft Azure’s monitoring solutions. In this module, you’ll learn how we use Azure Monitor to understand and visualize time series data using Application Insights and Log Analytics. We’ll also monitor the health of our cloud services using Azure Service Health. With a more observable and data rich system Tailwind Trader’s engineers are now poised to know about, respond to, and resolve problems in real-time before they impact users and the business’ bottom line.”
It looks like that this might be a good book to read (for free, online: https://landing.google.com/sre/books/) since both Emily and Jason seem to be quoting it extensively:
“Site Reliability Engineering - Members of the SRE team explain how their engagement with the entire software life cycle has enabled Google to build, deploy, monitor, and maintain some of the largest software systems in the world.”
Jason took Mikey Dickerson’s Service Reliability Hierarchy (elements that go into making a service reliable, from most basic to most advanced) from that resource:
Some quotes:
This slide illustrates the many ingredients of reliability - food for thought:
I’ve been looking at it everyday but I’ve never knew there was a term for it! Will be using that…
The same goes for SLI’s sibling: I know for sure I’ll be talking about “the SLI dropping below the SLO” in the years to come!
Quote (paraphrased):
His demo of querying App Insights to return charts with an SLI dropping below the SLO at some points really made me want to go out and do those myself. One of the first things I thought of was using it for analytics for this blog, because I find Google Analytics to be almost completely unusable. It looks it’s only useful for tracking the sales your Google Ads have generated, and not very useful to see things like what posts get the most engagement.
Here’s one of the sample queries (in the Kusto query language):
1 | // Top 10 countries by traffic |
Bizarrely my blog is more popular in Czechia than Serbia (were some of my team members live):
Bottom line: an alert is only useful when there’s someone who can do something about it, i.e. when it’s actionable. Don’t alert stuff that always fails, don’t alert stuff that succeeds.
A proper actionable alert should have this information:
Jason demonstrated these principles in a demo where he showed how to have Azure send an automated voice call (“because Ï don’t wake up to e-mail”) when an SLO drops below an SLI. He also showed how you could at the same time send more context about the problem to a Teams Channel (containing the context with the 4 points mentioned above).
I was recently asked to join the rotating stand-by team for Nextens, and I will only agree if we have this set up! ☺
That’s a very important point: not receiving beautifully composed actionable alerts might not be good news - it might mean that your monitoring is broken.
He also stated that in case of outage the first thing that must be restored is the monitoring, before anything else! That’s probably very good advise that I can foresee being ignored by a panicked manager in case of a crisis…
I liked the first talks of the day - which were both part of the Site Reliability Engineering track - so much that I decided to change my schedule for the rest of the day. These three talks (one of which was a 15 minute one) were dropped:
So my third talk of the day was also by Jason Hand.
Read about that in part two of this blog post!
]]>The image above is taken from Microsoft’s Ignite site. It’s obvious that they took inspiration from the header of my blog! ;-)
08:30 - 09:10 | OP001 | Theater 1 | Neil Peterson and Christina Warren
“Check in, grab breakfast, and join us in The Hub to kick off your learning in a casual atmosphere with your peers. Get a preview of what’s to come over the next two days and check out real world demos from Microsoft experts.”
09:30 - 10:30 | BRK3695 | G104-G105 | Houssem Dellai
“Azure DevOps comes with a feature for building and releasing apps, called Azure Pipelines. It makes it easy to create CI-CD pipelines that supports multiple platforms (Java, NodeJs, Go, Swift, .NET…). In addition to that, it can deploy to multiple cloud providers (AWS, Heroku, Azure…). This session will guide you on how to create pipelines for different apps: web, dockerized and mobile apps. Not only that, we’ll add also the database. All these cases are with live demos ! And because DevOps is not complete without automation, we’ll have demos for how to create and deploy the infrastructure using ARM templates. Agenda: ASP.NET Core MVC app with Database Angular app using Docker containers Mobile app using Xamarin & App Center Dev-Test-Prod environments Tasks for integration with 3rd parties Deployment to Azure using Infrastructure as Code”
Observation: before starting his demo of using Azure Pipelines to deploy a Java app Houssem asked the - relatively small - room how many Java developers, and only two raised their hands. Fifteen years ago that would have been many, many more. #java-is-dead
Some points I’ve picked up during this talk/demo:
Viewing the YAML configuration that a CI pipeline runs on and saving it to your repository allows you to create a build that runs on that YAML file. Your build definition will live next to your code, and can be different across branches!
When you create a CI pipeline from a YAML file you no longer see tasks in the definition (because it runs on a single file), but when you run the build the separate tasks will appear in the logs.
I can see us using this a replacement for the build and release definitions templates that we currently store as JSON files in source control at Nextens.
Another thing I noticed was the “Application and Configuration Settings“ of the release pipeline - that’s not in the Azure App Service Deployment task that we have on our on-premises Team Foundation Server 2017, and looks really useful!
Something else that I can see us starting to use when we move away from code-first migration is the SQL Server Database Deploy that was demoed: it looks like you can do idempotent schema changes - Houssem talked of database schemas being compared - using a Dacpac generated as a build task.
The Cloud-based Web Performance Test task is something I also look forward to taking for a ride:
Since I saw a colleague struggling to get SonarQube running last week we should have a look at SonarCloud: “the leading product for Continuous Code Quality online, totally free for open-source projects. It supports all major programming languages, including C#, VB .Net, JavaScript, TypeScript, C/C++ and many more. [..] This Azure DevOps extension provides build tasks that you can add in your build definition. All branches and pull-requests are automatically analyzed, allowing you to discover early any bug or vulnerability in the code. A widget is also available to track the health of the overall application.”
All in all: this talk was really useful and inspiring!
10:50 - 11:50 | DEV20 | Elicium 1 | Damian Brady
“Application deployment has changed drastically over the years, with tedious, manual tasks being replaced by scripted routines. It’s even easier today with cloud services to help you out. In this talk, we’ll take a deep dive into automating and continuously deploying your application using Azure Services. We’ll start with the basics, discussing automated operations that developers control (DevOps) like A/B testing and automated approval gates. We’ll then take that entirely to the cloud using Azure’s new DevOps project, showing you how you can automate the deployment of a frontend web application, backend web service and database, and mobile application with a few clicks of a button.”
Damian started his talk with a video to illustrate the situations before and after the adoption of DevOps:
Donovan Brown’s (Principal DevOps Manager with Microsoft) definition of DevOps:
DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.
Some of my notes:
Damian also showed storing the YAML build definition in source control. What I would like to know if there’s an option to replace tokens in those YAML files to enable using the same file across different development branches that deploy to their own dev environments in Azure (we currently have 6 of those for our dev teams!).
I really liked the concept of having canary slots to deploy to as the last step before going to production. You configure to send a small percentage of your users to that slot, to have them test your latest release in production. When the canary environment works well you deploy to production.
I really liked the concept of having someone sign off for a deployment to production: it’s done via a gate in the Pre-deployment conditions of a CD pipeline that runs on an Azure Function invocation. The Azure function sends a mail to a manager with a link to do a DocuSign, and when that’s done the release is triggered!
12:10 - 13:10 | FUN30 | Hall 11 | Neil Peterson
“Microsoft Azure allows you to build your applications with the full power and resilience of the cloud. But how do you do that? In this module, we’ll show you the tools that Tailwind uses on a daily basis, including the VS Code editor and its available Azure extension. We’ll also introduce you to the Azure Cloud Shell, which allows you to work with Azure resources without the need for the Portal. Finally we’ll show you how Azure Resource Management (ARM) templates can save you time and help you automate infrastructure, reducing the chance of errors during manual human input.”
code .
.You can run code samples from code.microsoft.com (like https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough) in a sand-boxed Cloud Shell:
14:10 - 15:10 | BRK3703 | Emerald Room | Alexej ******
“ASP.NET Core is not just MVC with Controllers and Views or API. Sure there is a lot of usual things that are different from ASP.NET. But there are also some things that good developer should know. Like: IoC/DI, Middleware/Filters, Azure Apps, API, Docker, security, new features and much more.”
This talk was a disaster. Without any introduction the speaker showed slide after slide with seemingly random code samples. When he showed how to minify a CSS file using one of Mads Kristensen VS extensions - in a .NET Core talk! - I left.
There wasn’t really an good alternative session, but I did see half of “Leveraging the power of Microsoft Threat Protection to secure the modern workplace across identities, endpoints, and more”, which was okay but not really useful for me.
15:30 - 16:30 | DEV50 | Elicium 1 | Jeremy Likness
“Sometimes all you need is a few routines to run in response to a series of events - so why do you need to choose a development framework, deployment strategy and server setup for such a simple need? Wouldn’t it be great if you could just write the simple routines you need and have them run exactly when you need them and scale automatically? Turns out you can with the right cloud services. In this talk we’ll create a set of routines that run on Azure Functions and respond to events in Azure Event Grid. We’ll then orchestrate these functions and messages using Azure Logic Apps.”
Artillery is a tool that you can use to run load tests.
1 | PS C:\windows\system32> npm install -g artillery |
I love this!
This part of the talk had a demo that got the first applause of my day: the upload of an image of a hammer to blob storage triggered an analysis of the image on the Computer Vision API which resulted in the text “close up of a tool” to be inserted in the “machine description” column of a table storage record.
I did not have a look at Event Grid and Logic Apps yet but it looks really useful. Great stuff for making hackathon demos to impress people too: creating events based of mails in a Gmail or Outlook inbox, a Tweet being posted, Azure infrastructure being provisioned (Azure Automation), webhooks.
Durable functions are great for saving money when you have processes that spent most of their time waiting (Task.WhenAll
).
That concluded the first day of Ignite. Some observations:
The first fair was Haute Photographie, the art photography fair organized by Roy Kahmann of Kahmann Gallery in Amsterdam:
[…] a new photography fair with a concept unlike any other. Haute Photographie is centred around a group exhibition, featuring works by the grand masters from the history of photography, to the youngest and most exciting young talents working with the medium today. Haute Photographie is a boutique photography fair with the allure of a museum.
Langdon Clay (1949) - King’s Inn Car, Chevrolet Caprice, Hoboken, NJ, 1975
Barry Kornbluh - Torso (Undressing) 2006 - silver gelatin print
Marvin E. Newman (1927, US)
Christer Strömholm - Paris, Montparnasse (late 50’s, silver gelatin print, vintage)
Nora Papp - Instagram Toaster (2018) - Archival pigment print on glass
We bought this one! This work you really have to see in real life to enjoy it - it’s printed on glass that’s mounted with space behind it so the work acquires a lot of dynamic from the shadows that move as you go past the work. Compare it with the way the artist shows the work on her @nora___papp Instagram timeline:
What we like about it that it’s at the same time both the result of a very conceptual approach to making art, and a very aesthetically pleasing dynamic work of art that we probably won’t grow tired of soon.
Inspired by Instagram, Nora Papp uses the deconstruction of a digital image to collect “aesthetic data”. Every digital image is divisible into luminosity, levels, brightness, contrast, texture, warmth, saturation, colour, highlights, sharpness, creation and reproduction, distribution, storage. With the help of imaging software, she uses the data she collected from Instagram images. The choice of combining or applying these elements in a certain way, while listing the values that she considers artistically significant, creates a new abstract image.
Nora Papp graduated from the Gerrit Rietveld Academy, Amsterdam in 2018.
Hellen van Meene showing something on her phone to Roy Kahmann (probably pictures of her dogs 😉) with the work of Nora Papp in the background.
Christopher Anderson - Bleu Blanc Rouge No. 4: Cherries, 2014
Shen Wei (China, 1977) - James (2007)
Does this work look like a Hellen van Meene or is it just me?
Two older works made in Korea by our friend Julia Fullerton-Batten and two works from her super-ambitious Old Father Thames series. These faithful copies of famous paintings are not my favorites from that series: I like the re-enacted events related to the river Thames found in old newspaper more.
Julia Fullerton-Batten - Serie Corea 2013 - Portrait: Le Go Eun 2013 - C-Type Print
Sascha Weidner (German photographer who died four years ago at the age of 40)
A detail of a work by our friend Carla van de Puttelaar that features a marble-like fabric which might indicate a (shared) love of the work of the Baroque style of sculpture by Bernini.
Ahn Jun - One Life (2018)
Eiji Ohashi - Roadside Lights III #042 (2018)
A wall of works by Kahmann Gallery poster-boy and Alkmaar (Hellen’s hometown) citizen Bastiaan Woudt.
It’s quite likely that no hardworking taxpaying citizen’s euros were spent on supporting this fair.
The ground floor of the Cruise Terminal at the Wilhelminapier was dedicated to the work of 15 artist who graduated in the last 5 five year.
I liked this work by Quinda Verheul. It looks like it’s just made from mirror, sand and light, and could be made by any of your nephews, but hey: they don’t think of making anything like this!
Twenty-five galleries showing two solo exhibitions each. I hate the name of this fair. I don’t know to pronounce it (“quade”? “kaa-duh”?), and “Qontemporary”? Come on!
Francois du Plessis - Book Objects.
I loved this! It worked on many levels - only when you got real close you could make up how it was made.
Two nice intricate skulls by our friend Carolein Smit.
A view of a rainy and misty New Meuse river and Erasmus Bridge from the Cruise Terminal at the Wilhelminapier.
Art Rotterdam is the biggest contemporary art fair of the Netherlands. The location is the great Van Nelle factory.
a prime example of the International Style based upon constructivist architecture. It has been a designated UNESCO World Heritage Site since 2014. Soon after it was built, prominent architects described the factory as “the most beautiful spectacle of the modern age” (Le Corbusier in 1932) and “a poem in steel and glass”
I’d love to link to their website but unfortunately it’s broken right now (with a quite familiar Yellow Screen Of Death):
When we arrived at this fair we first had to drop off my wife Hellen van Meene’s polaroids at We Like Art, but thankfully this year they were inside of the fair just left of the entrance!
You can buy this one of a kind instant photo (yes, it’s not really a multiple of the kind We Like Art sells - you buy a unique photo of a series of many taken of one of our daughters lying in our bathtub surrounded by flowers).
Heringa/Van Kalsbeek - Hurry Slowly (2017) - Resin and metal @ We Like Art
Hans Houwing. They look like Bic pen drawings and that’s all I need.
Robert Barta - 100 years, 2019 (electric motor, lead battery, magnets, beer coaster, classical foldable table, 80 x 113 x 50cm) at Rutger Brandt Gallery. It’s a typical Dutch round paper beer coaster magically rotating on top of a vintage table.
Maria Roosen @ Galerie Fons Welters
A work and a close-up of a work by our friend Awoiska van der Molen (silver gelatin prints).
Hellen van Meene posing with Katja Mater - one of her models in the early days her career - who was an our later to become the winner of the NN Group (a too big to fail Dutch financial giant) Art Award 2019!
A page from Hellen van Meene’s first monograph (sought after by collectors, especially since it appeared in ‘The Photobook, A History Volume II’ by Martin Parr en Gerry Badger) featuring a portrait of Katja Mater.
Luis Felipe Ortega
Johan De Wit. It’s paper, but it doesn’t look like it. We are close to buying one of his works.
Tom Woestenborghs Belgian. #boobies
A work by an unidentified artist, but emblematic of a lot of other works featuring weaving.
Couleurs II (9luik), 2018, schuursponsjes, 8,5 x 80 x 3 cm, D.D. Trans
The Van Nelle Fabriek is a great place: my photo.
Paola Ciarska
Source: https://www.itsnicethat.com/articles/paola-ciarska-drawings-voyeurism-social-media-art-060218
]]>Cat Ranja checking out the stack of records bought in thrift stores during our trip to the south of Netherlands and Belgian Limburg.
In that store I encountered a crate digger’s dream: an untouched complete collection of records owned by someone with great taste, dumped in the €0.50-a-record crates of a second hand store. The collection could be recognized by small stickers with a catalog number written on it and contained mainly 60’s-70’s Blues/Classic/Country/Folk Rock, but also some Psychedelic and Prog Rock, some Ambient and even New Wave: Buffalo Springfield, Crosby, Stills & Nash (& Young), The Doobie Brothers, The Doors, Emerson, Lake & Palmer, Emmylou Harris, Jackson Browne, Janis Joplin, Jon And Vangelis, Klaus Schulze, The Mama’s & The Papa’s, Mike Oldfield, Neil Young, Patti Smith, Pink Floyd, Steely Dan, Stephen Stills, and Steve Harley And Cockney Rebel.
All of the records I bought at De Spullewaard. Seven records are not from the collection with the small stickers, like Al Martino, Eartha Kitt, Simple Minds and the two records from Brazil.
The funny thing was that a regular customer of the store, who was going through the stacks of b-movie DVD’s, asked me somewhat derogatorily whether there was anything in those crates that he had long ago stopped looking at because they only contained “James Last & friends records”. I told him there was, and when he saw me picking up record by record he started paying attention. When he saw me putting a Crosby, Stills And Nash record on my stack he could not keep himself from saying that he was looking for that record for a long time.
In the end I walked away with 35 records for € 20 (10 for € 5, and € 1 a piece)! For karma I gave the CSN record to the poor guy…
I’ve just finished adding the Zaltbommel records to my collection on Discogs (the world’s “biggest and most comprehensive music database and marketplace”), and it has calculated the value of the 35 records for me, based on the last 10 records sold (with the same grading):
So based on the median price I should have paid more than 12 times the amount I had to pay. That’s a pretty good bargain!
]]>Required action
Migrate any Service Management REST APIs and PowerShell cmdlets for Azure Automation to Resource Manager REST APIs or the latest PowerShell cmdlets by April 30, 2019, to take advantage of advanced capabilities and avoid any service disruptions.
More information
If you’re unsure whether you’re using Service Management REST APIs, check the URI referenced in your code or service. If it’s https://management.core.windows.net, you’re using Service Management REST APIs and you should migrate to Resource Manager REST APIs.
If you’re unsure whether you’re using Service Management PowerShell cmdlets, check whether the cmdlet name includes
AzureRM
(for example,Get-AzureRmAutomationAccount
) orAz
(for example,Get-AzAutomationAccount)
. If it doesn’t include AzureRM or Az (for example,Get-AzureAutomationAccount
), you should migrate to Resource Manager PowerShell cmdlets.
I checked our collection of Powershell scripts used in our Build & Release pipeline for this with the following regular expression:
1 | Get-Azure(?!Rm) |
This returns all occurrences of Get-Azure
not followed by Rm
.
(?!)
is a ‘negative lookahead’.
I wrote my regex in Rad Software Regular Expression Designer (which has a website that no longer works but can still be downloaded - read a review of it on a www.red-gate.com blog post):
Searching for this regular expression in Visual Studio only returned multiple occurrences of Get-AzureDeployment, like this:
1 | $productionSlot = Get-AzureDeployment -ServiceName $serviceName -Slot Production |
]]>Going to other countries is interesting but not essential to my art. Most (if not all) that I need can be found within walking distance of my home. When traveling I regret the loss of a sense of change. I see differences not changes. Change is best experienced by staying in one place.
~ Andy Goldsworthy - British sculptor, photographer and environmentalist
Running the NewmanPostman_VSTS_Task on our on-premise Microsoft Visual Studio Team Foundation Server 2017.3.1 finished successfully, but no tests were run:
1 | ##[section]Starting: Newman - Postman |
When the NewmanPostman_VSTS_Task tries to run AppData\Roaming\npm\node_modules\newman\bin\newman.js
instead of AppData\Roaming\npm\newman.cmd
ensure that the PATH environment variable for the user that the builds run on has C:\Users\[BUILDSERVER-USERNAME]\AppData\Roaming\npm
in it, and reboot the server after that.
I’ve already spoiled the ending of this blog post in the section above so the following is only interesting for people who like to know how I - despite starting with looking in the wrong place - managed to find a solution.
When I tried to run the same command directly on the build server …
1 | C:\Windows\system32>C:\Users\[BUILDSERVER-USERNAME]\AppData\Roaming\npm\node_modules\newman\bin\newman.js run D:\TFS\Delivery\01\119\s\Delivery\ApiTests\BTW2019\BTW2019.postman_collection.json - |
… it opened the newman.js
file in Notepad, instead of running the command!
This however did work as expected, so Newman was installed properly:
1 | C:\>newman --help |
I disassociated .js
files from Notepad by running the ASSOC command:
1 | C:\Windows\system32>assoc .js= |
“If ASSOC is invoked with just a file extension, it displays the current
file association for that file extension. Specify nothing for the file type and the command will delete the association for the file extension.”
This did not change anything, so I decided to reboot the build server. That did not change a thing too.
I then decided to search everywhere for “change the file type” and clicked “Change the file type associated with a file extension”. There I noticed that .js
was still associated with Notepad! I decided to change the association to “Microsoft ® Windows Based Script Host”, because the .jse
extension had that too.
Now when I excuted the newman.js run
command I got an error instead of Notepad being opened:
There is no script engine for file extension “.js”.
So I tried another reboot, once more without success. I decided to have a look at our Development build server, where Newman was running correctly. There everything looked to be set up in the same way: no file association according to assoc .js
, associated to “Microsoft ® Windows Based Script Host” according to “Set Associations”, and no mention of Newman in Environment PATH variables.
Looking at the logs of the “Newman - Postman” task of the build I noticed a difference. The successful one had this:
[command]C:\Windows\system32\cmd.exe /D /S /C “C:\Users[BUILDSERVER-USERNAME]\AppData\Roaming\npm\newman.cmd run …
The one that used to run the [NewmanPostman_VSTS_Task] but not executing any tests now failed with:
found 1 files
No specific path to newman, using default of ‘newman’
##[error]Unable to locate executable file: ‘newman’.
Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable.
Also verify the file has a valid extension for an executable file.
With that information I decided to have a look at the PATH variable in the Environment Variables of the Development build server: no mention of Newman there too.
I then realized that the builds run on a particular account. Here’s what I found in that User’s PATH variable (without the line-breaks):
C:\Users\[BUILDSERVER-USERNAME]\AppData\Local\Programs\Python\Python37-32\Scripts\;C:\Users\[BUILDSERVER-USERNAME]\AppData\Local\Programs\Python\Python37-32\;C:\Users\[BUILDSERVER-USERNAME]\AppData\Local\Programs\Python\Launcher\;C:\Users\[BUILDSERVER-USERNAME]\.dotnet\tools;C:\Program Files\Nodejs;C:\Users\[BUILDSERVER-USERNAME]\AppData\Roaming\npm
And nothing related to npm
or newman
in the system’s Environment Variables.
I found only this for the User PATH variable on the ‘problem server’:
C:\Users\[BUILDSERVER-USERNAME]\.dotnet\tools
And nothing related to npm
or newman
in that system’s Environment Variables too.
Looking at those difference I decided to try to add C:\Users\[BUILDSERVER-USERNAME]\AppData\Roaming\npm
to the PATH variable for the [BUILDSERVER-USERNAME] user.
Tried the build again but it still failed with Unable to locate executable file: 'newman'.
Time for a restart. That finally did the trick!
Now the build ran Newman like this:
C:\Windows\system32\cmd.exe /D /S /C “C:\Users[BUILDSERVER-USERNAME]\AppData\Roaming\npm\newman.cmd run D:\TFS\Delivery\01\119\s\Delivery\ApiTests\AangifteStatusAPI\AangifteStatusAPI.postman_collection.json -r “cli,json,junit” -n 1 -e D:\TFS\Delivery\01\119\s\Delivery\ApiTests\AangifteStatusAPI\AangifteStatusAPI.Delivery.postman_environment.json”
Instead of this:
C:\Users[BUILDSERVER-USERNAME]\AppData\Roaming\npm\node_modules\newman\bin\newman.js run D:\TFS\Delivery\01\119\s\Delivery\ApiTests\BTW2019\BTW2019.postman_collection.json -r cli,json,junit -n 1 -e D:\TFS\Delivery\01\119\s\Delivery\ApiTests\BTW2019\BTW2019.Dev03.postman_environment.json
So I was looking in the wrong place all the time: it wasn’t a problem with running .js
files, it was actually a problem with the wrong command being run.
When the NewmanPostman_VSTS_Task tries to run AppData\Roaming\npm\node_modules\newman\bin\newman.js
instead of AppData\Roaming\npm\newman.cmd
ensure that the PATH environment variable for the user that the builds run on has C:\Users\[BUILDSERVER-USERNAME]\AppData\Roaming\npm
in it, and reboot the server after that.
Don’t be fooled by the task executing newman.js
but not running any test, and don’t go on an expedition trying to fix that!
I’ve photoshopped this image from these two sources - a photo of my copy of one of my favourite Herb Alpert & The Tijuana Brass albums:
And a photo by my wife of our whippet dog Juno. He can run for 70 km/h but he was also trained to hold a rose in his mouth:
The original album title is “Whipped Cream & Other Delights” which was punningly changed to “Whippet Cream”.
Further reading:
]]>West African singer Angélique Kidjo’s full-album cover of Talking Heads’ 1980 classic Remain in Light.
Melancholic electronic: my favourite genre. Saw a great set at the Down The Rabbit Hole too.
The film is great too!
Looking forward to their concert in Utrecht next year.
His concert in Utrecht was okay too, though it could not top his show with a string quartet I saw in Groningen a long time ago.
Young, eager band I saw in the tiny Sugarfactory club in Amsterdam.
The only act doing interesting stuff in contemporary hiphop.
My favourite new band! Saw them in the Sugarfactory too.
Best show of the year (and in my all-time top 5): David Byrne at Down The Rabbit Hole.
You’ve got to love this: “smooth, mainly instrumental music [..] heavily influenced by Thai rock and funk“.
If you like the XX ot Budos Band and any type of off-centre world music you’re going to love this.
Super-exciting hybrid of world and electronic music.
Nothing exciting and new but a resounding pleasure.
They have been going steady since the 1990s but this did feel like a comeback album to me, and I enjoyed their show at Paradiso.
My favourite palestinian Ud Tri. Saw them in Amsterdam during the Ud Festival this year on the night this album was released.
This act might me open for me when I tour with my Aleppo Favela Soundsystem.
Dutch artists inspired by 1970s Turkish psychedelic rock. Didn’t catch them live yet.
classic music re-mixed and re-interpreted.
Album cover by Hellen van Meene!
]]>Went to the Farmer’s market “Zeleni venac” (Пијаца „Зелени венац“) before breakfast (make sure you look at the smileys in the pickled vegetables jars), to see something of the city at daylight! Around noon it started snowing, and we’re now at the airport.
]]>At this mall I found the smallest record store ever! It’s a small stall on the ground floor powered by Metropolis Music and Mascom Records.
The Vulkan bookstore at the top level has a small vinyl section:
At this store I bought the above record for 2499 RSD: Golden Horns - The Best Of Boban I Marko Marković Orkestar. I first heard this music in Emir Kusturica’s epic 1995 movie Underground:
Here are two of the songs on the album:
A large record store that also doubles as a bar. Didn’t buy anything there. Open until late at night.
Didn’t go in there because it looked like they only sold CD’s.
This place mostly sells rock-band t-shirts and has a very small selection of CD’s and also - surprisingly - some cassettes. It’s at the first floor of the building.
This Vulkan book store has a small selection of vinyl records in the basement.
This is my favourite record store in Belgrade, with a huge selection of vinyl records, both new and second-hand. It was a bit hard to find: when you think you’re looking at the entrance of a parking lot you’re in the right place. Very friendly and helpful staff, and there’s a record player with headphones were you can listen to the stuff you pick from the crates and shelves. Prices are on the inside of the records. Open all evening! I bought one new and five second-hand (priced between 800 - 2000 RSD) Serbian/Yugoslavian records there, mostly brass bands. They also had an impressive collection of Turkish 70’s psychedelic rock, for example.
Here’s what I bought at Yugovinyl:
Listen to the funky drumming on this track by Zorica Markovic:
Frantic brass and a resolutely non-4/4 time signature on this track by Redzepova Usnija:
And finally the Duvački Orkestar Radovana Babića in action:
(Updated 2018-12-15 16:57 added photos of ПГП РТС)
]]>Breakfast at the Jump Inn Hotel, Filip playing guitar, the office building, my “winter appetizer” plate for dinner at Jedno Mesto, shopping for vinyl records at the superb Yugovinyl record store, and some grafitti mentioning Diego.
]]>1 | Access to XMLHttpRequest at 'https://cdn.foo.bar/images/svg/sprite.svg' from origin |
That was strange because for the “cdn.foo.bar” app service was already configured to allow all origins: “ALLOWED ORIGINS = *”.
It turned out the Incapsula WAF caching was configured to Static + Dynamic. After disabling caching in Incapsula the CORS error was gone.
]]>Some office photos: yes, there are standing-, pool- and table football tables, just as we have in Amsterdam. Dinner at the lovely Majstor i Margarita restaurant (*), adventurous cocktails at the well-hidden Beogradski Koktel Klub, and some street photos, including the second of two pieces of street art advertising veganism I saw tonight.
From Wikipedia:
]]>The Master and Margarita (Russian: Мастер и Маргарита) is a novel by Russian writer Mikhail Bulgakov, written in the Soviet Union between 1928 and 1940 during Stalin’s regime. A censored version was published in Moscow magazine in 1966–1967, after the writer’s death. The manuscript was not published as a book until 1967, and then first in Paris. A samizdat version circulated that included parts cut out by official censors, and these were incorporated in a 1969 version published in Frankfurt. The novel has since been published in several languages and editions.
The story concerns a visit by the devil to the officially atheistic Soviet Union. The Master and Margarita combines supernatural element with satirical dark comedy and Christian philosophy, defying a singular genre. Many critics consider it to be one of the best novels of the 20th century, as well as the foremost of Soviet satires.