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.1 by 29 people

  • Currently 3.103448/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 32 people

  • Currently 3.250001/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 40 people

  • Currently 3.15/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 42 people

  • Currently 3.166667/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.0 by 45 people

  • Currently 3.044445/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

Videos: How to Give Great Presentations

A couple of years ago I created 8 free videos for Microsoft's User Group Support Services on the subject of How To Give Great Presentations. These videos became unavailable when the UGSS site was replaced with Microsoft's Technical Communities. Well now they're back. You can download them from here. The 8 videos are:-

  1. Introduction (6 minutes 23 seconds)
  2. Choosing The Right Presentation (8 minutes 30 seconds)
  3. How To Explain Absolutely Anything (8 minutes 51 seconds)
  4. Planning Your Presentation (22 minutes 52 seconds)
  5. Nervousness And How To Overcome It (13 minutes 7 seconds)
  6. How To Give Great Demos (26 minutes 9 seconds)
  7. Preparing Your Laptop (19 minutes 21 seconds)
  8. Presenting Your Presentation (35 minutes 39 seconds)

In addition you can read the paper upon which the videos are based.

Technorati Tags: ,

Currently rated 3.0 by 44 people

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

Posted by: GuySmithFerrier
Posted on: Monday, April 15, 2013 at 11:45 AM
Categories: Presentation Skills
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | 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 50 people

  • Currently 3.12/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

Transfer of Ownership of DDD South West Limited

Yesterday, I appointed two new directors of DDD South West Limited, Martyn Fewtrell and Rob Bracken. At the same time I resigned as the then sole director of DDD South West Limited. Martyn Fewtrell has been on the DDD South West team every year since its inception and Rob Bracken joined the team with Rachel Clements for DDD South West 4.

To recap: DDD South West Limited is a "limited with guarantors" company. This means that although it can make a profit it is unable to distribute its profits because it is not allowed to have shares or shareholders. I chose this model for the legal DDD South West entity to get as close to a "not for profit" organisation as possible without having to go through the considerable hurdles of actually being a "not for profit" organisation.

The bank account (complete with a reasonable balance) will be transferred shortly.

As I have mentioned previously the time and effort involved in creating DDD South West each year is significant and it is apparent to me that I want to spend more time on technology and this community activity has inhibited this desire in recent years. As such it makes sense to transfer DDD South West to the community people who can find the time and energy to continue to this great event for years to come. A new leadership means new approaches and new experiments. Some experiments will succeed and some won't but then this was equally true for the first four DDD South West events. Please welcome the new leadership and the new direction and support them in the same fabulous way the community supported the first four years.

Currently rated 3.1 by 58 people

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

Posted by: guysmithferrier
Posted on: Tuesday, April 02, 2013 at 4:51 PM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Globalization: Know Your Enemy

I'm delighted to say that I will be delivering a new presentation at Gloucestershire .NET User Group on Wednesday 8th May 2013 and at DevTeach in Toronto on 28/29/30th May 2013. It is a presentation I have been wanting to put together for a few years but until recently I hadn't had the time. In the immortal words of Sun Tzu in The Art Of War 2500 years ago (translated from the original Chinese) "Know your enemy and know yourself and you can fight a thousand battles without disaster".

  • Globalization: Know Your Enemy
    Metaphorically speaking, the world is shrinking every day. Ironically this means that it is getting less acceptable to brush aside cultural differences and pretend that all cultures are essentially English but with different words. Appreciating globalization is about achieving humility, understanding that the world is a lot bigger than most developers give it credit for. Most developers understand that different cultures use different date formats, number formats and currencies. However, how many developers do not know that postal code formats, phone number formats, address formats and person name formats also differ. Not to mention the issues of localizing for gender-based languages or languages with less simplistic plural forms. What about ordinal subscripts, ordinal words, alphabet character sets ? The intention of this session is to open eyes, provide globalization enlightenment and with luck it will scare the living bejeezus out of you enough to make you question every line of code you write.

See you there.

Currently rated 3.1 by 74 people

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

Posted by: guysmithferrier
Posted on: Wednesday, March 13, 2013 at 2:36 PM
Categories: Internationalization
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (2) | Post RSSRSS comment feed

Announcing NCLDR (Alpha)

As from today you can download an alpha of NCLDR (see http://www.ncldr.com).

NCLDR is an open source port of CLDR to the .NET Framework. CLDR is the Common Locale Data Repository, a considerable database of culture data maintained by the Unicode Consortium and used by the rest of the non-Microsoft developer community. As such CLDR is analogous to the System.Globalization namespace in the .NET Framework with the difference that CLDR has nearly twice the number of cultures and has solutions for globalization and localization problems that the .NET Framework does not. NCLDR brings these cultures and these solutions to the .NET Framework.

There are a number of short videos on the NCLDR website that will help you get up to speed. The source code is on GitHub. There is also a NuGet package (search for pre-release packages).

Clearly this is an alpha release and it illustrates the potential of such a port but it isn't finished yet by a long way and I am looking for feedback of any kind on this project.

Enjoy.

Currently rated 3.0 by 77 people

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

Posted by: guysmithferrier
Posted on: Monday, March 04, 2013 at 3:22 PM
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed