Tag: quick quote

Dev Log 20th of June 2015


This week I’ve finished implementing farm workers, apart from a couple of bugs. After hiring them, they’ll pick a job from what currently needs to be done: planting, harvesting, or carrying potatoes to the nearest barn. They’re the first thing to be animated, too. I’ve been quite enjoying watching them dash about to do my bidding!


Then next task is going to be writing a proper renderer. You can see above that there’s no depth sorting yet, but what you can’t see is that the game lets you zoom, but zooming produces a horrible blurry mess with gaps between tiles. Switching from SDL’s built-in renderer to a full OpenGL one will allow me to fix these things more easily, and generally make life easier.

Quick Quote navigation drawer

As for Quick Quote, I’ve started on the redesign work by replacing the slightly-awkward main menu with a navigation drawer, shown above. That’s only the start, but I think it already makes a big difference, both in terms of appearance and it being much easier to switch between screens.

Dev Log 12th of June 2015

Farming Game

Above you can see the untitled farming game I mentioned last week. It’s been going pretty well – I’m getting more comfortable writing in C/C++, so things are taking much less time. You can build fields, barns, and your headquarters; fields have a little state machine implemented for planting, growth and harvesting (not visible above as I’m in the middle of changing it); there’s a game clock with speed controls; and you can hire workers, who don’t yet do anything because I’m in the middle of writing their code.

In other news, I’ve recommenced work on the Quick Quote update that I stopped in February, while waiting for feedback on App 2. Firstly, by cleaning-up the Frankensteinian project set-up,where I had 3 separate Git repositories! It’s now a single repo, and builds using Gradle so I can use the Android support libraries. Secondly, by taking a good look at each screen and redesigning it. There are issues with usability, both from inexperience, and from adding extra features without properly considering how they should be used. Not everything is decided yet, especially with some unimplemented features unaccounted for, but I can make a start on tidying it up soon.


Dev Log 5th of December 2014

This week, it was back to work on Quick Quote. There are a bunch of improvements I want to make with how quotes are handled, such as adding customer details, and marking them as an invoice. On Monday, I added the ability to attach a note to a quote, which appears when the quote is sent to the customer. However, when starting on the other features, I ran into difficulties with the way quotes are stored internally. It’s caused me problems in the past, and I’ve finally decided to spend time reorganising things.

Technical Debt

“Technical Debt” is a measure of how awkward the code is to work with. When developing software, often you don’t fully understand a problem until you’ve already solved it once. At that point, the solution works so you move on, but it might be overly complicated, or slow, or less versatile than it should be. As this debt builds-up, development takes longer and certain tasks become impossible. Paying-off this debt takes time, but makes things easier in the long run.

In this case, when I began on Quick Quote, in my inexperience I decided to store quotes as XML files, rather than in a database, as it would be simpler. Up to a point, this has worked well – I’ve been able to gradually add new things to the quote files in a backwards-compatible way without having to do potentially messy database changes. The downside is that files have limited metadata – they have a name, and the last time they were edited, and not a lot else. For the saved-quote list to display or sort by anything else, such as whether the quote is an invoice, it would need to read in each file and process it, which could be very slow if there were a lot of quotes. This is the main reason I wanted to switch to a database, the other being that Android’s data-synchronisation system is poorly suited to working with files, so I’ll be in a better position to implement that in the future.

The biggest hurdle for this change is that everything needs to be converted the first time that Quick Quote launches, and that’s what I’ve spent the rest of this week on. It’s been slow work, as there are lots of things I’ve not done before, but it’ll all be useful for when I make future apps.

Ludum Dare

This weekend is Ludum Dare 31! LD is an online event where people create a game from scratch over a weekend. I’m hoping to participate, in which case I’ll have a new game for you by Monday. I’m hoping that the theme will be ‘Deep Space’, so I can make a rocketry game, but we’ll see.

New Quick Quote Website

For a while now, Quick Quote‘s web page has been essentially just a glorified blog post, on my very orange website here. So, this week I gave it a proper home: http://samatkins.co.uk/quick-quote/

I’m really pleased with how it’s turned-out. I’ve never considered myself to be much good at design, but I’ve had positive feedback about it. It’s also responsive, unlike the website I did for F!shing – as a mobile app, it was important that it would work well on smartphones, even more so than on desktop browsers.

