Monday, 22 September 2008

Exesoft ToyBox

I was messing around in physics this morning getting bored while copying out some stuff in fiberoptics and I wrote a little crystal ball program in python (in my book). The moment I got home I wrote it up and decided to bundle it with the random story generator and a Work in Progress, AutoRap. The crystal ball is a really simple console application like the story generator and auto rap. CrystalBall works by randomly choosing a yes/no type answer from a list and displaying it after user input. We/I might make some nice little interfaces for theese little apps. I hope to release theese soon and add to them in the future. The ExeSoft Toy Box will be updated when we take breaks from the larger apps and do some quick collab code.


Sunday, 21 September 2008

ShinyPic is here!

After many tiresome hours of bugfixing, we at ExeSoft finally come bearing The Shiniest Image Viewer In The Known Universe, ExeSoft ShinyPic version 1.0

Download links can be found at Enjoy!

Saturday, 20 September 2008

Finishing touches...

We're now getting incredibly close to the final release of ShinyPic. All the features have been implemented, and all that remains is to polish a few of them up and hunt for bugs. The first few test compiles have been very successful, and I've managed to make a nifty little icon for the program in GIMP.

If all goes to plan, installer files and source code should be going up by the end of the weekend!

Friday, 19 September 2008

So we took a break...

David and I got together earlier on today and did a little small collaboration on a program. It is a fun little thing that generates random sentences and paragraphs from a set of words. I will try and create a little program that will allow you to add your own sentence structures and add your own words. We may make a simple GUI for it but at the moment it is a console based thing that allows saving to a file. To find the code click here > < Have a play around with it and feel free to post funny paragraphs in the comments section. Right now we are back to work on getting ShinyPic ready for the first release.


Wednesday, 17 September 2008


A sneak peak at one of my wallpaper designs for ShinyPic. I hope David manages to find a nice way of getting a nice customisable interface :P. I am after all obsessed with graphics and the visual element of things. I may post a few more designs closer to the first release or I may just let you discover them if they are included.

