Category Archives: Personal

La tour part-dieu, Lyon

Hot Water

After two weeks without hot water, I am looking forward to running that hot tap soon. The plumbers have just finished and are leaving behind a brand new water heater. The new heater looks identical to our last but this one is not leaking water through the electrics.

Beneath the leaking hot water heater

Beneath the leaking hot water heater

Having dealt with leaks from the apartment above twice since moving to Lyon, it came as no surprise to once again suffer another leak. This time our wall mounted water heater was the source, rather than the apartment above.

Two weeks ago Megan walked into the kitchen and let out an odd sound; a sound something between surprise and confusion. I rushed to the kitchen to find her trying to determine why a sizeable area around our sink was covering with water. A thin layer of water coated the sink, the nearby floor, and our cooker top.

A slowly forming drip from the water heater fell, hit the edge of our drying rack, and splattered.

The water was leaking from the base of the heater, near the red power light, and seemingly far too close to the electrics hidden inside. I quickly cut the power at our power box and then cut the water to the apartment.

A few minutes examination revealed an obscured tap to cut off just the water to the heater. After those simple steps we had isolated the now dangerous device.

The dripping continued for another hour and stopped.

Our landlords were not slow but instead a combination of multiple visits by the plumber, securing an invoice for the replacement, and scheduling time all mounted up. The final visit was postponed. Another client of the plumber having a “big problem”. So it is only now our new heater has been installed.

It will not be long now until we get back our steady, reliable, hot water. I will not miss having to heat water in a pan.

Glass panel with two impact marks

Constantly Amazed

I find my photos and projects in unexpected places. Most of the time it is harmless but occasionally it irritates.

If you are an organisation with a budget and staff, then I expect compensation for using my work. I also expect to be asked for permission to use my work; not only is it polite but my work is copyright. Not getting permission before you profit from another’s creative work is illegal in all but a few jurisdictions.

I do have open source projects you can build upon, expand, and share. Those are clearly marked.

Why mention this now? Another large UK newspaper used a photo without permission. They credited my name but did not ask permission or compensate me. And if I reproduce their work without permission – for profit? Would they remain silent?

Green 2013 daily journal

Closing 2013

I have kept a daily journal for much of my life. The routine of writing each evening is cathartic and helps provide a useful record of where I am spending my time. I also staple into my journal any tickets or mementos from the day.

I write daily but do not staple items in until the year is nearly done or past. It means I have a small pile of paperwork near my journal reminding me to find the time to sort it out. Never a critical task, it takes a particularly quiet, calm, and often house bound day to come around. Today was just such a day. Today I closed my journals for 2012 and 2013.

2013 was a busy year. We gathered a lot of tickets and paperwork. The journal is double its expected width in one corner. Not ideal but a sign of a year well spent.

2013 journal from Castelli

2013 journal from Castelli

With the rise of print your own tickets and electronic tickets, many of the bigger events of the year had nothing associated with their day. Given the mass I did have to staple in, this lack of paperwork should probably be a blessing but it does not feel that way.

Instead the day when we visited Edinburgh Castle has no ticket, no leaflet, nothing associated; we bought online and printed out own tickets. I recycled the tickets later, as I have a digital copy. Now that page will be easily skipped over when flicking through the journal.

Should I keep my own print out or maybe consider stop stapling items in entirely? I am not sure. For now, I have a new pile of tickets to grown for this year. I can decide later.

Our first sunset over France

Returning the Sony

I had been looking for a new camera for a while. I had only ever owned three digital cameras and I tend to use them until they fail or become utterly obsolete.

Olympus C-220 Zoom

I loved my first digital camera, an Olympus C-220 Zoom. It advertised a two megapixel photo; tiny by today’s standards of 12 to 20 megapixels.

My Olympus C-220 Zoom

My Olympus C-220 Zoom

I learned how to get the best out of that camera and stuck with it for far too long. I understood its limitations and weaknesses, but I knew its strengths. I could carry it around and get the photos I wanted without thinking. The time from pocket to photo was tiny. It was great and served me well.

