Thursday, September 27, 2018

Message Queues

Just read this interesting article comparing various message queue solutions. https://softwaremill.com/mqperf/  From my perspective the technology that is selected is not that important.  The most important factor is ensuring your system is abstracted and decoupled sufficiently such that you are insulated from which particular queuing technology you choose. 

Monday, April 9, 2018

More Integration Tests, Less Mocking, More Linting

Read this great article today by Kent C Dodds


My take away from it is the following:

1. Integration Tests give the best ROI - but people start to write unmaintnable monoliths by getting obsessed with too much code coverage and trying to mock absolutely everything.  On the other hand too much end to end testing results in fragile tests that become up a maintenance issue (see software testing ice cream cone anti-patten).  A focus on integration testing gives the best bang for buck.  

2.  Linting is good - There are lots of good linting tools out there.  You can usually hook them up in with your IDE so they can give you feedback every time you compile.  These will help improve the quality of your code and may help pick up simple bugs that people rely on 100% unit test coverage to eliminate. 

I couldn't agree with this article more.  Especially point 1.  This isn't to say that we don't need some decent unit test coverage.  But lets not get obsessed with 100% or you will find yourself spending so much time writing and maintaining tests that you lose your agility which is the whole thing TDD is supposed to support. 

Thursday, February 22, 2018

Dependency Injection

In my day job I've been helping architect a restful service framework for another group.  Amazingly the 'legacy' system developers in this group weren't aware of dependency injection.  After seeing their eye glaze over by trying to explain the concept I decided to hunt around for a simple example.  I was surprised at how bad most of the explanations and examples out there are.  Fortunately I stumbled across this excellent blog post on CodeArsenal.net.


I showed it to the developers and they said it instantly clicked.   

Tuesday, November 21, 2017

3 new entries in OWASP top 10

OWASP have updated their top 10.  3 new entries have been added.  They are XXE and Insecure Deserialisation, as well as Broken Access Control.  See below.


For more details check out https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf

Sunday, November 5, 2017

'You Cast' Working Again

Our app 'you cast' experienced a crippling issue earlier this year whereby it just started playing the sound but no picture. This was caused by a chromecast firmware update that didn't seem to play nice with our method of casting videos.

As the 1 star reviews started piling up I spent a lot of time trying to get around this issue. I tried two main main methods:
1. Analysing LAN traffic with wireshark created by android apps which use the official chromecast API.
2. Scouring the web for various open source projects which claim to allow users to cast using the latest chromecast protocol but without using the official API. Most of these were node.js projects on git hub which never seemed to actually cast anything. The closest I got was with this one which connected to my chomecast but then crashed when I actually tried to cast a video.

After quite a few roadblocks other priorities got in the way and I basically gave up. The little bit of advertising revenue we'd been making didn't exactly seem worth the hassle.

However recently I noticed my chromecast device received a firmware update. I tried 'you cast' out and sure enough it is now working again. Last week I made a minor fix to the app and published it to the store just so that users are aware its working again.

Oh well, glad its fixed, and at least I'm an expert in node.js now.

Saturday, December 3, 2016

Our new app 'You Cast' is out

This month we released our latest app 'You Cast'.  This was one app I basically built for myself.  I almost exclusively watch TV through my Chromecast device these days.  Mostly I do this through my android phone or tablet or via a laptop.  However sometimes my wife's 640 XL running Windows Phone 8.1 is the only thing handy.  Unfortunately google have not provided any official chromecast api support for windows phone 8.1 and Windows 10 apps. 

Frustrated by the inability to cast videos from this device I set about creating an app that would fill this void. 

This involved quite a bit of research, wire-shark network traffic analysis and trial and error but after few weeks of effort I was able to produce an app that allows you tube videos to be cast from windows phones. 

So far the response has been pretty positive.  It took a few weeks before it showed up in the store but as of last week the acquisitions grew from basically none to over 1000. 


I have included a banner ad at the top of the app.  So far the ad impressions seem pretty steady. I use pub center as my paid network and ad duplex for affiliate advertising,  See ad duplex graph below.


Anyway regardless of whether it makes any money this app has served its purpose by giving me another device to cast videos with.  If you have any feedback or feature request leave a comment or send us an email/tweet.

Thursday, July 7, 2016

Microservices

There has been a lot of hype around microservices over the last couple of years.  I've been doing a fair bit of research and experimentation with this architecture and think it is the perfect fit for certain large project but needs to be adopted with very careful consideration. 

The positives are undeniable, having independently deploy-able, language agnostic services that can be tested in isolation definitely has the potential to scale well.  This will also add much needed flexibility that is lacking in many complex systems. 

