10 May 2009

Use the Bash trap Statement to Clean Up Temporary Files

Performance tests in continuous integration

One technique I've meant to use for a long time and am about to get serious about is to have performance tests run as part of continuous integration so that regressions in performance (throughput and latency) can be detected and "blamed" on specific code changes.

Iterative development

John Ferguson Smart's Blog: Micro-iterative development practices provides an interesting comment on iterative development...
Iterative development is all about state transitions. In a nutshell, iterative development is about moving from one stable state to another in very small steps.

Taskbar Shuffle

I've been using Taskbar Shuffle for a while and find it incredibly useful. It allows you to move items on your Windows taskbar about. If your like me and prefer to be over-organised you'll love it.  E.g I always have Firefox, Outlook and IM, in that order, on the left of my taskbar.

Teracopy replacement for Explorer copy and move

Copy your files faster with TeraCopy
# Copy files faster. TeraCopy uses dynamically adjusted buffers to reduce seek times. Asynchronous copy speeds up file transfer between two physical hard drives.
# Pause and resume file transfers. Pause copy process at any time to free up system resources and continue with a single click.
# Error recovery. In case of copy error, TeraCopy will try several times and in the worse case just skips the file, not terminating the entire transfer.
# Interactive file list. TeraCopy shows failed file transfers and lets you fix the problem and recopy only problem files.
# Shell integration. TeraCopy can completely replace Explorer copy and move functions, allowing you work with files as usual.

BashSupport Intellij IDEA plugin

Bash support for IntelliJ 8.1. Features:
* (Almost) complete support for Bash 3.2
* Structure view (shows functions)
* "Go to declaration" for functions and variables
* "Rename..." for functions and variables
* Ctrl+Q (Quick documentation lookup) for internal and external commands
* Highlight usages in file for functions and variables
* Advanced syntax highlighting and configuration
* Code folding
* Line commenting / uncommenting
* Brace matching
* Supported file extensions .sh and .bash

Planned features / changes:
* Full support for Bash 3.2 syntax
* Mode for Bash 4.0 parsing
* Improved code folding
* Basic code completion
* Support for the calculation mode of Bash
* Run scripts in console window
* Highlighting of backquotes and variables in strings
* Quickfix actions for most common code problems

Synergy - TCP based KVM

I've found Synergy extremely useful where I have two PCs and five monitors with different monitors dedicated to different PCs. Instead of remembering to press the KVM keys to switch the keyboard and mouse over, I just move the mouse and as it moves off the edge of one PC/monitor the mouse and keyboard automatically switch over to the other PC/monitor. The only caveat is that its configuration is very non-intuitive.

Synergy lets you easily share a single mouse and keyboard between multiple computers with different operating systems, each with its own display, without special hardware. It's intended for users with multiple computers on their desk since each system uses its own monitor(s).

Redirecting the mouse and keyboard is as simple as moving the mouse off the edge of your screen. Synergy also merges the clipboards of all the systems into one, allowing cut-and-paste between systems. Furthermore, it synchronizes screen savers so they all start and stop together and, if screen locking is enabled, only one screen requires a password to unlock them all. Learn more about how it works.

SCXML - a generic state-machine based execution environment

Next time I'm looking at building something strongly based on state machines I might look at Commons SCXML
State Chart XML (SCXML) is currently a Working Draft published by the World Wide Web Consortium (W3C). SCXML provides a generic state-machine based execution environment based on Harel State Tables. SCXML is a candidate for the control language within multiple markup languages coming out of the W3C (see Working Draft for details). Commons SCXML is an implementation aimed at creating and maintaining a Java SCXML engine capable of executing a state machine defined using a SCXML document, while abstracting out the environment interfaces.


Perf4J is a bit like Jamon, usefully adds regular logging of summary stats to log output, exposes them via JMX and allows performance graphs to be accessed via a servlet.

Perf4J provides these features and more:

* A simple stop watch mechanism for succinct timing statements.
* A command line tool for parsing log files that generates aggregated statistics and performance graphs.
* Easy integration with the most common logging frameworks and facades: log4j, java.util.logging, Apache Commons Logging and SLF4J.
* Custom log4j appenders to generate statistics and graphs in a running application (custom java.util.logging handlers coming soon).
* The ability to expose performance statistics as JMX attributes, and to send notifications when statistics exceed specified thresholds.
* A servlet for exposing performance graphs in a web application.

03 May 2009

How the failure of Lehman Bros is like SARS, and swine flu

