Assessing Code Quality and Technical Debt using SonarQube

I'm delighted to say that I will be giving this presentation at Dot Net Notts in Nottingham on Monday 22nd May 2017 and at .NET South West in Bristol on Monday 26th June 2017.

Here's the abstract:-

SonarQube has become the de-facto tool for assessing code quality. SonarQube runs rules, unit tests and code coverage against code, assesses code quality and calculates technical debt. SonarQube categorizes technical debt and provides clear indication of where the most important technical debt must be re-paid. Most importantly SonarQube tracks metrics over time and provides developers and managers with the statistics necessary to determine progress. This session demonstrates the key features of SonarQube from the perspective of C# analysis and shows the value of revealing your code's strengths and weaknesses.

See you there.

Currently rated 3.2 by 23 people

  • Currently 3.173913/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Sunday, March 19, 2017 at 9:14 AM
Tags:
Categories: SonarQube | StyleCop
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

What has The Next Generation User Group ever done for us?

Recent months have seen significant changes in The Next Generation User Group. The Next Generation User Group is de-centralising and to a certain extent rebranding as multiple independent user groups. Everything changes and an end to the existing structure was always going to happen as it does with all ventures. But it is not right that it just happens and we let them move on without recognising the difference that the NxtGen founders (Richard Costall, Dave McMahon and John Price) have made.

Although their community activity today is lower than it used to be Rich, Dave and John made a huge difference to our world. Their model for running a user group worked exceptionally well for longer than most. Enthusiasm is infectious and Rich, Dave and John have it in abundance. They inspired people to start speaking in manageable chunks with nuggets (aka grok talks) and gave them the chance to move onwards and upwards to bigger talks (look around the UK community today and see how many people started speaking because of NxtGen). Their obsession with pizza and swag made their meetings fun to be at. Listen to their podcasts and you'll hear them laughing and giggling along as they just have a whole bunch of fun being infectious.

The recent changes to The Next Generation User Group aren't especially surprising though. Keeping up that level of enthusiasm, that level of consistency, that amount of organisation and that amount of time month after month is tough. Seven years is a long time. Eventually you have other things to do and you simply want to go to a user group like any other attendee without having to do all of the organisation that goes with running it. And it would be nice to win some of the swag that you spend years giving away to everyone else. Anyone care to calculate the cash equivalent of all of the swag The Next Generation User Group has ever given away?

So apart from the swag and the pizza and the socialising and the technical presentations and the nuggets and the podcasts and the Fests and the micro-presentations and The ReadyBoost Song and the game shows (that sometimes worked) and the Swagometer (that never really did) what has The Next Generation User Group ever done for us? They made it all fun. Thanks, guys, you really made a difference.

Currently rated 3.3 by 27 people

  • Currently 3.296297/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Thursday, May 16, 2013 at 8:29 PM
Tags:
Categories: Events
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (6) | Post RSSRSS comment feed

Five New FxCop Globalization Rules

I have updated the downloadable source code for my .NET Internationalization book. The Visual Studio 2012 source code is downloadable from here. In this update there are 5 new FxCop globalization rules:-

  • Do not convert to uppercase - This rule catches all uses of ToUpper. It can be considered a more severe version of FxCop's own "Specify CultureInfo" rule. If the conversion to uppercase is used to perform a case insensitive comparison then String.Compare should be used instead. If the conversion to uppercase is used to change user data then it would be better not to convert the user data at all.
  • Do not convert to lowercase - This rule catches all uses of ToLower. It serves the same purpose as the previous rule except that it catches ToLower instead of ToUpper.
  • Boolean.ToString() is not localizable - This rule catches all uses of Boolean.ToString(). The words "True" and "False" are specific to English and are therefore not localizable. This rule is similar to the existing "Enum.ToString() is not localizable" rule.
  • Identifiers should not be called FirstName - This rule catches fields and properties that are called FirstName (or a variation of FirstName). The term "first name" is a western naming convention and it does not accurately identify a name part (even in Europe some countries use Family Name / Given Name order). Use the term "Given Name" instead.
  • Identifiers should not be called LastName - This rule catches fields and properties that are called LastName (or a variation of LastName). The term "last name" is a western naming convention and it does not accurately identify a name part. Use the term "Family Name" instead.

