I’ve been mostly heads-down on parenting for a few years now. A- wasn’t keen on babysitters, so my computing time consisted of a couple of hours during the graveyard shift, after our little night-owl finally settled into bed. I felt like I was treading water: keep Emacs News going, check in and do some consulting once in a while so that the relationship doesn’t go cold, do my weekly reviews, try to automate things here and there.

I definitely felt the gaps between the quick-and-dirty coding I did and the best practices I saw elsewhere. I felt a little anxious about not having development environments and production deployment processes for my personal projects. Whenever I messed up my blog or my web-based tracker, I stayed up extra late to fix things, coding while tired and sleepy and occasionally interrupted by A- needing extra snuggling. I updated whenever I felt it was necessary for security, but the risk discouraged me from trying to make things better.

Lately, though, I feel like I’ve been able to actually have some more focused time to learn new things. A- is a little more used to a bedtime routine, and I no longer have to reserve as much energy and patience for dealing with tantrums. She still sleeps really late, but it’s manageable. And besides, I’d tracked the time I spent playing a game on my phone, so I knew I had a little discretionary time I could use more effectively.

Docker is one of the tools on my to-learn list. I think it will help a lot to have environments that I can experiment with and recreate whenever I want. I tried Vagrant before, but Docker feels a lot lighter-weight.

I started by moving my sketch viewer into a Docker container. It’s a basic Node server with read-only access to my sketches, so that was mostly a matter of changing it to be configured via environment variables and mounting the sketches as a volume. I added dockerfile-mode to my Emacs, made a Dockerfile and a .dockerignore file following the tutorial for Dockerizing a Node.js web app, tried it out on my laptop, and pushed the image to my private Docker hub so that I could pull the image on my server. It turned out that Linode’s kernel had overlay built in instead of compiled as a module, so I followed this tip to fix it.

I also needed to uninstall my old docker.io and docker-compose, add the Docker PPA, and install docker-ce in order to get docker login to work properly on my server.

The next step was to move my web interface for tracking – not Quantified Awesome, but the button-filled webpage I’ve been using on my phone. I used lots of environment variables for passwords and tokens, so I switched to using --env-file file instead.

In order to move Quantified Awesome or my blog into Docker, I needed a MySQL container that could load my backups. docker-compose.yml Loading the SQL was just a matter of mounting the backup files in /docker-entrypoint-initdb.d, and mounting a directory as /var/lib/mysql should help with data persistence. If I added a script that created a user and granted access from '%', I could access the MySQL inside the Docker container from my laptop. I didn’t want my MySQL container to be publicly exposed on my server, though. It turned out that Docker bypassed ufw by setting iptables rules directly, so I followed the other instructions in this Stackoverflow answer and added these to the end of my /etc/ufw/after.rules:

Anyway. Progress. sketches.sachachua.com is in a Docker container, and so is my button-based time tracker. I have a Docker container that I can use to load SQL backups, and I can connect to it for testing. The next step would probably be to try moving Quantified Awesome into a Docker container that talks to my MySQL container. If I can get that working, then I can try moving my blog into a container too.

Yesterday was for sleeping. Today I wanted to clean up my notes and post them, since I’ll forget too much if I keep going. More coding will have to wait for tomorrow–or maybe the day after, if I use some time for consulting instead. But slow progress is still progress, and it’s nice to feel like more of a geek again.

Buying the TF700T had been a mistake. It was ahead of its time and not powerful enough for the tablet it wanted to be. I hadn’t given myself enough time to try it out during the return period, so I was stuck with it. I tried reflashing it with other ROMs like CROMBi-kk, but the lack of responsiveness still drove me crazy. I put the tablet in our old electronics bin and moved on. It survived a number of e-recycling purges through the years partly because it looked in such good condition that it would be a shame to throw away, and partly because it was too frustrating a machine to inflict on anyone else.

Now we find ourselves with a toddler who wants to type. W- fixed up his old X220 tablet PC to boot to console mode with 640×480 resolution so that the text is easy to see, but it’s heavy and has poor battery life. A- declared the Sony Vaio U1 to be too small for her, so we dusted off the TF700T and W- found the charger. It was still frustratingly slow. We want computing to be pleasant. I didn’t want to give up hope, though, especially since I’d found surprisingly recent Reddit threads about people using the TF700T.

Formatting the tablet took longer than I thought it would, but fortunately the forum posts reassured me that I didn’t mess it up. After that, I reflashed it to KatKiss Nougatella following the instructions for reflashing the TF700, it actually became somewhat usable. I installed a text editor and an SSH client, docked it into the keyboard, and let A- play.

A-‘s okay with using the TF700, although she misses using F1 to bring up the help screen in Vim. (W-‘s influence! Maybe I can sneak in some Emacs if I remap Emacs’ F1 to bring up something like view-hello-file…) We’re still leaning towards the X220 since it’s more configurable, but the TF700 can be good for guided exploration too.

We don’t care about making sure A- learns how to type so early, and she’s got plenty of time to do other non-computer things. But sometimes she sees W- working on his laptop and she wants to do it too, so she might as well do something useful. I kinda like how her interface is pretty basic. No whizbang animations enticing her to play, just the feedback of seeing text appear on the screen as she presses buttons. She can toggle Caps Lock to make uppercase and lowercase letters, and she knows how to make “?” by pressing Shift with another key. She can spell her name if we tell her which letters to look for. If she happens to type 1 and 0 in the process of banging on the keyboard, she reads it out as “ten.” We’ll let her explore when that’s what she’s curious about, and we’ll also draw her away from it with lots of other activities and by keeping it out of sight as needed.

We have another under-utilized Android tablet. The TF700T’s special because it has a docking keyboard and therefore passes A-‘s “Is this a laptop?” test, while the tablet + Bluetooth keyboard combination does not. I wonder what we’ll end up doing with it. Who knows, if the battery life isn’t dismal, I might even end up using it for writing once A- is old enough for drop-off classes.