Browsed by
Author: Steven Blakemore

Awesome Apps for Animals

Awesome Apps for Animals

It’s time to give back. The animal kingdom is a huge untapped market that has been largely overlooked. It’s our job as app developers to look for areas where an app can improve a life and then set about improving it.

Below are some ideas for mobile applications that can be used BY animals to increase THEIR productivity and lifestyle.

Octopuses

octopus banner

Octopuses have many mutual interests but I think it’s universally accepted that they all enjoy three similar activities:

  1. Squeezing into small spaces and pretending they’re invisible
  2. Tickling
  3. Spinning around like a Catherine wheel until they’re dizzy

I can’t think of many app ideas that would enhance any of these important physical endeavours, but I can try to bring like-minded octopuses together.

  • Some like to tickle, but not be tickled.
  • Some like to squeeze into old cans of coke, but not old shoes.
  • All octopuses like to spin until they’re dizzy.

Leg’s Be Friends – The social media app for octopuses

Legs Be Friends

Make a profile, add friends, post up tentacle selife’s, tickle people (metaphorically), add interests, discover new friends, meet up, tickle people (literally). You can do it all with Leg’s be Friends.

Send tickle requests to friends and try to tickle ten tickles with your tentacles.

Dogs

dog banner

Tinder for dogs? Don’t be silly. Neuter your dogs, people! No, from what I can see, dog’s are driven by three things:

  1. Walkies
  2. Dinnertime
  3. Butt sniffs

The third option is definitely the inspirational one. Dogs of all shapes and sizes agree that butt sniffs are vital to interpersonal relationships and communication, but it’s also the canine version of keeping up with the joneses.

What if you, as a young professional pupper, wanted to tip the odds in your favour? Then you need OdourLoader.

Want that Labrador to think of you as a Dog about town and not a mongrel? Tap “Sophisticated” into OdourLoader and you’ll be told exactly what you should eat, and roll around in, to make that tasty lady dog weak in the knees.

Next time you enter a butt sniff ring, be confident that yours will smell exactly the way you intend it to.

Naked Mole Rat

mole rat banner

I don’t need to tell you how hard life is for a Naked Mole Rat. The ultimate exhibitionist has the lowest self esteem in the animal kingdom; opting to show off its sexy naked body, but to live underground where nobody can see it.

The Naked Mole Rat really only has one thing it needs, and that is a chance to show off its wares without a feeling of judgement. Where they can twerk to a stranger and never have to see them again.

I present to you, SnapRat, the perfect outlet for exhibitionism without commitment.

SnapRat has a couple nice features that set it apart from any competitors:

  1. It activates the full brightness of the screen as default to light up your underground snaps
  2. It automatically blurs your face for ultimate anonymity
  3. It pairs you up randomly with other naughty mole rats for some dimly lit, blurry fun

Do your thing mole rats; don’t let your dreams be dreams!

 

These three app ideas are just the tip of the iceberg for what we can do to start giving back to the animal kingdom and considering their needs for once. If you have any ideas then please leave a comment.

4 of my favourite Google Apps

4 of my favourite Google Apps

I started this blog post intending to list the apps that I use everyday to make my life easier. When I realised that the first three I thought of were all Google apps I figured I should change the theme of the blog post.

I think a lot of us now use our phone more and more to make little tasks a lot more efficient. With only a gmail account you instantly have access to a number of services that I have come to rely on more and more.

These are my four favourites.

Google Inbox

Google Inbox is the follow up to gmail and it has a few nuances that make it a really nice email client. You can reach it in your web browser at inbox.google.com, or download it on the play store.

Google Inbox

This is a very nice app to use. Simply swipe an email to the right to mark it as “Done” (similar to Archive), or swipe it to the left to snooze the email so that it comes back at a later date.

Inbox does some pretty clever things with my emails too; intelligently grouping them into bundles so all emails of a certain type are together (such as receipts) without my intervention.

I’m still learning all the little things it does but even at its simplest it’s still a nice email app to use.

Google Calendar

If you have a gmail account then you already have access to Google Calendar. You can reach it in your web browser at calendar.google.com, and there is also the app on the play store.

Google Calendar

The reason I like Google Calendar so much is that it ties in with my emails (since I use Google Inbox) so when I get an email confirming a reservation it will appear in my calendar. It also supports reminders (so I can have a recurring reminder to put the bins out) and calendar sharing.

