will

Where there is a Will

Will McGugan's Blog

I am a freelance software engineer living in Edinburgh.

I post mostly about tech (particularly Python) and photography.

Background: A code monkey

I spent another afternoon working on my pie chart project. I'm using PyCairo to render labels over the chart render. The tricky part was finding the position at the center of each pie segment to render the label over. There's no way of retrieving that information from Povray, so I had to do the math myself and calculate the coordinates manually. Fortunately I had a 3D math module that I was intimately familiar with, having written it just last year (its always gratifying to re-use code for a new purpose)!

When writing the image wrapping script, I came across a difference between Firefox and Opera. Basically, when there are small floated divs in a vertical stack, the text to the right will be aligned to the topmost div in Firefox, even if the divs underneath extend farther than the topmost div. Opera handles this situation better and places the text after the maximum extents of the floated divs. Take the following HTML:

<div style="float:left;clear:left;width:100;height:8px;background-color:#55f;" ></div>

<div style="float:left;clear:left;width:120;height:8px;background-color:#66f;" ></div>

<div style="float:left;clear:left;width:140;height:8px;background-color:#77f;" ></div>

<div style="float:left;clear:left;width:160;height:8px;background-color:#88f;" ></div> continue reading…

After posting my latest pie chart image, it occurred to me that it would be pretty cool if the text flowed around the edge of the pie chart image rather than around a rectangle. This is not something that can be done simply with HTML / CSS, but it can be done by breaking the images up in to horizontal slices so that they extend only to the edge of the image, rather than to the absolute border.

If I googled for it, I suspect I could find tools to do this for me -- but where is the fun in that? Instead, I wrote a Python script that uses the Python Image Library to scan an image and output HTML that will allow text to wrap smoothing around the image. No additional images are produced, because the 'slicing' is done with CSS to select the part of the original image that is seen. continue reading…

I've been doing a little more work on my 3D pie-chart renderer. I've added beveling and tweaked colors to a point where I can render charts that -- in my opinion -- are a better quality than those produced from Apple's Numbers. Next step is to add labels over the main image. Povray does support rendering of True Type Fonts, but it is a 2D overlay that I'm looking for (not 3D text), so I plan to use PyCairo to render the labels. Once I've perfected the chart renderer I can build a polished web interface, and a web service for the render queue. All in Python, of course!

Since I've moved to Linux as my primary desktop (I know, about time), I've been motivated in porting some of my old software. This shouldn't be too difficult, since I try to work in as platform agnostic manner as possible, and when I do use a platform specific API I keep it nice and modular. Food File is probably the most popular app I ever created, although only since I made it free. As a commercial app, it didn't do to well, probably because it didn't get noticed amongst all the diet / food applications for Windows out there, or possibly because I am lousy at marketing. continue reading…

One of the things that used to annoy me about working with CSS, is that I had a mental block about margin and padding. I could never recall which was which, because the two terms mean pretty much the same thing; an arbitrary space around text. Frankly I think the creators of CSS should have used have called them inner-margin and outer-margin, or inner-padding and outer-padding. I'm sure there is a good reason for using the terms margin and padding (I'm guessing its from typesetting nomenclature), but to me they feel arbitrary and may have well have been called bob and jane.

I've just spend a couple of hours dusting off an old project of mine, that involved generating pretty 3D pie charts by combining Mako templates with the Povray scene description language. I improved the image quality by enabling radiosity, and the end result is quite appealing (see below).

Now I'm thinking that there may be some people out there who would be prepared to pay to generate such images for websites or for print, and it wouldn't be too hard to extend the idea to other forms of chart, such as bar graphs. So, dear lazyweb, is there a big enough market in such a thing to warrant sinking my valuable spare time into?

I've released version 1.1.0 of Postmarkup. The main improvements are that it generates cleaner html, that doesn't include invisible div sections, and that it should also generate XHTML that validates (previous versions  could put block tags inside inline tags for some bbcode).

The basic interface is the same, so it should be a drop in replacement for most people. The  base class for tags has changed (but not significantly), so if you have any custom tags, it will require a little work to get them functional again. See postmarkup.py for example tags. continue reading…

Since I have some time on my hands, I've been doing a little work on Postmarkup - my BBCode module. I've made some significant improvements to the design which fixes a few issues and makes it easier to create new tags. To test it, I hacked together a simple web-app using CherryPy, which allows you to edit bbcode in the browser and see the resulting html update live -- with a little Ajax magic.

Please give it a try, and let me know if you can break it.

In building this, I've created a very rudimentary web service. I'm wondering if there is any practical use for such a thing...

It seems it is a good time to be a Python developer, after my last post I received a number of good leads. All before I had finished my CV.