Jankteki 0.6 released: User Notes

A couple of weeks back, I subtly released Jankteki 0.6, which brought with it a refactor, lots of instability, and a feature that I’m hoping will be useful to people that aren’t me: The ability to add user notes against a user on jinteki.net.

Have you ever added a friend on Jinteki and forgot why they’re there? Me too – now I don’t need to, I can add user notes. Here’s a demo of it in action:

As I said, it has brought with it a bit of instability, and it is still in its early days in terms of quality / interaction / etc. But I need to tell people about it, in case they think the software got buggier for no reason whatsoever. I also think it’s a nice basis to build further features upon, and want to get input on it as early as possible.

One of the silver linings of the breakages is that it has led to me tightening things up in the code base.

Scarily enough, there are now just shy of 1500 users of this extension now, and when it breaks, it seems to annoy people. Going below 5 stars in the chrome extension store gave me some real impetus to try to stop that all happening again.

There are now some tests, and build scripts, and stuff that makes it look like I have any idea what I’m doing, to aid with keeping things stable in the future.

If however, something does get through these very porous nets – head on over to http://github.com/simons/jankteki to raise a bug. There’s a proper readme over there now too, so that should give you all of the information needed to get problems sorted in good time.

And if you have no idea what I am talking about, but do know what Android: Netrunner and jinteki.net are, download the Jankteki extension from the Chrome webstore. It’s pretty useful.

Jankteki v0.4.0 released: fixes panel

The more eager eyed Jankteki users may have noticed the latest release. It consists of a small in-game ‘fixes’ panel where you can manually manipulate the game state without having to look up relatively arcane chat commands.

Here’s a video of this feature in action:

It’s the first interaction I’ve done with the game directly and was made pretty simple through Clojurescript / Om’s use of websockets. It was my first experience inspecting websocket frames through the Chrome Dev tools, and it must be said – I found it to be an utter joy. Hopefully this leaves room for other enhancements down the way.

In the meantime, the next slate of work is going to be around creating a fuller user-model – adding notes, annotations, that sort of thing. Maybe even the dreaded “shitlist” feature. More information on all of this / priorities etc can be found on my Trello roadmap

To keep up with this stuff, you might follow me on twitter (but this comes with its own price), you could subscribe to the YouTube, or you could just watch this space.

Again, if you haven’t yet, and this might be useful to you – download it from the Chrome Webstore and raise problems / missing features / pull requests on the Jankteki GitHub page.

Jankteki: a Jinteki.net Chrome Extension

In the past year or so, the collectible card game, Android: Netrunner has just about taken over my life. I won’t go on about why here, but it’s great. You should play it.

One of the more popular ways of playing it is through an online open-source implementation, jinteki.net. Legally dubious, it’s a Clojure implementation of the game – involving a huge percentage of cards, providing automations for 1000s of rules and all sorts of interactions / exceptions / custom rulings. Needless to say, it’s a fantastic amount of effort being provided by a dedicated team of developers, led by Minh Tran.

As the game and platform have become more popular, the types of players on there have varied with it. More players is good, it’s more people and decks to play against. It also comes with a trolly underbelly. Ragequits and rude users used to be unheard of there, they’re now part of the landscape.

Enter: Jankteki

Navigating all of this can be frustrating at times. Whether it’s remembering who the bad players are, or looking for people you know to play (or watch play) – these are currently hard to do. And improving the platform at the same time as keeping up to date with card implementations is a slow process. So I built myself a tool – Jankteki, a chrome extension for jinteki.net.

I intend for it to be a suite of tools to make using jinteki.net a slightly better experience day-to-day. It’s called Jankteki, because the hacky nature of building features over a ReactJS UI makes for flickers, jank, and breakages all over the place. So use it at your own risk.

The only real feature currently implemented is friends, which you can see wonderfully narrated here:

Why not raise a PR?

I know a bit of Clojure, and I enjoy writing it – but I’m nowhere near being able to contribute to a project the scale of Jinteki. There’s also the fact that my roadmap might not correlate with the Jinteki roadmap, I have features planned to scratch my itch that might be a year or two away from being even discussed in the main repo.

Some of them might not even be the job of the main webapp.

And what is this roadmap?

