Abandoning Most Social Media Platforms

I am a millennial, and like most millennials you would expect me to have a Facebook, Twitter, Instagram, Snapchat, Google+ and who knows what other social media account on whatever platform. And you would be right about three months ago, but now you would be completely wrong. Currently I have abandoned nearly all social media platforms. I only have a LinkedIn account for professional purposes, Google Hangouts (no Google+ account anymore) and Facebook Messenger (do not have an active Facebook account).

Since closing and abandoning the majority of the social media platforms I have never felt better. I have been sleeping better, staying focused more, getting distracted less, and have overall felt less overwhelmed. Plus I reckon if I didn’t abandon all those social media platforms I probably wouldn’t have started this blog, played around with a number of different programming languages and technologies, and even start a number of small side projects (finishing them though is another story unfortunately).

What led me to close my social media accounts? One of the most annoying things I have found with social media is the lack of face to face social skills among people my age. I would go out to dinner or events with family, friends, etc. and some people would just be on their phones; now I don’t go out with those people anymore. I’d try and start a conversation but they would just not be interested. I’d ask what they are doing and they would respond with comments like “Scrolling through Facebook”, “Checking out what people are tweeting”, or “Fixing myself up for a new selfie I’m going to post online”. This type of behaviour made me decide to close my account, but it was not the only reason. I wanted to get away from all the annoying, in your face, and know-it-all posts, messages, and pictures. I could have blocked, unfollowed, unfriended, etc. the individuals who post the content but why bother when I would nearly have to do it to half my “friends” lists. Another reason why I chose to close my accounts is because I would constantly be replying to peoples messages, posts and pictures. I felt like I had an obligation to reply back, and now I don’t need to worry about it ūüôā Do I miss the hilarious Facebook posts from comedic pages? Absolutely. Is it sometimes difficult to co-ordinate events when you cannot reply to a Facebook Event or Group? Yep. But I have learnt how to manage all of that now.

At first I found it hard and had withdrawal like symptoms. I would constantly be checking my phone for no reason for example. Habits I had formed over time based on social media I never knew I had or were doing was obvious now to me. After about two weeks that all died down and I no longer had the social media monkey on my back. So I think going forward, I will most likely not be going back to those platforms, as I see no real reason to. Nothing that they offered I realised I needed. I still find ways to communicate with my friends, I don’t miss out on any social events, and best of all my health and the amount of time I have now allows me to try and do new things.

So if you really are hooked on social media platforms, maybe you need to have a think about why you use those services and if you really need them. Maybe even consider what you are doing when using the services and when you are using them? Are you browsing Facebook/Twitter/Instagram when you are going out to eat with friends instead of conversing with the people you are out with? If so, maybe you need to dial back your social media usage a little. Try going a week or two without social media, maybe your life will change for the better. I know mine has.

My Android Situation

I am a die-hard Android fan; I would even go as far as to say I love Android. My very first smartphone was Android. I switched to a Windows Phone for a brief period, but switched back to Android. I can foresee myself continuing to buy Android phones until something “better” comes out. Right now I am in a position where my current Android phone is one its last legs. Looking at the current Android device market, I am disappointed in what is out there; nothing matches what I am after. Before I go into why the current Android device market is underwhelming, I’m going to breakdown my Android journey so far. It is this journey that has me feeling this way and hopefully provide some context.

My Very First Smartphone

My very first smartphone was the HTC Desire HD. It was in my mind the greatest smartphone you could ever get. It had everything that I wanted in a smartphone, even a 3.5mm headphone port ūüôā However, the more I started to use it and as the years rolled by, I saw one glaring flaw in the once Superman like device. It had nothing to do with the hardware but the software. It stopped receiving major Android updates from Google, and HTC stopped providing updates to it as well. With the device no longer being supported by Google and HTC, I decided to “root” my phone and install a custom ROM. An unfortunate event caused my screen to no longer work; who would have thought that dropping your phone, display first on concrete will kill a number of pixels? So I decided to move on and buy a new phone.

The Proper Android Experience

It just so happened Google and LG released a new phone a month or two earlier. The phone offered a “pure”, stock Android experience, no skins and no bloatware like my HTC Desire HD. It was the almighty LG Nexus 4. It was my very first stock Android phone and after using it, I am never (ever) going back to an Android device with a skin or bloatware pre-installed; no matter how good the hardware and skin is for the phone (sorry Samsung). With the stock Android experience, I could generally get “timely” Android updates (if my telco provider doesn’t block or take an extremely long time to test the Android update on their network *cough* Telstra *cough*) and experience Android how I imagined the original creators and Google would have wanted. Eventually my Nexus 4 stopped getting support from Google but I still kept it around as it still worked great. Eventually the hardware started to fail. I probably should have just replaced the failing hardware components, but I decided to make a switch to a Windows Phone. I don’t remember exactly why I switched ecosystems but I remember having a spreadsheet with data about a number of phones and the Windows Phone was the best option out there at the time. Goodbye Android.

