littlelogs

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

June 2017

josh

FYI I’ve turned off nightly emails for anyone still with that option turned on. Still debating what to do about #littlelogs overall, we could leave it going if people really wanted to keep using it — it’s not a hassle to host it or anything — it just seems pretty pointless if it’s only 2 or 3 people other than us.

May 2017

josh

Hey littlelogs. Sorry we haven’t been around lately. @belle and I have been debating shutting #littlelogs down, actually, because it was only ever a side project and it’s clear that it’s not of use to many people. We sort of half-heartedly meant for our logs to be useful to our users in seeing what we’re working on, but in practice I’m not sure many of them ever look, which is fair enough. We’re going to try adding the ability to write progress logs to our public roadmap thing https://changemap.co, where users will be more likely to see them, which means there’s little need to keep this around. Nothing certain yet, of course, but that’s why we’ve not been diligently logging — doesn’t feel like much point any more.

You’re all still lovely though. Don’t take it personally.

josh

More work on my #go parser/compiler today. I can now parse function calls, the last rule left in my minimal grammar that’ll let me make an MVP. Woo! The next step will be to actually start turning the AST into Go code.

Unfortunately I also discovered a bug in the parser library I’m using. Someone else had already submitted an issue about it last year, and the project author replied, “I’m not using this for my own work any more, sorry, you’re on your own.” I get that, but it’s still frustrating that I’ll now have to understand and fix his code to proceed with my own.

josh

Today, for something different: every few weeks I delete our delinquent #exist accounts. These people have received 4 emails about their overdue payment, seen (hopefully) notifications on the site and in the app, had banners about it at the top of their weekly emails, and had 4-6 weeks to do something about it — but still people seem to miss it. Today was the first time ever someone replied to the automated “account deleted” email with shock. She was really nice about it though, and mentioned how much she appreciated using our mood tracking, and even offered to pay for the months she’d been overdue for. I now feel very bad about deleting this lady’s account, but it is literally all gone as that’s part of our privacy policy.

The moral of the story: update your card in services you want to keep using, so everyone involved doesn’t end up sad. 😞

josh

I did some more work on my #go parser/compiler yesterday, getting everything organised a little better. I hadn’t touched this for weeks previously, because the scale of all the syntax I want to support felt so huge I didn’t know what to do next. But this week I realised I don’t need to support all syntax up-front — I can parse and compile a subset, enough to build some toy examples, and keep iterating in this way with more parsing rules until I can parse and compile the whole language to Go.

I think the only thing left before I can work on compiling this minimum viable language is supporting function calls. Hopefully I’ll find some time to get them happening soon.

josh

Deployed my #larder updates today, to support dragging of bookmarks into folders (plus nicer looking bookmarks). I didn’t use anything except the html5 drag and drop #javascript api, which is actually pretty simple — not really any need for a library to handle it! I’ll probably do the exact same thing for #changemap sometime soon to support moving tasks between lists.

April 2017

josh

For something different this weekend I’ve been working on a smallish #larder redesign. I think this will look a bit more polished, plus it makes it easier to add drag-and-drop handles to each of the bookmarks, so users can drop them into another folder. Still a little bit left to do, but shouldn’t take long, if I can keep finding the time around working on Exist.

josh

#exist #android #customtracking is pretty much done. Did I say that already? I’m basically just in a holding pattern now, waiting for any more bug reports while @belle implements the same stuff in the iOS app.

Meanwhile I’ve jumped into implementing an idea I’ve been kicking around for a while, an “optimise” page which attempts to quantify how best to optimise an attribute (from a whitelist of things like steps, productive time, etc.). It’s actually turning out pretty well! Belle and I are both enthused about giving some explicit values of what helps, for example, getting more than 5:00 time asleep is my #1 biggest factor in having a good day. Think our peeps are going to enjoy it.

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.

Older