Calendar sharing is probably the bit that I like the most. Me and my fiancée both have access to a shared calendar so if something comes up that concerns us both then I can put it in the shared calendar instead of my personal one.

Google Photos

You can reach Google Photos in your web browser at photos.google.com and the app is available in the play store.

For the low, low price of having a gmail account you can get unlimited photo and video cloud storage.

Unlimited…

That is a pretty huge deal. Most people have a fair few gigabytes of photos and videos kicking around. A lot of people have over a hundred gigabytes and are constantly backing up and clearing space on their phones and hard drives. This makes that whole headache obsolete.

Google Photos

Albums put together by the app without my input

Obviously if you’re into photography then you will want to keep your photo’s completely untouched at their full resolution, but for the rest of us, with our day to day snaps, what Google offers with Google Photos is just amazing. It will downsize images to 16mp (still big enough to print at a regular size) and videos down to 1080p (which is still HD).

On top of that the app will automatically upload new photos to the cloud, sort them all chronologically, create little animations out of similar pictures, put together albums and videos when you go on trips, and even let you search for photos by using image recognition (so you search for “Dog” and it will find all your dog pictures).

Google Keep

Google keep is a note and list taking app and can be reached on the web browser at keep.google.com and the app is available on the play store.

Although I like trello for my more organised kanban board (see my post on dealing with distractions for more on that) I like Google Keep for less structured note taking. This is the app that I use to write shopping lists and to take down random bits and bobs.

Google Keep

The age old question: “Remove door?”

One of my favourite bits about it is that it is cloud based so I can share notes and lists with my fiancée and if she or I edit it then the edit is also reflected for the other person.

We mainly use this feature with shopping lists so no matter who is at the shop we know we both have the most up to date list to go off, and when one of us ticks something off, it is also ticked off for the other person.

 

Well, there you have it, my top 4 Google services and what I do with them. Please leave a comment if you also use any of these apps to help you in your day to day life, or if you use any different apps that you think do it better than Google. I’d love to hear your thoughts.

Dealing with distractions

Dealing with distractions

If I had to come up with the biggest issue I have with completing work in my personal time it would be the continuous effort to deal with distractions.

I’m a pretty distractable person.

If you could have seen the length of time I took between typing the previous sentence and this one then you would understand my issue. The problem is that I want to be productive and I feel bad if I haven’t been productive, so when I let myself get distracted (by Facebook, Youtube or Reddit for example) I’m basically investing in the bad feelings that are to follow.

To try and counter my propensity for procrastination I’ve decided to tackle it from a few sides.

  1. Planning
  2. Control
  3. Incentive

Planning

I function a lot better with a plan. I like to know what is happening on a given day and when I’ll be doing it or I’m a lot less comfortable. When it comes to work I have the habit of planning the bigger picture but not the breakdown.

I’ve been listening to John Sonmez’s audiobook ‘Soft Skills‘ on my commutes to and from work and he outlines his variation on using a kanban board with the pomodoro technique. I am using Trello for my kanban board (using a list for each day of the week, a today list and a done list), and a regular old timer to track pomodoro, but I know there are better tools for this. I like these two techniques for a few reasons:

  • It let’s me plan out my entire week
  • It makes me consider how long jobs will take
  • It forces me to break up bigger tasks into smaller ones.

That last point in particular was very useful to me. The pomodoro technique is just a method to encourage complete focus on one task. You set a timer for 25 minutes and do nothing but the single task you are focusing on (no email, no fake attempt at “multitasking” etc). This 25 minute block is a single pomodoro. After a pomodoro you take a 5 minute break. After 4 pomodoro you take 15 minutes. John’s rule was that if you anticipate something will take longer than 3 pomodoro (about 1 and a half hours including breaks) then you need to break it up into smaller tasks. Smaller tasks are a lot more manageable.

Control

To take back control from the side of my brain that likes to click the time wasting websites I need to not give myself that option, especially as I get used to the system. I’m going to try out ‘StayFocusd‘ for Chrome and ‘StayOnTask‘ for Android to block or discourage wasting time on unproductive websites during a pomodoro. It would be impossible to just unplug the internet and put my phone in another room as developing without Stack Overflow is a terrifying concept that I don’t want to consider, and I find using my phone instead of an emulator is a lot faster when testing apps.

Also, by using the kanban/pomodoro combination I am putting control back into my work by planning what I am going to do and then focusing on it, instead of knowing where I want to be and stumbling blindly towards it.

Incentive

