littlelogs

Keep a social journal of your work progress as you make and learn things.

April 2017

josh

I’ve been nudging my #exist #android #customtracking beta testers recently, trying to get feedback (in traditional fashion, only 3 or 4 of the group bother to say anything), fixing some small issues, and doing some extra bits and pieces to round it all out, like writing some new insight types. The little feedback I have received has been positive at least, so I don’t think there’s too much left to do. When @belle has finished and tested it for iOS (maybe a few months?), then we can launch 😁

In the meantime I’ll need to work out what to go on with.

josh

Today, as a little side project because it’s a public holiday here, I took the Swedish subs for a Swedish movie @belle and I wanted to watch and converted them to English. The movie didn’t have any English subs available, so I wrote a little #python script to parse the Swedish srt file, send each section to the Google Translate API, and write a new sub file in English using the original metadata and the resulting translation. It probably cost about $1 - $2 to do, I estimate, not too bad — but the stupid Google API console doesn’t seem to be able to tell me the exact cost until it’s time to get charged. Oh well. The result was pretty decent for machine translation, though, I was pleasantly surprised.

josh

Okay, #exist web is ready for #customtracking. I’ll deploy that sometime in the next few days, then get the #android app changes merged so I can deploy a beta for testers that talks to the live server (currently testing custom tracking on our dev one). So early next week it’ll be out!

Also, if you’re an Exist user on Android, and want to help beta test, let me know. I could use some more eyes on it 👍

josh

Have been continuing to work on #exist #customtracking in #android the last few days. Getting closer to “good enough” for beta testers to have and use, although @belle and I have different ideas about how custom tracking should be used and how prominent its role should be in the app. Not something we can really know without more people using it. I am worried that we’re opening a can of worms by giving people all this power, and potentially they’ll want to do more and more with it until Exist is 90% custom tracking. But I guess if that’s what people want, we should give it to them…

Anyway, hopefully next week we can get it in the hands of people outside Hello Code HQ.

March 2017

josh

Got sidetracked by lots of #exist #support today. Not sure why, but we had quite a few random emails coming in. Some easy to deal with, and some from people who thought it was appropriate to send us a single vague sentence(!) to interpret. Still, haven’t had any angry people for a while, that’s something.

josh

Decided my project this weekend is to move my blog, built on very very old #php I wrote not long out of uni, to a static site generated by #pelican. Getting set up didn’t take long, but I’m glad I’m already familiar with #python as the docs are a bit lacking. Also, geez, all the free themes look designed by developers — a couple are nice but most are just passable and the rest are outright ugly.

I found a theme that wasn’t too bad and spent the afternoon customising it to match what I was after. Think that’s done, at least for a first pass, so tomorrow (or next weekend) I’ll need to export my old blog posts into pelican and then deploy the new blog (and some redirection for old urls).

josh

More work on #exist #customtracking today, letting users manage all their custom attributes and displaying them on the mood timeline to match the Android app.

I also spent a long time trying to apply for the compulsory worker’s injury insurance thing we need to set up now, even though it’s just me and @belle working from home. There’s only a couple of companies in Victoria that offer it, and man, they’re all so bad at online forms that even the one I ended up going with did not at all inspire confidence. Plus they ask for lots of numbers you’re supposed to just know, like next 12 months’ revenue and expenses. I hate doing this stuff and by the end it made me question whether it’s even worth running a small business. 😩

josh

Made good progress today on #exist #manualtracking — this time, making the necessary changes to the web interface. Back on the productivity wagon! A little more to do so users can edit and manage custom tags from the web, then some better custom entry UX in the Android app, then beta testing time.

josh

This week has been a write-off in terms of productivity. Spent a lot of time helping @belle hunt down that bug, did the necessary #support for people suspending accounts etc, and otherwise ended up doing various things that got in the way of real work. Oh well. Some weeks are just like that, right? Not sure if Friday will redeem the rest of the week or if I should just let it go and do something enjoyable instead.

josh

Spent a very frustrating afternoon with @belle trying to debug an esoteric timeout issue between her #ios app and the #exist server. For some reason, in certain conditions, all of her requests to the server hang for like 30 seconds, and then time out in the “ssl handshake” stage (verified on the server). I can’t find anyone else with this issue, and we tried a bunch of different things to fix it but were basically stabbing in the dark. To top it off, it’s not even consistent — requests made while the app is in the foreground do work, and occasionally the background ones do also. And browsers and the Android client don’t have issues. Just iOS. Argh! I’m out of ideas. Maybe if I wish hard enough it’ll magically fix itself…

josh

Did some more work on my #go parser today. PEG rules are really confusing me as the recursion is a lot harder to follow than using the EBNF style as implemented in rply, and parser library’s error messages are just useless. So I spent a long time going around in circles trying to work out why some new rules didn’t work. In the end I emerged the victor, though, so on top of previous rules I have if/else if/else blocks working now too 😊

josh