I like to imagine that my Olympus is now serving someone else just as well. I sold it on eBay when we moved from Melbourne.

Canon PowerShot SX200 IS

It was my first Canon and I was taken aback by the leap in quality between my Olympus and the PowerShot SX200 IS. Many years of improvements had passed between the two and I appreciated them.

My Canon PowerShot SX200 IS

My Canon PowerShot SX200 IS

I was lucky. The PowerShot SX200 was one of the first of a new group of cameras; travel cameras designed with giant zooms and a more serious owner in mind. Those needing a smaller camera capable of capturing the sights and scenes of the backpacker. A camera good enough to argue against lugging around a DSLR.

I have always wanted a DSLR but have never been able to justify either the price or the hip-thumbing burden it would place on me. Being able to carry around a decent camera without thought or consideration is wonderful; that is something a DSLR with its massive lens and body can never offer.

Yet I still find myself studying Tim Bray‘s posts on mirrorless cameras, point-and-shoots, and lens. One day maybe I will be able to justify a larger frame camera but today it does not match my lifestyle or pocket.

I mastered the PowerShot SX200 because I had to. We bought it for our wedding and honeymoon and I wanted great shots of those events.

Years passed and my PowerShot started suffering. The lens protector jammed during a holiday in Tasmania. Casing around the zoom worked itself loose and generally wear and tear has built up. This was a deliberate choice and expected.

When I bought the PowerShot, I decided to use it properly and frequently, rather than nurse it through ten years in perfect condition. I got great photos and sometimes the camera came out a little worse for wear for the shot. Yet it worked and it continues to work well today.

Sony Cyber-shot HX20V

Earlier this year I started looking for a replacement to my PowerShot. Wear and tear aside, I wanted GPS tagging. We were travelling more and being able to automatically organise my photos by location was alluring.

I searched for a long while. The obvious choice was a new PowerShot and I waited for a refresh to the product line. When it happened, the PowerShot SX280 was announced. It looked good but also a touch lacklustre compared to offerings from Lumix and Sony. The feature list was shorter. The reviews never glowing.

Then reports of battery life problems appeared. Video caused the camera to shed battery life at an alarming rate. A firmware update was released but reports of problems continued. Canon claim it is now fixed but doubts linger.

I picked the Sony Cyber-shot HX20V. My first camera with GPS and a feature list longer than my arm.

My now returned Sony Cyber-shot HV20X

My now returned Sony Cyber-shot HV20X

The camera was fine but not great. I never learned to love it.

Within months my spare Sony battery became faulty. Failing to hold a charge overnight, I returned the battery for a replacement. Thankfully the replacement worked.

This month, the Sony’s auto-focus started making a horrible grinding noise. I noticed it when taking video of the festival of lights. A background noise on my footage. The next night I heard the noise again and realised, with horror, it was my camera.

So now the camera and battery have been returned to Amazon for a refund. Amazon have been excellent and their after sales service is why I will continue to buy from them.

The GPS was great. It took anywhere between one and three minutes to get a position, or possibly longer but I typically gave up after three minutes. I have a slew of photos with locations associated and my photo map in iPhoto is a joy to explore.

The Sony however taught me that I do not want a feature list the length of my arm. With those features come too many options, too many settings, and too much fuss.

I never felt comfortable with the Sony. It had progress bars after taking a photo. I was never sure how long a photo would take and how long I would have to wait until I could take the next photo.

The Sony HX20V felt clever and with that I suspect it could capture great photos. Just point and shoot.

The video quality was great. Built in stabilisation was appreciated. Lots of improvements but I expect them from any new camera. The experience connecting to my Mac was not ideal but workable.

For me, I suspect a simpler camera more refined in lens and build quality matter more. I will happily apply the clever needed but I need the camera to be more of a constant and less intelligent and less tricky. Software post-processing within my camera is a waste. I have a massively powerful Mac Pro waiting at home if a photo needs post-processing; I dislike post-processing generally, so most photos remain as taken.