The full in-progress roadmap can be seen on a Trello board I am working from. But here’s a quick overview (it is completely subject to change):

  • I’m aiming to put in a toolbar for running console commands (deal net damage, remove counters, etc) in order that you don’t have to remember syntax or look it up every time the game state needs manually adjusting.
  • Notes for users. I constantly forget who people are from their usernames, a notes field could track that. It could be used to remember what type of decks they play. Or even to note who “gg”s before they leave (this is disproportionately important to me).
  • The killer feature I’ve talked about, but not implemented yet (I half implemented it and took it out), is some sort of bad-players list. Just a way of flagging a user visually as someone to avoid in the future. It would purely be a personal shit-list, not like a communal feature – both by design, and cos it’s outside the scope of this thing.
  • Game log recording / analysis. This sits in the “I’m unsure this would ever become a feature of the webapp” column. But I love the idea of logging wins and losses vs opponents, factions – methods of losing – and obviously which deck you were playing as at the time. Just as a way of tracking how you’re getting on and what works.

Problems

Building this plugin hasn’t been smooth. React’s virtual DOM makes it a nightmare to manipulate constantly changing elements – an element that indicated a friend two seconds ago may contain something else completely.

This plugin is also tightly coupled to class and element names in the jinteki.net codebase, if they change something, we’re always going to be playing catch-up. I’m ok with that. I don’t know how Minh will react to the existence of this (or if he’ll even care :D), but I hope Jankteki will benefit the Jinteki.net team in both taking the demand for certain features, and also proving and disproving features before implementing them.

Links for Jankteki

So where to get it?:

And yes – it’s a bit rubbish at the mo, but it proves a concept, so please be open minded with it. There are bugs with pinned friends not showing when navigating to pages, if you have issues, try going directly to http://jinteki.net/play or just refreshing the page – I am actively working on that.

Also – things are liable to break, pre version 1 (I don’t know what that will look like), I’m pushing to the web store as often as I’m adding features / fixing bugs. So prepare to be annoyed.

End of / New Year update (2014/2015)

I’m not going to blather too much on here. Just dot down some bullet points to update you and remind my future self how things are going:

  • My running streak is still alive, it hit 3 years as of yesterday. My real celebration happened in October, when I passed day 1024:

  • Weight is once again well up. This is a problem I continue to have despite putting in 40-60 miles most weeks. It’s the result of a bad diet, a complete lack of discipline, and the high mileage.
  • I read “Racing Weight: How to Get Lean for Peak Performance“* over the Christmas break. It has given me a lot of ideas about how to lose weight while doing my lengthy commute runs.
  • One of the things it recommends is to track body fat rather than weight. So I got myself a set of Omron BF508 Body Composition and Body Fat Monitor Bathroom Scales* in the Amazon Boxing Day sales. I don’t know how they compare to “accurate” methods of measurement. It is a baseline from which to track my progress.
  • According to the book, I’m in the 5th percentile of “athletes” of my age. I’m not an athlete, but it gives me an idea of what other people doing a similar workload to me carry. It also tells me that maybe I should look after myself better.
  • Currently, I’ve marked the book as 3 stars on Goodreads. I shall revisit this in about 6 months and review it based on my results.
  • I once again intend to update this thing more, as a blog that reflects me and where I am right now. Expect more running, more tech stuff, as well as some reflection on the things I have consumed. Revisiting that stuff is both rewarding and useful. I should do it more.

* I’ve stuck some affiliate links in there. Delete them if you care.

Passive Mileage

In personal finance, they often talk about ‘passive income’ and making your money ‘work harder for you‘. The idea being that you set-up a side project which starts trickling in a bit of surplus cash each month without having to do any extra work. It’s not something I do – most of the traditional ways seem a bit leechy and middle-manny for my liking. But even so, it is something that has always stuck in the back of my head.

Before I started streak running, 20 miles in a week was a great week for me. When I started doing 2 miles a day, I realised that I was getting in 14 easy miles without even trying. It reminded me of this passive finance idea. Passive mileage, if you will.

Last year, about 15 months into my streak, I moved to a house which was 5 and a half miles from work. My workplace provides showers, and so I started running in to work 2 days a week. My passive mileage had doubled.

Since then, I have gradually grown it, to the point where it’s not unusual for me to do 4-5 11 mile days on the bounce. I never intended for this to happen. I guess I just enjoy the commute – it’s as fast as public transport, cheaper, and it lets me indulge in hours upon hours of podcasts. Without going out of my way, my mileage now always breaks 30+ in a week

This doesn’t come without cost: I find eating well to be a challenge. There have been some weeks where, despite running 40+ miles, I’ve still managed to put on considerable weight. It’s tiring – I’m not sure that come Friday, I’m that pleasant to be around (insert a joke here about Friday being no exception). And it limits what you can run at the weekend. Thanks to passive mileage, I no longer have a Long Slow Distance Run. It would be a foolish recipe for injury if I didn’t rest up at the weekend.

But these are all things I’m working on. I’m measuring calories, and the weight is coming down. And I’m not currently training for anything. Needless to say, when I do train for a race again (I have my eye on a couple), this routine will all shift up.