More #exist #android #customtracking fun today. Trying to design an alternative 8-day graph for the Today tab that’s a bit more compact and attractive than reusing the current graphs, as they’d all just say 1 or 0 anyway. So far I have some little ticks in pill shapes that look nice. I wish I could come up with something as readable that is more compact, but all the variations I’ve tried were harder to parse. Oh well, design’s all about compromises, right?

I guess I’ll leave it at what I have for now, and muse on it a bit while I work on the editing interface.

josh

Regular reminder that you can invite people to #littlelogs from your account page, and if you’d like to see a bigger, more diverse community on here, you should do that! There’s less point to logging your progress if you feel like nobody cares, so why not invite someone with similar interests who can like your stuff and post interesting stuff of their own?

Okay great, good job everyone 👍

josh

Made some more progress with #go parsing today. It’s lucky that I get a kick out of seeing basic syntax parse correctly because that’s still all I’m up to! I’ve got operator precedence set up correctly, I can assign things to other things, and I can define functions that take arguments and contain statements.

josh

Wrote some more #go today as I start to build my parser for a higher-level language built on Go. I’m thinking (but don’t hold me to this) that I’m going to copy Reason’s syntax as much as possible. #Ocaml but with a more C-like syntax should work well if I can make all the concepts work in Go.

Anyway, I made more progress this time, thanks to reading some examples grammars, so I feel like I’m slowly getting a handle on PEGs. So far I’m just building up the various types of literals, then I’ll start working on more complicated stuff like assignment statements and so on.

josh

Started setting up the interface in the #exist #android app for rendering #customtracking tags. There’s probably a lot of iterating to go on making it all look just right, but I think the first 80% is done. Next step will be to think about how the interface for tracking stuff (literally, typing in your tags) will work. We also want to make it easy to add and edit stuff, but don’t want to make people think they have to use it by making it too obvious with extra buttons everywhere and so on. So yeah, even more iterating to get it just right.

josh

So recently I decided I was officially giving up on porting Rply to #go. Porting was helping me understand the language, but it wasn’t that fun and I was really only doing it so I could get to the point where I could use it. That’s the fun part.

So I decided instead to use an existing parser called Pigeon that implements PEG (Parsing Expression Grammars) which boils down to a weird combo of lexing and parsing, with slightly different rules that can use lookaheads and stuff. I tried to implement a basic calculator example with it tonight and eventually understood it enough to build something non-trivial. Progress! Looking forward to writing some actual source code grammar and beginning a new language project.

josh

Woo! Got #customtracking working in a hacky way in #exist #android. Solved some minor issues with that on the server side, and then verified all works as it should. The next step will be to actually make a nice UI for adding and tracking various custom habits and events, and at some point I’ll deploy the backend stuff to the live server so we can test it for real with some beta testers.

I also spent some time helping @belle figure out more #ios #healthkit sleep logic. Getting closer!

February 2017

josh

First pass of the #exist #customtracking backend done today. Didn’t get time to make the custom Android client that can talk to it, ended up spending the evening helping @belle sort out some sleep logic for #healthkit stuff in #ios. Healthkit is like a dumb database returning low-level records, rather than giving a nice daily summary, so it’s much more akin to the crappier APIs I’ve had to integrate (cough-withings-cough) than the lovely ones like Fitbit’s. We’ll also have to implement custom de-duplication as healthkit won’t prevent multiple apps adding overlapping sleep records. Super fun times!

josh

Today I started setting up the backend architecture for the next big #exist feature, #customtracking. I’m pretty excited about it! I hope users will love it. We’re going to let them submit a daily string that’s just a list of tags, eg. "piano, meditation" which we’ll turn into individual attributes with a value of 1 for that day. It means that users can track whatever they want (binary habits and events at least, but not integer values) and we’ll transparently support it, find averages, use it in correlations and so on. I think it’ll only take a few days to get the backend done, then we’ll make a beta mobile interface to test how users will interact with it.

josh

Today I launched the Larder API docs and the related management bits on the site. Yay! This was the most popular request on the roadmap, although this time around I’m under no illusions that it’ll make a big difference to signups. It’s just another feature that rounds out what we offer and shows we’re serious. If some people then use it to write clients or integrations or whatever, all the better.

24 February

4 Heart 0 comments

josh

Finished the #larder #api stuff today! All the views for managing oauth clients and apps you’ve given access to as a user are complete. Just need to deploy it all tomorrow, then I’ll email all our users. I doubt there’ll be much immediate use, but it’ll be good to have it there.

josh

I finished the #larder #api #docs today! It’s so fiddly to include all the code samples and stuff, but now it’s done. My next steps are to build the UI for developers to create and manage their client apps in Larder, and make sure the oauth “authorise” page is all styled nicely, then that’ll be done.

In other news, I added the #changemap search field autocomplete suggestions to the “add a new suggestion” form last week, so you have to click “no, my suggestion isn’t any of these” if there are matches. And since then we’ve had zero new suggestions. It definitely works, I tried it, but I guess nobody has a new idea that isn’t a duplicate. Success? 🤔