Hello Windows Phone

The Windows Phone that I decided to go with was the Nokia Lumia 930. At first I loved it. The build quality is still the best of any phone that I have ever had. Extremely solid, heavy and felt like it would not break on you; it is a premium device at the fraction of the cost when I bought it. The only glaring flaw the phone had (which I knew going in) was the Windows Store (more specifically the lack of apps). I could barely get by with the apps the Windows Store had, and I did not realise how much I depended on the Google ecosystem. What was truly annoying was the lack of proper first party app support; there was plenty of third party apps though. Fortunately my mum’s flip phone ended up dying and I decided to give her my Lumia 930 while I picked up Google’s latest Nexus device at the time. It was the Motorola Nexus 6, aka Shamu.

Android My Old Friend

Ah it was good to be back using an Android device. I missed having proper first party app support. After moving to the Nexus 6, something that I didn’t expect to be a major difference but would take some time to get used to was the sheer size of the device. The Nexus 6 is a fairly large device and at first I had some issues getting used to it, but now I love it. Watching videos, browsing the internet and reading documents is fantastic; consuming anything on a large screen mobile device is just too good. Like most Nexus users out there would know, the best thing about the Nexus line is the stock Android experience, and the timely OS and security updates. Overall the Nexus 6 has been a great device, however the battery is now not holding a charge like it should, and I am no longer getting any sort of updates even though officially Google is supporting the device until October 2017. Now I have to decide what new phone to get, but the choices for me are fairly limited for what I am after.

Android Market Frustrations

If you want variety and choice then there are plenty in regards to Android mobiles. You have the super low end budget phones for under $100 AUD or you can spend over $1400 AUD and get the latest premium, top of the line phone. So there is plenty to choose from. However in saying that, many of the phones on the market do not appeal to me. The features/options I look for in an Android phone are in no particular order:

  1. A large capacity battery – I want to hold a charge for a whole day with heavy use.
  2. Stock Android – no skins, overlays, bloatware or any other manufacturer gimmicks.
  3. Support for the device for at least 2 years – this includes timely Android OS updates and security updates.
  4. 3.5 mm headphone port – just because it is 2017 doesn’t mean we should take features away.
  5. Doesn’t cost me an arm and a leg – I don’t mind paying big bucks for a premium device if it truly is premium.

Now as you can see none of these are really unreasonable, and many phone users out there probably would have 3 of these on their list when looking for a new phone. I am not asking for an insane camera as I rarely take pictures or videos, a 4K display, wireless charging, or “squeeze” functionality.

I’m going to start with the battery option. Many phones have a decent sized battery, so this one generally gets a checkmark from me. When I look at phones out now I rarely see phones which have low capacity batteries and many phones can last a solid day with heavy use.

The hotly contested 3.5mm headphone port. I use my phone to listen to podcasts and music while travelling to work and while I code at work, so having a phone without one automatically removes the phone from my purchase list. If I was to go with a phone without a headphone port, I will need to spend even more money on some wireless headphones, and they are not cheap at all.

Stock Android. Something that is super important to me, and is probably number 1 on my list of requirements. The only phones I have seen with stock Android are the Nexus phones (R.I.P), Pixel phones, and the new Nokia phones (from HMD Global). Unfortunately the Nexus line will soon be not getting support for much longer, and the Pixel phones even though they have a premium price tag are not premium devices IMO. I feel that Google has created the Pixel line to directly compete with the iPhone and the Galaxy devices. The only new Nokia phone currently worth looking at is the Nokia 6, however the hardware is generally low mid tier with a high mid tier price. Maybe the Nokia 8 will be the device I am after. Generally all other manufacturers have skins, overlays and other gimmicks on their devices that ruin Android, so they are all out of the picture for me and I am not going to go out of my way to root a new device.

Along with the stock Android comes timely updates. With the heavily customised experience manufacturers provide for their Android device, getting updates is a major pain an hassle. If the device is running something other than stock Android then be prepared to wait for updates unfortunately. So as with the stock Android issue, having timely OS and security updates limits what phones are worth looking at.

Finally there is the price. Again, I don’t mind paying a high price for quality. I have a Surface Pro 3 and I bought it when it came out. It cost a pretty penny, but it is IMO the best purchase that I have ever done so far (in regards to technology and devices). Due to the length of support most mobile devices get from Google and manufacturers, I don’t feel like paying over $700 AUD for a mobile device every 2 to 3 years. Sure I can keep the same phone until it dies, I mean I have generally done that. But I want to ensure my device has the latest OS update and most importantly the latest security patch.