This wallpaper was made in Blender (, I made some nice blue shapes and then messed the hell outta them with blenders awesome nodes. I may make a tutorial on messing with nodes sometime (probably wont) for anyone who has an interest. Meanwhile I gotta go for now and sleep on some wallpaper ideas.

Tuesday, 16 September 2008

And then... there was a loading bar!

This turned out to be incredibly easy to code, and so only really took me about 30 minutes. It's displayed every time you select a different directory to view images from, and gives a much better visual representation of the loading process than the old system did (where it printed the name of the image being loaded to the separate command-line window). At the moment, it moves up by the same amount for every image, but soon I'll make it so that larger images cover a greater amount of bar-space than smaller images (so that it's more accurate). Much thankingness to James for making the bar image!

Monday, 15 September 2008

Building a Basic Browser

Having almost completed the full-size viewer, I decided now would be a good time to start work on the directory picker (for selecting a directory to load images from). So far, I've made pretty good progress - you can browse directories by clicking to open a folder, or clicking "Move up" to move up a directory. Right-clicking on a folder selects it, and makes the program close the browser and load up the images from inside the folder. However, it's not all that aesthetically pleasing yet, as you'll see from the screenshot:

Don't worry though, as I'm hoping to polish it's appearance over the next few days, so soon it will be shiny.

More pressing are the bugs; for example, if a folder's name is too long it will go right of the edges of the window. Also, if a directory you're viewing has more than around 40 folders in it, many of them will be off the bottom of the screen - I'll be needing to implement some form of scrolling to resolve this. Both bugs are entirely fixable however, so we should be seeing the browser complete by the end of the week.

Sunday, 14 September 2008

Panning works, and I don't know why.

So there I was, hacking away at the keyboard, trying to make magic happen on-screen. Every approach I tried for panning gave incredibly strange results, often causing the image to fly off-screen as soon as I moved the mouse. My Slipslide 2 menu / ShinyPic grid view formula simply didn't want to work in this particular situation.

Irritated, I decided to slam out a quick death-or-glory mess to see what would happen. Well, it started fairly neat and orderly, but as I typed I kept thinking of random things to put in, and so the line got longer and longer and ended up with at least ten nested layers of brackets. Sniggering, I did a quick test run to see how buggered it would be.

And guess what? The code ran perfectly, and the panning was smooth and precise. It is at times like these where my usual response, "Oh shit", simply doesn't cover the magnitude of the situation. After a few seconds of pondering what to do instead, I opted for a more obscene word. Sadly, this was to no avail as pronunciation becomes somewhat impossible when your jaw is lost somewhere on the floor behind the computer-related spaghetti heap.

I have to say, this speaks volumes of my subconscious' programming skills. I never could have done it,anyway. Behold the majestic solution proposed by an unknown entity hiding somewhere within the back of my mind:

mouseoffsetx = ((float(self.screen.get_width()) / 2.0) - float(mousepos[0]))

centrex = (float(self.screen.get_width()) / 2.0) + (mouseoffsetx * ( ((float(self.scaledimage.get_width()) - float(self.screen.get_width()) ) / 2.0) / (float(self.screen.get_width() / 2.0) ) ))

mouseoffsety = ((float(self.screen.get_height()) / 2.0) - float(mousepos[1]))

centrey = (float(self.screen.get_height()) / 2.0) + (mouseoffsety * ( ((float(self.scaledimage.get_height()) - float(self.screen.get_height()) ) / 2.0) / (float(self.screen.get_height() / 2.0) ) ))

Ridiculous, no? Well, now I have to try and work out why that stuff works. If I'm not back in five months' time, send in a search party.

Getting closer...

The first release of ShinyPic is drawing ever nearer; all that remains is to add panning to the full-size viewer and add a way of letting the user choose a folder to load images from.

However, the former is turning into a major challenge as my standard mouse-scroll-system, which I used not only on the tile view but on the Slipslide 2 main menu, is causing strange glitches such as the image being drawn a good thirty pixels to left of where it probably should be. I'm thinking this is probably due to me using it to calculate the wrong position - the image centre position and the actual draw position are easy to confuse here.

With any luck, I'll get it fixed today and then start thinking about the latter of the two objectives: loading from a user-specified folder. For this, I may need to develop some sort of folder browser which is opened when the user clicks a button; however, I'm not certain how the browser will work or where to place the button. A few minutes ago I had the 'brilliant' idea of placing it at the same side as the text and keep it on the opposite side of the screen to the mouse so that it can never obscure any images, but this fantastic approach fell flat on its face seconds later when I realised that the user would therefore never be able to click it. So it's back to the drawing board on that one.

Thursday, 11 September 2008

Funky animation

Today's piece of new, shiny and awesomeful news is that the full-size image viewer is beginning to work! Now when you click on an image, it scales it up to fill the screen (this is animated, of course) and then enters a neat little redraw loop so you can view the image. Sadly there is no screenshot, as it's a bit difficult to take a screenshot of an animation. I'll post screenies of the full-screen viewer when it's working properly, however.

Now I just need to make it possible to close the view, and then add pan/zoom to it, and it'll be done! And so ends the shortest update in ExeSoft history. Yes, I'm feeling lazy right now.

Wednesday, 10 September 2008


And then there was awesome!

I know I've been forgetting to post updates here for a while, but I hope that this image will make up for it. As you can see, not only are images implemented but there is also alpha - so the images further from your mouse cursor will appear semi-transparent! Also, the text you see in the bottom right changes sides depending on where your mouse is so that it never obscures the image you're looking at.

What I'm now working on is the full-size image viewer - when you click an image, it will scale up to fill the screen and you can then pan and zoom all around it. However, this is currently proving somewhat... impossible. So I may take a while with this...

Sunday, 7 September 2008

Scroll on!

I've developed the SSSSSS (Sepcialised System for Super-Shiny Square Scaling) algorithm further, and it can now handle scrolling! To celebrate, I implemented scrolling in the original demo. So now, with the mouse on the far right of the screen you'll see the images on that side, and as you move the mouse left the grid will scroll to reveal those on the left!

As promised, the equation thingy has increased in complexity somewhat. In fact, it could probably do with a bit of tidying up. But here it is anyway, for your viewing pleasure:

You're probably best viewing this one full-size. Just click as always.
Tomorrow I intend to make this work with actual images (insert exclamation of shock here), so keep refreshing this page every few seconds!

Or I suppose you could just come back and check tomorrow.

Some Super-Shiny Square-Scaling!

Today, I present to you the result of much mathematical fiddling and error-induced pain. I have been working on the image gallery program I fell short of properly describing in the last post, and have created a system that displays a grid of images (white squares at the moment) which scale up as your mouse approaches. In the final program, the grid of images will also scroll with your mouse cursor, but that will be added later. For now, bask in the awesomeness of the algorithm I like to call "SSSSSS" (Specialised System for Super-Shiny Square Scaling):

If you like, you can take a look at the source code for this at However, it must be noted that the code is uncommented and incredibly messy, so I wouldn't advise trying to understand it.

The basic scaling algorithm is as follows:
Mx = Mouse x-position

My = Mouse y-position
Cx = Centre of the tile (x-axis)
Cy = Centre of the tile (y-axis)

Tx = Tile size (x-axis)
Ty = Tile size (y-axis)

Click on the image to view it full-size as always.
As you can see, the scale factor must be in range 1.0 <= x <= 2.0, so it's necessary to also add code that clips the scale factor at these values.
This is probably going to get a lot more complicated when I add scrolling...

Anyway, that's all for this update. Watch this space for more soon!

Saturday, 6 September 2008

So what's been happening?

Try not to jump in fright at this, but this is a new post.

Yes. Really.

It's been a while, hasn't it? Well, allow me to explain the post-nuclear-blast-esque silence. You may remember that I was being constantly attacked from all sides by the dreaded exams
as I wrote my last post. Well, they got worse, and I was soon spending a steadily increasing proportion of my time revising every day. Ultimately, all my non-school-related projects were all but forgotten, and Slipslide 2 was but a distant memory.

Thankfully, my revision was not in vain, as I got a 1 for every subject (1 = A, for those of you unfamiliar with our system)! However, Slipslide was left to gather dust for months, and it wasn't until I stumbled onto this page again a while ago that I remembered about it. In the time that passed between the hellish onslaught and my fateful rediscovery of the long-lost relic that is this blog, many events have taken place. Some were
exciting, some were intriguing, and some were nifty, and if you continue reading I shall elaborate on the most significant of them.

Firstly, I have begun learning C++, which is probably around 50 times more confusing than Python (yet 50 times more powerful at the same time). I've come some way with it, but it's unlikely I'll be doing anything spiffy with it for a good while as there's a massive amount still to learn.

Back in the world of Python, a few friends and I recently started what seemed like an incredibly simple project - a program that lets you make text adventure games in Python using a node-based system - but has grown in complexity as all the little things that you normally take for granted (text boxes, for example) have proven near-impossible to code properly, and the code structure (originally completely modal, with GUI elements designed to be usable by other programs) has melted together to form a big ugly monstrosity that will soon be near-impossible to safely edit. So we're going to have to consider redesigning the whole thing, possibly coding GUI elements co
mpletely separately and adding them in when the whole thing's finished. Whatever approach we take, it's definitely going to involve a friggin' massive flowchart.

Now, while this project is being semi-restarted, I have started on a little side-project - a Python-based image gallery program not unlike the Firefox PicLe
ns extension, but in 2D and with file info display and a full-size image viewer (with zooming and panning). It's proving to be challenging so far, but I have managed to get it to load images, resize them to fit into tiles, draw them to the screen in a grid pattern and display the details for whichever image you hover the mouse cursor over. Next comes some spiffy mouse-driven scrolling and scaling effects which can't really be described through text but are illustrated in my crude drawing on the right (click to view it properly). Admittedly, it doesn't do much better at conveying what I mean. But all will become clear when I post screenshots if it in action when I get it working!