Piste

Posted on June 29, 2023


Piste - a ski companion app


I'm pleased to announce Piste is now available on the apple app store

The ultimate app for skiing and snowboarding enthusiasts!
Track your location, access ultra high-quality trail maps, and share your on-mountain location with friends and family in real-time. Never worry about getting separated from your group again!

High quality maps
Discover hidden gems in over 130 European resorts with full colour trails and lifts based on grade and difficulty. The vector based maps are clutter free and sharp at all zoom levels.

Private Groups
Create and customise your very own ski group and invite friends or join others.

Planning
Place markers directly on the map and share lessons, meeting points and lunch spots with your whole group.
Location sharing
Took a wrong turn? See your entire group's location in real time, with additional stats such as altitude and speed.
Offline
Download trails for offline use* and minimise expensive roaming charges and signal dropouts.
Premium Features
We also offer affordable weekly or monthly subscription options to suit short skiing holidays with larger groups. This unlocks the creation of large groups of upto 20 members, the joining of multiple ski groups and increased offline map storage.
*Offline features available with select resorts and more being added every week. IAP may be required for large resorts due to download size.
Trails supported at resorts in Europe only, North America and other continents are not yet supported.


See more at https://pisteapp.com



Apple Pay - Software update required to add this card

Posted on September 14, 2021

​When adding your new card to apple pay and you have an old IOS version you'll often be greeted with this message:

Whilst there isn't a technical reason preventing you from adding the card, apple blocks the addition of the card until you update IOS or buy a new device.

Luckily there is a work around to trick apple's card registration servers into accepting that you have a newer version of IOS without upgrading. This is done by modifying a system file called SystemVersion.plist temporarily, completing the card addition and modifying it back.

Method