There it is folks. Let me know what you think. Am I being too demanding? What phones do you recommend? I’ll most likely end up waiting for the Nokia 8 or Pixel 2, but time is running out. If nothing is worthwhile purchasing later this year, the Nokia 6 will be the likely choice as my daily driver.

UWP: Loving the Windows Template Studio Extension

I subscribe to a number of development blogs and articles, and I have been meaning to play around with the new Visual Studio extension that got announced at Build 2017 for a while now. What better time to use it than when I am about to complete the transition from “proof of concept” to fully fledged Universal Windows Store application?

Installing the Windows Template Studio Extension

Microsoft has made it super simple for anyone with Visual Studio to install this new extension. If you have Visual Studio 2017 (I have not personally tried it on an earlier version of Visual Studio), navigate to¬†Tools¬†– Extensions and Updates…

Once the new¬†Extensions and Updates window appears, on the left hand side navigation pane select¬†Online¬†and then¬†Visual Studio Marketplace. On the top right hand side there is a search bar, enter¬†“windows template studio” and press the Enter key on the keyboard. You should see¬†Windows Template Studio now appear in the list of tools and extensions. Click¬†Install after selecting the¬†Windows Template Studio extension; to start and complete the installation you will need to close Visual Studio.

After the installation process completes and you restart Visual Studio, you should see the extension Windows Template Studio with a green check mark. A screenshot of a successfully installed extension/tool is shown below.

WindowsTemplateStudioInstallation

Using the Windows Template Studio Extension

With the installation complete we can start using the new extension. I was super excited to see first hand how the extension could simplify the process of creating a new UWP application. If you haven’t opened Visual Studio, open the application. Create a new¬†Project (default shortcut key is Ctrl + Shift + N). Open the¬†Windows Universal Visual C# Template on the left hand side pane and select¬†Windows Template Studio. Fill in your solution/project details as you see fit and click Ok.

UsingWindowsTemplateStudio

The Windows Template Studio wizard will launch and right off the bat it offers some templates and frameworks to get you started on the right foot; a good first sign. First you get to choose a Project Type; and you get three options (I guess the options they give are ones that most developers will use when developing their apps). You also get to choose a Framework, one of which is based on a third party; it looks like Microsoft isn’t playing any favourites here and is offering what they feel is best for developers (this goes to show how much Microsoft has changed and how much they really care about developers). Click¬†Next once you have chosen a Project Type and Framework.

WindowsTemplateStudioWizard1

If you have never developed for the Universal Windows Platform then already having a Project Type and Framework setup for you makes things much easier for you in the future. But now is where the true customization and helpfulness really begins; in this part of the wizard you get to add the Pages and Features you want to your application. To make the next couple of choices easier for you, it would be beneficial if you nailed down how you would want your application to look and how many Pages you want (but you could always manually add more at a later date).

You first get to add¬†Pages to your application. I found this part of the wizard extremely useful as it provides some common Page Types such as Settings, Map, etc. A bonus is that you can add as many as you want ūüôā

WindowsTemplateStudioWizard2

Microsoft went above and beyond for the Features part I believe, kudos Microsoft. You get a plethora of Features to choose for your project. They are some of the most common when working on your application such as a First Run Prompt, Live Tiles, and Suspend and Resume. I really appreciate how Microsoft broke them all down them into easily recognizable Features, and on top of that if you are not sure what the Features do, there is a little information button you can click to learn more. Once you have selected all the Features you want click the Create button

WindowsTemplateStudioWizard3

If you look in your¬†Solution Explorer, you will find all the Pages and Features that you selected ready for you to work on, just like magic. It could not be any simpler. If you want to start developing for the Windows platform and you choose UWP, then it would be foolish to not use this extension. It is easy to use, offers all the basics and groundwork to get started quickly. When I start working on any new UWP project, I’ll be using this extension going forward unless I can add all the necessary features faster myself (but most likely not). Overall I am very impressed with the options that you could choose to quick start your development.

For more information about the Windows Template Studio Extension have a look here and here.

UWP: Dynamic UI 1/2

If you are new to C#/UWP programming then one of the furthest things that may have crossed your mind is a UI that is dynamic and fluid based on the screen size or the device form factor your application is running on. However this concept is very important and is super easy to implement. So I thought I might do a little write up about this and help some people out. I know I may not have all the information presented here but I would like this to be a starting point that others can build on and hopefully this post is useful to some.

