Macro Photo part 2!

empty

I’ve been playing around with macro photography lately, and today, I decided to try to make an angled approach the top side of a SSD.

In order to maximize image quality, I removed as much external lights as possble (read: dark room), and added my own light sources. I took a few sample shots at full auto (no flash) setting to get a rough idea of what the correct exposure was, then switched to manual mode and adjusted it slightly further. I ended up at 0.4s at f/2.8 (ISO 200). I wanted a consistent exposure setting in order to prevent the individual photos from looking too different. I also used a tripod, which is mandatory for this kind of photography.

The field of focus is less than 1mm, which is really small to say the least. I ended up having to take 108 photographs to cover the entire area I wanted to photograph; And I still missed a few spots. :(

Macro Photo, single frame

Can you see the tiny focus field? Try looking to the top left of the SATA connector.

This is one of the 108 photos. The ‘front to back’ direction of the image is roughly 7cm (2.8″), while the ‘left to right’ direction is roughly 4cm (1.6″).

Here’s a video to give an even better impression of the scale:

Now that I have all these 108 photos, I need to do something called ‘focus stacking’. This can be done easily in Adobe Photoshop by following this guide. That works in most cases; But in some cases, such as this, Photoshop is unable to auto-align the photos correctly. In which case one may want to consider more specialized software. However, out of curiosity, I tried to have Photoshop stack these 108 18MegaPixel photographs anyway. It exhausted my 32GB of RAM (!) about 1/3 through the auto-blending, then at about 70% said it was unable to perform the blending because my 100GB-ish scratch disk was full. No go on Photoshop for this kind of heavy stacking, in other words; Over to a trial of Zerene Stacker!

Stacking in progress

Zerene Stacker showing work in progress

Since Zerene Stacker only supports TIF and JPG input files, I had to export my DNG’s as TIF to get this to work. After loading the TIF files into the program, I selected Stack -> “Align & Stack All (PMAX)”. It started working hard. Very hard. It kept on working for a couple of minutes, showing progress along the way. It never exceeded 3GB memory consumption.

And the result can be seen below.

Composite image of 108 photographs. I might have overexposed it slightly.

The photographs were taken with a Canon EOS 60D and a Canon EF100mm f/2.8L Macro IS USM lens at approx. 30cm distance.

Anarchy Online server merge and updates to tools & stuff

Anarchy Online merged two live and one previously discontinued dimension yesterday, February 26th, into one new live dimension called Rubi-Ka. More information here, here, here and here. The announced downtime was 24 hours, but the servers came back up after about 11 hours – around 23:00 local time.

This is roughly what happened next:

  • I patched my local client
  • I started the VM which I use for RDB patch history and patched that client, then archived the data accordingly
  • Logged into several bot accounts to add them to the merge queue
  • Logged into my main account to add it to the merge queue
  • Updated my private items database with the latest patch. Went smoothly!
  • Updated aodevs.com icon/texture repository with 18.6 content
  • Logged into roughly 15 essential bot characters
  • Updated Helpbot to the latest version of VhaBot (Thank you Remco!), made necessary configuration changes, and launched it
  • Tower Tracking
    • Spent 15 minutes finding the president of my tower tracking org, to be able to promote the bot to a rank where it can see all tower-related messages
    • Configured and started the tower tracking bot
  • Committed changes to Bot# to make it compatible with the new live dimension
  • Updated Itemsbot to the latest development version of Bot# (that’s a full year in one sweep)

And that’s where it began going wrong. Everything seemed to be in order, but the bot would forget changes to per-plugin settings upon next restart. I had to start the bot with the Visual Studio debugger to track down the issue. I didn’t get any exceptions, nor any log output indicating anything was wrong. I began tracking code as it executed, line for line. After much longer time than it should have been, it hit me:

private string GetString(Type plugin, string key)
{
	var pc = plugin.GetPluginAttribute();
	string storeKey = pc.Name;
	storeKey += ":" + key;

	StringCacheEntry sce;
	if (this.configCache.TryGetValue(storeKey, out sce))
	{
		if (sce.Age.TotalSeconds < 60)
		{
			return sce.Value;
		}
	}

	StringConfigEntry confEntry = StringConfigEntry.TryFind(storeKey);
	if (confEntry == null)
	{
		throw new Exception("Key does not exist", new Exception(String.Format("plugin: {0}\r\nkey:{1}", plugin.FullName, key)));
	}
	this.SetString(plugin, key, sce.Value, true);
	return sce.Value;
}

Doh. It’s a result of bad re-factoring.  At some point in the past dozen revisions, I had made changes to the first part of this method and forgot to update the rest of it.
This code will try to populate the variable named ‘sce’ with cache information. If that succeeds *and* the information is less than 60 seconds old, it will return the cached value. Otherwise, it will fetch information from the database, and update the cache.

However, this last step is where it goes wrong. It’s trying to populate the cache, and return a value, using the ‘sce’ variable. This means it will return an outdated value (best case), or throw a NullException because the ‘sce’ variable wasn’t set at all. Either way, that’s bad. Very bad.
Additionally, the Bot# configuration UI use the TryGetString() method, which is a try/catch wrapper to GetString(), which returns false (“nope, couldn’t retrieve that setting!”) upon any thrown exception; without logging.
I fixed these problems and added logging to TryGetString(), recompiled, updated Itemsbot again: Works like a charm!

Then, I continued on with updating the Central Items DataBase to patch 18.6.0 and fixing Demoder’s PlanetMap Viewer to be compatible with 18.6.0 (yet to be tested & released) before calling it a night around 02:00 in the morning.

Macro Photography!

I’ve been playing around with my new 100mm macro lens lately, and I must say I find the concept quite interesting. Macro photography tends to have a narrow field of focus by nature, and in that regard, I tried something which is called ‘Focus Stacking‘.

This is a 1024 x 586 px crop from the original photo:

Macro Photography

Fireworks 2012

Red Fireworks over Tree_MG_5450.jpg_MG_5280.jpg_MG_5473.jpg_MG_5330.jpg_MG_5245.jpg
_MG_5578.jpg_MG_5246.jpg_MG_5342.jpg_MG_5275.jpg_MG_5284.jpg

Fireworks 2012, a set on Flickr.

I tried taking photos of fireworks for the first time, and this is what I caught.

FreeBSD 9 file server: Wiggum version 2.0

I’ve recently upgraded Wiggum (my file server) from FreeBSD 8.0 to FreeBSD 9.0.  Since I had made some mistakes when originally setting up Wiggum two years ago, I went for a complete reinstall – and recreation of the zpools. This blog entry is a step-by-step guide for how I did the initial installation and setup.

[Read more...]

FreeBSD: Filesystem Performance – Results

freebsd-logo1-small

These are the results of this weekends benchmarking! I’ve tested a single-drive UFS2 file system, and compared it to several ZFS configurations (single and multi-drive). For all the juicy details on configuration and testing methods, please see FreeBSD: Filesystem Performance – The Setup.

[Read more...]

FreeBSD: Filesystem Performance – The Setup

I’ve run a series of benchmarks on my prototyping server to determine performance differences between a variety of configurations:

  • Single drive UFS2
  • Single drive ZFS
  • ZFS 3-way mirror
  • ZFS stripe across 3 drives
  • ZFS RaidZ across 3 drives
  • ZFS RaidZ across 3 drives, plus a SSD as cache.

All the details on configuration and benchmark methods are below!
[Read more...]

Follow

Get every new post delivered to your Inbox.

Join 27 other followers