However for many projects this architecture will introduce significant real world challenges including:

Code Reuse: When I started looking into Microservices the following question kept coming up "Where should I draw the line between having shared class libraries vs moving common code into a new shared services?"

Shared class libraries are frowned upon by many purists because it goes against the independence paradigm of microservices and will thus reduce some of the benefits of having services that are truly decoupled .  However not having a shared class library is likely to result in significant refactoring of code when logic that should of been shared is moved from one service to another.  This has the potential to be expensive and may result in many other interdependent services being affected. Obviously this kind of problem exists with non-microservice architectures however changing a class library, compiling and then fixing every compilation error as well as using built in refactoring functionality in IDE's such as Visual Studio is likely to be easier than refactoring services across a varied technology stack and having to rely on excellent unit test coverage to ensure everything is picked up.

 As is often the cases with tight deadlines and limited budgets there will be cases where moving common code into a new service becomes too costly and/or risky and developers will end up redundantly replicating code which breaks the DRY design principle and will reduce the overall maintainability of the system.

Debugging: It is likely to add complexity to debugging when a developer needs to step through code across independent, queued, services calls through logic that is implemented in a variety of technologies.

Language Agnostic: One of the commonly spruiked advantages of microservices is that they are language agnostic. However without careful consideration this can lead to the creation of a very complex technology stack.  This may make maintainability an issue because software currency upgrades and patches will become more complex and because finding experts who have experience with a varied technology stack become more difficult to find.

Version and Deployment Control: This one is pretty obvious.  It can be difficult enough trying enforce consistent and understandable version numbering accross an n-tiered application.  Try having hundreds of services and multiple persistence repositories and this can get very confusing and difficult to control.

Refactoring: Undoubtedly deciding when to create a new service, merge two or more services, or split existing services into multiple services will be a relatively common occurrence.  This will have a cost because merging or splitting services could result in hundreds of services and potentially thousands of test cases being significantly affected.

So in summary, microservices architecture certainly has some advantages but it will work best when some very careful guidelines and standards are put in place across a project team to address some of the issues I've detailed above. 

Thursday, May 5, 2016

Location services shortcut

We've recently released a new android app 'location services shortcut'.

It allows users to quickly navigate to the location services setting on their android device simply by opening the app.  As location services is often a major battery drain, and because of privacy concerns   many users may want to turn off this setting except when they specifically need it for navigation purposes.

This app is mostly targeting older android versions as well as certain ROMs and OEM versions where location services is not available as a shortcut in status/notification bar.

You can download 'location services shortcut' for free from the Google play store by clicking here.

Tuesday, August 4, 2015

Top 10 best timezone converter apps

Looks like our app got a mention as the token windows phone app. See number 10. Full article here.

Saturday, April 4, 2015

New versions of 'Cricket Updates', 'TimeZone Converter' and 'Convert My Units' Released

Over the Easter long weekend we've taken it upon ourselves to catch up on a few outstanding updates.  They are as follows:


Cricket Updates v1.1
I fixed a "loading screen of death bug" that was occurring sometimes when the live scores web service we use was having issues.  From now on; if any of the web requests fail this is detected more quickly, the progress bar is hidden and a nice error message is shown in the appropriate section of the app.


TimeZone Converter v1.4
The 2 major complaints I see in the comments about this app are:

1. Why can't the app just remember the 'from' timezone that I inputted last?  When I created and was alpha testing this app I was travelling a lot and found it annoying that the 'from' timezone always remembered my last choice.  I instead thought it would be much nicer if the 'from' timezone was automatically selected based on the phones location.  However judging by the comments and emails I've received; our users seem to disagree.  Therefore I have just updated the app to always remember the 'From' and 'To' timezones.  Note: In a future update I might make both options configurable.

2. Why do I have to look for cities with the timezone I want, I just want a list of generic timezones?  As some windows phone and windows RT devs may know the full .net timezone functionality is not included in the cutdown API we have to work with for mobile devices.  To get around this limitation we have downloaded the zoneinfo api and converted it for the compact framework.  For more info about how we did that check out this post from 2012.  Unfortunately all the generic timezones seemed to be wrong when I used this API.  At the time instead of fixing the problem I decided to just remove them from the app as I was on a tight schedule. This decisions has led to so many complaints from users who complain that their city is not in the list and they just want to select a generic timezone.  So finally yesterday I decided to start investigating the issue.  I was able to find a pattern in the problem and managed to write an adapter class that identified erroneous records and overrode them.  However on further inspection I discovered that the problem was not in the API but was related to some bad data in the etcetera.dat file that is included with the zoneinfo api.  After seeing that I just fixed the data up and threw my adapter class away.  So now we have a new section with the heading 'etc' which includes a list of generic timezones (see screenshot below).