When I first started working on developing UWP applications I tried to have the core functionality working for a desktop PC, i.e. anything from a 12” screen sized device and up; and I did not really consider other form factors like mobile devices or the HoloLens. But the more I work on UWP applications and how simple it is to implement this functionality I ask myself, why not consider it up front? Microsoft actually has some really useful information and even provides a worthwhile example, see here. Plus there are numerous StackOverflow questions with answers and blogs/articles that discuss this exact topic. So now when I work on any UWP application I consider what UI elements need to be placed where for the various form factors and screen sizes.

If you use the link provided above then it will already place you to the correct spot in the article that outlines how to modify the UI layout based on screen sizes/form factors. The method to have your UI change based on your form factor or screen size I will be discussing is the use of Setters, StateTriggers, and AdaptiveTriggers.

Setters, StateTriggers and AdaptiveTriggers

Some of the advantages of using the new Setters designed for Windows 10 over the Storyboards that you would have had to previously use are:

  1. No more GoToState method call in your code: there is no C# code that needs to be written when using the new Setters; your application will dynamically change layouts when the state condition is met.
  2. Cleaner XAML Code: syntactically the XAML for using the Setters is cleaner and easier to read. The Storyboard objects could sometimes get very complex and large I found.
  3. No empty DefaultState: the properties in your XAML outside the Setters appear as your default properties and the Setter values will not be triggered until the state condition is met. You do not need to define an empty DefaultState.

Using the Setters, StateTriggers, and AdaptiveTriggers are extremely easy as well. The Microsoft article provides a solid example but I am going to provide two more for reference. In the first example I will showcase the change in font size when the screen changes size, and the second example will showcase rearranging of TextBlock objects when changing screen sizes and on a small form factor device like a mobile.

Example 1: TextBlock Font Size Change

This was actually one of my very first attempts to have the UI dynamically change with a changing screen size and form factor. Below is the XAML code that I wrote to get the font size to change for a TextBlock object that is displayed to the user; some of the unnecessary XAML code has been omitted.

<Page>
  <ScrollViewer>
    <VisualStateManager.VisualStateGroup>
      <VisualStateGroup>
        <VisualState>
          <VisualState.StateTriggers>
            <AdaptiveTrigger MinWindowWidth="720"/>
          </VisualState.StateTriggers>
          <VisualState.Setters>
            <Setter Target="TitleTextBlock.FontSize" Value="24"/>
          <VisualState.Setters>        
        <VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroup>
  </ScrollViewer>
  <Grid>
    ...
    <TextBlock Name="TitleTextBlock" Text="Bill" FontSize="12"/>
    ...
  </Grid>
</Page>

As you can see the amount of XAML that needs to actually be written is fairly minimal. How does the StateTrigger actually work? The AdaptiveTrigger object defined specifies that if the screen size is more than 720 pixels (that is the state condition) then the TextBlock object will have the font size set to 24; however if the screen size is less than 720 pixels the TextBlock object will have the font size set to 12. This can be seen working below (using the exact XAML code above).

DynamicUIFontSizeChange
Example 1: Dynamic UI TextBlock Font Size Change

My next example will be in a follow up blog post, so stay tuned for another post real soon about Dynamic UI. That one I feel is more important and relevant as it moves UI objects around to ensure an optimal layout for a change in screen size and what it looks like on a mobile device.

Software Development: Reducing Technical Debt

Another topic that has peaked my interest recently and I have started to pay particularly close attention to as I started to really work hard and ensure that I am following best programming practices and reduce any introduction of “code smell” into any code repository that I contribute to, is how to reduce the amount of technical debt a project’s code repository has and to not further increase said debt (sometimes this is not an easy task).

What exactly though is “technical debt”? The definition that Technopedia provides sums it up pretty good in my opinion [1].

“Technical debt is a concept in programming that reflects the extra development work that arises when code that is easy to implement in the short run is used instead of applying the best overall solution.”

Some of the causes of technical debt that Wikipedia also provides are also very good and I have worked on projects that have code base’s with technical debt that range from extremely high to very little. Below are several that I personally feel are major contributors when working on projects of any size [2]:

  • Insufficient front up design (just take the extra time to think about the implementation, it will help in the long run)
  • Business pressures (unavoidable, especially when you have obligations to meet, etc.)
  • Tightly coupled components (most likely the cause of bad design to begin with, so design and plan ahead first)
  • Lack of a test suite (all too common in most code repositories, test driven development not utilized or unit and integration test harnesses are missing entirely)
  • Lack of documentation (again, all too common; not enough time to write up the necessary documentation to not only help you at a later stage but others working on the project too)
  • Lack of alignment to standards (sometimes developers feel the need to re-invent the wheel and re-write already publically available libraries, frameworks and APIs causing a major headache down the line)