In total the downloadable source code now contains 25 FxCop globalization and localization rules.

Technorati Tags: ,,,

Currently rated 3.2 by 35 people

  • Currently 3.171429/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Monday, April 22, 2013 at 6:04 PM
Tags:
Categories: Internationalization | .NET Internationalization Book
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (1) | Post RSSRSS comment feed

A ResourceManager Abstraction for Custom Resource Managers

Please help me.

Of all of the features I would like added to the .NET Framework the top of the list is an abstraction from System.Resources.ResourceManager so that anyone could make use of Custom Resource Managers as an alternative to the .NET Framework's venerable .resx ResourceManager. It is relatively easy to add your own custom resource managers but what is more difficult is to ensure that those custom resource managers get used instead of System.Resources.ResourceManager.

So I am asking for your help. Microsoft reads and watches User Voice. In particular they pay attention to feature requests that get voted for. Please vote for Provide a ResourceManager abstraction mechanism and get this feature into the product.

Thank you.

Currently rated 3.2 by 37 people

  • Currently 3.189189/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Monday, April 22, 2013 at 10:25 AM
Tags:
Categories: Internationalization
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

NCLDR 0.0.0.7-Alpha Release Notes

Last month I announced the alpha of NCLDR. Since then there have been a few updates to improve the overall NCLDR experience. The current release is 0.0.0.7-Alpha and this blog post lists the changes since version 0.0.0.1-Alpha.

Features

  • Added support for genitive month names
  • Added IndexExemplarCharacters property to the Characters class
  • Added NCldrBinaryFileDataSource to replace NCldrLoader (NCldrLoader exists for backwards compatibility for a few releases). In addition static members have been changed to instance members. Save and Exists methods have been added together with an NCldrDataFilename property.
  • Added new INCldrFileDataSource implementations (NCldrJsonFileDataSource and NCldrXmlFileDataSource) to allow the NCLDR data file to be saved as JSON or XML as an alternative to the binary format
  • Added support for CLDR release 23 (keeping backwards compatibility with release 22.1)
  • Added new TimeData and RegionHour types and corresponding properties to support the new TimeData type in CLDR release 23
  • Added CashRounding to CurrencyFraction inline with CLDR Release 23
  • The Calendar.CalendarDisplayNames property has been removed and replaced
    with Dates.CalendarDisplayNames to coincide with the corresponding change in CLDR release 23
  • Various refactorings to allow NCLDR to be compiled for Windows Phone (replacement of Hashtables with Lists, use of compatible string.Compare overload)
  • Added IsDataLoaded property to NCldr class
  • Changed TextBoxes in NCldrExplorer to be Right To Left when showing RTL data
  • Added support for CLDR Layout (including Orientation, Right-To-Left)
  • Removed hardwired reference to Core in CLDR path (if you have downloaded to a folder called Core you will now need to include this in your path)
  • Added a checkbox to NCldrBuilderGui to allow CalendarPreferences to be set
  • Added a FolderBrowserDialog to NCldrBuilderGui to allow path to be set easily
  • Removed the CultureInfo GetCurrency and GetCurrencyPeriod extension methods as their functionality is available through the GetNumbers extension method
  • Added GetCasing, GetCurrencyPeriods, GetDelimiters, GetLayout, GetListPatterns,
    GetNumbers, GetUnitPatternSets, GetRuleBasedNumberFormatting, GetGenderList, GetLikelySubTag, GetRegionInformation, GetYes, GetYesShort, GetNo, GetNoShort extension methods to CultureInfo
  • Added GetRegionInformation extension method to RegionInfo
  • Added a -DisplayMode parameter to NCldrBuilderCmd which supports Verbose and Diagnostics options

