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. 😩
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.
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.
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…
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 😊
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.
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 👍
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.
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.
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.
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.
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.
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!
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.
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.
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? 🤔
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.
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.
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.
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.
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.
@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
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.
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.
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.
@belle and I had a chat over lunch about an idea I had for custom habit tracking in #Exist — essentially using a free text field to enter a list of tags, like “alcohol, piano, meditation”, or whatever you did. With some fiddling we could run correlations and generate graphs for each custom item, pretending that they’re real attributes. I’m still weighing it up but I think this would be easier and quicker than (finishing) adding manual tracking, with the huge benefit that users can track whatever they want. Of course there are downsides too, in that these aren’t real attributes so they’d not gain all the built-in benefits of being official attributes. Hmmm! More musing required.
This week l pretty much implemented #exist’s new location name attribute, based on Google’s reverse geocoding, plus some correlations for this. I’m holding off on deploying it for now, because we decided my focus for the next few months should be adding more to the #android app. I’ve added a new tab with some trend graphs in a rather hacky manner, and just need to keep working on these graphs, correlations, and a mood breakdown.
This week I’ve mostly been doing #exist #support. We’ve had a lot of new users, because we got a really nice mention on Back to Work, a podcast with Merlin Mann that seems pretty popular! With this has come a lot of extra emails to reply to, and a few bugs to follow up. I also did a bunch of #hellocode monthly reports to bring us up to date, with @belle taking over from now because she cares a lot more about doing them promptly.
I sent the #exist end of year report today! Yay! 🎉 thankfully, all the feedback was really positive, and a bunch of people made a point of saying they liked it, so I feel really good about that. A couple of people mentioned they’d like something in this vein more regularly, which we’d been thinking about. Time to look into replacing the weekly report with a new one, or maybe a monthly one (though the more regular the better I think).
Here’s an example report: https://twitter.com/joshpitzalis/status/816555042215903232
Finally finished the #exist year in review late this afternoon, and was going to send it out tonight but at the last minute we decided we needed to add an in-app notification about it too. I didn’t want to code that and send it out right before bed, so it’s delayed until tomorrow. I hope people appreciate it! I’ve put a lot of time into it now.
Happy new year littlelogs! Wishing you all the best to do some cool things in 2017.
I’ve nearly got the #exist end of year report finished, after quite a few design iterations, but I’m not going to rush. I can’t send it for at least 2 more days, for those who are negative UTC and to give everyone a chance to sync their data, but even if it takes a couple more days after that, I think it’ll still be relevant. Hoping everyone gets a kick out of it! I think it has some fun stats.
It’s been more like tropical weather here recently despite living on the southernmost point of mainland Australia, so I extended my Christmas break a few days — too hot and humid to work. Today was a bit better, though, so I got stuck into the #exist end of year report. It’s coming along nicely and I think I’ll have it done in time, if I can make it pretty enough…
I’ve been working on the #exist end of year report this week (but not too hard). Finally collected all the data I need to put it together, so next week I’ll be designing and endlessly retweaking the email layout to make it all look pretty. Decided it definitely needs to arrive in 2017, based on some stats I’ve added like a breakdown of how you spent the year, so I have at least until the 3rd (which is the 2nd for everywhere else in the world that’s behind).
Until then, happy Christmas or secular holiday times, littlelogs friends! I hope you have a good time with people you like, receive at least one good present, and eat some delicious things.