Now that we have highlighted what technical debt is and some of the causes, it is just as important to try and reduce this technical debt over the lifetime of the project. However sometimes this is just not possible due to a number of uncontrollable factors. Other times however it is squarely in the developer’s hands to reduce as much technical debt as possible while not increasing it as bug fixes, features and improvements are added.

One way that has really helped me is with the use of third party tools and plugins. On most repositories that I work on now, to limit the introduction of “code smell” and ensuring that the technical debt is not increasing, the Git repositories have SonarQube [3] installed on them. Not only does it highlight bad programming practices when there are merge requests but it also analyses the health of the code repository. So there is now no excuse when someone merges in poorly written code when there is an external and impartial tool also looking at the merge request and not just the assignee/assignees who will merge the code; humans can miss some of the obvious things, machines with the correct setup can spot the faults instantly.

Along with the Git code repository monitored, I use a plugin called SonarLint [4] for IntelliJ that highlights poor programming practice and bad code before you even submit your merge request. With the use of this tool, not only does it ensure that I do not contribute to the technical debt, but it encourages me to design, plan and think what I am implementing. Before I was using the plugin, I generally thought that I was writing some good code. However when I started using the plugin it kept flagging my code and letting me know that it was not good code (slightly depressing really); but it taught me that there is still so much more I need to learn to ensure that I write good code. Now that I have been using it for a little while now, I have been getting flagged less and less (so that’s good to know that I am learning and getting better at writing clean code).

Another way that I try and ensure that the technical debt is reduced is whenever I submit a merge request to resolve a bug, or implement a new feature; I try and ensure that the class, method or module that I worked on is in a much better shape than when I found it. Sometimes it will involve doing some light refactoring, other times it will involve re-writing a small chunk of the class or method. However I only ever do this if I know exactly what I am doing, and have experience with the class, method or module. I never try and do this on code that I have very little experience with or don’t know what exactly the code is supposed to do because I could end up leaving the project in an even worse state. People I have talked to about this practice fall into several camps:

  1. If you are not directly working on that component don’t touch it. Just do your part and that’s it.
  2. Why are you refactoring something if you don’t need to? Leave it someone else will refactor or fix it later.
  3. Good show of initiative and desire to clean up the repository, I might end up doing the same. Every little bit helps.

The fantastic thing I have seen is that there are far more developers in camp 3 than in camps 1 and 2. I can see where developers from camp 1 are coming from; making changes to code that directly does not impact your change could pose a great risk, but if you know what it is doing and how to clean up or optimize the code, then why not try and make the repository a little better for all? If there is a TODO or FIX ME comment, then why not fix it while you’re poking around anyway? Camp 2 to me seemed a little odd. Why wait for someone else to fix something if you are already in there fixing or adding something anyway? Could this just be a lazy developer doing the bare minimum? Perhaps. Camp 2 had the least amount of people in it, but I was surprised that was even a response from some developers.

What camp do you fall in? Is there another camp out there? Let me know some of the techniques you use to reduce the technical debt and limit the amount of “code smell”.

[1] –¬†https://www.techopedia.com/definition/27913/technical-debt

[2] –¬†https://en.wikipedia.org/wiki/Technical_debt

[3] –¬†https://www.sonarqube.org/

[4] –¬†http://www.sonarlint.org/intellij/index.html

Software Development: When do you use publically available libraries?

I have seen many code repositories in my software development life (and I have not really been doing software development very long), and generally see two different types of code repositories:

  1. Extensively using public libraries even for the most simple of operations
  2. Everything is created from scratch and is managed internally

When I was programming this afternoon and I was looking at a number of code repositories I was wondering; when is it appropriate to use a public library, one that has been tested thoroughly and has potentially hundreds of contributors or do we just write up our own utility classes and methods, making it only available to projects that we work on? It is questions like these that have me stay up late at night, making it hard to go to sleep.

I primarily use Java at work and is one of the programming languages I use when working on my programming projects. Being so popular there are an insane number of super useful libraries out there with a range of purposes. So it is really easy if you are using Maven to manage these libraries and dependencies, and include them for use in your projects. For example, imagine you have the following scenario:

You want to check whether a String value is null or empty, and this is done in a number of places across the code repository before using this value at any time.

The code could look something like this, all over the repository:

String str = getSomeValue();
if (str != null && !("".equals(str))) {
	...
} else {
	...
}

Wouldn’t it be easier to import the Apache Commons package and use the StringUtils class and do this operation instead, having the StringUtils method referenced across the repository?:

String str = getSomeValue();
if (StringUtils.isNotBlank(str)) {
	...
} else {
	...
}

Sure they generally have the same structure and basically offer the same functionality, but I feel the second option is easier to understand and looks better (personal preference).

What I find the oddest though is when you see code repositories that have their own StringUtils class for example that has a method that does exactly this same check as the Apache Commons StringUtils class, just called differently. So we see this instead:

String str = getSomeValue();
if (StringUtils.isNotNullOrBlank(str)) {
	...
} else {
	...
}

Why not just use the Apache Commons class and methods? What benefits are there to writing your own utility classes unless there are specific operations that you need to perform that the public libraries do not offer? Why go out of your way to write your own caching class when you can use the easy to use, extensively tested and heavily documented Google Guava Cache? These are the types of questions I ask myself when I see utility classes that have one or two methods that do the same operation as publically available library class’s methods. Not only do you have to write the near identical code as the publically available class, but you also need to document the class and write up test harnesses for the class to ensure it works as intended. Most of the time the utility classes I see are not documented and/or there are no test harnesses so developers just assume “Yep, it looks like it should work, so we are good to go.“.

Let me know what you generally do when you work on projects. Do you use the publically available libraries whenever you can? Or do you write your own classes and methods even though you know there are the publically available libraries? If you fall into the latter camp, please let me know why. There may be a valid reason that I am just too ignorant or dumb to notice, because generally whenever I have the option I will always use the public library.

Universal Windows Platform Programming Aid Series Incoming

Hello everyone, I hope this week has treated you well so far, I know it has me.

With my prototype bills tracker UWP app nearly converted over to a fully fledged commercial UWP app that is ready for the Windows Store; minus all the media elements that I still need to draw. I realised a couple of things when working on my app, some things that should have been easy and obvious were difficult and obscure or there was no clear documentation on how to perform a certain operation and the examples provided were lacking. I ended up relying on various Stack Overflow answers, other bloggers and technical forums or experimentation to solve the problems that I was facing.

In saying all of that I will be starting a small series which can hopefully act as aids and help you solve some of the issues that I faced when writing my app. I managed to solve my problems, so I only find it fitting that if there are other individuals out there scouring the internet looking for an answer to the same problem that I faced, why not provide a potential solution or aid in the understanding and how to come towards a solution. I will also be referencing and linking to the original answers to ensure full credit is provided to the ones who helped me (where available) and if my aids are helpful or you feel that they need amending then please let me know; I want my series to be as informative and correct as possible with software development best practises enforced. The more knowledge that we all share the greater chance we have of impacting someone’s life in a positive way.

So stay tuned in the coming weeks for the first “episode” of the series (it won’t be in a video format), and it will either be covering the lifecycle of a UWP app or binding values to controls like a ComboBox. If someone has any suggestions I will gladly take them on board for potential entries into the series.

The MVP (Minimum Viable Product)

As I work on more side projects the concept/idea of a minimum viable product is becoming more and more important; especially for someone like me who generally builds products alone with limited resources. I have started, put on hold, never finished or completely shelved a large number of side projects since I started programming. The reasons range from I lost motivation (which is a shame) to I didn’t have a complete understanding of what the applications true purpose was anymore (poor planning and design) and how it would benefit the user (complete lack of understanding of the market and what users are after). The last one started to become very common and I needed a new way to approach my side projects. Working on something cool and fun is great and all but there is a high chance if you don’t have a clear picture of what you want to achieve and the minimum requirements needed to distribute your app to users then your enthusiasm will at some point dwindle away. Also if you start with an idea that is so big it can become daunting and you will never finish it.

I started taking a new approach to my side projects now. Whenever I start, I note down what I exactly want to build (at a high level only), how I feel it would benefit the users (very important to understand), and what are the minimum features needed to ensure that I can get it to user’s devices to make it worthwhile using in a timely manner (the details are important here). Not only is this process helping me focus and know exactly what I need to achieve but it also allows me to mentally picture a roadmap of sort. I can easily see that features A and B need to be done for the application to be worthwhile and features C, D and E can be easily added later in patches and with feedback from users I can continue to refine and craft an app better tailored to them.

Why am I posting this you may ask? Well several weeks ago I posted about how I am/was going to be working on either one or two new applications. In that time I managed to get a clearer picture of what I wanted to achieve, how it would benefit someone and what the minimum features needed to be implemented for it to be worthwhile. If I didn’t spend this time understanding this then my new project probably would have eventually been shelved at a later point and I would not have built an end to end product for people to use. With this new approach I not only get to showcase my skills with complete apps (fundamentally the absolute minimum to be worthwhile, but apps nonetheless) and provide a product people will hopefully find useful in a timeframe that isn’t insane.