Is passive mileage for everyone? Goodness, no. But it works for me, I mean – it doesn’t make me run fast, it doesn’t make me run particularly far, but it does allow me to run a lot. All without having to adjust my normal routine. And that’s why I like it.

Quantified Fatigue

I have had a post in draft since the beginning of the year, all about analysing my running streak as it stands. It picks out the miles I’ve done on it, average mile per run, distributions of milages, that sort of thing. Loads of self indulgent wank, that I felt at the time was “interesting”. Reading back on it now, it’s anything but.

In the middle of composing it (according to WordPress, I last touched it 11th February), I stopped measuring pretty much everything. I just got sick. Sick of weighing myself. Timing myself. Caring how far I had ran.

Measuring shit definitely works – I have no doubt of that. Anytime I’ve measured something, I have consistently optimised towards that metric – be it weight, speed, bacon eaten. In the case of weight, the opposite also holds true – I put on about 2kg in the month following my “sick of this shit” tantrum.

I was still exercising plenty – running at least 30 miles per week in that time, in addition to a couple of BJJ sessions. I just happen to have a better appetite.

All of this has made me think – is the value in the “quantified self” movement that people are explicitly going out of their way to measure and observe things that they would like to optimise? If we were able to get these metrics at any point without installing apps, or buying devices, or just plain writing them in spreadsheets, would this value disappear? Beyond being able to say “oh, I’m fat because I do little exercise and eat too many calories” (unlike all of those other fat people), why is a graph such a motivator?

I understand that the whole thing is more faceted than “MAKE THE GRAPH GO BIGGER” – there is accountability (to both the tech and other people), QS allows you to find patterns and correlations in the data that you might not have otherwise noticed, as well as a billion other reasons for its existence. It can’t be a coincidence that the latest Apple and Samsung products have a “health & fitness” spin on them.

I should note here that I’ve not touched this post since March. The above feelings remain true, but I am a flip-flopper. Picking it back up again in mid-June:

Since I started writing this post, I am once again measuring stuff. I want to lose weight (again) because the metaphorical yoyo has retouched the hand. I’m measuring my calorie intake on MyFitnessPal, and that hooks up passively with Endomondo to measure what I’m burning.

But my reservations about QS and “Quantified Fatigue” stand – measuring everything explicitly is too difficult, and I’m concerned about how useful implicit & ubiquitous measurement would be after the fact. There’s no real conclusion here – implicit & ubiquitous doesn’t exist, it remains to see how iOS8 & the S5 will perform in this area, and I’m likely to lose a bunch of weight, get bored and put it all back on again. I just figured it was about time I did some writing here, terrible or otherwise.

2013: So How Did Those Goals Go?

My last post was entitled ‘Goals for 2013‘. Reading back on it should be quite depressing because I’ve missed just about every objective I set myself:

I didn’t really take up BJJ again until about 3 weeks ago when I discovered a Caio Terra affiliate around the corner from where I work.

The obstacle race never happened, I flaked out due to a mixture of my stupid subconscious and other commitments.

I didn’t get started properly again on the ‘big’ fitness tool idea I had. It’s OK though, I’ve had an idea for a new tool that I can roll that into. I’m sure that I will definitely get round to making that.

MMA-Urls is still dead.

I still suck at guitar and uke. I’ve not practiced any of that. I did invest in LSDJ and a Gameboy though. I reckon spreading myself even thinner is definitely the solution.

I’ve barely progressed in German.

And I’ve not written a single blog post since that last one where I said I was going to write more blog posts.

So yeah – success all around.

Actually yeah, really – success all around. I genuinely intended to do all of that stuff. I just didn’t. I’m not going to beat myself up about it. There are a billion and one reasons why none of that happened, the main one was that it ultimately wasn’t important.

It’s not like I’ve sat on my arse all year – work has been busy (we have quite a sweet little product about to go live to the world, you might hear me blather on about it on Twitter in the new year), I’ve bought a house, and then took the massive step of moving in with my girlfriend and her kids. And that’s without all of the other tedious rubbish I got up to that would be better left undocumented. I guess ultimately, this was the stuff that was important, and so that was what got done.

If there’s one thing I’ve noticed in myself this year, and I thank running for this, it’s that I’ve become more reflective. In times past (like at the beginning of this year), I’ve very much got caught up in the 43 things, bucket list, if-I’ve-not-done-this-this-this-this-and-a-bungee-jump, experience-first mentality.

If I’ve seen something happening, I’ve thought, “shit, where’s my camera?” without really knowing why I’m taking photos (is it for my own recollection? to show how interesting my life is? all of the above?).

I mean, these snapshots are nice, but at the same time – what am I missing out on? And who really cares?