josh

Not a lot was done today. I slept badly so gave myself permission to have an easy day. However, in the evening I managed to get some more done on the #larder #api docs I’m writing. Thankfully some of it can be copied from the Exist docs. There’s still a lot to do though. Literally a thankless task, but I want to write high quality docs so the barrier to people making a thing with the API is as low as it can be.

josh

I finished our #exist interactive report on what data you can bring from various apps. It’s simple, but fun to click around on I think, and will hopefully encourage 1) more users to have a play and then sign up, and 2) people with barely any data to realise not to bother.

josh

The new #exist weekly email went out this morning and though we didn’t hear a lot of feedback, two positive tweets will have to be the evidence that it was well received :)

This afternoon I started work on a new public page for Exist showing would-be users what data they can get from various services, and what they’ll have in total from the combination of those they use, hopefully making it clear not just which services we support but what they’ll get from each.

josh

Did a bit more work porting rply to #go this afternoon. Now I’m into building the parser things are getting tricky. #Rply is also barely commented at all so it’s often hard to follow. Also because #python is dynamic, there are no types for anything! So I have to be the human type inferrer. It’s been a bit frustrating working out what type a variable is (or what a dictionary holds) when I can’t see the raw values going in.

josh

Finished and deployed #exist’s new weekly email today. Tested it against some random users to make sure nothing broke. Seems all good. The next one will go out Monday!

josh

This week I’ve been working on #exist’s new weekly email. I’m using a template based on the recent end of year one, which was well received, but have got it almost set up with all the weekly data I want to share. I just need to tweak the styling on some parts, like the correlations, but it should be ready by next week. Hope people enjoy it.

In other Exist news, we did okay converting many of our users who signed up right after Christmas, so we’re on a new maximum paid user count, and our average weekly income is quite high too. I think listing the yearly plan on the home page (previously we only mentioned the monthly cost) is helping drive some more yearly upgrades.

Fingers crossed we see another big spike in conversions from Back to Work listeners! Their trials should start ending today or tomorrow I think.

josh

Remember I was going to try writing a language (either #braid, or something Braid-like) that compiles to #go? I decided that I should learn Go a bit more thoroughly before getting stuck into that, and I also wasn’t keen on using yacc for the parsing stage — it’s really old, and has a weird syntax. So why not combine the two and start by porting rply (rpython lex yacc, a modern implementation of those tools) to go? At first I thought this wouldn’t be a huge undertaking, and then of course I realised how little I knew. But tonight I got the lexer finished and working! It didn’t take too long at all. 🎉

I grappled with Go a little bit, but didn’t have huge problems. It’s mostly pointers I have to really think about. I agree with those who say the core language is easy to pick up, although I think people conflate (at least I did) “modern” with “high-level”. It’s really not high-level 😐 but that’s why we’re writing a language on top of it, right?

Maybe tomorrow I’ll start porting the parser.

josh

@belle and I recently decided to shift our marketing angle somewhat: now, building our personal profiles is just as important as content for any of the products, because the more visible we are, the more that flows back to what we make. So in the spirit of being more visible, I went and did a blog post. That’s two this year already! Crazy. I wrote about why I own a phone with a hardware keyboard in 2017 (but you shouldn’t). #blogging #content

January 2017

josh

Overnight #exist got a mention on Gizmodo! Some kind of niche section called Field Guide. Well if we thought the Back to Work podcast helped, this has been nuts — over a hundred signups today, probably our biggest day since launch. I actually thought we were being targeted by spammers initially because of all the Hotmail signups 😆 if most of these people convert we’ll be doing so much better. I’m trying not to get too optimistic though.

In more practical news I helped @belle debug a tricky Apple Health issue and released a minor update to my own #Android app.

josh

Remember my toy language #braid? I’ve been thinking a lot about making something similar that compiles to #go. Go has a lot of benefits, like good concurrency primitives, fast GC, cross-platform compilation, but it lacks some niceties like algebraic data types and generics. Maybe I could write a language that provides these and compiles to go, so it can take advantage of its benefits too, like the many interesting languages that compile to javascript. I’m not sure I can actually implement what I have in mind, but I’m curious to try, just for fun.

Today I got some simple lexing set up using a package called lexmachine. Next I’ll be learning to use yacc so I can plug the resulting tokens into a parser. Small steps.

josh

I pretty much have the new data tab in #exist #android complete, but I want to add some interactivity and hide some stuff by default so you can drill down into it.

Today I did some overdue #support tickets instead though, and later tonight I set up macOS in a vm on my pc so I can build some #ios apps. I do have a macbook, but I’d rather be at my pc. I actually got that running with few issues, and I can build apps in xcode without it taking too long — performance seems decent. I’m going to have a go at learning #swift to build the #larder iOS app. I don’t really want to steal it from @belle, but she has enough on her plate already.

Older