Blue Apron after Five Years

I started receiving meals from Blue Apron five years ago today. For someone who’s been living alone, meal delivery services are wonderful. I hate shopping, I never know what to shop for anyway, and I’m not a great cook. When I do shop I’m forced to buy more than I need and things get thrown away. Or I just buy hot dogs and stuff to make nachos and desserts.

Blue Apron meals are always interesting, colorful, and delicious. They take some work to prepare, though. It seemed like I was always small-dicing what felt like 35 ingredients at every meal. So, I started looking for alternatives.

My sister had been using HomeChef and claimed the meals were super simple. I switched, and she was right. They also offered a two-meal/week plan. Blue Apron was limited to three meals. HomeChef also allowed me to choose between a nice variety of dishes each week. With Blue Apron I just took whatever they sent.

After nearly a year, I checked in on Blue Apron and found that they had made things simpler, now offer a two-meal plan, and have a decent selection of meals to choose from. I switched back and couldn’t be happier.

The photo above is of tonight’s dish, “Tokyo Beef & Rice Bowls with Soft-Boiled Eggs and Roasted Brocolli.” I used their photo here because mine didn’t turn out looking nearly that good, but it was delicious! So good in fact that it prompted me to write this post.

I’m happy to be back with Blue Apron. If you’re looking for a meal delivery service, I’d give the nod to Blue Apron, but you wouldn’t be disappointed with HomeChef either.

Org-Journal May Replace My Daybook.org File

The more I use Bastian Bechtold’s Org-journal the more I like it.

For the past few years I’ve kept a sort of “Daybook” using a datetree in a single Org-mode file. This works pretty well, but it’s always felt more suitable for shorter entries. I wanted something that would work with longer entries, so I tried Org-journal.

Org-journal uses one file per day. I first thought that this would make browsing my journal difficult, but it doesn’t. I find the built-in search to be easier to manage than using sparse trees or other search methods in an ordinary Org file.

I have found myself creating a journal entry using Org-journal for everything, including the things I’d normally put into my Daybook.

Org-journal even handles TODOs, and carries forward any unfinished TODOs from the previous day. It’s kind of like an automated Bullet Journal.

I export things I write each month to PDF files and print them out. (Yes, I’m that guy). With separate files for each day, I can do this by running something like cat 2018-05*.org > 2018-05-Journal.org and export the resulting file to a nicely-typeset PDF easily enough.

I’m not quite ready to completely let go of my habit of logging things into my Daybook, but the writing is on the wall.

Let's try using ox-hugo again

Last year, while looking for ways to create a blog using Org-mode, I ran across ox-hugo. It was clever, but I was uncomfortable with yet another layer of abstration between the source text and the rendered HTML. I may have gotten over that fear.

I’m slowly standardizing on using org-mode files for all of my writing. I’ll hate myself for this if I ever decide to stop using Emacs, but I’ll deal with that then.

Hugo has org-support built-in, but it only supports a subset of org-mode’s features. For example, URLs or org-formatted links in footnotes are not rendered as links in the final HTML files.

Ox-hugo works via the standard org-mode export dispatcher. The result is rendered as a normal Hugo Markdown file. This means that if I decide to stop using Org-mode for blog posts, or even move to another markdown-based site builder, all of my posts are still there and usable as-is.

Another nice feature is that all of my posts are in a single org-mode file, one subtree per post. I like this because I don’t have to create a properly-formatted markdown file in a specific folder in order to create a post. I just set the EXPORT_FILE_NAME property and ox-hugo takes in from there.