The one thing that really sticks-out now is the trailer, which is quite old now and only demonstrates the free version’s features. I’ll be recording a new one after version 1.5 ships, sometime around the end of the year.

Quick Quote 1.4 Released

Quick Quote version 1.4 has now been submitted to Google Play, and will become available some time over the next 24 hours. Version 1.4 brings a couple of new features, and some general improvements. So, what’s new?

Both Free and Professional now have an About screen, which links to this site and the various open-source libraries used by Quick Quote. This isn’t a big thing, but it’s good to have.

All the forms have been updated to use proper data validation and error messages. What this means is that if you’ve entered something invalid, it will tell you and won’t close until you fix it. Previously, forms would just close, pop an error message up, and just guess as to what the value should be, which was a pretty bad experience. I’m glad to have fixed it. If you’re a dev and curious, this article gives a decent overview of Android form validation, and this StackOverflow answer explains how to stop dialogs closing, because for some strange reason there’s no simple way to do so.

For Quick Quote Professional users, there are two new features about making things easier when there are a lot of quotable items. Firstly, you can now arrange items into categories. There’s a new category management screen, available from the quote item management screen. Items are grouped by category in the ‘add item’ dialog of the calculator, which can make finding things much faster. Search is still available there, and works for both category and item names. The second new feature is you can now import and export quote items and categories to a file, from the menu in the item management screen. Previously, users with more than one device, such as a business with multiple employees using Quick Quote, would have had to enter the quotable items once for each device. Now, they can enter them once, export the file, copy it to another device, and then import them again.

Next, I’m going to be jumping into development of version 1.5. This will be focused on improving the exported quotes, with customer details, quote numbers, notes, and being able to mark them as invoices or receipts or anything you like.

Quick Quote is a time-saving Android app for creating quotes and estimates while on the job. Feel free to try out the free version for as long as you want, with no limitations.

Dev Log 15th of November 2014

This week has not been a good week for getting things done.

Monday was decent enough – I finished the import/export quote-items feature for Quick Quote, felt pretty happy about that. That afternoon I began on the ‘About’ screen that QQ has been lacking all this time, both to point people to my site/other apps, and to properly display the open-source licenses that I should have been displaying all along, but didn’t realise at the time.

Tuesday though, I felt really off and emotional and weird, and later realised it’s because I was coming down with a horrible cold. Yay. So the rest of this week, I’ve felt rotten and slept poorly, which isn’t conducive to programming of any sort. It’s starting to clear-up now, and there’s still some time left before #PROCJAM ends, but I’m fully in bum-around-feeling-sorry-for-myself mode at this point.

So, no actual game-dev to speak of, but I still have some things I’d like to write about. Firstly, TRI was finally released last month, and I’ve had the chance to play it a bit. It’s excellent. I’d played parts of it a few times over the course of its development, and the improvements I could see from about 6 months ago got me thinking – maybe continuing to polish a game for months when it’s already “done” is hugely important to its success. There’s certainly the temptation when you’re near the end of a months- or years-long project to release it and move on as quickly as possible. Development follows a curve a bit like this:

(“Game quality” is a vague measure of how good the game is, how much it appeals to players, etc.) To start with, you make a lot of visible progress with a small amount of work, but as time goes on you get less and less improvement based on the time you put in. Assuming that your living costs are the same week-by-week, the tiny improvements near the end are pretty expensive, and this create a balancing act: how early do you stop development? If you spend too long on it, you’re wasting time that could be better spent on a new project. But throw it out too early and the low quality will attract a much smaller audience, or none at all. There’s even the issue of “will anyone buy this game at all?” Perhaps it’s safer to test the waters with a small, rough prototype rather than diving into a long development cycle.

What I’m beginning to think, though, is that a longer development is more likely to produce a game that is a success. With the huge number of games being released now, there’s more of a need to stand out, and putting more time in helps to separate your game from the mediocre. To graph it, I think it’s something like this:

My point being that sales aren’t linear, but a more polished game will get drastically more sales by standing out from the crowds on stores. While an extra few months on a game might make it only 5% better, that could still make a big difference in how successful it is. Admittedly, spending that time in this way is still a potential risk if it doesn’t pay off. I’m still learning to balance my development time.