Just in time for the start of the new financial year I will be releasing an alpha version of my bill tracking UWP app in either late July or early August for the Windows Store (more information about this when the release date gets closer). I have a very basic prototype up and running and will be working on refining that to be the final app (took under three hours to get something I wanted functional thanks to the great documentation Microsoft has on UWP development, C# and XAML). Until the app is released I will be trying to write more frequently covering certain aspects of the app, what I have enjoyed programming and what I have had difficulty doing. Stay tuned for that because July and August are going to be jam packed full of programming goodness.

My E3 2017 Summary

It has been a very busy week (and weekend), and not just in the gaming world. With me being a massive gamer I was paying close attention to this year’s E3. I was surprised and fairly satisfied with the announcements, especially from coming from the Microsoft Press Event (to be up front, I am a massive Xbox and Windows gamer so there is some bias in what I am interested in). Below are my memorable moments from E3 and the games, products, features or services that I am looking forward to the most or am excited to get my hands on (in no particular order):

  • Microsoft Xbox One X (aka Project Scorpio):
    • What more can I say than, “The World’s Most Powerful Console”? True 4K gaming, HDR and Dolby Atmos support. Even though I do not have a 4K TV, having the games supersampled on my brilliant 65” 1080p Panasonic TV and reducing the loading times while increasing the framerate is always a bonus. Day one purchase for me, no questions asked ūüôā
  • State of Decay 2:
    • I absolutely loved the first one. A little rough around the edges but it was super fun. It was a great zombie survival game. Happy that they are releasing a sequel. Looks like they have doubled down on what worked and removed elements that were a pain and fell short in some areas. Another day one purchase for me.
  • Crackdown 3:
    • Terry Crews. Can I get a hell yeah? Collecting orbs has never been so much fun. The chaos and mayhem I created when playing the original and sequel will always have a special place in my heart. This sequel has been a long time coming and I am looking forward to this one.
  • The Evil Within 2:
    • The first was a horror masterclass IMO. It knew how to create the most intense and gripping moments, while also pulling back and letting you do your thing. If the sequel is anything like the first (and from the videos I have seen, it is) then this will be a horror game that I cannot pass up on. Any true fan of horror games will most likely be keeping this on their radar.
  • Wolfenstein II: The New Colossus:
    • If there was one game that was worthy of a sequel it was the rebooted Wolfenstein: The New Order game. The reboot was a masterclass in showcasing how an FPS should and can be created. Pure chaos and fun with characters that felt unique and memorable. From the trailer this appears to be more of the same. New guns to blow your enemies into giblets, what more could a FPS fanatic want?
  • Star Wars: Battlefront 2:
    • Did someone say battledroids? A beautiful, rich and engrossing experience from what I have seen. Nothing more needs to be said. I grew up playing with Star Wars toys and a mate of mine summed up the new series perfectly.

It is a Star Wars kids dream. EA and DICE have crafted a sequel where you can go in and play with your favourite Star Wars characters and worlds you love; just as you did when you were a kid playing with your Star Wars toys.” – DEFJESTA 17.

  • Anthem:
    • This was a surprise, coming out of left field. Most of the games BioWare create are magical. From the characters to the story. Anthem looks to be EA’s answer to Activision’s Destiny. A little disappointed with the game that is Mass Effect Andromeda, so I am cautious about this one. Will be paying very close attention to this and will make a decision to pick this up at a closer date, probably after the reviews. Will also talk to my mates to see what they think, it appears to be heavily co-op focused.
  • A Way Out:
    • It is great to see a developer come out onto the stage and be so confident and pumped for the title that they are developing. This one was a favourite of mine when it was shown at this year’s E3. It looks unique and ambitious with plenty of potential. If they can pull this off then this will be a really enjoyable experience with replay value galore.
  • Sea of Thieves:
    • Nearly all of my Xbox mates are looking forward to this title. A romp across the open seas, having a blast looking for treasure and fighting other pirates. Something about this game reminds me of the Fable franchise, which is a good thing. Everything that I have seen of this game is leading me to make this a day one purchase.
  • Middle Earth: Shadow of War:
    • The Nemesis System was nearly perfect. Having refined it and having what appears to be objectives that can be failed and never replayed, makes everything worthwhile and meaningful. It just builds from a solid first game outing.
  • OG Xbox Backwards Compatibility:
    • This was a complete and utter surprise. I know Phil Spencer said the titles in this backwards compatibility list will be smaller due to licensing, but I am still looking forward to playing some OG Xbox games [1]. Please let KOTOR 1 and 2 be playable *fingers crossed*. So to the entire Xbox team, thank you for this, from the bottom of my heart. I know we didn’t¬†need to have this feature, but it shows you really care for what gamers find important; and this is playing games no matter the generation.
  • Ori and the Will of the Wisps:
    • When this came up and the music played, a tear shed from my eyes. The first game was beautifully crafted. The tight controls, perfect art style and masterclass score made Ori and the Blind Forrest deserving of a sequel. Day one purchase, no questions asked.
  • Metro: Exodus:
    • When the 4a Games logo came up on screen, my brother and I both widened our eyes at the same time. Could it be a new Metro? Boy were we jumping for joy when it was. The first two games were not only gorgeous but were difficult. Day one buy again.
  • Forza Motorsport 7:
    • The only racing franchise now that I play is Forza, sorry Need for Speed. Be it the brutally realistic Motorsport series, or the more arcade Horizon. This game is really going to showcase what the Xbox One X can really do in 4K at 60 fps. I bought Forza Motorsport 5 when the Xbox One launched and I will be buying this racing game when it comes out for the Xbox One X as well.
  • Vampyr:
    • Coming out of nowhere, this game intrigued me. I need to see more of it, but from what I saw it looks like it is going to be fun. There is something about the setting and vampires that gel well. As the release date comes closer and more information is released I’ll be making a decision whether to purchase it, or wait for it to go on sale. Either way it will be going in my digital game collection.
  • Age of Empires Definitive Edition:
    • Growing up as a kid, this franchise was my got to RTS, next to Warcraft (sorry I didn’t play StarCraft). I played the HD remaster of the second game and enjoyed playing that one, even though the multiplayer matchmaking was slightly broken (but that is for another time). This will likely be a game I pick up purely based on nostalgia.

Being such a solid week for gamers, no matter what platform that you play on or the genre of games you prefer, there is something out there. I probably missed some other games, but these are the ones that I remembered off the top of my head. If there are others that you think were worthy of mentioning then feel free to add them in the comments below.

Not One but Two New Apps Incoming

So it has been a little over a week (and I know I promised myself that I would be posting weekly, and I am a little late, terribly sorry) but I have been thinking what to write about. Do I write about my BJJ training and my upcoming grading (only one more day left)? The absolute blast I am having playing Prey or PLAYERUNKNOWN’S BATTLEGROUNDS with my friends? Or do I write about what I have been working on at work (been too busy to work on personal projects sadly)? But after a quick chat to my dad I know what I want to write about.

Before my dad and I had our chat, I knew for better part of a month what my new app was going to be. The idea I had for the app was a simple finance tracker where you can easily see your expenses and subscriptions. The reason that I am writing this app is so that:

  1. I can get some experience writing in C# and for the Universal Windows Platform.
  2. Better manage my expenses and subscriptions without having to use Microsoft Excel (not that Microsoft Excel is bad or anything).
  3. Potentially help others who need to track their expenses and subscriptions.

There are other apps or services on the market already but as my first and third points clearly state, it is about me learning and developing new skills while creating something I am going to use and potentially others as well. It is not all about the final product/solution for me.

Back to my chat with my dad now. He asked if there is an easy to use app or service that my mum can use to ensure that all the bills are paid on time, something to simply remind her. I first thought, “What? Are we not paying the bills on time?”, he said it was more of a measure to better budget and ensure nothing slips though the cracks; then I thought “Do we not have enough money to pay the bills?” Again he assured me everything is good and it is more about a better management system than the current management system. In my house we all use Windows machines (Windows 10 in particular), so I suggested first to use Cortana to set reminders. But then I remembered that she uses a local machine account and does not have a Microsoft account. Even if she had a Microsoft account, she really is not good with technology, especially computers. Creating an account, keeping it secure and having her manage something on the computer would be a little of a stretch if I was asked. She needs something simple, something that is easy for her to get a quick overview of all the bills that need paying when and how much. The UI needs to be basic as well, not just functionally basic.

That is when I decided to work on another finance app. A simple bills tracker. The user will be able to see what bills they have outstanding, what is due first, and how much. Nothing fancy and something that even my mum could use. I don’t know about most people but having this tool would be super useful and even better if someone like my mum could use it easily. Are there apps out there already? Again the answer is yes. But this way I can again work on my skills and tailor the app to suit my parents needs.

So there it is. Two new apps that I am working on. One that will be able to help you track your expenses and subscriptions and one that will help you manage your bills. Maybe they will end up being a single app, not sure yet. It would depend how I design the apps both visually and architecturally. Right now I am going to be focusing on bills tracker app to help my parents, and then either combine the finance tracker app to the bills tracker app or work on the finance tracker app as a standalone product.

Stay tuned for some new posts about the apps (or app).