Signtool requires CAPICOM version 2.1.0.1 or higher

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 SDKlibX86"
    C:Program Files (x86)Microsoft CAPICOM 2.1.0.2 SDKLibX86>REGSVR32 capicom.dll

    Posted in SIGNTOOL | Tagged , , | Comments Off on Signtool requires CAPICOM version 2.1.0.1 or higher

    Microsoft Visual Studio LightSwitch

    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

    Posted in COBOL, LightSwitch, Microsoft Visual Studio | Tagged , | Comments Off on Microsoft Visual Studio LightSwitch

    Extending Visual COBOL 2010

    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…

    Posted in CLR, COBOL, Tips, VisualCOBOL2010 | Tagged , , , , | Comments Off on Extending Visual COBOL 2010

    Method Chaining

    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

    Posted in CLR, COBOL | Tagged , , , , , , | Comments Off on Method Chaining

    Life under the dust cloud

    The week before last I attended Microsoft TechEd here in India, which was a great success.

    I especially liked my boss “The COBOLATOR“, who did a great talk about his experiences with Microsoft and his views on using COBOL. This combined we another great talk by Paul/PaulA and Mark about how COBOL is everywhere and how Visual COBOL can seriously help you take advantage of existing COBOL code as well as showing how great COBOL is for new development made a great conference.

    When I was not seeing my colleagues perform on stage, I was at our stand meeting people and I have to say the people at the conference were amazingly friendly and very happy to talk mere developer such as myself. It was honestly refreshing to meet such open minded people with a honest interest in using Microsoft technology to its fullest.

    Well that was then and now; me and several of my colleagues are trying to get home to the UK but due to the dust cloud caused by the Icelandic volcano we are stranded here. However rather than going completely insane, we have tried to keep busy doing some work and visiting some local sites.

    To that end, I have placed some of my photo’s from, these can be found [Here].

    I hope you find them interesting and thank goodness for the SkyDrive in the cloud 🙂

    Posted in COBOL, India, TechEd | Tagged , , , | Comments Off on Life under the dust cloud

    iRiver Story firmware 1.71 + update

    Note: Updated since original post – see updates at the end of blog post

    I noticed yesterday that “Doren Katz” over @ http://doronkatz.com/iriver-story-firmware-171-update has found a firmware upgrade for the iRiver story.

    However, I failed to find the original download on any of the korean, china or japan iriver websites but non the less downloaded I downloaded it myself to have a look but rather than installing I decided to have a peek inside the ebook.hex file.

    Firstly, this is really a .zip file with a false 128byte header, so its time to get the swiss-army does everything with files utility out and strip the header off with:


    dd if=ebook.hex of=ebook.zip bs=128 skip=1

    Next, lets look for what has changed between the different version’s, so as “unzip” includes the crc check for each file, we just need to create a text file with the files in sorted order with the appropriate crc check included. I used a combination of unzip/awk/sort


    unzip -v ebook.zip | awk '{ print $8, $7 }' | sort >ebook.17.txt

    I did this for the ebook.hex from Doren’s site and the official 1.61 file.

    So, what can I deduce from the update…

  • Russian support has been added
  • New files for wifi support have been added
  • New files include words “activate”/”deactivate”….?
  • New files include words “net[2].png”
  • Adobe DRM support, Battery, book, mp3 player, comic and diary programs have changed
  • The big question is….. should I install it?


    6,12c6,12
    < /app/Jmp3_player_copy dae2fc2f < /app/adoberm.feb 4f1e60d8 < /app/battery.feb 724b81b7 < /app/book2pngd 8aa7a959 < /app/comic.feb 4890784e < /app/diary.feb ff30e8e1 < /app/dictionary.feb 382ebe89 --- > /app/Jmp3_player_copy 6a0faa48
    > /app/adoberm.feb f674266f
    > /app/battery.feb 7cdc4c54
    > /app/book2pngd 17c806e5
    > /app/comic.feb f6c6345f
    > /app/diary.feb 25659da7
    > /app/dictionary.feb 781e20e2
    14c14,15
    < /app/fw_upgrade.feb 9b08005f --- > /app/flowdjvu.feb 95170f69
    > /app/fw_upgrade.feb a977653a
    90a92,93
    > /app/gui/dictionary/b7_language_ru.png 4ce08345
    > /app/gui/dictionary/b7_language_ru_dim.png 3ab9d628
    179a183,189
    > /app/gui/library/b2_top_icon_wifi_1.png fb4ce084
    > /app/gui/library/b2_top_icon_wifi_2.png fe60db45
    > /app/gui/library/b2_top_icon_wifi_3.png e9cdac53
    > /app/gui/library/b2_top_icon_wifi_4.png d9a0fdfd
    > /app/gui/library/b2_top_icon_wifi_5.png ed8c4569
    > /app/gui/library/b2_top_icon_wifi_connect.png db8fe801
    > /app/gui/library/b2_top_icon_wifi_fail.png 3e734ff4
    216a227
    > /app/gui/meta/a1_adobe_popup.png 25262eb5
    253c264
    < /app/gui/meta/a1_intro_logo.png d1e5db2b --- > /app/gui/meta/a1_intro_logo.png a491fb66
    296a308
    > /app/gui/meta/a1_main_kr_2nd_10.png 7c2e457a
    376a389
    > /app/gui/meta/blank.png 38292862
    398c411
    < /app/gui/setting/b8_2depth_bg_05.png 4b7c4a52 --- > /app/gui/setting/b8_2depth_bg_05.png 1763b35d
    405a419,423
    > /app/gui/setting/b8_List_check.png 9fd674fc
    > /app/gui/setting/b8_ade_activate.png 04751fb2
    > /app/gui/setting/b8_ade_deactivate.png 96ae1647
    > /app/gui/setting/b8_back.png 0eb541b8
    > /app/gui/setting/b8_box.png 0a225807
    408a427,437
    > /app/gui/setting/b8_level0.png ee96b67a
    > /app/gui/setting/b8_level1.png 43455e96
    > /app/gui/setting/b8_level2.png 0d10f8fc
    > /app/gui/setting/b8_level3.png c075afa1
    > /app/gui/setting/b8_level4.png 12a25883
    > /app/gui/setting/b8_line.png 57fe49fe
    > /app/gui/setting/b8_linegray.png 15001b71
    > /app/gui/setting/b8_linepoint.png f3b228d5
    > /app/gui/setting/b8_lock.png d3b59bc1
    > /app/gui/setting/b8_net.png 0f4cda3e
    > /app/gui/setting/b8_net2.png c4098194
    411a441,444
    > /app/gui/setting/b8_smallcor.png 9b4d9088
    > /app/gui/setting/b8_white_bg.png 725ec4ba
    > /app/gui/setting/wifi_popup_1.png 926677b1
    > /app/gui/setting/wifi_popup_2.png 46f9fee6
    428,443c461
    < /app/memo 00000000 < /app/memo.feb 1646263a < /app/memo/2009.03.07.Tue.am.11.15.50.m.txt b36689a0 < /app/memo/2009.04.01.Wed.pm.03.02.50.v.txt d20aa03c < /app/memo/2009.04.22.Sat.pm.09.26.32.m.txt 379ceda0 < /app/memo/2009.04.25.Tue.am.11.27.55.m.txt 69a13eaf < /app/memo/2009.04.30.Thu.am.01.04.17.v.txt d0ca0e8e < /app/memo/2009.06.19.Fri.am.10.05.05.m.txt 04f06997 < /app/memo/2009.06.19.Fri.am.10.43.02.v.txt 893aa55e < /app/memo/2009.06.22.Mon.pm.11.02.06.m.txt 833f50f3 < /app/memo/2009.06.27.Sat.pm.08.40.01.v.txt 6ccefec5 < /app/memo/2009.06.30.Tue.pm.01.45.05.v.txt 893aa55e < /app/memo/2009.06.30.Tue.pm.01.46.03.v.txt 893aa55e < /app/memo/test_01.txt 01361e77 < /app/memo/test_02.txt a72b03e7 < /app/memo/test_03.txt 6ded434e --- > /app/memo.feb f74f0cd8
    445,469c463,487
    < /app/menu/mstring_chn_bun.xml 5edcdbaa < /app/menu/mstring_chn_gan.xml 866b83af < /app/menu/mstring_cze.xml f3753a46 < /app/menu/mstring_eng.xml 03655fa5 < /app/menu/mstring_esp.xml 6c3c3235 < /app/menu/mstring_fra.xml 0a94ed52 < /app/menu/mstring_ger.xml 1ccb1a09 < /app/menu/mstring_ita.xml 32079d5d < /app/menu/mstring_jpn.xml 07c0942d < /app/menu/mstring_kor.xml e5f3026a < /app/menu/mstring_ned.xml c9475bd4 < /app/menu/mstring_pol.xml 227f5b6e < /app/menu/mstring_rom.xml 73773188 < /app/menu/mstring_rus.xml c1a98068 < /app/menu/mstring_swe.xml 692f1666 < /app/menu/mstring_tur.xml 0fc0f613 < /app/music.feb 958c784c < /app/mybook.feb 18b604cc < /app/officev.feb fe8a2a0a < /app/record.feb a60ca3d2 < /app/setting.feb f3df4f7b < /app/sleep.feb 908aa125 < /app/start.feb bec9f5fc < /app/textv.feb 4bccd791 < /flow_copy 91a64728 --- > /app/menu/mstring_chn_bun.xml 32514995
    > /app/menu/mstring_chn_gan.xml fc16c921
    > /app/menu/mstring_cze.xml 060d4e95
    > /app/menu/mstring_eng.xml 901e3399
    > /app/menu/mstring_esp.xml 93ccd5ee
    > /app/menu/mstring_fra.xml 72e85228
    > /app/menu/mstring_ger.xml ec8509ad
    > /app/menu/mstring_ita.xml d419b1e6
    > /app/menu/mstring_jpn.xml 3612c90b
    > /app/menu/mstring_kor.xml 58211d44
    > /app/menu/mstring_ned.xml d42b8f79
    > /app/menu/mstring_pol.xml f26e6a3e
    > /app/menu/mstring_rom.xml 30f0eced
    > /app/menu/mstring_rus.xml ce84b1c2
    > /app/menu/mstring_swe.xml 93cb5772
    > /app/menu/mstring_tur.xml ef70fff1
    > /app/music.feb 9f5cf3ed
    > /app/mybook.feb 0435904d
    > /app/officev.feb e8aa5396
    > /app/record.feb 32162b61
    > /app/setting.feb 5defea8b
    > /app/sleep.feb e643465b
    > /app/start.feb c92d3234
    > /app/textv.feb ec5cc8ec
    > /flow_copy 4d2a5c88
    477c495,497
    < /font/langpack_cjk.dat 721019b0 --- > /font/langpack_cjk.dat 390c4e98
    > /lib 00000000
    > /lib/iconv.flb 7813fea9
    479c499
    < /rootfs.cramfs c9b5dd2c --- > /rootfs.cramfs 1b2ef996
    488,489c508,509
    < /system/setting/chi/setting.xml 90cd38ed < /system/setting/chi/setting_org.xml 90cd38ed --- > /system/setting/chi/setting.xml 6eae4e12
    > /system/setting/chi/setting_org.xml 6eae4e12
    493,499c513,514
    < /system/setting/eng/setting.xml 37975967 < /system/setting/eng/setting_org.xml 37975967 < /system/setting/hkg 00000000 < /system/setting/hkg/keylang.xml a21af0d2 < /system/setting/hkg/keylang_org.xml a21af0d2 < /system/setting/hkg/setting.xml 78044006 < /system/setting/hkg/setting_org.xml 78044006 --- > /system/setting/eng/setting.xml 9c584ec3
    > /system/setting/eng/setting_org.xml 9c584ec3
    503,504c518,519
    < /system/setting/kor/setting.xml d5bdd61b < /system/setting/kor/setting_org.xml d5bdd61b --- > /system/setting/kor/setting.xml 38cbefde
    > /system/setting/kor/setting_org.xml 38cbefde
    508,511c523,526
    < /system/setting/rus/setting.xml df5e218c < /system/setting/rus/setting_org.xml df5e218c < /u-boot.bin 3a6b0079 < /zImage 908756fe --- > /system/setting/rus/setting.xml 29a221fa
    > /system/setting/rus/setting_org.xml 29a221fa
    > /u-boot.bin adee774f
    > /zImage 16e8b673

    Update – Original link to firmware found @ http://zone.iriver.co.kr/service/cs_down.aspx?pGroup=8&pName=Story&Cate=1&VIdx=1&idx=1217

    Update -2

    A very quick translation, gives us the following…

  • Djvu files support the function lower part from Story products.
  • Bookmark
  • Magnification (4 phases) – Functions in advance Popup (the case where the advance contents is loaded)
  • Ability to set the time with timezone
  • Fixes include:

  • ZIP file use at the time of pages amended the case malfunction part which will press long from comic view [e].
  • The part DOCX file use at the time of document sees, amended an error part. (From firmware 1.70 amendment)
  • When page pressing long, amended the part which goes wrong. (From firmware 1.70 amendment)
  • Relation of hot key configuration feature amended the part which goes wrong. (From firmware 1.70 amendment)
  • Posted in firmware, iriver, iriver story | Tagged , , , | 15 Comments

    Visual COBOL @ Microsoft Teched

    The last couple of weeks have been very busy and it has unfortunately affected the amount of blog entries I have done but the good news I have plenty of new material..

    So, what’s my excuse.. Well we have been counting down the internal builds of Visual COBOL and we are pretty much ready to ship which is a relief since we are going to launching it at the Microsoft’s Visual Studio launch parties in Las Vegas and TechEd in Bangalore April 12-14.

    Personally for me I am quite excited because I will be going to Teched in Bangalore to help show off Visual COBOL.

    If would like a look at some of the Visual Studio 2010 integration Micro Focus has is about to release, pop along to http://vs2010.microfocus.com/ and see for yourself. Better still, have a visit to teched 🙂

    I will finish the silly little blog with a link to a demo of Visual COBOL. Just because I’m proud of it…

    ref: http://www.microsoftteched.in/
    and http://www.microsoft.com/visualstudio/en-gb/products/2010/default.mspx

    Posted in COBOL, TechEd | Tagged , , , , , , , , | Comments Off on Visual COBOL @ Microsoft Teched

    Building rsync for the pogoplug

    I finally managed to get a cross compiler that works with the pogoplug, I first tried various custom build of the GNU C++ cross compiler on the Mac but none of them succeeded in creating binaries that were compatible with my little pink pogoplug.

    Anyway, instead of boring you with various evening’s development woos… I will just tell you what I ended up doing which was to use VirtuaBox with ubuntu x86 and use this tar file (eg: bunzip2 it, tar xvf into $HOME)

    Then to compile it I first had to setup the makefile for rsync:


    # export PATH=$HOME/pogoplug-gcc/bin:$PATH
    # CC=arm-none-linux-gnueabi-gcc ./configure --build=arm-linux
    --host=arm-none-linux-gnueabi --target=arm-linux

    Then to build is was easy… I just did…


    # CC=arm-none-linux-gnueabi-gcc make

    Next, I found a small USB thumb drive, formatted in ext3 using ubuntu, placed it into the pogoplug, logged into it, remount’ed the drives using:


    # mount -o remount exec /tmp/.cemnt/mnt_sdb1

    You may need to change the mnt point, use mount to find it..

    Now you will be able to use rsync via ssh and use –rsync-path to point to rsync on your ext3 drive.

    I required, I make the rsync exe + md5 sum available… just shout!

    Posted in pogoplug, rsync | Tagged , , , , | Comments Off on Building rsync for the pogoplug

    Aperture 3 has been updated for Olympus E-P1/Olympus E-P2

    I am now officially tickle pink with excitement…

    Here is what my Apple Software update said:

    Digital Raw Compatibility Update:

    This update extends RAW image compatibility for Aperture 3 and iPhoto ’09 for the following cameras:

    Hasselblad H3DII-50
    Leica M9
    Leica X1
    Olympus E-P1
    Olympus E-P2
    Panasonic Lumix DMC-GF1
    Pentax K-7
    Pentax K-x
    Sony Alpha DSLR-A500
    Sony Alpha DSLR-A550
    Sony Alpha DSLR-A850

    Thank you Apple!

    Posted in Aperture, Olympus | Tagged , , | 1 Comment

    passwd: cannot update password file /etc/shadow

    Okay.. I got my pogoplug last week and I have been playing around with it and it is now time to change the root password… so guess what happened…
    bash-3.2# passwd
    Changing password for root
    New password:
    Retype password:
    passwd: cannot update password file /etc/shadow
    bash-3.2#

    The good news, the file system is read-only, so it was pretty simple to work around, just use mount…


    bash-3.2# mount -o rw,remount /
    -bash-3.2# passwd
    Changing password for root
    New password:
    Retype password:
    Password for root changed by root
    -bash-3.2# mount -o ro,remount /

    Posted in pogoplug | Tagged | Comments Off on passwd: cannot update password file /etc/shadow