What Now

For now, I am back to my Canon SX200 IS. It soliders on despite the battering I have made it bear over the years. The Canon will be with me this Christmas as I capture moments from our celebrations.

Next year though I will be on the look out again for my next digital camera.

It got my attention.

Tiger

The unexpected face of a tiger caught my eye as we travelled towards Glasgow. I can not now remember where along the journey I noticed the haircut staring back at those behind its owner.

It got my attention.

The tiger got my attention.

Carved blocks in Lyon's printing museum

Automating SpamCop

I am not sure how effective SpamCop is. Once upon a time I regularly reported spam to the service. In return, I was occasionally rewarded with administrators saying thanks and putting an end to the source of at least some of the spam.

A guide to typography by Albercht Dürer in Lyon's printing museum

A guide to typography by Albercht Dürer in Lyon’s printing museum

Spam is no longer the problem it once was. Filters have become better. Multi-layer approaches trap most of the spam. My company in-boxes remain relatively free of junk mail.

This weekend we saw a spike in the amount of spam getting through to the spam mailboxes. Normally I delete mail that reaches these mailboxes. It is rare for valuable e-mail to be misclassified and for that I am grateful. I appreciate the efforts the community has gone to. SpamAssassin and greylisting in particular stand out as worthwhile spam filtering options.

This weekend saw tens of spam e-mails coming in short bursts and I wanted to at least inform someone. With this in mind, I wrote two scripts.

The first script sends e-mails currently selected in Mail.app to SpamCop:

#!/usr/bin/perl

use WWW::Mechanize;

my $applescript =<<END;
set raw to {}
tell application "Mail"
	set msgs to selection
	
	if length of msgs is not 0 then
		--display dialog "Report selected message(s) to Spamcop?"
		--if the button returned of the result is "OK" then
			
			repeat with msg in msgs
				
				set messageSource to source of msg
				set raw to raw & messageSource
				set background color of msg to gray
					
			end repeat
			
		--end if
	end if
end tell
raw
END
my $output = &osascript($applescript);
my @output = split(/, Return-Path/gsm,$output);
my @raw;
foreach my $output (@output) {
	$output = 'Return-Path'.$output if ($output =~ /^: /);
	$output = substr($output,0,49999); # spamcop constraint
	push(@raw,$output);
}

my $spamcop_url = 'http://www.spamcop.net';

my $mech = WWW::Mechanize->new();
$mech->get( $spamcop_url );

$mech->submit_form(
        form_number => 1,
        fields      => {
            username    => 'ENTER YOUR SPAMCOP USER NAME HERE',
            password    => 'ENTER YOUR SPAMCOP PASSWORD HERE',
        }
    );

foreach my $raw (@raw) {
	$mech->get($spamcop_url);
	$mech->submit_form(
			form_name => 'submitspam',
			fields => {
				spam => $raw,
			},
		);
}

if (scalar(@raw) == 1) {
	system("say 'Reported the spam email.'\n");
} else {
	system("say 'Reported ".scalar(@raw)." spam emails.'\n");
}

sub osascript {
	my ($script) = @_;
	my @script = split(/\n/,$script);
	my $script = ' -e \''.join('\' -e \'',@script).'\'';
	my $command = 'osascript' . $script;
	return `$command`;
}

As you might expect, I call this first script using Power Manager as an external script event.

On-demand script in Power Manager

On-demand script in Power Manager

The second script walks the e-mails sent to SpamCop through the reporting process:

#!/usr/bin/perl

use WWW::Mechanize;

my $spamcop_url = 'http://www.spamcop.net';

my $mech = WWW::Mechanize->new();
$mech->get( $spamcop_url );