I struggle with incentive because I struggle with distraction. If I work hard I need to ensure I rest, but if I don’t feel like I have gotten enough done (perhaps due to conceding to too many distractions) then I won’t feel like I deserve to do something enjoyable and so I won’t be able to enjoy it. By planning out my work, and knowing when and for how long I will be working, I can hopefully add incentives back in to my life and start enjoying my downtime.

I’m going to start now. I planned to write a blog post, I have wrote a blog post, so I’m going to close the PC down and spend the rest of the night with my fiancé.

Learning about Material Design

Learning about Material Design

I briefly talked about the module in my Nanodegree centred around Material Design in one of my previous blog posts. The module was called “Make Your App Material” and the main goal was to take an app which already contained much of its functionality and change the visuals to follow the material design guidelines. Here is a link to my Github page for this project.

Here is Google’s promotional video to give you an idea of what Material Design looks like:

It’s all about bold design and colours, tactile layers and dynamic and instructive movement. The app that was supplied as the starting point was called XYZ Reader and looked like this:

XYZ Reader Before

Looking at the current state it’s pretty obvious that a lot of things need changing before it can be considered an attractive app.

The most obvious aspect is probably the colour scheme (grey on grey with a murky green highlight).

We also need to change the photo’s to fill the area instead of showing up thumbnail size in the top left corner.

After that it would be useful to take a look at the font as a crisp and readable font can make a world of difference to an app (especially one based around reading).

It would also be nice to have optimised layouts for landscape views and tablet views.

Finally some animations will make the transitions between the list view and the detail view a lot more pleasing to the user.

Colour

I chose a colour scheme based on the logo provided:

The launcher icon for XYZ Reader

In Material Design you usually have a primary colour, a primary dark colour and an accent colour (which should highly contrast the primary colour). It is good practice to create a colors.xml file that holds all your colours and then to refer to them elsewhere in your code. This way if you need to change the colours you only need to change the xml file, not the code.

Here I use the colours to set the theme of the app:

The colour and style xml files

The colours are set in colors.xml and then referred to in styles.xml. The app them applies the style as its theme.

Fonts

I decided to use the Roboto font which is a good all rounder and should be readable on lots of different pixel densities. To change the font I have to add the .ttf asset files to the project and then when the app is running these assets are accessed and then applied to the relevant text views:

Setting the fonts

Layout

Layouts are mostly defined in XML. You have to combine views in a hierarchy so that they display in the correct order, overlapping properly or splitting the screen the way you want it to. When making the layouts it’s important to make sure it will look good on any sized phone or tablet in portrait or landscape. You can do this by creating folders with size qualifiers:

Folders for different layouts

In this example you can see a folder for landscape and a folder for when the smallest width is 600dp (Density Pixel). The regular layout folder is for anything that doesn’t fit into the other qualifiers. When the app detects a device or device orientation that matches one of the qualifying folders then it loads the XML files from that folder instead of the default one.

Motion

For this project I decided to try my hand at the Shared Element Transition. I talked a lot more about this in my previous blog post called “That Shared Element Transition…

When the user clicks on one of the articles in the list view then the image for that article should expand to the size and position of the same image in the Detail View. This creates a smooth and interesting transition between the two fragments.

Other touches

Some other aspects of the design that were implemented was using a coordinator view for the List View so the toolbar would scroll with the list until it reaches a certain size and then the material would lift up to allow the list to pass underneath. The coordinator view seems very powerful and I’m looking forward to playing around with what else it can do in a future blog post.

There is also a parallax scroll used on the detail page which gives some visual interest. Here is what it all looks like in comparison with the originally provided app:

That Shared Element Transition…

That Shared Element Transition…

In this blog post I talked about an issue that I was having regarding the shared element transition for a project I was completing as part of my Android Developer Nanodegree. Around the time I was having this issue I wrote a short post for some close friends explaining my woes so I thought I would retell some of the story here.

So the app I was making used a thing called a recycler view. This lets you have a potentially infinite list without causing memory issues as it recycles views that are off screen to make the ones that are coming on screen when you scroll (probably a painfully simplistic way to describe it, but you get the point).

I was having an issue where if you scrolled to the bottom of the screen the shared element transitions would just stop working. Even if you scrolled back up they would just not work any more, unless you refreshed the data or restarted the app (below is a video of a working version of this transition so you know what it should look like).

I had been working on this issue for an entire day before finally discovering the reason and eventually fixing it.