Bug fixes

  • Fixed a bug in Calendars ShortestDayNames and ShortestMonthNames properties where the properties always returned null
  • Fixed a bug in NCldrCustomCulture to allow NCLDR to be used with seed cultures
  • Fixed a bug in NCldrExplorer when the NCLDR data was not loaded and the tab changed then an exception would be thrown
  • Fixed a bug in NCldrBuilderGui where CalendarPreferences was not being saved/loaded
  • Fixed a bug in NCldrBuilderGui where IncludeCultures and ExcludeCultures were not being loaded
  • Ensured that zero element arrays are not written to NCLDR.dat
  • Fixed a bug where the culture identifiers in LikelySubTags were being stored as CLDR identifiers instead of NCLDR identifiers
  • Fixed a bug where extension methods didn't work with the Invariant culture
  • Fixed a bug in RegionInfo extension methods where the region was incorrectly being identified by its name instead of its two letter ISO name

Currently rated 3.1 by 40 people

  • Currently 3.05/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Monday, April 15, 2013 at 4:08 PM
Tags:
Categories: NCLDR
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (1) | Post RSSRSS comment feed

Statistics for DDD South West 1 to 4

Each year after DDD South West we have compiled statistics about the event. After DDD South West 4 we never really found the time to update the website but rather than let the statistics just disappear I thought a few people might find it interesting to know how it compared with previous events:-

  DDD SW1 DDD SW2 DDD SW3 DDD SW4
People registered on site 313 642 908 1201
Cancellations 36 62 77 119
Registered attendees (after cancellations) 227 309 331 372
Actual Attendees 158 218 257 288
Percentage Drop Out Rate 30% 29% 22% 23%
Unregistered UWE Students 0 3 3 0
Event Feedback Forms returned 111 152 173 173
Percentage of Event Feedback Forms returned 70% 70% 67% 60%
Session Feedback Forms returned 591 887 1082 1075
Percentage of Session Feedback Forms returned 88% 85% 87% 86%
Geek Dinner Registrations 30 47 54 60
Geek Dinner Attendees 27 45 59 42

As you can see DDD South West 4 had the highest attendance of any DDD South West to date which was very rewarding. DDD South West 4 was fully booked within 4 hours of registration opening and the wait list was full within 24 hours. You can also see that the number of cancellations reached a massive all time high of 119 people. This seems to confirm our theory that people register for DDD events without having any real conviction of whether they will attend simply because they want the option of attending if they decide they will go and it is easier to give up a place than to get a place through the wait list. This raises the age old debate of whether to charge a nominal fee (e.g. 5 UKP) in order to discourage this practice.

Another great statistic from DDD South West 4 was the geek dinner attendance (which was more strictly controlled than for the previous year on the grounds that the venue was clear that they would not accept more than our allocated number).

If you came along to any of these DDD South West events we hope you had a fabulous time.

Technorati Tags: ,

Currently rated 3.1 by 45 people

  • Currently 3.133333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Monday, April 15, 2013 at 10:52 AM
Tags:
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

No DDD South West In 2013

The DDD South West team (Rob Bracken, Rachel Clements, Martyn Fewtrell, Chris Myhill, Ross Scott and myself) have reached a tough decision that there will not be a DDD South West in 2013. We are taking a break. We don't know how long the break will be yet - one year, two years, more ? but we plan to review the process regularly. The reasons will be fairly obvious to anyone who has been to DDD South West ? it is a whole ton of work and we need a break. Martyn Fewtrell, Chris Myhill, Ross Scott and myself have done DDD South West four years in a row and despite the team being a good size to distribute responsibilities it is still a considerable undertaking and the bottom line is that sometimes there have to be things in life other than organising conferences.