$mech->submit_form(
        form_number => 1,
        fields      => {
            username    => 'ENTER YOUR SPAMCOP USER NAME HERE',
            password    => 'ENTER YOUR SPAMCOP PASSWORD HERE',
        }
    ) ."\n";

my $stop = 0;
while(not $stop) {

	$mech->follow_link( text => 'Report Now' ) ."\n";

	my $form = $mech->form_name( 'sendreport' );
	if ($form) {
		print "Send Report form found: ".$mech->value('reports')."\n";
		$mech->click_button( 'value' => 'Send Spam Report(s) Now' ) ."\n";
	} else {
		print "No report form button found.\n";
		$stop = 1;
	}
}

There is no magic in these scripts. They use a combination of AppleScript and perl’s wonderful WWW::Mechanize module. Hopefully they will be of use to you.

NVidia GT120 and ATI Radeon HD 5770 side by side

Fixing Mac Kernel Panic: ATI 5770 and NVidia GT120 graphics cards

Since replacing my Mac Pro’s two graphics cards with a single ATI Radeon HD 5770 graphics card, the “IOGMD: not wired for the IODMACommand” kernel panics that plagued OS X 10.8 have stopped. I have not had a kernel panic since replacing the two NVidia GT120 cards.

My experience appears to be shared by others in the Apple discussion forum; multiple NVidia GT120 graphics cards in a Mac Pro running OS 10.8 results in frequent kernel panics.

The fixes are to remove one of the NVidia GT120 graphics cards or replace them with another Apple supported card. Neither option is wonderful. The first option limits your Mac to one monitor and an underpowered graphics environment. The second option requires buying hardware from Apple to replace hardware also bought and recommended by Apple.

I disliked removing two graphics cards that are not physically broken or faulty. The problem is a software bug in OS 10.8, not in the graphics cards.

With a couple of months of no kernel panics, I decided to re-introduce one of the two NVidia GT120 cards back into my Mac Pro. This would provide a second card to drive a monitor and provide another 512MB of dedicated display memory. It also reduces the load on the newer ATI Radeon HD 5770.

The panics occur only when multiple NVidia GT120 cards are used. A single NVidia GT120 cards alongside a ATI Radeon HD 5770 works.

The result has been good. No kernel panics and better graphics performance.

Below are a few photos of the re-introduction.

Mac Pro with a single ATI Radeon HD 5770 graphics card installed

Mac Pro with a single ATI Radeon HD 5770 graphics card installed

Flip the latch to unlock the side of the Mac Pro

Flip the latch to unlock the side of the Mac Pro

Remove the side of the Mac Pro

Remove the side of the Mac Pro

Single ATI Radeon HD 5770 graphics card inside the Mac Pro

Single ATI Radeon HD 5770 graphics card inside the Mac Pro

Remove the two back drive bays

Remove the two back drive bays

Removed drive bays; nice design feature of the Mac Pro

Removed drive bays; nice design feature of the Mac Pro

PCI slots of the Mac Pro

PCI slots of the Mac Pro

NVidia GT120 and ATI Radeon HD 5770 side by side

NVidia GT120 and ATI Radeon HD 5770 side by side

Mac Pro with the GT120 and ATI 5770 installed

Mac Pro with the GT120 and ATI 5770 installed

I am still left with a single working NVidia GT120 graphics card sitting unused in a box, but at least the kernel panics have stopped and I can work without fear of sudden restarts and lost work.

Possible Causes

There has been some discussion that the kernel panic is caused by specific applications or browser plug-ins. These are not the cause. No application running at the user level can cause a kernel panic. If they manage this feat, then there is an underlying bug in the operating system.

What can cause kernel panics is anything running at the kernel level of the operating system. This includes graphics drivers and IOKit level code; such as the IOGMD and IODMA mentioned in the kernel panic reports. This code is Apple’s responsibility to fix.

Amazon links on this page help support running The Work Life.

Two Apple NVidia GeForce GT 120 cards removed

Fixing Mac Kernel Panic: IOGMD: not wired for the IODMACommand