To make a shared element transition you have to give the image in the list a transition name and then the matching image in the details view the same transition name (so that they are linked).

Shared element transition names

This was done on run time as the images in the list are generated from a database so you can’t be sure how many results you will get.

To make the transition name unique I would use the transition name that was set in the layout files (hardcoded to “transition photo“) and then concatenate the id of the individual image (which would be unique). The code would look like this:

String transitionName = holder.thumbnailView.getTransitionName() + id;

So lets say the ID was 5, we know the original transition name is “transition photo“. So the above  basically translates to:

transitionName = "transition photo5"

The issue is I’m using a recycler view, which likes to recycle… so when I would scroll down it would recycle an old view, and then I would call getTransitionName(), which would return “transition photo5“, but it’s still trying to make it unique so it adds on the new id (e.g 6) so it would set the transition name to “transition photo56“.

So when that item is selected in the list view the code would generate the transition name for the detail activity using the logic of “I want to join “transition photo” with the ID, which is 6“. It would then go “hey, ‘transition photo56’ doesn’t equal ‘transition photo6’ … so there’s nothing to transition“.

My problem was I was using the default transition name to build the current transition name but then overwriting the default transition name with the current transition name.

What a numpty.

A box of numpty

My Time at Udacity – Part 2 of 2

My Time at Udacity – Part 2 of 2

In my last post I talked broadly about the experience I had completing my Android Developer Nanodregree at Udacity. In this post I’d like to go into more detail about the work that I did during the course and what I found particularly interesting or challenging.

Project 0: My App Portfolio – Github

The first project to start us off was to make a very simple app which would have a button for each app we’d be making throughout the Nanodegree. Clicking on the button would then show a toast describing which app would be launched. I actually expected there to be a callback to this project later in the course where we would hook up our apps to these buttons, but I suppose that was left as an optional extra.

 

This project falls in the free trial period so it’s the time where you can decide if you think you’ll be capable of continuing. Looking back it looks pretty awful but I learned about toasts (the little messages what pop up when you click a button), alternative layout files for landscape orientation, and a little about layout (it took way longer than I’d like to admit for me to figure out how to make that final button taller and thinner than the rest of them).

Key Moment

For this project I was most proud of the smallest wee snippet of code:

if (toast[0] != null) {
  toast[0].cancel();
}

Which would make the latest toast appear immediately by cancelling the current one, instead of queuing behind the one that was currently being displayed.

Project 1 & 2: Spotify Streamer – Github

This was where it started to get real. This project contained a custom Adaptor, a master/detail layout, a Service, Callbacks and a DialogFragment. I think I must have spent the better part of a week trying to figure out how to make a SQLite database with my own content provider before admitting defeat and using the data straight from the API calls. I eventually conquered my fear of databases in a later project, but it defeated me here.

 

Key Moment

What I was most proud of in this project was getting the Service to work so that the music would continue to play without interruption when the screen was turned, or if you navigated back to the menu to select another song.

It would have been nice if some music controls followed you back so you could actually pause the song after leaving the “Now Playing” screen, but unfortunately I couldn’t manage that in the time I had.

Project 3: Super Duo – Github

For this project we were given two apps that already had a lot of their functionality already developed. We were tasked with fixing bugs and responding to some mock feedback to improve the applications.

I struggled with motivation for this project which I think showed a weakness which I hopefully overcame later in the course. The weakness was not being able to get invested in a project that I didn’t see from the start. Since it’s a lot more likely that I’ll end up working on projects already in production I’m glad that this project helped to highlight this weakness so I could do something about it.

I also wish we had a BBQ right now Sophie…

Key Moment

For this project I was most proud of the work I did getting the barcode scanner to work. It meant learning how barcodes are generated, including how to determine if it’s a valid ISBN13 or 10 number, and also how to use the ZBar Library.

Project 4: Build it Bigger – Github

This was one of my favourite projects of the course as the course material was particularly well put together. I felt like it was challenging but also clear and concise so hopefully some of the other modules at Udacity take the structure of this project into account when designing others.

For this project I had to build a joke telling application that would utilise Gradle to:

  • Add free and paid flavors to an app, and set up the build to share code between them
  • Factor reusable functionality into a Java and Android library
  • Configure a multi project build to compile the libraries and app
  • Use the Gradle App Engine plugin to deploy a backend
  • Configure an integration test suite that runs against the local App Engine development server

 