Firstly you will need to jailbreak your phone (we will un-jailbreak it later so don't worry). This is because we need write access to the system to modify the file.

For this google a suitable jailbreak for your IOS version, I was on 12.4.1 so I went for Unc0ver (unc0ver.dev) make sure you get a legitimate website.

Once jailbroken and Cydia has been installed open it:

You will need to find and install a file editor called Filza (use the search button to find this):

Open Filza and browse to

/System/Library/CoreServices/SystemVersion.plist

Once opened note down your current ProductBuildVersion and ProductVersion, taking a screenshot is a good idea you will need this to put your device back into a safe state or it will not reboot.

Here my version is 12.4.1 and my BuildVersion is 16G102. 
Next we need to find a newer IOS version to spoof, you can do this by finding your device on

https://iosindex.com

and locate a new verison of IOS and its BuildNumber, here I choose 14.0.1 and the build number is 18A393

Now update the Product Build number and IOS version to match the new version in Filza and SAVE


 # FROM THIS POINT FORWARDS DO NOT REBOOT YOUR DEVICE UNTILL YOU RESTORE THE ORIGINAL VERSION AND BUILD NUMBER OR YOU WILL BRICK THE DEVICE  # 

Now use the apple wallet app to add your card, everything should proceed successfully now.

 Once your card has been registered go back to Filza and enter your original build number and product version and SAVE

# IT IS NOW SAFE TO REBOOT YOUR DEVICE #

Congratulations the process is complete!

You can now un-install the jailbreak by checking the Restore RootFS option in the Jailbreak app - you will need to do this before opening any banking apps.

.


Smart Columns

Posted on February 26, 2021

Introduction

Smart columns are a great way for you to quickly calculate sums on your entire dataset, and have them just as editable as any other column!

Caveats

The editor does not function like a traditional grid based editor (Google sheets, Excel etc). In order to allow you to edit and insert rows/columns in multi gigabyte files with zero latency, the file is kept firmly on disk and streamed as you view it, because of this - there are limitations imposed on the smart functions which you would not normally expect:

  • The formula can only lookup values in the current row. Each row is processed individually and thus other rows are not referenceable.
  • Smart columns evaluate from left to right. If you want to reference another smart column, the referenced column should be to the left. This is to ensure there are no circular dependencies.
  • Deleting a source column will result in a #REF lookup error.
  • Saving the file will commit the smart column(s) the calculated value in each cell will be written to the csv.
  • You can then reopen the file to delete source columns

Operators

The formula syntax supports these basic operations, the syntax is parsed in a left to right approach (not BODMAS). Please use brackets to achieve desired functionality.

Operator
Description
+
Add
-
Subtract
/
Divide
*
Multiply
%
Modulus
&
Concatenate (Strings) 
(
Start group
)
End group
A-Z
Reference column
12.3
Decimal
FUNC(a,b)
Functions (see below)

List of functions

The formula box provides access to many functions that can be useful

Decimal Functions
Function
Description
CONCAT(a,b)
Appends b onto a
LEFT(a,x)
First x characters of a
RIGHT(a,b)
Last x characters of a
SUBSTITUTE(a, b, c)
Replaces all instances of b with c located in a
ADD(a,b)
Adds b to a (equivalent of +)
SUBTRACT(a,b)
Subtracts b from a (equivalent of -)
MULTIPLY(a,b)
Times a and b (equivalent of *)
DIVIDE(a,b)
Divides a by b (equivalent of /)
MOD(a,b)
Remainder of a by b (equivalent of %)
MAX(a,b)
Greater of a or b
MIN(a,b)
Lesser of a or b
ROUND(a,x)
Rounds a to x decimal places
POW(a, b)
Takes a to the power of b
IF(a, b, c)
Checks a is true, returns b otherwise returns c
COL(x)
Returns the Xth column
AND(a,b)
Checks if a and b are both true
OR(a,b)
Checks if a or b are either true
XOR(a,b)
Checks if one of a or b is true
EQUALS(a,b)
Checks if a and b are the same value
NOTEQUALS(a,b)
Checks if a and b are different values
NOT(a)
Checks if a is true, returns false, vice versa
GT(a,b)
Checks if a is greater than b
LT(a,b)
Checks if a is less than b

String Functions
Function
Description
Concat(string1, string2)
Appends string2 onto string1 (equivalent of &)
Left(string, No characters)
First X characters of the string
Right(string, No characters)
Last X characters of the string
Substitute(string, old, new)
Replaces all instances of old with new located in string
Trim(string)
Removes whitespace either side of the string
Lowercase(string)
Converts the string to lowercase
Uppercase(string)
Converts the string to uppercase
Reverse(string)
Reverses the string
Startswith(string, pattern)
Checks if the string starts with the pattern returns 1 or 0
Endswith(string, pattern)
Checks if the string ends with the pattern returns 1 or 0
Contains(string, patter)
Checks if the string contains the pattern returns 1 or 0
Len(string)
Returns the number of characters in a string
Regex(string,pattern,group)
Return the selected regex group from a pattern match
IsMatch(string, pattern)
Returns true if the regex pattern was found in the string

Conditional Functions
Function
Description
IF(condition, a, b)
Checks the condition and returns A if true or B otherwise

Lookup Functions
Function
Description
Col(index)
Returns the value in the specified column for each row (equivalent of A, B, C etc)

Examples

Prefix a £ symbol to A column values
\'£\'&A 

Find the Sum of columns A B and C, and prefix a £ symbol 
\"£\"&A+B+C 

Find the average of columns A, B and C
(A+B+C)/3 

Calculate column A with an additional 20% tax (rounded)
ROUND(A*1.2, 2) 

Extract the first name from a first/last pair using regex
REGEX(B,'^(.+)\\s(.+)',1)


Print even or odd if there are an even or odd number of characters in a column
IF(LEN(B) % 2, 'Even', 'Odd')

Swapping Columns A and B

You can add two new columns C and D,

C will reference B

B

and D will reference A:

A

Now save the file to commit both smart columns


Once the file reloads you can delete Colums A and B to leave only the reversed columns:

Checking a string contains Fish
IF(CONTAINS(A,'Fish'), 'Contains Fish', 'No Allergy')

Website Upgrade

Posted on February 24, 2020

Hello once again,

Welcome to the new look, the new site has been written from scratch using .Net Core, it's been a bit of a rushed experiment and there are a few teething issues.  

Over the coming weeks I'll endeavour to move the old site's content across and fix all the broken images and links.


Big CSV Editor

Posted on November 7, 2019

I'm pleased to announce the new CSV Editor is now available on the Microsoft Store.

Available on the Microsoft Store


CSV Editor is a full featured large comma separated list file editing program.

Using sophisticated skim reading and data streaming huge files can not only be viewed, but edited too, even if there would not normally be enough RAM.

  • Smart Columns allow the user to programmatically add additional columns using adjacent data and formula
  • Filtering can be done on a per-column basis
  • Sorting can be done numerically, alphabetically and by currency
  • Does not mangle leading zeros like many other programs.

Get what you need fast


Shed Championships

Posted on May 15, 2019


Shed championships is an reimagining of the classic card game Shit Head, one of my favourite card games from my school days

Available on the Microsoft Store


This story based card game follows the young James and his friend on night they"ll never forget

Features 

  • 10 Levels
  • Tutorial Mode
  • and a Quick Play
  • Free to download and play!

Shed was developed using game maker studio, assets were developed in inkscape.




Gallery for Wordpress

Posted on November 17, 2018

Want to manage your blogs photos directly from your desktop, phone or tablet?


Gallery for WordPress is a great tool to Upload, Update and post Images, it integrates into windows share so you can show the world your photo or latest creation with a single click.



  • Displays your blog as a "share" destination in any supported windows app.

  • Compose and publish image posts directly to your blog feed.

  • Supports multiple blogs simultaneously.

  • Effortlessly keep your metadata up to date.

  • Drag & drop uploading

  • Automatic image resizing for the web

  • Robust secure image uploading

  • Compatible with wordpress.com




Available for free on the Microsoft store:


Get it from Microsoft

Alphabetical Sorting without eating RAM

Posted on February 26, 2018

I was looking for a method to sort a really large data-set alphabetically without eating all a user’s RAM, or using disk space, nor have a user sit and wait for N² comparisons.

I found the answer in the form of a Trie-tree, a neat data structure that flattens ASCII characters into... well a tree. 


Lets say we have the following words:

  • Ape
  • App
  • Apple
  • Orange
  • Ore
  • Pear

A Trie Tree would represent the data in the following way:



Each node represents a character which can have 26 children (or more depending on the character set). A node can be marked as an endpoint (in red) to signal the completion of a character string. Duplicate starting characters in similar words only use one node between them, as seen with A P for ape, apple and app, this has the wonderful side affect of compressing the sort data-structure. Our input data-set contained 24 characters, the tree only contains 17 characters.

To retrieve an alphabetically sorted list of words, you can traverse the tree taking the left most node, checking if its an endpoint (marked in red) if it is - return this, if not - explore the left most child, unless there is no more children, then travel up to the parent and explore the next adjacent child.

Some caveats,

1. It"s not going to be great for supporting the full unicode character set. A binary tree would probably work better.
2. There is a overhead traversing the structure to add and retrieve the items, but compared to other sorts this isn"t extreme.
3. In this implementation only one copy of each word is returned. This can easily be fixed by keeping a counter at each endpoint for duplicates.
4. Features like #3 eat ram in every node. This adds overhead to the tree and the compression is less efficient.



Mini Golf Mod

Posted on September 5, 2017
GoGolfLogoMain

For the past 6 months I"ve been working part time to port my golf mod from CS:S to  Counter Strike Global Offensive

As of today, on the 10 year anniversary of my delving into modding counter strike the mod is released.

Released along side is the first map to work with the plugin - Go Golf, a 18 hole course set in rural Massachusetts:

Released on Steam

https://steamcommunity.com/sharedfiles/filedetails/?id=711504961

Website

https://files.jackdye.co.uk/gogolf

Screenshots









Love Bites

Posted on February 12, 2016

Jess is on a girl's night out, when suddenly she is bombarded by stage 5 clinger zombies. Will she fend of the creepers or fall dead over heels?

Love bites is a take on the classic arcade game Tapper with a dose of clinger zombies.

Features an arcade style game-play with internet enabled high scores

Play here: https://gamejolt.com/games/love-bites/80868

Credits

Made in 48 hours as part of #indiesvsgamers

Programming: Jack D
Art/Story: Krystyne M