Since upgrading to OS X 10.8, aka Mountain Lion, my Mac Pro has been suffering from kernel panics. The solution has been to replace my two NVidia GT120 graphics cards with a single ATI 5770 graphics card.

The problem appears to effect those running multiple monitors and using the Apple issued GT120 graphics cards.

For me, the kernel panics occurred while browsing the web with Safari. Often the kernel panic occurred as I scrolled down a page. It did not require a complex web page; just a web page containing plain text was enough. It was not caused by Flash or any third party plug-in.

I reported these kernel panics to Apple through Bug Reporter, and through the “send report” mechanism upon restarting. Months have passed since the problem began, multiple updates to OS X 10.8 have been released, and still the kernel panics continued.

Rather than continue to wait for a solution from Apple, I opted to bypass the problem.

Replacing the Graphics Card

Thanks to a discussion on the Apple Discussion Forum, I learnt that replacing the graphics card will stop the kernel panics. One ATI 5770 graphics card can drive up to three monitors on a Mac Pro. I only have two monitors, so was pleased to feel the new card would not be immediately pushed to its limits.

Thus earlier this week, my replacement card arrived from Amazon. I had fun swapping out the two old cards for the slightly less dated graphics card.

Swapping over took about 30 minutes and required surprisingly little effort. The small manual included with the replacement provided all the instructions I needed.

Upon restarting everything worked. I have not had a kernel panic since and am starting to regain faith that I can use the computer for longer periods without being suddenly interrupted.

Update: I later re-introduced a single NVidia GT120 graphics card without problem.

Apple issued ATI Radeon HD 5770 graphics card

Apple issued ATI Radeon HD 5770 graphics card

Two Apple NVidia GeForce GT 120 cards removed

Two Apple NVidia GeForce GT 120 cards removed

Mac Pro empty PCI slots ready for replacement graphics card

Mac Pro empty PCI slots ready for replacement graphics card

ATI Radeon 5770 fitted inside a Mac Pro Early 2009, 4.1 model

ATI Radeon 5770 fitted inside a Mac Pro Early 2009, 4.1 model

ATI 5770 offers two DisplayPorts and one DVI port for connecting three monitors

ATI 5770 offers two DisplayPorts and one DVI port for connecting three monitors

Kernel Panic

Below is an extract of the kernel panic reports I saw. The panics were frequent enough to change my behaviour and to avoid using Safari during critical work.

