Horizontal Gradient Colour Picker

I needed this week, a particular kind of colour picker.  I couldn’t find one so I made one.

I tried using a gradient background, but was unable to find a way to pick the tapped colour out of it, even though I could get the POINT co-ordinate.

Instead, I had to do it like this.

It isn’t a custom control, just a usercontrol so I can re-use it.

It’s a Image of the gradient, and in the background it holds the original image as a WriteableBitmapEX.

On the right is a grid with the background set to the colour selected.

On the Tap event I got the position of the tap along with the width of the visible image control (as it could stretch with the users screen).

Then I bilinear resize the background image to match the visible image and grab the pixel from the tap events position. Push it back into the property and ta-da!

It’s now getting some further work (stop the image from resampling resampling if the image hasn’t resized (speed and avoid loss of quality) and it would be great if it set the colour while holding so you could drag a finger/cursor and see the color change without lifting).  But this first iteration was interesting so I wanted to share.

I should note; this binds to a string property.

Product Hunt

As a side project, I have almost finished building a Product Hunt client for Windows Store.

Hopefully the first beta submission gets through store approval in the next day or so, then I can start closed testing.

Further; I’ve applied to Product Hunt to see If they’ll permit me to get write access also to their API so the app can up-vote, comment and maybe even post. (Normally their API is read-only, but as they don’t have an official Windows Store app maybe they’ll make an exception???  Win-win)

Fingers crossed…


In the Lab: Voyer (downloads and more)

Currently completed for the next release of Voyer:


  • Green Text: as requested Green Text is an integral part of 4chan, so I have finished setting the colour coding in comment text as appropriate.
  • Fixed issue where if a thread doesn’t load, it might not refresh either. Now it can tell there was an issue and re-try.


  • Faster Downloads: When saving WEBM video, Voyer will now first check if it has cached the file and if so copy it to your save folder.  If it doesn’t already exist in cache then it will download it as normal.
  • Better Download Naming: Downloaded files were named after the Reply Number, now they are (correctly) named with the same file name as the original.
  • Improved Download UI: Now when downloading a WEBM, the thinking and thumbnail image no longer interrupt your viewing and it downloads in the background giving a toast notification when finished.
  • Improved Download All: Like individual downloads, when you press Download All, you are no longer required to wait for the downloads to finish.  They happen in the background (with Toast notifications on each completion) even if you navigate to a different thread or board!

More to come for the next release at the end of this month,


Fun with IAP – Investing in a Robust Subscription Licensing Model for Simple PoS

About a month ago, I spent some time focusing on the license model for Simple PoS.

I wanted to keep it 100% in store, in keeping with the “simple” motto.  Fast, clean, easy and no hidden scary bits.  It also had to not get in the way of my 1 click App Store install.

Other Point of Sale apps in store often require external sign up to web sites and services. Free to download initially, but there is then a process to enter personal details, contract sign up, payment methods, etc.  I thought surely I could do this beter and all without leaving the safety of the Store.

And you can, with some thought.

IAP Durable has been my mainstay in other apps like Voyer, Chains and Thought Valley;  Buy something and it’s yours for ever. Easy peasy. That wasn’t going to work for obvious reasons on a subscription service as it never runs out.

Then you have consumable with a time limit; This sounds like the clear choice but on closer inspection it would be nasty for the users; Take for example a user buying a subscription for say; 3 months. They would then either:

  1. Not be able to renew until AFTER it expires (which is lazy, and besides; what if someone else without purchase rights is using the app when it runs out?).  Or,
  2. Would have overlapping IAP which don’t compound (I want to ad 3 MORE months to the end, not 3 months from today when I have a week left on current subscription)

So, enter Developer Managed Consumables. Like Gold or Coins in an App Store game I’m accepting the purchase and adding to an expiry in the database (as Simple PoS has a database hosted in Azure and cached locally anyway)

Then that expiry is what the app uses to keep licensed, not an IAP lookup like you would do with the other types.

This also allows us to easily implement my demo scheme which is 100 transactions without subscription. Gives people a great chance to trial the software, while also gaining for me that advantage of the user getting a real taste for the software before committing to it.

So by doing it this way we’ve ended up with a simple 1 button subscription purchase and no click at all for trial.  All contained within the store.

Staying within the store brings.

  1. Familiarity to users.
  2. Simplicity.
  3. Security for both me and the customer.
  4. Ability to share with non Windows store apps in the future as the purchase isn’t retained in the store IAP, but in the database.
  5. Can integrate the purchase button into the app itself anywhere that makes sense.

As a further safety; you can log the purchase in the customers database too.  Then you get to keep an audit trail if there are ever any issues.

It takes more work and thought but it gives a far superior experience to the customer.

Valley Software.