This is the first project where I actually attempted to make it look good. I mean… I failed, but I at least attempted it! In the video you can see me switch from the free version, which has a banner ad and an interstitial ad when you press the joke button; and the paid version which has none of those things.

Key Moment

There were a lot of things I enjoyed with this project but I think the most satisfying was having a project with a tight and intelligent Gradle setup. It’s something I hope to continue to implement going forward.

Project 5: Make Your App Material – Github

I was looking forward to this project as up until this point all the apps I had made had functioned pretty well but looked like garbage with buttons. We were given an app that had its functionality but looked horrible and we were tasked with giving the app a facelift to make it fall in line with material design principles. The following video shows the before and after:

 

The most challenging aspect of this project was the optional feature I decided to implement; the shared element transition.

I had so many issues getting this transition to work such as if I scrolled too far down the screen it would just stop working, or if I swiped to a new article on the detail page the return transition would link to the wrong image. It took a lot of work to finally get it working and it STILL sometimes doesn’t fire when clicking for the first time after the app has loaded (see video).

Key Moment

I was tearing my hair out trying to get the shared element transition to work, so when it finally started to behave it was quite a relief since the deadline was right around the corner.

Project 7 & 8: Capstone – Github

Part 1 of this project was to design the app and part 2 was to build it. By the time this project came around I was pretty exhausted but I could see the finish line so I went for it. My app would take news articles from the Sky News RSS feed and then summarise the article into 5 bullet points. The user could then click on a bullet point to see more content related to that bullet point, or click the Floating Action Button to go to that article on the Sky News website.

 

At some point I’d like to go back and make it so you can pick your RSS feed and it will summarise any article, but this is what I handed in. Some of the things I implemented were:

  • A SQLite database and content provider
  • Google Admob and Analytics libraries
  • Multiple third party libraries
  • A collection widget
  • Material design features
  • A custom library that handled the generating of the bullet points

Key Moment

This whole project was a whirlwind from the get go (as you can see from my commit history for this project on my Github page) so there were a lot of highlights that I could mention, such as getting my bullet point generator to work or finally getting the hang of databases and content providers. I think what stands out though is finally handing in the project at 2:30am Monday morning and then waking up at 6am for work and the project review was waiting for me, so I could go to work brain dead, but content.

If you read this whole thing then thank you, it’s been a crazy journey. Also, if you’re wondering where Project 6 went, it was a new project that was added to the course late so I wasn’t required to do it.

My Time at Udacity – Part 1 of 2

My Time at Udacity – Part 1 of 2

In the build up to starting my Android Developer Nanodegree at Udacity I was fairly unsure where I wanted to take my development career.  It was whilst watching the 2015 Google I/O conference that made me think that building Apps could be a really interesting direction to head in.

I decided to view the prerequisites for the Nanodegree on Udacity’s website and found a few red flags for why maybe I shouldn’t jump straight in. Here are a couple quotes:

  1. This is not a “Zero to Hero” program. Entering students are expected to have prior experience building applications (web or mobile) in Java or another object-oriented programming language.”

I didn’t have experiences building web or mobile applications in Java (or another OOP language)…

  1. You should have at least 1-2 years of experience in Java or another object-oriented programming language prior to enrolling.”

I also didn’t have 1-2 years of experience in Java (or another OOP language). I had learned a bit of C++ a couple years back though so… that should do right?

  1. Grit: Ability to work through challenges and persevere when code breaks and tests fail.

Hells yes I have grit! I’m all grit! I’m built of grit! Grit is my middle name… it’s Steven Grit Blakemore; a name I had considered a curse up until this point!

One out of three ain't bad

I decided, after asking the opinion of a few valued friends, that I wouldn’t let being painfully inexperienced stop me so I committed to learning Java alongside Android and I jumped straight in.

The prerequisites also mentioned that “This will be a challenging and rewarding journey that will take a novice programmer 9 months or longer to complete, spending an estimated 10 hours per week on the coursework.

This course took me 12 months to complete, spending an average of 20 hours a week (sometimes less, sometimes a lot more) and when I handed in my final project at 2:30am after a 100 hour work week (32 of those at my actual day job) I felt and looked like this:

The next few days at work I don’t think I was good to anyone (fortunately my Boss was very understanding), and I still feel fairly exhausted, but I did it and came out the end having learned so much and having created something I’m really proud of.

On Monday I’ll go through some examples of the work I completed during the course and explain where I struggled the most.