Fri Mar 29 15:44:58 2013
panic(cpu 2 caller 0xffffff800a451107): "IOGMD: not wired for the IODMACommand"@/SourceCache/xnu/xnu-2050.22.13/iokit/Kernel/IOMemoryDescriptor.cpp:1424
Backtrace (CPU 2), Frame : Return Address
0xffffff81009e30f0 : 0xffffff800a01d626 
0xffffff81009e3160 : 0xffffff800a451107 
0xffffff81009e31f0 : 0xffffff800a44bede 
0xffffff81009e32a0 : 0xffffff800a44cb0a 
0xffffff81009e32c0 : 0xffffff7f8a6dea04 
0xffffff81009e3330 : 0xffffff7f8a73f1c9 
0xffffff81009e3380 : 0xffffff7f8a73f13b 
0xffffff81009e33d0 : 0xffffff7f8a726901 
0xffffff81009e3460 : 0xffffff7f8a724ad6 
0xffffff81009e34b0 : 0xffffff7f8a70f764 
0xffffff81009e3560 : 0xffffff7f8a73c240 
0xffffff81009e3760 : 0xffffff7f8a73d983 
0xffffff81009e3830 : 0xffffff7f8b7ee480 
0xffffff81009e3970 : 0xffffff7f8b7edf6c 
0xffffff81009e3980 : 0xffffff7f8b7e4dfe 
0xffffff81009e3db0 : 0xffffff7f8b79120a 
0xffffff81009e3de0 : 0xffffff7f8b7952b3 
0xffffff81009e3e00 : 0xffffff7f8b11d2a4 
0xffffff81009e3e20 : 0xffffff7f8b11d237 
0xffffff81009e3e50 : 0xffffff7f8b7a218c 
0xffffff81009e3e80 : 0xffffff7f8b7918e2 
0xffffff81009e3ed0 : 0xffffff7f8b78f8a5 
0xffffff81009e3ef0 : 0xffffff800a4467a8 
0xffffff81009e3f30 : 0xffffff800a4452aa 
0xffffff81009e3f80 : 0xffffff800a4453d9 
0xffffff81009e3fb0 : 0xffffff800a0b2977 
      Kernel Extensions in backtrace:
         com.apple.iokit.IOSurface(86.0.4)[C1007599-42D0-32FF-9F2F-C63F4E6C1DEB]@0xffffff7f8b119000->0xffffff7f8b12afff
         com.apple.NVDAResman(8.1)[A26D2A3D-C06F-3A0F-BCFF-901A98C93C3D]@0xffffff7f8a6d9000->0xffffff7f8a9e6fff
            dependency: com.apple.iokit.IOPCIFamily(2.7.3)[1D668879-BEF8-3C58-ABFE-FAC6B3E9A292]@0xffffff7f8a644000
            dependency: com.apple.iokit.IONDRVSupport(2.3.7)[38C214C0-83C8-3594-8A4C-DC6AC3FEC163]@0xffffff7f8a6c5000
            dependency: com.apple.iokit.IOGraphicsFamily(2.3.7)[74E3E50F-E50A-3073-8C96-06F854292A91]@0xffffff7f8a682000
         com.apple.GeForce(8.1)[A15BB65E-3501-340F-87CB-2FD2BAD33E35]@0xffffff7f8b789000->0xffffff7f8b855fff
            dependency: com.apple.NVDAResman(8.1.0)[A26D2A3D-C06F-3A0F-BCFF-901A98C93C3D]@0xffffff7f8a6d9000
            dependency: com.apple.iokit.IONDRVSupport(2.3.7)[38C214C0-83C8-3594-8A4C-DC6AC3FEC163]@0xffffff7f8a6c5000
            dependency: com.apple.iokit.IOPCIFamily(2.7.3)[1D668879-BEF8-3C58-ABFE-FAC6B3E9A292]@0xffffff7f8a644000
            dependency: com.apple.iokit.IOGraphicsFamily(2.3.7)[74E3E50F-E50A-3073-8C96-06F854292A91]@0xffffff7f8a682000

BSD process name corresponding to current thread: kernel_task

Mac OS version:
12D78

Kernel version:
Darwin Kernel Version 12.3.0: Sun Jan  6 22:37:10 PST 2013; root:xnu-2050.22.13~1/RELEASE_X86_64
Kernel UUID: [redacted]
Kernel slide:     0x0000000009e00000
Kernel text base: 0xffffff800a000000
System model name: MacPro4,1 (Mac-F221BEC8)

Amazon links on this page help support running The Work Life.

First Boardgame

We are avid viewers of TableTop with Wil Wheaton. The show’s premise is to present a table top game or games in each episode. Each show plays through a game and provides a flavour of what to expect – alongside banter, mirth, and snappy editing to keep the programme flowing.

Megan recently compiled and narrowed down the list of table top games we had watched. We wanted a game that could be played by two people but would scale up to four or six. We also wanted a simpler game – as compared to some of the fairly involved games we had seen.

We ended up getting Ticket to Ride European Edition.

Today we played our first game.

Megan's first move in Ticket to Ride

Megan’s first move in Ticket to Ride

Graham's first move in Ticket to Ride

Graham’s first move in Ticket to Ride

Our first completed game in Ticket to Ride

Our first completed game in Ticket to Ride

It was great fun. The rules took only a few minutes to grasp and I can see that this game has a lot of scope and many hours of playing ahead.

Amazon links on this page help support running The Work Life.