Goat 1000 home

Welcome to Goat 1000 - this is where you'll find some of the bits and pieces of software that I cobble together for fun. Please feel free to download them and try them out. All this stuff is freeware, no guarantee that it will do anything, etc. (though if it does fail to do anything, please let me know!)

RSS Feed



JPEG Saver 4.12

This new version of JPEG Saver adds a feature that people have been asking me about for years and another feature that nobody has ever asked me about, as far as I can remember. There are also a few bugs fixed in this version, but since I discovered them myself I don't think they are earth-shattering.

The first new feature should be obvious to long-time users as soon as you open up the configuration dialog. The “All” and “None” buttons that were there for enabling and disabling all the transitions are gone, replaced by a slider labelled “Speed”. The slider provides some control over how fast the transitions are, with five options for multiplying the default speed: ×1/2; ×2/3; ×1 (the default speed); ×1.5; and ×2. You can see the effect of these options on all the transitions in the preview window on the dialog. All of the transitions are affected equally by the slider setting - there is still no way to slow down or speed up individual transitions.

JPEG Saver 4.12 main configuration options The updated main tab

The functions of the removed “All” and “None” buttons have moved to the three-state checkbox next to the “Transitions” label above the list. The thick black dot in the checkbox means some of the transitions are enabled; clicking it will disable them all and clear the checkbox. This type of checkbox has been around for years, but I'm still not used to using it.

Read more . . .


SVGGraph 2.15

The new version 2.15 of SVGGraph contains three new graph types and some substantial internal changes to the existing grid-based graphs. These changes are there to support drawing a second Y-axis on the right hand side of the bar, line and scatter graphs.

The new graph types are all variations on the pie graph. The donut graph is a pie graph with a hole in the middle where you can put an optional label. There is an option for how large the hole is, but apart from that it behaves like a normal pie graph. In case you are wondering, I spelled it “donut” instead of “doughnut” because of the shorter spelling, making the class and filename shorter too.


The polar area graph is a pie graph where the angle of each slice remains constant, with the value represented by the area of the slice instead. One advantage of this type of graph over a standard pie graph is that zero values are visible as gaps in the graph. The example above shows that my dough recipe has no badger in it, which could be quite reassuring.

Read more . . .


JPEG Saver 4.11.2

Here's another minor update to JPEG Saver, fixing a couple of bugs that were reported to me and some other things that I noticed while testing and using it myself.

The most glaring bug fixed in this version is one that would rotate images incorrectly, due to my misunderstanding some of the EXIF specification. The details of how the image should be rotated to appear the right way up on the screen are stored as a field in the image's EXIF data. If JPEG Saver came across an image without an orientation field in the main block of EXIF data, it would look in the next EXIF block for the field (if there was a second block). The second block is for details about the thumbnail image that is sometimes embedded in the main image, and JPEG Saver was taking the orientation from here and rotating the main image the way that the thumbnail image should be rotated instead of leaving it unrotated. Don't ask me why the thumbnail should have a different orientation from the main image, but it can happen and now JPEG Saver should be able to cope with it.

The first bug has been around for a long time, but the second was fairly new. When JPEG Saver happened to choose the same image to display twice in a row, it was not restarting the timer to load the next image. This was because the image loading code found that the image to be loaded was already in memory so didn't bother to load it again, and also didn't bother telling the main thread that the image was loaded. This meant that the main thread sat waiting for a message that never arrived and the images stopped changing.

Read more . . .

Older news . . .


Contact me

If you want to contact me, my email address is at the bottom of the Readme.txt file or PDF in any of the zip files, or in the source of Javascript files, or you could try to figure it out from a combination of my name, (graham) this domain name (goat1000.com) and the @ sign.

About this site

All pages on this site are written in PHP. Syntax highlighting is performed using GeSHi. Titles and sub-titles use the Franchise font, with CSS @font-face files generated by the Font Squirrel @font-face generator.

Use of Cookies

This site uses cookies for usage statistics, adverts and the sharing buttons. If you disable cookies in your browser, the adverts you see might be less relevant to you and my statistics might be less accurate, but apart from that the site should work fine.

If you are wondering what the point of that paragraph was, please take a look at the EU Cookie Directive site.

Site search

The search box on this web site (“Search Box”) is powered by Google Inc (“Google”). You acknowledge and agree that Google's privacy policy (located at http://www.google.co.uk/privacy.html) shall apply to your use of the Search Box and by using the Search Box you consent to Google using your personal data in accordance with its privacy policy.

Updated 14/04/2014.