Of course I’m using a handy capture template, as provided by the ox-hugo docs. This lets me type C-c c h to quickly create a new draft post.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(with-eval-after-load 'org-capture
  (defun org-hugo-new-subtree-post-capture-template ()
    "Returns `org-capture' template string for new Hugo post.
See `org-capture-templates' for more information."
    (let* ((title (read-from-minibuffer "Post Title: ")) ;Prompt to enter the post title
           (fname (org-hugo-slug title)))
      (mapconcat #'identity
                 `(
                   ,(concat "* TODO " title)
                   ":PROPERTIES:"
                   ,(concat ":EXPORT_FILE_NAME: " fname)
                   ":END:"
                   "%?\n")          ;Place the cursor here finally
                 "\n")))

  (add-to-list 'org-capture-templates
               '("h"                ;`org-capture' binding + h
                 "Hugo post"
                 entry
                 ;; It is assumed that below file is present in `org-directory'
                 ;; and that it has a "Blog Ideas" heading. It can even be a
                 ;; symlink pointing to the actual location of all-posts.org!
                 (file+olp "all-posts.org" "Blog Ideas")
                 (function org-hugo-new-subtree-post-capture-template))))

```

All subtrees marked as TODO are considered to be drafts. Toggling the status to DONE sets “draft = false” and also sets the publish date to the current time.

Tags are set just like normal org headings (e.g. “tag1:tag2”).

Being able to directly publish to my Hugo-based blog while still living in an Org-mode is pretty sweet.

Syncthing

Syncthing

I’ve been testing Syncthing as a replacement for Dropbox and so far it’s been great.

I am currently syncing over 25,000 files in 5 directories across two Macs and one Linux machine. It has worked nearly without a hitch. I say “nearly” because after changing the case of a few filenames those now show as “out of sync”. They synced fine but show as unsynced. I assume this is due to case-sensitive vs case-insensitive file systems. I’ll need to figure this out but it’s more an inconvenience than a problem1.

I’m still using Dropbox for things I’m sharing with others, and probably always will, but for things I don’t want anywhere near a “cloud”, Syncthing seems like a perfectly fine solution.


  1. The case-insensitive rename issue is known and tricky to solve. [return]

Publish Using Org Mode With Hugo

I write nearly everything except blog posts using Org-mode. Wouldn't it be nice to write blog posts with Org-mode, too? It would.

I was perusing the README for Easy Hugo and I'll be darned if it doesn't support using .org files automatically. All I need to do is use .org for the filename when creating a new post. Very nice.

Back to Netlify

baty.net is back to being built and deployed using Netlify. I moved everything to Amazon S3 a couple of months ago as a way to figure out how to do that. I still think S3 is a great way to host static sites that don’t change often, but I haven’t liked it quite as much for hosting a site that is updated frequently, like my blog.

Using S3 required a combination of sync scripts, invalidations, keys, cloudfront distribution configuration, etc. Overall it felt like more trouble than it was worth.

So, back to Netlify. It goes something like this:

  1. Create a “site” in Netlify
  2. Point it at a Github repo
  3. Update DNS

Now I have continuous deployment, automatic SSL, a global CDN, and a bunch of other stuff I don’t even use yet. For free.

Tracking my Time with Org-mode

Org-mode has time tracking built in. Of course it does.

I have been trying to consistently track my time spent on projects. This encourages me to decide what I should do next. It also makes me reconsider my priorities when I notice I’m not doing anything useful. As I tend to do, I have configured a few Capture Templates to help with this.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
'(("t" "Todo to Inbox" entry
   (file+headline "~/org/tasks.org" "Inbox")
   "* TODO %? \n %i\n")
  ("T" "Todo and Clock In" entry
   (file+headline "~/org/tasks.org" "Inbox")
   "* TODO %? \n %i\n" :clock-in t :clock-keep t)
  ("e" "Create Event" entry
   (file+datetree+prompt "~/org/events.org")
   "* %?\n%T" :empty-lines 0)
  ("E" "Create Event and Clock In" entry
   (file+datetree+prompt "~/org/events.org")
   "* %?\n%T" :clock-in t :clock-keep t)

I have two versions of my TODO and EVENT capture templates. Using the uppercase versions cause the clock to start as soon as I create the entry. For example, if the phone rings or someone walks into my office, I hit C-c c E and a new “Event” entry will be created with the clock already running.

To help easily manage jumping between clocked entries, I’m using org-mru-clock.

When it’s time to send some invoices, or just to see how long things are taking, I can run a quick Clock Report that looks something like this:

Clock Report

Nifty.

It’s hard for me to remember to always start a clock, so I’m still looking for ways to make that easier. For now though, just building the habit is a good start.