FT Alphaville » Blog Archive » How the failure of Lehman Bros is like SARS, and swine flu
How the failure of Lehman Bros is like SARS, and swine flu
Posted by Tracy Alloway on Apr 28 12:18.

It’s not great timing, given the the outbreak of swine flu, but it is, nevertheless, the theme of the latest publication from the Bank of England.

From a transcript of a speech (with charts) by Andrew Haldane, executive director of the BoE’s Financial Stability unit:

On 16 November 2002, the first official case of Severe Acute Respiratory Syndrome (SARS) was recorded in Guangdong Province, China. Panic ensued. Uncertainty about its causes and contagious consequences brought many neighbouring economies across Asia to a standstill. Hotel occupancy rates in Hong Kong fell from over 80% to less than 15%, while among Beijing’s 5-star hotels occupancy rates fell below 2%.

Media and modern communications fed this frenzy and transmitted it across borders. In North America, parents kept their children from school in Toronto, longshoreman refused to unload a ship in Tacoma due to concerns about its crew and there was a boycott of large numbers of Chinese restaurants across the United States. Dr David Baltimore, Nobel prize winner in medicine, commented: “People clearly have reacted to it with a level of fear that is incommensurate with the size of the problem”.

The macroeconomic impact of the SARS outbreak will never be known with any certainty. But it is estimated to stand at anything up to $100 billion in 2003 prices. Across Asia, growth rates were reduced by SARS by between 1 and 4 percentage points. Yet in the final reckoning, morbidity and mortality rates were, by epidemiological standards, modest. Only around 8000 people were infected and fewer than 1000 died.

On 15 September 2008, Lehman Brothers filed for Chapter 11 bankruptcy in a New York courtroom in the United States. Panic ensued. Uncertainty about its causes and contagious consequences brought many financial markets and institutions to a standstill. The market for Credit Default Swaps (CDS) froze, as Lehman was believed to be counterparty to around $5 trillion of CDS contracts.

Media and modern communications fed this frenzy and transmitted it across markets. Banks hoarded liquidity for fear of lending to infected banks, causing gridlock in term money markets, spreads on lower-rated companies’ bonds spiked and there was an effective boycott of the remaining large US investment banks. Professor Paul 3 Krugman, Nobel prize winner in economics, commented: “Letting Lehman fail basically brought the entire world capital market down.”

The macroeconomic impact of Lehman Brothers’ failure will never be known with any certainty. IMF forecasts of global growth for 2009 have been revised down by over 5 percentage points since Lehman’s failure. Yet in the final reckoning, the direct losses from Lehman’s failure seem likely to be relatively modest. Net payouts on Lehman’s CDS contracts amounted to only around $5 billion.

These similarities are striking. An external event strikes. Fear grips the system which, in consequence, seizes. The resulting collateral damage is wide and deep. Yet the triggering event is, with hindsight, found to have been rather modest. The flap of a butterfly’s wing in New York or Guangdong generates a hurricane for the world economy. The dynamics appear chaotic, mathematically and metaphorically.

Haldane continues with the pandemic theme right through to his conclusion:

Through history, there are many examples of human flight on an enormous scale to avoid the effects of pestilence and plague. From yellow fever and cholera in the 19th century to polio and influenza in the 20th. In these cases, human flight fed contagion and contagion fed human catastrophe. The 21st century offered a different model. During the SARS epidemic, human flight was prohibited and contagion contained.

In the present financial crisis the flight is of capital, not humans. Yet the scale and contagious consequences may be no less damaging. This financial epidemic may endure in the memories long after SARS has been forgotten. But in halting the spread of future financial epidemics, it is important that the lessons from SARS and from other non-financial networks are not forgotten.

Lifehacker - Five Best Free Data Recovery Tools

Programming Complexity - Art, Engineering or Monkey Work? | Javalobby

Programming Complexity - Art, Engineering or Monkey Work? | Javalobby

Interesting comment:
One thing that is certain is that software development involves logic, and thus people who can solve problems using logic will always be needed, whether the primary medium stays in textual format (source code) or whether it evolves into some different representation like Intentional Software is trying to do. So the statement from the article that "you needed to be a highly trained programmer to make heads or tails of the language" is always going to be true in software development. More generally, highly skilled people are needed in any complex endeavor, and attempts to dumb dumb complex things will likely not succeed in any area, not just software development. Would you trust someone to perform surgery on you so long as they have a "Dummies Guide to Surgery" book? Or someone to represent you in court who stayed at a Holiday Inn Express last night?

Linux Journal 2009 Readers' Choice Awards