I also want to be clear though: we enjoyed it. It was a whole bunch of fun. It was very exciting and it was very rewarding. Personally I am very gratified that the South West .NET community is alive and well and the events inspired people to step up and take a step towards something new. I would particularly like to thank all of the speakers who gave their time for free and came along armed with great enthusiasm and inspired developers to try new technologies. I would also like to thank the army of community people who so consistently over the last four events walked up to me and said so simply "how can I help?". I would also like to thank all of our sponsors who made the difference between the events happening and the events not happening; as I always say "free means that someone else pays". And I would like to thank my co-organisers who have attended so many Harvester meetings and endured so many emails and have been so patient with me.

Go community!

Technorati Tags: ,

Currently rated 2.8 by 6 people

  • Currently 2.833333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Thursday, January 10, 2013 at 4:24 PM
Tags:
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (7) | Post RSSRSS comment feed

Video: Mind Control Your Computer at UX Brighton 2012

Last month I presented "Mind Control Your Computer" (using the Emotiv EPOC Neuroheadset) at the excellent UX Brighton 2012, You can watch the 32 minute video here. Of all the conferences and events I attended this year I have to say I enjoyed UX Brighton the most - great attention to detail and really interesting people. You can watch all 8 videos of UX Brighton 2012 here (there are some really excellent presentations there).

Alternatively if you're really into the Emotiv you can watch a full hour on this subject from the same session I gave at NDC 2012 at http://vimeo.com/43549132 or you can listen to a .NET Rocks podcast at http://www.dotnetrocks.com/default.aspx?showNum=702.

Currently rated 3.3 by 6 people

  • Currently 3.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Wednesday, December 12, 2012 at 10:18 AM
Tags:
Categories: Emotiv
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Podcast: Interviewed by Jesse Liberty for Yet Another Podcast

I was recently interviewed by Jesse Liberty for Yet Another Podcast and you can listen to it at http://jesseliberty.com/2012/11/19/yet-another-podcast-82guy-smith-ferrier-on-internationalization/. The interview is 40 minutes long and is primarily about internationalization in .NET with a short discussion at the end on the .NET community in the UK. Along the way we discuss CLDR (the Common Locale Data Repository) and NCLDR (.NET CLDR), machine translation, how FxCop is one of the most misunderstood tools in the .NET world, pluralisation rules, genders, postcodes, currencies and more.

One point I would like to correct though: I make a point that the pluralisation rules for Polish (and Hungarian, Russian, Arabic and others) are more complex than for English. The actual rules that I quote are not quite right. For the record the Polish pluralisation rules are:-

  • Count: one, Rule: n is 1
  • Count: few, Rule: n mod 10 in 2..4 and n mod 100 not in 12..14
  • Count: many, Rule: n is not 1 and n mod 10 in 0..1 or n mod 10 in 5..9 or n mod 100 in 12..14
  • Other

Many thanks to Jesse Liberty for inviting me on the show - I really enjoyed talking about my favourite subject.

Currently rated 3.8 by 8 people

  • Currently 3.75/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Thursday, November 22, 2012 at 8:30 AM
Tags:
Categories: Internationalization
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Video: How To Achieve World(-Ready) Domination In ASP.NET MVC 4

The third aspConf (formerly mvcConf) was held on 17th and 18th July 2012. I was very pleased to present "How To Achieve World(-Ready) Domination In ASP.NET MVC 4" (aka "Internationalizing ASP.NET MVC"). You can watch a video of the presentation here. You can also download the slides and source code. Here's the session abstract:-

So you've written your ASP.NET MVC application and you want it to work in another language ? Then this session is for you. World-Readiness is all of the work that a developer needs to do to globalize an application and make it localizable (i.e. capable of being localized). In this session we will cover localizing HTML and HTML Helpers, localizing and globalizing Data Annotations, localizing and globalizing JavaScript and localizing URLs. No previous experience of ASP.NET localization is required.

Currently rated 3.6 by 7 people

  • Currently 3.571428/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Posted by: guysmithferrier
Posted on: Monday, August 27, 2012 at 4:50 PM
Tags:
Categories: Internationalization
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed