Showing posts from 2015

Android: Programmatically get list of installed apps on an Android device

Getting details of all the installed apps on an Android device is incredibly simple – here’s a utility method which I hope will prove useful.
private List<ApplicationInfo> getListOfApps() {
        // Class for retrieving various kinds of information related to the application
        // packages that are currently installed on the device.
        PackageManager packageManager = getPackageManager();

        // Get a list of the installed applications
        List<ApplicationInfo> listOfApps = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

        return listOfApps;   

iTunes Connect - taking the pain out of app store submission with launchkit screenshot builder

You've put a lot of hard work into building your app for iPhone or iPad and then you get the frustration of having to create your store listing. Creating a good store listing can make a huge difference to how your app performs so it's vital you add as much information as you can and screenshots are probably the number one thing users will want to see. Then it hits you, you need to create screenshots for 4.7, 5.5, 4 and 3.5 inch screens! ARGH!

However, it's not as bad as you think thanks to launchkit screenshot builder. This great on-line tool allows you to upload a set of screenshots (in one size), and choose text to accompany them and will then generate and email you the images you need to upload directly to iTunes Connect.

It's as easy as that - a huge time saver!

App Support

For any support queries please contact with as much detail as possible to help resolve the issue.

IOS Development: Keyboard shortcut to switch project windows in XCode

Being new to IOS development you may get frustrated with this one as well - how do I quickly change project windows in XCode?

The shortcut is the Command and tilde key:

CMD + ~ 
This is saving me a ton of time - I was previously having to go to Window -> [selected project].

Any other handy keyboard shortcuts for beginners?

App Development: Overcoming Writers Block

Writers block - the curse of no longer being able to produce creative content. It's affected writers for years, but is also a very common problem for app developers. When it comes to app development, what can we do about it?

The causes for app writers block are mostly similar to traditional writers block, for example:

Running out of inspirationIllness (physical or mental)Financial pressuresSense of failure (see the depressing side of app development) Since these are already known problems traditional strategies for overcoming them can also be applied.
Cut off the Internet! Is procrastination your problem - too many notifications or fun things to look at elsewhere? It's amazing how productive you can be if you turn off the internet for 30 minutes - a kick start is all you need. Exercise. You may not be doing any app development because you feel lethargic - exercise can help this and make you feel more alert. Brainstorm ideas. Get a bit of paper, and write down mind maps or random…

How to: Install Gradle on Windows

Step 1: Download the latest version of Gradle from the official site.

Step 2: Extract the contents into a folder e.g. "C:\gradle-2.3".

Step 3: Open up the environment variables window. To do this:

Right click on your computer and click "Manage"Click "Advanced System Settings"Click "Environment Variables" Step 4: Add new System Variable (or user variable if you only want it on your user account).

Step 5: Click New and enter Environment Variable as "GRADLE_HOME" and value as the bin directory of your Gradle installation path from step 2 e.g. "C:\gradle-2.3\bin". Press OK. 
Step 6: Find the "Path" variable and press Edit. Scroll to the end of the text and add the text "%GRADLE_HOME%". Remember to separate from previous entry with a semi-colon ";". 
Step 6: Press OK to exit the environment variable window and advanced system settings. 
Step 7: Open up a command prompt window. (press windows button and…

Delivering constructive review feedback to technically superior employees

End of year reviews have either been recently completed or are in the process of being finalized. As a peer, scrum-master or manager you have probably been involved in delivering in some form feedback to the technical people in the team. In software development appraisals can quickly be dismissed as a box ticking exercise for management, but it doesn’t have to be this way. Camille Fourneir wrote a blog earlier today on this very subject where she actually emailed her team with a justification as to why the process is important. The process can be even harder if you are giving feedback on someone who has more experienced or specialist technical skills. Here’s some tips I have found help in constructing a useful, engaging appraisal process which helps you achieve the two main goals of a review process – highlighting achievements and identifying areas which can be worked on in the new year. This is useful for both people providing feedback on their peers, and for those managing others.


Kick-starting a development project with a solid testing approach - a 5 step process to ensure quality

Ask a developer about their feelings about testing and you can elicit a huge spectrum of opinions:
"It's someone else's responsibility" "Unit testing is the way forward" "Manual testing gets the best results" "You can't make the software better through testing!" Above are all things I've heard people say when talking about testing. However it is such a broad subject and we tend to focus on a very specific aspect of it (e.g. unit tests or manual tests) and we can sometimes miss the big picture. When kick-starting a new product or project, it's vital that you think about various aspects of testing up front - here's my 5 step approach to ensure you have quality software right from the beginning:

Test input early in software lifecycle. You need to think about testing as early in the project as you can. When looking at designs, for example, you should think about negative tests and edge cases to help guide your design deci…

Managing programmers and the programming mother******* mentality

I came across the following great site on Stumbleupon today - - and as a developer had a great laugh before realising that in my day job I'm really the guy the site is having a swipe at!

The site aims it's gun firmly at the door of managers, whether they practice agile, XP, Scrum, waterfall etc and pokes fun at the agile manifesto:

Whilst the site may be a bit tongue in cheek (obviously taking inspiration from Pulp Fiction), a huge challenge of managing developers can be the fact they can see you as a roadblock in the way of them producing code. Ultimately you are responsible for the success or failure of a project and as a result you have probably applied a process to the team to help you ensure your team are progressing in the correct direction. So how, as a manager, can you break down this perception from members of your team who have this mentality?

Before I start, I'll confess when I started my first programming job I agree 100% with the se…

Top 5 tips for when interviewing developers

Interviewing can be a stressful experience, not only for the interviewee! However, having a plan in place for how you want the interview to go and a set of good questions will take a lot of stress out of the experience.

1. Know what you are looking for before the interview.

You are hiring for a reason. You have a position to fill and probably a specific skills gap you are trying to fill. Write down the top 5 skills you need, what behaviours you expect from the person, what experience you expect etc. This should have been done at the CV sifting stage but it's still worth having clear in your head before the interview. 

2. Start the interview with technical questions on the top 5 skills you require.

They are in the interview as their CV has noted the key skills you are seeking - so start off (maybe after a welcome and explaining the process) with a few questions on these key skills. Make sure you know what answers you are expecting. A good candidate will answer these questions with ea…

Real time Google Analytics on the go

As I mention in most of my blog posts analytics is a key part of product development with Google Analytics being the key player in the market. When doing an A/B test knowing who your users are, where they are, when and how they interact with your app, website or blog will help you make informed decisions.Checking these stats is important so when should you do it? I try to check my stats on the train to work in the morning with using Googles own app.

Take 5 minutes and try and learn from the data in front of you. I frequently can identify mobile devices for example which my apps don't run properly on, as it causes very low duration times and high drop off rates. Maximising what you have is really important!

[Book Review] - Technical Blogging by Antonio Cangiano

Title: Technical Blogging
Author: Antonio Cangiano
Publisher: Pragmatic Bookshelf
Publish Date: March 1, 2012

As part of my new years resolution to more blog more regularly I started reading this book on the train into work on my iPad, finishing it within a week. As I mentioned in my post last week this book is great and has been a real motivator for me to take my blogging more seriously.

I highly recommend this book to anyone who is a keen blogger or even someone who has a website or app who wants to increase their exposure to their product as the tips given in the book are transferrable. Antonio Cangiano is the author of many blogs - most famously Zen and the art of Programming and Math-Blog so he know's what he's talking about.

The book covers the following key topics:
Determining what kind of blog you are running (personal, company, general, niche etc)The technicalities on how to create a blogCreating content and maintaining your pace of bloggingPromoting your blogMaking mo…

Privacy Policy

This Privacy Policy governs the manner in which MacKenzie Software collects, uses, maintains and discloses information collected from users (each, a "User") of the website ("Site"). This privacy policy applies to the Site and all products and services offered by MacKenzie Software.

Personal identification information

We may collect personal identification information from Users in a variety of ways, including, but not limited to, when Users visit our site, subscribe to the newsletter, and in connection with other activities, services, features or resources we make available on our Site. Users may be asked for, as appropriate, email address. Users may, however, visit our Site anonymously. We will collect personal identification information from Users only if they voluntarily submit such information to us. Users can always refuse to supply personally identification information, except that it may prevent them from engaging in certain …

Can someone from a non-programming background successfully manage or lead a team of programmers?

This is a question I have asked myself a few times over the last few years, and it can be a bit controversial:

Can someone from a non-programming background successfully manage or lead a team of programmers?
It's a good question. Of course, ultimately if you go up a few layers in an organization, the person at the top is invariably not from a programming background. I'm talking about direct leaders of the development team; the technical lead, the development manager, the scrum-master.

Over the years I've been managed by various different people from different backgrounds with varying success. I've also managed or led various development teams. Here's my general views on this:

Projects tend to fail, over-run or be massively underestimated in occasions when someone from a non-programming background leads a project. The following issues commonly arise:

The development team aren't involved in the work estimation and so it is hugely under-estimated. Requirements are no…

Android - Check for internet connectivity.

It's common to check for connectivity to the Internet within your Android app before you try and perform an operation. For example, if you were about to call an external REST call, you may want to check internet connectivity before performing the operation.

To perform the check I use the following utility method:

privateboolean isNetworkAvailable() {            ConnectivityManager connectivityManager                  = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null;
Remember you need the following in your AndroidManifest.xml in order for your app to connect to the Internet:


[FIX: Eclipse - Android layout file] - Incorrect line ending: found carriage return (\r) without corresponding newline (\n)

I hit this annoying issue today - I think due to copy and pasting code. Within my layout file in Android I'm getting the following error:

Incorrect line ending: found carriage return (\r) without corresponding newline (\n)

Closing the layout and deleting the problematic elements did not help. However, the fix is easy:

Open your layout file. Press Ctrl + Shift + FSave the layout file. 
Hope this saves someone time in the future!

The three key factors in an effective developer desk setup

Setting up your desk for efficient working is a vital step for any software developer, whether working from their home or in an office environment. In this post I set out a few tips on how to make your environment as effective as possible.

Note: This post is slightly different to my usual content, but I've been reading a book just now - Technical Blogging by Antonio Cangiano (responsible for Zen and the Art of Programming and Math-blog) - which stresses the importance of keeping up your pace of blogging when you start out. So while I've been too busy to blog as I've been building a new desk for my developer setup, I realised it formed a great subject for a blog post. I plan on writing a review post on the book (great so far) so look out in the future. 
To my knowledge there is no known ideal setup. There are three key factors you should consider when considering your setup: Cost - what equipment can you buySpace - how much space do you have (not to mention are you in a corne…

Top 5 free tools to help publish a mobile app

You have created your app, tested it and are happy with your end product. That isn't you done though, you need to make sure you have the right icons, screenshots, feature graphics etc. This last hurdle can be a pain but here's a few free utilities I've found over the years which are a huge help.

GIMP - [FREE] Image creation and manipulation.

GIMP is a great free application for creating and touching up your images. Need to tweak your screenshots, create a feature graphic or an advertisement? GIMP is your tool. It's a great free alternative to Adobe Photoshop.

Syncfusion MetroStudio - [FREE] Icons for your app

Metro Studio comes with over 4000 pre-made icons which you can customize to meet your needs - change the colors, change the size and export them to any format you want. See my Syncfusion MetroStudio tutorial for help in getting started.

Paint - Simple image software

Paint is a great simple tool for quickly cropping images and tweaking screenshots.

Image Resizer for Win…

Integrating Google Analytics into existing Android app

Analytics are key to measuring the success of your project or application and are a great way of identifying your users trends and demographics. Have you released an app and wondered who your users actually are? Well with analytics you could find out where your users are situated, what ages they are etc. The leader in this field is Google Analytics - this can be embedded into your mobile application, website and even your blog.

After a few frustrating attempts at integrating Google Analytics into an existing app I thought I should post a guide on how to do this.

1. Download the Google play services library and add it to your project.

You can do this by right clicking on the project you want to add analytics to in eclipse, choosing properties and then the Android tab. In the Library section, select Add and choose google-play-services_lib and select Apply.

2. Add the required permissions to AndroidManifest.xml.