By spgennard, August 22, 2010 4:13 pm

Last week I replied to a post about exceptions, it made me think those programming .Net daily take for granted the etiquette of using Exceptions. So I thought I would share some of my thoughts… well it is a sort of a rules’ish list.

  • Exceptions can be expensive, so avoid using them for normal conditions
  • Only catch the exceptions you can handle
  • Don’t hide/swallow exceptions
  • Don’t catch System.Exception as will also catch unmanaged exceptions such as System.Runtime.InteropServices.SEHException
  • Consider using your own custom exceptions or derive them from similar ones
  • Remember inner exceptions when processing an exception
  • Use the Exception suffix on your custom exception
  • Consider using Microsoft’s StyleCop to point out common issues
  • Avoid using System.ApplicationException if you want to use the code in the Silverlight CLR
  • Remember to serialize your own exception types
  • Use xml comment docs for the exceptions a method raises… it helps intellisense..

I suspect I might have missed something.. so feel free to comment..

Signtool requires CAPICOM version 2.1.0.1 or higher

comments Comments Off
By spgennard, August 13, 2010 10:13 pm

Just a quick blog to document a bit of pain I hit with CAPICOM and SIGNTOOL..

I got the following error:

EXEC : SignTool error : Signtool requires CAPICOM version 2.1.0.1 or higher. Please

The solution is to download and install:

  • Platform SDK Redistributable: CAPICOM
  • Then regsvr32 on capicom.dll… eg:

    cd "C:\Program Files (x86)\Microsoft CAPICOM 2.1.0.2 SDK\lib\X86"
    C:\Program Files (x86)\Microsoft CAPICOM 2.1.0.2 SDK\Lib\X86>REGSVR32 capicom.dll

    Microsoft Visual Studio LightSwitch

    By spgennard, August 4, 2010 10:01 pm

    When I first started working on COBOL I was told that COBOL was a business oriented language that even managers could use ;-)

    It looks like Microsoft are wanting to do something similar in a modern manor using Visual Studio + supper duper templates…

    Here is what Computer World UK has to say about “Microsoft Visual Studio LightSwitch”.

    Microsoft turns on Visual Studio LightSwitch

    Visual Studio LightSwitch is easy enough for business managers

    Microsoft is gearing up to release a version of its Visual Studio integrated developer environment that it promises will be easy enough for even business managers to use.

    I understand this is not COBOL but the reasons sound very familiar…

    From: Computer World UK – Microsoft turns on Visual Studio LightSwitch

    Microsoft Visual Studio LightSwitch

    Extending Visual COBOL 2010

    By spgennard, July 1, 2010 9:08 pm

    One of the many great reasons for choosing Microsoft Visual Studio 2010 as our development platform for Visual COBOL 2010 is it ability to be extended… which we have done but you equally use third party extensions too.

    One of my favourite extensions is the spell checker for the editor, which is great for pointing out spelling mistakes, which for me can only be a good thing :-)

    To install the extension, it is as simple as downloading it, clicking on the downloaded file, restarting Visual Studio and using it.

    The spell checker I use with Visual COBOL 2010 is:

    http://visualstudiogallery.msdn.microsoft.com/en-us/7c8341f1-ebac-40c8-92c2-476db8d523ce

    For those interested, here it is in action…

    Method Chaining

    By spgennard, May 28, 2010 12:50 am

    Creating objects with a complex constructor can be a bit of a pain in any language. One technique I have used is method chaining. It is not applicable to every type of class but it can be useful.

    Method chain can help simply the use class and allows more complex object initialisation without having to worry about the order of the parameters and be done inline.

    Consider the use of an “Account” class that takes Name, Address, Telephone and Country. All of which are strings, the constructor with four strings would not be a great constructor.

    So you could have a simple constructor and four properties/methods.. however so set up the object would mean you have spread the setup over multiple lines.

    Using method chain you can overcome this and even space in the “value” area of the object in your storage area.

    set x to new type Account::Name("xx")::Address("yy") ::Telephone("yy")
         ::Country("zz")::World("Earth")

    The trick of the pattern is to provide methods that always return this/self, so we can change the invokes together… For example:

    This technique could even be used to build up a series of items required, for example, the preparation and execution of a sql statement comes to mind… in a similar fashion to Linq.

    So… lets look at an example:

    $set ilusing"System.Collections.Generic"
    program-id. Program1 as "MethodChaining1.Program1".
    data division.
    working-storage section.
    01 accounts type List[type Account] value new type List[type Account].      
    01 jAccount type Account value
       new type Account::Name("Mr Johnson")::Address("Somewhere, some place")
        ::Telephone("+44 1234 4321").
    01 sAccount type Account value
       new type Account::Name("Mr Smith")::Address("Nowhere place")
         ::Telephone("+44 1234 4321")::Country("Wales").                
    01 lAccount type Account.
    procedure division.
     invoke accounts::Add(jAccount)
     invoke accounts::Add(sAccount)
     
     perform varying lAccount through accounts
      display lAccount
     end-perform

     goback.
    end program.

    WIth the class being:

    class-id Account.

    working-storage section.
    01 wName       string property as "Name".
    01 wAddres     string property as "Address".
    01 wCountry    string property as "Country".
    01 wTelephone  string property as "Telephone".
    01 wEmail      string property as "Email".

    method-id New.
    local-storage section.
    procedure division.
      set wCountry to type System.Globalization.RegionInfo::CurrentRegion::DisplayName
    end method.

    method-id Name public.
    procedure division using uName as string
     returning ret as type Account.
      set self::Name to uName
      set ret to self
    end method.

    method-id Address public.
    procedure division using uAddress as string
     returning ret as type Account.
      set self::Address to uAddress
      set ret to self
    end method.

    method-id Telephone public.
    procedure division using uTelephone as string
     returning ret as type Account.
      set self::Address to uTelephone
      set ret to self
    end method.

    method-id Email public.
    procedure division using uEmail as string
     returning ret as type Account.
      set self::Address to uEmail
      set ret to self
    end method.

    method-id Country public.
    procedure division using uCountry as string
     returning ret as type Account.
      set self::Country to uCountry
      set ret to self
    end method.

    method-id ToString public override.
    procedure division returning ret as string.
    set ret to String::Format("Name:{0}, Address:{1}, Telephone:{2}, Email:{3}, Country:{4}",
         self::Name, self::Address, self::Telephone,
         self::Email, self::Country)
    end method.
    end class.

    Which when run with Visual COBOL gives:

    Name:Mr Johnson, Address:+44 1234 4321, Telephone:, Email:, Country:United Kingdom
    Name:Mr Smith, Address:+44 1234 4321, Telephone:, Email:, Country:Wales

    Panorama Theme by Themocracy