I'm sure the Americans will still complain that I haven't included specific rows for Pacific Time, Central Time, and Mountain Time etc; but unfortunately those values are not 'out of the box' entries in the tz database.  At least this should be a step in the right direction and I plan on adding that functionality in my next update.

Convert My Units v1.3
As this unit converter also converts timezone in the same way as TimeZone Converter I have applied the above fix ( detailed in issue 2) to this app as well.

Enjoy!




Sunday, October 20, 2013

Mayhem Software apps featured in windows phone store

Over the last week we have received multiple emails from Microsoft letting us know that our apps Timezone Converter, XKCD Viewer and Convert My Units have been featured in the Windows Phone Store (see screenshot below of Convert My Units). The free exposure has been nice and getting an endorsement from Microsoft on the quality of our apps feels great too. Click here to see the factors that Microsoft use to determine which apps will be featured on their store.


Tuesday, May 28, 2013

Convert My Units V1.1 is out

We recently updated our app 'Convert My Units'. Here is a rundown of the main changes and how we made them:

Negative temperature input handled
Not sure how this issue got by us in v1.0, but when trying to input temperatures the user was only given a number-pad with no minus symbol. Fortunately the following comment alerted us to the issue:

Would give 4 stars if Temperature conversion fixed: NO negative temperature input. If not interface is pretty good, I mean intuitive.

This is an easy fix.  Essentially we just needed to change the input scope on our input textbox for temperature from "CurrencyAmount" to "CurrencyAmountAndSymbol" as per below:

 <TextBox Name="textBoxTemperature" Text="1" InputScope="CurrencyAmountAndSymbol" />

Selecting of results for copy/paste handled
This is one feature that is pretty useful in a unit converter, as user's may want to transfer results from our app into an email or document without having to transcribe.  in v1.0 our results were displayed in a textblock which is a control that does not allow text selection.  The best solution seems to be to replace the textblock with a textbox.  However using a vanilla textbox looked a little "cheap" so we needed to override the style so that the textbox looked like a textblock. 

To do this we just needed to add some custom style to our xaml page as per below:

 
<Grid.Resources>
<Style x:Key="ResultsTextBox" TargetType="TextBox">
<Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}" />
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<ContentPresenter x:Name="ContentElement" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>

...and then reference the style "ResultsTextBox" in our textbox

 <TextBox Height="71" Foreground="Red" Margin="10,-5,0,0" TextAlignment="Center" FontSize="40" FontWeight="Bold" Name="textblockVolumeResult" Text="" Style="{StaticResource ResultsTextBox}" />

Background color added to listboxes to improve readability
We have also received some feedback saying that sometime certain values were difficult to read because of the background image and the fact that the selection listboxes were transparent.  The solution was to add some background style to the selection boxes.  As all Windows Phone apps need to handle the phones default light and dark themes the best way to do this was just to leverage the phones static resource style which automatically adapts to the phones theme.  So for each listox we just set the Border Brush and Background to the static resources used by the default text boxes.  See below:

<ListBox BorderBrush="{StaticResource PhoneTextBoxEditBorderBrush}" Background="{StaticResource PhoneTextBoxBrush}" Foreground="{StaticResource PhoneTextBoxForegroundBrush}" Name="listVolumeFrom" BorderThickness="1" Margin="0,0,60,0" ItemContainerStyle="{StaticResource ListBoxItemStyle1}">

 
See the following screenshot of how this looks.  These static resources have built in opacity which looks quite nice with our panorama background image.



Summary
So that's a majority of the changes. So far the response has been pretty good since the updates release about 5 days ago.  Advertising revenue from this app is up significantly and it has reached the top 10 unit conversion apps in the following selection of countries:

Germany - 5th
Ireland - 8th
New Zealand - 9th
Great Britain - 10th
USA - 10th
Australia - 10th

We have just started planning the next round of improvement to this app and adding a currency conversion component seems to be at the top of the list.   If you have any feature requests or suggestions leave us a comment.
 

Thursday, March 7, 2013

Cricket Updates

Our latest app cricket updates is now on the windows phone marketplace.

It combines results, lives scores and news into a simple, clean and intuitive interface.   It also shows a live tile with the latest score.

Check it out here.

Wednesday, March 6, 2013

Trialling Nokia Ad Exchange (Inneractive)

Our latest app cricket updates hit the windows phone marketplace recently.  It basically combines cricket results and news into a series of lists encapsulated in a panaorama control. 

