I just created this video that demonstrates Quick Quote Free’s features, for anyone who was unsure about it.
I’ve just published a new, free version of Quick Quote to Google Play. It’s not showing up quite yet, as it can take a couple of hours for it to filter through the system. But when it does, please go and try it out!
The paid version, which is now called Quick Quote Professional, has not exactly been a resounding commercial success, so far only selling a single copy. I put this down largely to the lack of a free version, to let people try it out. There are a couple of competing apps that do have free versions, and I’m confident that my product is as good, if not better. So now, a free version! There are adverts, and a couple of feature limitations – the gap between the versions will become wider as I release the updates I have planned.
I could have done with releasing this earlier, but I’ve been away for a couple of weeks. During that time, I worked on an Android version of the fishing jam game I made a couple of months ago. There’s a screenshot below. I look forward to finishing that up soon, but so many projects are calling to me at the moment. It’s good to be busy!
I’ll try to keep this site better updated with what I’m doing. I have a tendency to get carried away working on things, and never tell anyone!
Just a quick post, because this is something that wasn’t obvious. It’s quite common to have multiple versions of an app, usually a paid version and a free version. In order to make the transition from the free to the paid version as easy as possible, you want to have the data shared between the apps.
The first thing you need to do is declare the same ‘sharedUserId‘ in the app manifest for both apps. They also both need to be signed using the same key – but you’ll probably be using the same key anyway. You need to set the key before publishing, otherwise you can have problems.
However, even doing so, you won’t see the same data. Whichever app is the ‘child’ will need to use Context.createPackageContext() with the package name for the ‘parent’. Using this Context, the child can then read and write files as if it were the parent.
For a while now, WordPress has included features for organising and displaying images as a gallery. However, I noticed that the built-in carousel I was using wasn’t resizing with the rest of the page. I couldn’t easily find any existing plugins that would do what I wanted, so I decided to write my own.
The source for this project, dubbed ‘AtkinsSlider’ because I have no imagination, is on GitHub.
My goals were as follows:
- It must make use of WordPress’s gallery feature. It has a pleasant admin interface already, and building my own would be too time-consuming.
- Integrate a lightbox, so clicking thumbnails will display the full image without leaving the page.
- It should animate between the images over time.
- If the mouse cursor is over the slider, pause the animation. Websites that don’t give you long enough to look at a slide are very frustrating.
- Have dots that let you jump to a specific slide.
For the lightbox part, I decided to use Lightbox2, but of course there are many lightbox scripts available.
The WordPress documentation is generally pretty useful, but information about the gallery in particular is pretty lacking. Fortunately, the Jetpack plugin does some work with galleries, so I could look through its source code and figure things out, using some experimentation.
The filters I used are as follows:
- By default, the gallery puts a <style> tag just before the gallery HTML. By returning false to this filter, you can prevent this.
- This is the place to put your wp_enqueue_sript() and wp_enqueue_style() calls, so that these scripts and styles are only included in pages with a gallery.
- This is passed the HTML for the beginning of the gallery, including the <style> tag if you don’t return false to use_default_gallery_style. I simply used it to increment a ‘gallery index’.
- This is called for each image in the gallery, with the HTML for the gallery entry and an ID. Gallery items are actually stored as posts in WordPress’s database, so you use get_post(ID) to get the image information. The image caption is stored as the ‘post excerpt’. What I do here is add the caption as the <a>’s title attribute, and set the ‘data-lightbox’ attribute to ‘gallery-’ plus the gallery index. This is just so the lightbox behaves correctly – Lightbox2 uses the title as the caption, and groups images with the same ‘data-lightbox’ attribute together.
- Create the caption and ‘dots’ html
- Hide the existing captions
- Resize the image thumbnails to the full images
- Define a function to animate to a given slide
- Set-up an interval to switch the slide after a given delay.
- Finally, hook-up mouseEnter and mouseLeave events, so that the animation stops hen you hover over the slider, and starts again when you leave it.
The CSS involves some tricks. We want the gallery to maintain its aspect ratio, and images should be centred.
Keeping an aspect ratio on an element can be accomplished by setting its height to 0, and its padding-bottom to a percentage. For instance, setting it to 75% will make the element’s height 3/4s of its width.
Images are kept centred horizontally with a ‘text-align: center’ declaration on the containing element. I attempted to vertically centre them too, but this proved more troublesome. If you set an element to display: table-cell, you can then you vertical-align: middle – this does centre the image, but images that are too tall will now overflow rather than resizing.
A second way of centring images is to instead set them as the background-image of their container. Using background-size: contain, the image will shrink to fit its element. However, this does not work in IE8 and below. In the end, I decided having wide images align to the top of the slider was not a problem.
The plugin code, again available on GitHub, requires manual tweaking if you wish to change the timings or the size, etc. As it was primarily for my own use, I did not spend time including a settings page. Hopefully though, it will prove useful for you either to use directly, or just to see how the gallery filters work.
So, a couple of months ago I was given an idea for an Android app. As I’d not done native Android development before, I started with a small part of it, which involved calculating a quote by entering quantities for various items. At some point, it occurred to me that it made sense as a stand-alone application, and on the 28th of August I officially split it off into a new project, Quick Quote. (Still a work in progress, so there will be some slight differences in appearance in the released version.)
Quick Quote is an Android application that lets you quickly produce quotes, estimtes and invoices, and then save them for later or share them, such as via email. Create quotable items in advance, then when it’s time to calculate a quote, simply choose which items and how many. You can see more screenshots on the Quick Quote page.
Working on an application is very different from a game. In some ways it’s been refreshing – I can make a list of what needs to be done, and know that when that list is complete, so is the app. Games are much less certain, and something you work on for months can turn-out to be no good. There’s also the issue of competition; games all effectively compete with each other, whereas I could not find any other apps that already do what Quick Quote does, which feels more secure. In addition, apps seem to suffer less from the race-to-the-bottom and expectations of being free that mobile games do.
Overall, I’m pleased with what I’ve accomlished, and it’ very satisfying. I’m not fully decided on what I’ll work on next, as that will partly depend on how well this goes. There are a couple of extra features I’m considering adding (but am avoiding doing so until I know it’s worth the time.) As something that took a little over a month, it’s not the end of the world if it doesn’t sell. It’s been a learning experience, at any rate.
This marks my second attempt at making game music, though my first attempt was pretty bad. I decided to give Terry Cavanagh’s recently-released Bosca Ceoil a go, and it’s so easy to use. I’d previously tried using Musagi, and while that has more features, I mostly just got confused by it all. Bosca on the other hand, is very limited, but in the most positive way – there’s very little there to be confusing and distracting. Pick a pre-existing instrument, draw some notes, and you’re away!
I hope to participate in the future contests – the great thing about it being weekly is, if it’s inconvenient one week, it’s not a problem. Maybe some time I’ll even win it! Plus, it’ll help me catch-up on 1GAM.
I’ve had this blog for two years now, so I thought I should probably create my own theme for it. So, here it is!
I’ll continue fiddling with it, but actually I’m pretty pleased with what I’ve got done in a day. Hooray!
Well, my updates aren’t getting any more frequent apparently! I’m a bit drifty at the moment, and really need to get on and finish something. Anything.
Firstly, the block game formerly known as DropPix is still ongoing. I started adding some more mechanics, such as disappearing floor tiles, and walls that smash when collided with. It feels like I’m never getting any nearer to completion, and I guess I’ve been avoiding it because of this.
I then bumped into a friend I hadn’t seen for a while, and he gave me a brilliant idea for a smartphone app which doesn’t exist. So that became my main project. Native Android app development is quite a different beast from games, and took a while to get into. I figured-out that a section of the app could be completed independently of the rest, so I worked on that for a week and got it done. The rest of it needs a bit of thought to figure-out the structure.
Then it was the 7dRTS competition! For lack of any better ideas, I decided to start on the remake of Goblin Fortress. There were a couple of things I wanted to try: test-driven development, and working with entities and components. Trying to learn new stuff made progress really slow, and in the end I was so busy that week with other things that development petered-out. I slipped into depression, and then had a horrible cold, which I’m finally getting over now.
Ayway, development on GobFort is finally coming along. Not long ago I finally got little goblins running between home, work and the campfire. Got a couple of bugs to fix, then reimplementing the rest of the stuff from the previous prototype, then new stuff! I’ve come-up with quite a list of things to include, hopefully I won’t take too long to get them in.
So, I’ve finished my MSJW entry, Beard Simulator. It’s more a toy than a game – you can mess around with my facial hair, but there’s no goal other than embarrassing me. You can go ahead and play it if you wish.
This means that I completed a game this month! Whoooo!
I had hoped to get facial recognition in, so that you could insert your own face, but in the end I was busier than I’d expected with other things. Still, it’s on my todo list to finish it up, with some kind of beard-themed life simulator surrounding the beard maintenance: Your beard determines your stats, which affect your job performance, social life, etc. So look out for that at some point! But don’t hold your breath.
So, it’s half-way through June, and things have been going pretty well!
Firstly, I’ve been working on my LD entry, DropPix. I’m giving it a Mayan/Aztec makeover, and hoping to get it released this month. Here’s a screenshot:
The second thing I want to mention is the Midsummer Jam Week, a game-jam being run by Folis this week. The theme is “growth”, and I decided to use it as an opportunity to finally start work on Beard SImulator 2013. I’ve been recording short videos to show how the game is going, which you can watch here. I’ve yet to tackle the really tricky stuff, like facial recognition, but I already have a big picture of my face with a fake beard you can shave off, so it’s off to a good start.
I’m not sure I’ve spoken about BeardSim before actually, so here’s the idea: You take a photo of your face, and your bard hair grows each game-day. There’s a shaving segment, and you he attributes based on how well-shaven you are: Attractiveness, Coolness, and Respectability. Gradually, you rise through the ranks of society with only your well-maintained facial hair. And then you share pictures of your bearded face to impress your friends with.