Matrix Times is out now

To quote the App Store description:

Create a polygon with an outline and fill. When you’re happy with your shape, you can apply up to 3 transformations of any of these types:

– Rotation
– Translation
– Scaling
– Reflection
– Shearing

Watch the numbers in any of the 3 transformation matrices change as you control them with easy-to-use sliders and switches. Watch in real time as the shape changes, mirroring the preview of the transformation matrix.

My original graph area class was relatively simple, only drawing the shape based on the points given.

However, with the addition of custom reflection line locations, as well as an optional ‘ghost’ of the original shape to contrast with the transformed shape, the class quickly became much more complicated.

Attack of the Assembly Line (GMTK 48 Hour Game Jam)

We were given the challenge in this game jam to create a game that followed the theme ‘genre without mechanic’. We basically had to think of a genre, and remove an essential component of how that genre usually works. We decided to go for a platformer in which the player has no control of their movement. This was achieved by the player character being a robot’s head going along a conveyor belt in a factory. Over the course of the game, the player can use the treadmills as well as trigger springboards to launch themselves to the next body part as they gradually rebuild themselves piece by piece.

A web-based version of this game can be found on our team page, or embedded below.

Developer Blog: Matrix Times, an iOS App Demonstrating Matrix Transformations

A couple of days ago I decided that a good way to show my maths for graphics skills would be to produce an app that allows graphing of polygons. This wouldn’t be possible without understanding how to measure the size of the screen, and to control the drawing of points, lines and fills. So far I haven’t added the transformation matrices, but that won’t actually be as difficult as what I’ve done so far.

The first thing I did was learn how to override the draw function of the UIView class. A good introduction to this topic can be found on AppCoda, which suggests creating a custom UIView subclass called DemoView. In this class, the draw function is overridden to run functions that draw shapes using UIBezierPath objects. My class is called GraphArea and I based my polygon on their createTriangle() function, but added three more points.

Each point in the polygon obviously has an X and a Y value, so my control panel needed to have a UIStepper to control each value, and a UITextField to display them all. In my main ViewController file, I created outlets actions for my 12 steppers. Within their actions, the steppers run a function that basically takes all the stepper values and passes it to the GraphArea instance. Once the polygon was being displayed properly, I thought it would be useful to also draw a circle at each point so they’re easier to track. Once I did this, I thought it would be even better if all 6 points were colour coded, and these colours were matched by the control panel so you knew which point you were moving.

I added the ability to maximise the graph area so that you can get a better look at the shape. This involves changing the constant of the constraint that positions the control panel (which has a fixed height) against the bottom of the screen to a negative value equal to its height. I used UIView.animate to make the change a smooth sliding motion and, since the GraphArea is within a constrained UIScrollView which scales automatically, it has to scale accordingly.

Although the height becomes equal to the ViewController’s height, the width has to scale by the same amount. Otherwise the polygon would only scale in one direction, and stretch instead of ‘zooming in’. It took  a while to get this right, but it basically involves increasing the width by the same amount as the height increases.

This is all I have so far. Hopefully the transformation matrices will be as easy to implement as I think they’re going to be. Then I can try to do some 3D graphics, which will obviously involve projecting a 3D cube onto the 2D plane of the phone screen.

Sounds easy enough…