Logging Food With Org-mode

For some reason I enjoy recording what and where I eat. Usually I do this in a paper notebook, but I decided try it using Org-mode files instead.

To make entry as easy as possible, I created a new capture template.

1
2
3
4
5
...
("F" "Food Log" entry
        (file+datetree+prompt "~/org/food.org")
                "* %?\n%t\n%^{Meal}p%^{Type}p")
...

Now, I can type C-c c F to bring up the capture template and quickly fill in details about a meal. This is then saved automatically in my ~/org/food.org file and put in the proper location, organized by date. It looks like this so far…

Food log

The %^{Meal}p and %^{Type}p parts of the capture template are for setting “Properties”. In this case I am asked to enter the Meal and Type properties. Properties allow Org-mode to act like a rudimentary database. Switching to Column view shows a table of the values for each property, like this:

Column view

I’m including an active timestamp with each entry (using %t in the template) so that they will be included in Org’s Agenda for that day.

There’s no real need to log my meals, but Org-mode makes it quick and painless so why not?

My Photos are a Disorganized Mess

I've made a huge mistake

My photos have become a disorganized mess. For years I’ve known where all of my photos were. I kept them in dated folders, period. Sometimes the specifics of how I organized things changed, but I could always count on any given photo being in something like ~/Photos/2018/04-April-2018/ThisIsANicePhoto.jpg.

Then the iPhone and Apple Photos came along. Initially, nothing changed. I would plug my phone into the computer, copy the photos from it, delete them from the phone, and move them to the proper folder, where they belonged. Go ahead, narrow your eyes at me, but it was a great, predictable system and it meant that every photo ended up in the same place. Be it film or digital, taken with the iPhone or some other camera, a photo went into a folder forever.

At some point I decided not to do it that way. I tired of moving images off the phone and dealing with them. I decided to use Apple Photos to store my iPhone photos. Zero friction, right? I’d continue to manage non-iPhone photos as I always had, then just copy the keepers into Photos so I had a “complete” library.

As you can imagine, I now have two libraries, and neither of them is complete.

This was a huge mistake.

To fix this, I’m going to have to essentially merge two similar-but-not-the-same libraries. What do you think the odds are of me not losing anything or ending up with tons of duplicates? That’s right, the odds are zero.

Don’t ever let me try anything like that again.

Using Karl Voit's File Naming System

I name most of my files with an ISO formatted date and then some descriptive text. For example…

2018-05-06 This is a File.txt

A couple years ago I ran into Karl Voit’s article about Managing Digital Files. I originally wrote it off as a bit over the top and I didn’t give it another thought. Then today I decided to go all in with it.

You can read his entire article if you like, but the gist of it is that he names files using a pattern like this:

1
2
2018-05-06 This is some file -- tag1 tag2.jpg
|_date___| |_description___||___tags_____|

It’s a little verbose but that hasn’t gotten in the way. The trick of the whole thing is to use his suite of tools to help manage things.

  • date2name for prepending the file’s creation date
  • appendfilename for adding to the filename without disturbing the date or tags
  • move2archive for moving the files to a dated folder hierarchy
  • filetags for managing tags and creating a tag hierarchy

Seems like a lot of fuss, but the goal is to have a future-proof collection of well-organized files with no chance of lock-in or abandonment. This is one way of achieving that. Voit’s tools aren’t necessary, just helpful. If they went away nothing would be lost. The whole thing lines up nicely with my preference for keeping files in organized, date-based folders.

I often use the Ranger file browser and so I added a few key mappings to make managing filetags, etc. easier. Here’s part of my Ranger config file:

1
2
3
4
map Fm shell m2a %s
map Ft shell filetags %s
map Fn shell date2name %s
map Fa shell appendfilename %s

I mark one or more files in Ranger and hit “F” then one of m, t, n, or a to move, tag, add the date, or rename them.

A nice side effect of this is that all files named using YYYY-MM-DD… are swept up by my Memacs scripts. This causes any file or photo in the archive to show up in my Org-mode agenda on the day it was created.

Agenda

That’s a nice bonus. The Memacs thing is going to have to be a whole other post.