One of the few metrics that does interest me about our development process is the number of outstanding issues. In fact of these issues the ones that are of particular interest are of cource the bugs/defects. At Intilecta we are currently using a product called Gemini from CounterSoft. Although it quite a neat (and cheap) issue tracking system it is sometimes difficult to get the metrics you want. To this end I have started to work with the Webservice API they expose to put together a tool that allows you get a summary count of the number of issues for a particular project, resource, component etc.
Feel free to run the Gemini Issue Manager from here. You will need to enter the url of the webservice api of your Gemini installation (eg if the main page of your Gemini installation is http://myserver/gemini/Main.aspx then your webservice url is http://myserver/gemini/webservices/gemini.asmx). It also requires an access code which is stored in the web.config file for your gemini installation (look for the line that starts <!– WebServicesAccessCode – Security code that must be used when using Gemini web services –>). Once you have entered this the first time the application will remember it the next time you run it. After entering this information, press the load button to access your gemini data (at this stage there is no feedback to tell you it has finished accessing the server so you will need to try expanding the treenode – it will expand once the data has been loaded).
Please feel free to add comments/feedback on what information you would like to see or how the layout could be improved.
I must admit I have been away from my desk for way too long. As Craig observed I haven’t posted anything since mid december. The last couple of weeks have been even more hectic than previous silly seasons. Firstly I am no longer in NZ – that’s right I have returned to Perth. Yes, I’m still with Intilecta and now that we are approaching the end of version 1 we are all looking forward to penciling the list of requirements for version 2.
So, having been tagged I guess I’d better list 5 things that you might not know about me:
- Although I used to play a number of sports as a kid the list has been dramatically shortened to just hockey, sailing and kite surfing. Well, these are the sports I can do here in Perth. Of course when I travel I try to tie in a bit of snowboarding too.
- I definitely call Perth my home city, and Australia as my home country. In actual fact I was born and raised (until I was approximately 8) just outside of Cambridge in the UK.
- Through highschool I played the saxophone and the piano (neither of which I have played in about 10 years)
- I have a younger brother who is one of the best barristas here in Perth. After 6 months in Wellington I did find some good coffe but it has been fantastic to be back in the heat (average temperature since I’ve returned has been 30ish) and to be able to walk down the road for a great coffee
- Clearly my chosen profession (and general area of interest) is software development I’m also a trained sailing coach (able to train sailors to compete at state and national level) and instruct snowboarding. I often wonder whether I can be bothered keeping up with the continual (re)evolution of the IT industry – I could just drop out and follow either the sun or the snow around the globe.
Next I’d better tag some other bloggers:
- Rob Farley
- Steve Lasker
- Mitch Wheat
- Michael Kleef
- Alastair Waddell
I hope everyone had a great Christmas and are looking forward to a great new year.
SQL Sync Tester v22.214.171.124
The next version of the SQL Sync Tester has just been uploaded and is available for you to download, install and use from here. Please feel free to comment, suggestion improvements or let me know about any bugs.
Additions in this version:
- Ability to specify database file
- Ability to connect to an existing database file
- Database connection shows tables and subscriptions
- Table information shows column information and table data
- Subscription information
- shows subscription details
- allows subscription to be synchronised
- allows subscription to be reinitialised
- allows subscription to be removed
- Subscriptions can be added to database
Update: The link was originally missing, this has been fixed (above) or you can just go here to install the latest version.
Steve Lasker talks about SQL Server Compact Edition
In the latest show to be posted on The Microsoft Developer Show I talk with Steve Lasker about the direction of application development. This includes handling being occasionally connected, caching data and synchronising changes. In the past I have blogged about the work being done around the Microsoft Sync Services and the direction I think that WPF/e should go with the integration of SQL Server CE. Steve reaffirms this vision and summaries the value proposition of building Occasionally Connected Systems on top of the soon to be released SQL Server Compact Edition platform. Tune in here to listen to the full show.
SQL Code Camp (NZ) – Audio now live!
In case you hadn’t heard I’m heading back home this week. I say goodbye to the team here in Wellington on Thursday and fly to Sydney for a weekend of relaxation (did I mention the Sydney to Hobart boats should be in town and that I’m staying just up the road?). I’m back to work next Monday from the new Perth branch of Intilecta.
Self Deluded Bank Continue to offer “Customer Service”
I’m not normally a big one for ranting and raving but today I was thoroughly put out by a certain bank (that I happen to bank with in both Australia and New Zealand – was that clear enough?). Whilst being here in NZ I have been monitoring my accounts to make sure that the debt that seems to accumulate on my Australian credit card is paid off from time to time. This has been quite useful as I also get notified through “Secure Mail” when an international transfer has been completed etc. Unfortunately I haven’t been that diligent in reading my snail mail – in fact I hadn’t even thought to check with my family (where the mail is currently being sent) to look at any of the mail from the bank. I guess I assumed that if I needed to be notified about anything important it would appear in the Secure Mail section of the Internet banking site.
Anyhow today I went to pay for something using my Australian credit card only to discover it had been disabled. After spending a few minutes (more likely more….) on the phone I managed to get hold of an customer service lady who was kind enough to inform me that the credit card had been disabled due to lack of payment. Apparently it is going to take up to 24 hours for it to be re-enabled (after I make a payment) – good thing I’m not in a rush to use it!
Figuring that I must have missed something I returned to the Internet banking site. From there it appears that yes there was indeed an amount owing on the card (not particularly high I might add) but there was nothing in either Secure Mail or any where else on the site to indicate that an account had been disabled. In fact the only indication was that my “available balance” on my card was 0.00.
While on the phone to the bank I did enquire as to why I hadn’t been notified (using a modern form of technology, since I do have an email address on my profile). Apparently they can’t send secure information via email (reasonable, but isn’t that what Secure Mail is supposed to be?). They also informed me that I should have notified them if I was travelling overseas – how is this protecting my privacy? In fact if someone had bothered to look at my records they would have seen that they had already contacted me earlier in the year (after the first few NZ transactions on the card) at which point I had informed them I would be in NZ for the remainder of the year.
I guess my point here is that you can have all the processes in the world, but if they don’t match how the user does business then you can’t really say that you are providing customer services (let alone good customer service).
WPF/e on Devices and with Data
This week there has been a lot of hype (here, here, here and here) about the December CTP of WPF/e (which you can download here). As Doug points out there is unfortunately no managed code support in this CTP but hopefully this will be resolved in the next CTP. The whole notion of WPF/e is interesting when you pitch it against previous web technologies (ASP.NET, AJAX) and client technologies (WinForms, WPF). In fact if you look at the WPF there is a browser deployment option where you can build an application that will be rendered in the browser. However, this still requires the .NET v3 runtimes to be installed on the client machine. Clearly this isn’t a great option for cross platform applications. Where WPF/e is positioned is similar to Flash. There are/will be runtimes available for a cross section of platforms and it will be supported in a number of different browsers. In the past if you wanted to build an application that worked across platforms/browsers you were somewhat limited in what you could do but going forward the power of WPF/e will allow us to build “almost” client side applications.
I say “almost” because there are a number of hurdles to overcome before this will be possible. With .NET v2 and WPF you have the option to ClickOnce deploy your application. This is appealing as it combines the benefits of installation (ie offline availability) and application updates (ie when a new version is available the client will be prompted to update). Clearly this is a direction the WPF/e should go in so that you have a cross-platform/browser application that is always available regardless of connectivity.
The next point to consider is that once you have an application that is capable of working offline where is it going to source its data. This is the same issue that needs to be considered when building Windows SideBar gadgets – you have to handle the scenario where the computer is not online. Ideally it would be great to be able to cache data, or better still synchronise data to the local computer, and use this data in the application. Given the history of SQL Server CE (ie for mobile devices that had different platform architectures) and its ability to run with minimal (or in fact zero installation) this would be truely awesome convergence of web and client technologies.
WPF/e wouldn’t truely be “everywhere” if there wasn’t support for mobile devices and I don’t just mean Windows Mobile devices. It would be great to have a technology that would enable applications to run on any mobile devices regardless of manufacturer. This combined with offline capabilities and local data is enough to get any developer (regardless of platform or technology preference) excited.
The New BI – Behavioural Intelligence
Since starting at Intilecta almost 6 months ago I often get asked about what it is we do. Without giving too much away (check out Intilecta’s website for a bit of an overview) this post should provide a bit of background on where we would like to be positioned in the market. The following image illustrates an information triangle where the information in the base is used by the largest number of people within an organisation. This is typically operational information that is used on a day-to-day basis to run the organisation. As you go up the triangle fewer and fewer people need access to this type of information. Perhaps “type of information” is the wrong phrase as it is more about how this information is accessed, as it nearly all comes from the underlying data that the organisation records about customers, sales etc.
The triangle has been broken into two halfs. The top half can be thought of as more traditional BI (ie Business Intelligence) – most BI vendors support ad-hoc querying and analytical services that allow you to do modelling, pattern and trend identification. In fact this seems to be the direction that a lot of these vendors are travelling in (ie up the triangle, building more sophisticated analytical services to improve the patterns/trends that are identified). Most BI vendors also play in the alerts space, which falls below the line into what we like to think of as the Behavioural Intelligence (or the new BI). The reason for this name is that it is the alerts and the operational information that encourages behavioural change within an organisation (eg instead of waiting for an existing customer to make a new order by monitoring their consumption you can predict and be proactive by calling them when you think they are about ready to order). Most BI vendors fail to provide operational information that is tailored to an organisation in an interface that is readily available to the user – in fact a lot rely on the organisation deploying their client tools that simply provide an ad-hoc query interface. Intilecta is positioning themselves as a leader in Behavioural Intelligence architecting designware that is based on interface guidance from leading designers (Stephen Few, Alan Cooper and others), integrating with existing business productivity tools (for example Outlook) and deploying it using an occasaionally connected infrastructure so it is available when and where the user needs it.
Installer Custom Actions and Command Line Arguments
This post is more of a permanent pointer so that I don’t have to trawl the web every time I want to find this information. One of the common tasks when building an installer for an desktop application is to add your own Custom Actions. These can be hooked up to the installer to execute at various points such as Before/After Install, Before/After Rollback and Before/After Uninstall. Each action can be written in managed code in a similar way to a typical event handler. The process goes a bit like this (assumes that you have already created your setup project and have added the primary output of your application):
- Add an Installer item to your application (from the New Item dialog select the Installer template)
- If the Installer item is not currently open, double-click it in the Solution Explorer to open the designer
- From the Properties grid select the Event view, followed by the event that you want to wire up (eg AfterInstall) – Double-clicking the drop-down box will create an empty event handler!
- Add your logic into the event handler that is created (this is your custom action)
- Right-click the setup project and select Custom Actions from the View menu
- Right-click the action (ie Install, Commit, Rollback or Uninstall) that you want to wire up (should correspond to the event you wrote the event handler for earlier) and select Add Custom Action (if you right-click the Custom Actions node it will wire up events for all four actions)
- From within the Application Folder select the Primary Output from your application (if it is not in this folder, or your installer is in a different class library you might need to add that using the Add File, Add Output or Add Assembly buttons).
These are the basic steps for getting your Custom Actions to execute as part of the installation process. Where this becomes a little tricky is where you want to prompt the user for some information during installation and then use this information as part of the custom action. For example, perhaps we are installing a service that needs to run as a particular user, we might want to configure this as part of the installation process.
- The first step is to create the user interface – Right-click the setup project and select User Interface
- Depending on where you want the dialog Right-click a node and select Add Dialog
- Select one of the pre-built dialogs (for example Textboxes (A))
- From the Properties grid configure the appropriate fields (eg set Edit1Label – “Specify the user to run service as:” and Edit1Property – “SERVICEUSER”) – this sets up the field so that user input is assigned to that property
- The next step is to pass this value into the Custom Action. To do this we need to specify the CustomActionData property so that this value is passed into the Installer. On the Custom Action view select the Installer and add the property information into the CustomActionData property using a /name=value sequence (eg “/name1=value1 /name2=value2”). In this case something like “/username=[SERVICEUSER]”
- Within the Installer this property can be accessed via the Context property – Me.Context.Parameters(“username”)
The last thing that you might want to do is to make this property configurable for when the installer is run from the command line in quiet mode. To do this you still need to pass in the command line argument into the Installer. For example I could run the installer using the following:
msiexec SERVICEUSER=”Fred” /i MyApplication.msi /quiet /passive
There is one catch which is you need to specify the Edit1Value=[SERVICEUSER] back on the User Interface view of the Installer. With that you are all done (well, excluding all the other mirad of properties you can tweak on your installer!)
Oh, it must be the time for writing posts on building installers because I just noticed that Dave Glover has posted on building Vista compatible installers for Windows Mobile applications.
Visual Studio Find occasionally stops working
I got into work this morning to discover that Find had stopped working in Visual Studio. Instead of returning the correct matches it returns a particularly unhelpful message: “Find was stopped in progress.” I recall coming across this issue in VS2003 but thought that it had been fixed in VS2005. A quick trawl returned a couple of options, the one that fixed my solution was pressing Ctrl-ScrLk. Don’t know exactly what this key combination is supposed to do (and to be honest haven’t bothered to look it up) but it does seem to cancel an executing Find. For some reason VS occasionally seems to get stuck thinking that it should always cancel any Find. Pressing this key combination resets this flag allowing you to resume searching.