If I die tomorrow, will anyone (including myself) really care that I never learned to play piano?

This might go some way to explaining why I’m quite a bit more low key on social networks these days. Facebook basically gets Dailymile updates and the odd accidental Goodreads cross post. Twitter gets my witless tedium. There’s the odd photo here and there, where I remember to upload them.

To bring this terrible, terrible piece of writing back on track, those goals I set still matter to me. They’re not what people tell me are SMART objectives, and I’m not sure they should be. These are just things I enjoy doing, and that’s why I will either do them, or I won’t. They don’t make me an interesting person, they’re not going to make me millions, and no one’s going to mention any of them in my eulogy.

Running goals went alright though – I ran further than last year (1157 -> 1657, exactly 500 miles further in fact). And the streak continues. I actually have 3 new draft blog posts in progress on that (told you I’d been reflecting), as well as a small php library (you probably shouldn’t use it yet though, the API is shit and not final). I’ll get round to publishing them soon. Probably.

Goals for 2013

This was an addendum to the streak post last week, but it has kinda developed a mind of its own, so it is now its very own post. Yay.
So what of the next year? Are we going for 700+ day streak? Am I going to define some new goals? Well I am, yes – the streak is too useful to just let go like that. The next big milestone will be 512 days, which comes around at the end of May – so that will be nice to aim for. And I have several new goals:

Physical

I’m hoping to support my running with some level of core / muscular exercise – I need to start up Brazilian Jiu-Jitsu again, it’s kinda shocking that I founded what has turned into one of the best BJJ communities on the internet (no thanks to me, mind), and I’m still not training it consistently. I can’t set a solid goal like blue belt, due to the fact that I ultimately suck at anything competitive, but something simpler like weekly attendance isn’t out of reach.

I also have my first obstacle race booked in March (another reason to train some actual core). And I have a silly pie-in-the-sky plan to run 31 miles on my 31st in June. So that should give me something to build mileage towards.

Projects

I’ve had a fitness tool in mind for a while now – I’ve told a few people the idea and it seems to get a pretty decent reception (it’s not a top-secret thing, I just don’t want to tie it down in writing, because I’ve not exactly specced it out yet – I’d be hugely grateful to discuss it or have it naysayed in real life if anyone fancies to talk over a pint or coffee or a pint of coffee). So with a simple data-collection part coded over the past month or so, I look to dogfood and continue with building a prototype over the next 3 months – it might go the way of dogfood and end up as dogshit, but I’m alright with that, having something to work on in my spare time is a great motivator to keep me skill-building, regardless of the outcome.

mma-urls is a link aggregator I built a while ago. It’s broken beyond disbelief at the moment, and traffic’s non-existant – I need to fix it pretty soon. I also have some nice features in mind for it, and some semantic-web goodness I want to inject into it (coding with RDF and the semantic-web at work has given me plenty of ideas, it’s just a matter of making time).

Skills

There are three skills I’m looking to develop over the next year, both major and minor:

  1. Music – 2012 saw me actually playing music again. It’s been a longtime coming. I joined the ukulele club at work, and I purchased Rocksmith. Both have been excellent motivators – I plan to keep up both throughout the year.
  2. Language – my German skills have remained dormant since 2004, the year after I returned from living there. I’ve been refreshing myself recently using the awesome duolingo and memrise webapps, and hope to improve that into the year – at least to the point where I can start reading German literature and hold a conversation decently.
  3. Writing – I have been completely overwhelmed by the response to my streaking post last week. Where previously I felt a need to only write geeky techy posts here, the response to the running one has made me realise that there’s nothing wrong with turning this thing into more of a hodgepodge of subjects. WordPress makes it easy for people to filter out shite that they’re not interested in using tags, categories and their associated RSS feeds. And it also results in me starting to consolidate content in one place all owned by me – I’ve previously fell afoul to publishing on various other web services to get around the single subject matter of this blog, as a result, I’m at the mercy of google and tumblr rather than just a single transferable webhost.

Tracking

To stay on top of all of this, I’m pretty much abusing Joe’s Goals to mark a tick against which ones I do daily (they should start paying me commission), and then getting a ‘score’ at the end of the day to let me know how I’m doing.

But aside from this rudimentary aggregation, I log workouts and running on dailymile, I track German progress at the aforementioned memrise and duolingo, and rocksmith does a good job of assessing progress on guitar – so I guess there’s micro-tracking elsewhere too.

I’ve actually trimmed out a few goals from here, because either they were ridiculously insignificant, completely unachievable (the 31 miles at 31 thing probably should accompany this cut, but a man can dream), or just made for too much to concentrate on. I’m probably spreading myself remarkably thinly here, but I may as well try to make hay as the sun shines and all.