Development Blog: Pet Timer For iOS (C# & Visual Studio For Mac)

When I originally made my Pet Timer app, I made it with one pet in mind. Bunny Timer was my first iOS release, and after a few months I thought I’d create two separate versions. Bunny Timer FREE (back when Apple allowed apps with the word ‘FREE’ in the title) would have basic functionality, while the full paid version of Bunny Timer would have more features and options.

To attract more users who might prefer other users who might prefer another pet, I created Dog Timer and Cat Timer, which both had their own free and a paid version. This left me with a total of six apps with very similar features. I eventually stopped testing each of these six apps for bugs, as I was focusing all my energy on my newer projects.

That’s why I decided to remove all six from the App Store, and do the sensible thing.

I’m creating one unified Pet Timer app for iOS, and I’ll be packing as many of the old featueres into it as I can.

This will be my first iOS app writing C# in what was once Xamarin Studio (now Visual Studio For Mac). Since I created the unified Android version of Pet Timer using this IDE, I should be able to reuse most of the code logic. That was my plan, but almost immediately I ran into a roadblock. Then I ran into another roadblock.

The first roadblock was the Xamarin iOS Designer. While it works perfectly well (provided you have Xcode installed) for dragging and dropping items from the Toolbox, the problem is creating constraints. For whatever reason, my version of Visual Studio didn’t have any way to create constraints other than adding the ‘recommended’ constraints.

After trying and failing to get these to work as needed, I looked on the Xamarin Forums where someone basically said don’t bother using the Xamarin iOS Designer for constraints. Instead they said to use Xcode, which is great because that’s what I’m used to. I created my entire menu UIViewController in Xcode, saved the file and went back to Visual Studio.

That’s when the second, much more difficult roadblock occurred.

I went to ViewController.cs and started typing the name of the label that shows the hours a user has selected. Visual Studio autocompleted the name, showing it was aware of the identifier I had set in Xcode. In ViewDidLoad I wrote a simple delegate that would handle when the user interacted with the UIStepper for hours:

hoursStepper.ValueChanged += delegate {hoursLabel.Text = hoursStepper.Value.ToString();};

This was a very simple thing to request, and yet when I built and ran the solution, nothing would happen. The UIStepper was aware of its minimum value (zero) as the minus button would grey out when it reached that value. But the label remained unchanged. I searched for a Xamarin or StackOverflow forum to help me, but had no luck.

As seems to happen very often when using Xamarin and Visual Studio, I went for the nuclear option. I created an entirely new Xamarin.iOS project, put a label on it, gave it an identifier, and set its value in ViewDidLoad(). That was successful, which made me think I could just import the old Main.Storyboard I created in Xcode and have that work, too.

I was mistaken.

However, I had the idea to delete the last character of the identifier, changing ‘hoursLabel’ to ‘hoursLabe’, and saving Main.Storyboard. Lo and behold, this identifier would autocomplete in ViewController.cs, and would respond to UIStepper changes by the user. I had to do this for all identifiers, and then change their names back to their original names.

TL;DR: Xamarin iOS Designer isn’t great for creating constraints and sometimes you’ve got to modify identifiers just so they’ll respond to basic events!

Pet Timer Now Has 8 Languages… Was Google Translate a Good Idea?!

Click An Image To Enlarge!

Flickr Album Gallery Powered By: WP Frank

This is my first post on this blog as myself: the developer that writes all the apps featured on this website. I thought now was a good time to write as myself, as it was solely my idea to bring new languages to Pet Timer on Android. How many languages, I hear you ask? There are now 4 new languages in the Amazon Appstore description, and there are 7 new languages in the app itself.

The way I’ve done these translations will be far from perfect, because to save time and money I used Google Translate.

Sorry in advance to the non-English speakers who download the app.

I tested Google Translate in the only way a person who only speaks one language (and doesn’t have any multilingual friends) can: by translating its foreign translations back into English. I know this isn’t a perfect technique, but I thought that if any major confusing translations occurred, in theory they would end up nonsensical when translated back.

The translations came back into English making a surprising amount of sense. Occasionally a word or phrase sounded a bit awkward, so I altered the source English that I translated the next time. Hopefully I did an okay job using Google Translate, but I know there will be mistakes and confusing mistranslations. That’s why I decided to put a button on the language selection page that allows users to quickly report translations that don’t make sense.

One day I hope to be able to employ people that competently translate my apps. Not only will there be much more certainty that translations actually make sense, but those people would be compensated for their efforts. I am yet to make enough money selling my apps for that, but I look forward to a time when I can. Thanks in advance to anyone who submits corrections to my translations. The time you volunteer makes my apps better, and I’m truly grateful.

Google Translate has helped me to translate 28 words and phrases in Pet Timer into 7 foreign languages. That makes nearly 200 words and phrases that are now accessible to more people.

When I decided to use Google Translate, I definitely felt like the results would be embarrassing, and I’m sure I’ll notice mistranslations that convey completely the wrong ideas. But the real reason I made this decision was a simple one: I find it embarrassing to sell apps worldwide that are only in English.

Especially online, English is an incredibly dominant language.

Not everyone can afford to learn English, and I want to make apps for those people.

5 Star Review from (Bunny Mindfulness)

Read the full review at now!

We are very happy to report a 5 star rating from

Our overall score was 5 out of 5, but so were our individual scores for all of their categories (Quality, Education, Entertainment, Value and Child-Friendliness).

This is our first ever in-depth review, and we could not be happier that reviewer Sandra Fleming did not have any complaints about the app.

Here are a few of our favourite quotes from the review.

  1. Quality

Bunny Mindfulness is a high quality app that performs like a dream.


Children and adults alike can learn stress management and reduce anxiety by practicing breathing control with Bunny Mindfulness.


The main bunny character is cute, and most children will find the store points-purchasing system to be rewarding and motivating.


Bunny Mindfulness costs just ninety-nine cents in the App Store, which is excellent value.

Child friendly

This app is very child-friendly.

Read the full review at now!

Click An Image To Enlarge!

Flickr Album Gallery Powered By: WP Frank

Pet Timer for Android now has 5 alert sounds!

What’s new in version 1.1

  • Pet Timer now has 4 new alert sounds: Beep, Click, Pop and Scifi!
  • Pet Timer now remembers your favourite pet, your chosen duration and your chosen alert sound even if you close the app!
  • Fixed a bug that made seconds display :010 for 10, when only numbers under 10 should have a leading zero
  • Fixed a bug that caused the ‘timer done’ alert pop up over and over again