As with most of our other apps we have chosen to make cricket updates free and ad-supported.   However instead of using our usual ad network pubcenter, we decided to try out nokia ad exchange.  So far the results have been interesting. 

I't s still too early to tell as the app has only raised 731 ad requests, but the early indicators would suggest that we could expect fairly similar results to pub center.  (See screenshot below).


One thing I like is that nokia ad exchange provides a lot more analytics than pub center.  As you can see in the screenshot above the click thru rate has a huge impact on eCPM.  Fill rate is also useful, especially if we want to target different ad networks based on geographical location. 

So far the jury is still out on nokia ad exchange.  But given the initial results I believe it will most likely become part of our future strategy.  Particularly in markets where pubcenter's eCPM is almost non-existent.

Tuesday, January 22, 2013

2012 in review

Well 2012 was an interesting year for Mayhem Software. Between 1/1/2012 and 31/12/2012 our metrics were as follows:

Downloads
  • Total Downloads: 115,721.
  • Total paid: 40 ($0.99/unit) 


Advertising
  • Total Ad Impressions: 18,181,985 
  • Total Revenue: 4,967.55
  • eCPM: 0.27


It was a roller coaster year with some very promising moments but it was ultimately financially disappointing.  $5000 split between the two of us covered our costs and resulted in a nice bit of spending money but it certainly won't pay the rent.

We had a promising 3 months period whereby revenue was between $700 and $1200 / month. Unfortunately pubcenter eCPM has dropped significantly since then and we are now only making about $250-300 / month even though the number of ad impressions we're getting is roughly the same.

The most important lesson we learnt is to beware of relying purely on advertising for revenue as the returns are very volatile.  It still hurts to see us consitently reaching about 2 million impression / month and yet seeing an eCPM below 0.10, when 6 months earlier it was averaging 5-10 times that.  It is for this reason that we are currently moving away from pubcenter and experimenting with other advertising networks.  The nokia ad exchange is looking particulalry promising and we're currently awaiting approval for an account so we can test it out.

So based on the above 2013 will be about diversifying our business as much as possible by attacking multiple revenue models, advertising networks and platforms. We've got some great app ideas and are looking forward to getting them out over the coming months.

Sunday, August 5, 2012

Our latest app view tube is out

Our new app view tube is out.  It basically allows the uer to search our three favourite video sites in one action and easily compare the results. 

The user just types in a search term and the app combines the results from youtube, vimeo and daily motion into a pivot control.

 

So far the results have been very promising.  On it's first day in the marketplace it got about 1500 ad impressions which is not a bad start.  Hopefully tomorrow is even better.
Check it out here.

Thursday, July 12, 2012

Timezone converter featured in Vodafone top apps

I just found out that our app Timezone Converter was featured as a windows phone top app on the vodafone australia blog. 

Check it out here.

Wednesday, June 27, 2012

Finally in top 50 in USA and Britain

I just checked and Snowball Ninja finally made it into the top 50 free shooter apps in the USA and Great Britain.  This is good news as being a pubcenter ad supported app, these two markets along with Germany and Italy seem to pay the best eCPM (rate per 1000 impressions).

Some of our latest marketplace rankings are:

Finland - 18th
Australia - 26th
USA - 45th
Italy - 47th
Great Britain - 48th
Germany - 48th

We were just accepted for bizspark

Today we got a couple of emails letting us know that Mayhem Sofware has been accepted into Microsoft Bizspark program which provides support to startups.

The introduction email says we get the following benefits.:

1. Get your free software
2. Profile your solutions
3. Market your stuff
4. Find funding
5. Find offers and connect with others
6. Build your team
7. Access Training and support


One thing we're going to find useful is 2 years / $60,000 worth of  Windows Azure hosting. 

Resource  Monthly Benefit 
Compute 1,500 hours of a Small Instance 
Storage  30 GB
Storage Transactions  2,000,000 
SQL Azure  5 GB 
Access Control Transactions*  500K 
Service Bus  3,000 hours 
Cache  128 MB cache 
Data transfers (WW)  35GB Out Free In  

 Having worked at two previous start-ups I know that companies need to carefully consider their product and hosting choices. Something we've been careful to avoid is what used to be called the slashdot effect.  This is a situation whereby a strartup's web product gets a sudden boost in exposure and their hosting package cannot match demand.  Therefore we've been avoiding making apps that rely heavily on third party hosting.  When choosing a leaderboard solution for our new game Snowball Ninja I did a fair bit of research and was luckily to find mogade which offers a free and seemingly scalable online leader board solution.

So with 2 years/$60,000 of Azure hosting expect to see some cloud based windows phone and windows 8 apps being developed by us in the near future.