Event-Sourced Architectures by Martin Thompson at QConLondon 2012

Software performance guru Martin Thompson (@mjpt777) gave an illuminating talk on event-sourced architectures, and why event-driven, state-machine designs are the way forward for complex, multi-path software systems (Event Sourced Architectures and what we have forgotten about High-Availability”, [slides: 700KB PDF]).

QConLondon 2012 blog posts
See all QConLondon 2012 blog posts…

Continue reading Event-Sourced Architectures by Martin Thompson at QConLondon 2012

Using LogParser and Log Replay to Bootstrap Load Test Scripts

In a previous post I mentioned how Microsoft LogParser can be used to discover HTTP endpoints in legacy applications. Another great use for LogParser is to generate files to drive load test scripts.

Loaded truck by jcurtis4082 (Flickr)

Continue reading Using LogParser and Log Replay to Bootstrap Load Test Scripts

Endpoint Discovery using Microsoft LogParser

A few years ago, I was working on a project for a UK client who needed to replace or rewrite a legacy inventory management  web application written in classic ASP. The problem: no documentation, and complicated, spaghetti source code with many apparently duplicate or redundant ASP files and ASMX web service endpoints.

Finger pointing by bhollar (Flickr)

Which ASP pages were actually in use? We had to find a way to limit our application migration efforts to  only those pages which were used by the application. A colleague at the time introduced me to what must be one of the best-kept secrets in the Windows developer world: Microsoft Log Parser.

Continue reading Endpoint Discovery using Microsoft LogParser

Talk: a Sitecore-based multilingual website (Arabic and English) for Virgin Mobile & Qtel – Dreamcore EU 2011

I presented at the Sitecore partner & developer conference DreamcoreEU in 2011; I spoke about implementing a Sitecore-based multilingual website (Arabic and English) for Virgin Mobile & Qtel [PDF].

DreamcoreEU 2011 logo

I gave a particular emphasis to multilingual concerns and planning for effective web operations:

DreamcoreEU-2012_Multilingual

DreamcoreEU-2012_Operations-4

DreamcoreEU-2011_SOM

(Terrible moiré effect due to stripy shirt – I now have a plain one 🙂 )

To quote from the DreamcoreEU 2011 site:

Going global is much more than just making a site multilingual. If your web properties span the globe, you need to know the best techniques for architecting your Sitecore solution to support a global presence. This session will feature an inside-look at how Virgin Mobile took their brand into to the Middle East. ). The session will cover:

  • Why Sitecore is a first-class WCMS for multi-lingual, left-to-right and right-to-left websites
  • Planning for and implementing right-to-left (RTL) languages in your Sitecore website
  • Using Sitecore’s content modeling to implement product information management (PIM) features
  • Getting your Sitecore content strategy right
  • Developing, deploying and testing multi-server Sitecore installations effectively

In particular, I spoke about how internet technology consultants Priocept had led the effort to roll out the entire system within six months and the challenges we overcame in order to do that, emphasising the need to deploy to Production as early as possible and test with real data, networks and configurations.

Assert-based Error Reporting in Delphi

[This is a very old article I wrote back in 2002 when I worked for a company which built MRI scanners and was subsequently bought by Oxford Instruments. The driver for this was “…Until Delphi acquires native functions equivalent to the C [__LINE__ and __FILE__] macros, … the need for this Assert-based framework … will remain” The need to trace errors to a specific class and line number, especially in production code, has only become stronger since then.]

Summary

This note describes a simple but flexible error-reporting and tracing framework for Delphi 4 and above based on Assert, which provides the unit name and line number at which errors were trapped and traces made.

Details

Background

Under the Delphi Language there is no simple way of replicating the C/C’++ macros FILE and _LINE_ to obtain the unit name and line number of memory address at runtime. However, in his paper “Non-Obvious Debugging Techniques” Brian Long points out that the Delphi compiler provides both unit name and line number during a call to Assert, and describes how assertions can be exploited to provide detailed execution tracing.

The framework described here extends this idea to allow flexibility in the processing of assertions. Assertion processing can be switched on and off at runtime; arbitrary filtering can be applied to any assertion; and both execution tracing and ‘standard’ assertion behaviour (i.e. raising an exception) can be effected. Assertions can therefore be left enabled in production code, at the expense of a slightly larger binary executable.

Continue reading Assert-based Error Reporting in Delphi