Of course, I don’t have a lot of experience, and I’m basing this on impressions of how other people’s games are doing, and there are no guarantees in game development. I’d love to hear if people have evidence in favour of this idea or against it.

Dev Log 3rd of November 2014

It’s been a couple of weeks, so what have I been up to? In summary, “less than I had intended”. I was house-sitting for family for a couple of weeks in October, and their internet decided to be so unreliable as to be useless. As such, I couldn’t play around with snõwkit like I’d hoped – I’ll find the time to eventually though! I got back on the 24th, so what have I been doing in the week since then?

Back in September, I had an email exchange with a Quick Quote user who mentioned that being able to categorise items would be helpful, and that they were planning on using it on multiple devices. So as soon as I got back, I started work on a Quick Quote update. As of now, categories system is in place and working smoothly. The update should go out before the end of the month, assuming nothing catastrophic happens. As well as categories, there will also be a way to export your quote-items to a file, and then import them, to save having to enter them multiple times. Plus, there are some improvements to how forms handle mistakes or invalid input.

Quick Quote is an Android app, available for free, for creating quotations and estimates from your phone or tablet while out and about. Save quotes for later, and email them to your customers without needing a computer. Upgrade to Quick Quote Professional for more features, including the new categories system and import/export functions mentioned above.

Quick Quote 1.3 Released!

Both Quick Quote Free and Quick Quote Professional have just been updated to version 1.3! There are several improvements that I’ve been putting in over the last couple of weeks.

Both versions:

  • Specify business details, a logo, and legal text to appear on your exported HTML quotes (in the Settings menu).
  • Item quantities can now be any positive number, including fractional parts – eg, 1.5
  • Improved the appearance on phones and Android versions older than 3.0 (Honeycomb).

Quick Quote Professional:

  • Added a search box to the ‘add item’ window, to make finding items easier.
  • Quote items can now be charged per minute or hour, or for an area or volume.
  • Minute and hour types have a new window for easily entering the number of hours and minutes.
  • Area and volume types allow you to enter the dimensions, and have the total calculated automatically.
  • Customise the units that are displayed for each quote item.
  • Saved quotes are organised by date, and have a search box to help you find them easily.

Quick Quote is a time-saving Android app for creating quotes and estimates while on the job. Feel free to try out the free version for as long as you want, with no limitations.

Quick Quote Professional 1.2: The Tax Update

Currently rolling-out across Google Play is version 1.2 of Quick Quote Professional, which allows you to add tax amounts to your quotations and estimates. You can specify any number of percentage tax rates, and the total is calculated automatically.

Quick Quote is an easy-to-use quotation and estimate calculator for Android phones and tablets. Enjoy the free version for as long as you want, with no limits on how many quotes you can store. This new tax feature is only available in the paid-for version.

Multiple App Versions on Android

It’s fairly common for Android apps to be released with both a free version, and a paid one with extra features. Quick Quote is one example, and now that it’s been out a little while, I thought I would share some of the tricks and traps that I’ve come across in its development.

Android has a fairly strict security system, that stops apps accessing each other’s data. That’s great when you are storing private information, but not so great when you want to share that data between your free app and your paid one. Fortunately, there is a way to tell Android that it’s safe for your apps to access each other’s data. This is by specifying the same sharedUserID in the manifest files. You also need to ensure that the APKs are signed with the same key. This causes Android to see them as related, and allows you to bridge the gap between them.

You can then call the createPackageContext() method with the package name of the relevant app, in order to obtain a Context for it, and then access its files and resources as normal. A word of warning, however: If the app in question is not installed, createPackageContext() will throw a NameNotFoundException and not return the Context you are after. There are of course, multiple ways to solve this issue. In the case of Quick Quote, I decided to have the paid version look for the free version when it launches, and copy the data over if it has not already been copied.

Now, probably the majority of the code and resources in the different app versions will be the same. Duplication is often a signal that things need a rethink. The Android development tools support the creation of Library Projects as a solution: put the majority of the code in the library project, then include it in the release projects and extend it with any differences.

In the case of inserting advertisements, it’s helpful to know about the <include/> layout element. This lets you directly include another layout file within a layout. This makes it easy to include an activity layout, and add an advertisement without duplicating the whole layout file. It’s also generally useful if you want to use a segment of layout in several places.