Azure DevOps: Disable auto update of extensions on Team Foundation Server

You can install Azure DevOps extensions on Team Foundation Server from the Marketplace. And as the publishers push updates to these extensions, the installed extensions on your Team Foundation Server (TFS) also get updated. Some enterprises have a requirement of disabling this auto-update feature, here is how you can do that.

Run the below SQL script on the configuration database of your Team Foundation Server instance, the database is typically named Tfs_Configuration,

UPDATE [Tfs_Configuration].[dbo].[tbl_JobDefinition]
SET EnabledState = 2
WHERE PartitionId > 0 AND JobId = ‘A8F60BD0-BCBA-4343-82B3-FD6B40D657D8’

This script disables the update job which is resposible for auto-updating of extensions.

Reach out to vsmarketplace at microsoft dot com if you have any questions.

Azure DevOps: Test plan edit not working!

[Update 7th Feb, 2019] A fix for this is now rolled out to all rings so it should be working as expected.

If you are wondering why clicking on edit in the test plans directory page is not working, it’s a recent regression that we are working to get hotfixed as soon as possible. So if you navigate to the test plans directory page and try to click on Edit, nothing happens:

If you open the browser console you will see an error that says,

Failed to load resource: the server responded with a status of 404 (): https://cdn.vsassets.io/v/M146_20190204.13/_scripts/TFS/debug/VSSUI/ResponsiveViewport.js

We have fixed the issue at our end and our waiting for the change to rollout with TFS deployment. Meanwhile, if you’d like the issue mitigated immediately please reach out to devops_tools at microsoft dot com, with your organization name.

Test plan test case tree view counts have disappeared!

[Update: 6th Feb, 2019]: This issue should now be fixed in all the organizations now, you should be able to see the counts next to the test suites. Please reach out to devops_tools at microsoft dot com if you’re still having issues with this feature.

This post is a tad late but if you have reached this post via a google or bing search, you are likely wondering where the test point counts that used to appear in the suite tree have gone!?

 

 

 

 

 

 

 

 

 

 

 

 

 

As you can see, there’s no count against the test suites. You can follow more on this issue here,

https://developercommunity.visualstudio.com/content/problem/415802/test-plan-treeview-test-case-counts-have-disappear.html

We have fixed the issue but unfortunately the rollout has been slow because of several other issues. The good news is that the issue is now fixed in all the TFS rings (from ring0 to ring4). Ring 5 is still pending and should be done in a few more days.

If you’re still not seeing the count in your Azure DevOps organization it is likely that the org is in Ring 5. Please reach out to devops_tools @ microsoft dot com and we can enable the feature on your specific org to unblock you.

Hope this helps!

PS: Next time around I’ll try not to procrastinate a lot on these posts.

 

 

VSTS Incident Postmorten

Taylor Lafrinere from our VSTS team published two Root Cause Analyses which are really a good read. Sometime we all hit that one issue which makes you pull your hair out :-) I still remember the caching bug we hit in my previous team, where cache read/write were messing up validity check with dd/mm and mm/dd, maybe I should write about it someday. Here are RCA links,

Preliminary postmortem

Complete postmortem

The case of curious characters

We stumbled upon an interesting issue the other day at work. A was working on adding search feature to a table/grid of cells, consisting of multiple string and date fields. The implementation used a client side search utility provided by our client SDK, which internally used tries for indexing and searching on string tokens.

The feature was working well overall, but strangely the search was not working on date fields in IE (v11). It worked fine on other browsers. So if you searched for a string like ‘3/23’, it would work in Chrome and Firefox, but not in IE o_O

What is special about these date fields, we wondered, that makes this issue specific to IE? On a closer look, we found that the trie wasn’t getting properly constructed in IE. We jumped into the client SDK code, looked around but did not find anything suspicious, we also tried a bunch of other things like changing system date format, trying to enter date in a string field in another column and searching on it but the results didn’t really provide any clues.

V then stepped in and looked at the part of SDK where the trie was getting built and found that it somehow was failing to add date fields to the index. On debugging further, V found that the date string contained characters we had not expected, it wasn’t a usual string, it had stuff in it that was failing the trie construction.

How were the date fields getting added to the index?

Our implementation was calling toLocaleDateString() on the Date object and passing the string off to the search utility to build the index. It turns out that toLocaleDateString() were returning different values in Chrome vs in IE. Here’s a small piece of code that demonstrates this,

If you run this code in Chrome and IE, this is what you’ll see.

Chrome

image

 

IE (v11)

image

What? Chrome reports length of the string as 8, which is what you’d expect. IE has got its own characters to the party. Turns out IE adds Left-to-Right markers in the string. The value 0x200E is the unicode code point for Left-to-Right mark. This marker gets added before every token in the date string, thus adding 5 characters to the string length.

The answer on this stackoverflow thread sums up the issue nicely,

Any of the output of toLocaleString, toLocaleDateString, or toLocaleTimeString are meant for human-readable display only

If the intent is anything other than to display to the user, then you should use one of these functions instead:

  • toISOString will give you an ISO8601/RFC3339 formatted timestamp
  • toGMTString or toUTCString will give you an RFC822/RFC1123 formatted timestamp
  • getTime will give you an integer Unix Timestamp with millisecond precision

To patch or not to patch

I was reading this post on designing rest APIs on dev.to, when I remembered an interesting discussion I had had a while ago when working on a feature. Warning: This might be mostly rant.

The feature in discussion here allowed the publisher of an extension to reply to reviews left by users on the extensions product page. The publisher could only create and edit a reply, delete had to be done via a support email to our team, but rest APIs were available to delete a reply that required admin permissions. As you can notice, these nicely fall into crud operations. Now, the reviews feature had already been implemented, modeled using REST. How would you model or design the new reply feature in terms of REST?

Do you consider the reply as a separate resource, and model crud operations on the new resource? Do you expect someone to HTTP GET a reply only? Does a reply make sense without the context of the review? Treat the reply like a sub-resource with its own crud operations?

Or are you the kind that thinks of replies as a property of reviews? A review either has a reply or not. Creating a reply would be like updating the review so you do it via a patch review call. Editing a reply is pretty much same so that too is done via patch. In this case the patch payload has instructions on what to do for the server. If the payload says update-reply, you either create or edit the reply. If the payload says delete-reply then you delete the reply associated with that review. But is this scheme ugly?

If you think of replies as a property, a call to get reviews for a product returns all the reviews and each review object has a reply object if one exists. Do you think getting replies should be optional and done based on a request Param? Something like get /extensions/my-awesome-extension/reviews?filteroption=includeReplies

We went with the latter approach. What are your thoughts on this?

Hello VS!

After having worked for AppEx (a.k.a Bing Apps or MSN Apps) for over 3 years, it’s time for me to move on. We shipped the MSN Sports app on pretty much every platform over the last few years, and it was fun all along! Met some great folks in the team, made some amazing friends and got to learn a lot from some of the smartest out there. The next chapter begins at Visual Studio Online, with an exciting new project! It’s going to be hardcore tech and I’m really looking forward to all the fun :-)

Also, this blog could use some updates once in a while ;-)

Learning By Slipping

Here’s an old, but still relevant, post by Steven Sinofsky on shipping products,

http://blog.learningbyshipping.com/2013/05/01/learning-by-slipping/

Some excerpts,

“In order to slip you need to know the ship date. When people talk about projects shipping “first quarter” that is about 90 different dates and so that leaves everyone (on the team and elsewhere) guessing what the ship date might be.  A date is a date.  All projects should have a date.  While software itself is not launching to hit a Mars orbit, it is important that everyone agree on a single date.  Whether that date is public or not is a different question.”

“Interestingly, the error rate in short-term, continuous projects can often (in my experience) be much higher.  The view of continuously shipping can lead to a “project” lasting only a month or two.  The brain doesn’t think much of missing by a week or two, but that can be a 25 – 50% error rate.  On a 12 month project that can mean it would stretch to 15-18 months, which does sound like a disaster.”

“When a task cannot be partitioned because of sequential constraints, the application of more effort has no effect on schedule.  The bearing of a child takes nine months, no matter how many women are assigned. The Mythical Man-Month – Frederic P. Brooks

“Quality is the most difficult to manage and why the test leadership is such a critical part of the management structure of any project.  Quality is not something you think about at the end of the project nor is it particularly malleable.  While a great test manager knows quality is not binary at a global level, he/she knows that much like error bars in physics a little bit of sub-par quality across many parts of the project compounds and leads to a highly problematic, or buggy, product.  Quality is not just bugs but also includes scale, performance, reliability, security, and more.”

“Quality is difficult to manage because it is often where people want to cut corners.  A product might work for most cases but the boundary conditions or edge cases show much different results.  As we all know, you only get one chance to make a first impression.”

On the same topic, if you know that you suck at planning and factor this in next time, it might actually prove a little useful ;-)

Get ‘Programming Windows 6th Edition’ by Charles Petzold for $10!

Programming Windows 6th Edition

O’Reilly has a special offer on the new book that Charles Petzold is working on, Programming Windows 6th Edition. This should be a great book covering Windows 8 app development in C# and XAML.

You can get this book for $10 now (offer lasts till 31st May), and future editions of this book, as and when new chapters are added, will be available to you for free.

Read more at Charles’ blog here: http://www.charlespetzold.com/blog/2012/05/An-Experiment-in-Book-Publishing.html

Shop at: http://shop.oreilly.com/product/0790145369079.do

‘CODE’ by Charles Petzold: An absolute must read

You know how sometimes you come across a book and you go “I wish I had read this years ago!”. CODE is just that book. It’s a book about how computers work and the way in which Charles Petzold flows through the topics is pure artistry. Those electronics class lessons in college would have been much more interesting if I had read this book then ;)

The book starts off with two best friends trying to communicate from across the street using only flashlights. This is how the idea of ‘code’ is introduced. It then takes you through a journey involving Morse Code, Braille and how telegraphs and relays were used to send codes over long distances. For me, the most interesting part is when he starts building logic gates from relays and switches. This lays a solid foundation for things to come. These logic gates are then used to build half-adders, full-adders (using two half-adders), oscillators, flip-flops and latches; finally getting assembled into a unit of Random Access Memory. Towards the end, a simple computer with processing, input and output systems is designed. The book might be a little old but still very relevant.

The most amazing thing about this book? It teaches you concepts at such a fundamental level that your mind will be blown. And before you know it you will be building ripple counters from flip-flops! If you have anything to do with computers go read this book. You won’t be disappointed.

CODE on flipkart

CODE on Amazon