Why do I Write This?


A little while ago I ran into someone and we ended up chatting about this blog. He asked an interesting question – "Why do you write the blog?". I didn't have an answer then and I'm not sure that I have one now, but I'm writing about it anyway.

A day or two after that conversation I read Katie Baker's article about the death of Google Reader and the real Internet and it reminded me of the "Why blog?" question. They seem related and really that's the real reason I am writing this.

Let's start with this – I've always fancied myself a writer. Even in my grade school days, I did well on my writing assignments and, dare I say, I was good at it. At times I fancied that I was going to write novels someday. Well that feeling is gone but it's still something I enjoy and something perhaps I will always do, in one way or another. Sönke Ahrens wrote in his book How to Take Smart Notes: One Simple Technique to Boost Writing, Learning and Thinking – for Students, Academics and Nonfiction Book Writers:

If there is one thing the experts agree on, then it is this: You have
to externalize your ideas, you have to write. Richard Feynman stresses
it as much as Benjamin Franklin. If we write, it is more likely that we
understand what we read, remember what we learn and that our thoughts
make sense.

so, in a huge sense, I write mostly for me. To remember things, to process informartion, to sort things out in my brain. But do I write blogs posts for me? Well… sometimes? But that is something different, which I'll probably get to in a different post.

In another sense, I started my blog simply because I like the other blogs that were out there, especially help in more technical issues but also hearing about things from different people's perspectives. I think that was why blog readers were essential. You found a blog that you were interested in and you followed it. Then you only had one place to go to. It wasn't unusual to have 100 blogs to follow. Of course now I still follow blogs. Very few are updated daily, some (I guess like mine) aren't even updated monthly. But that's fine. Perhaps the most important reason that I write is to be a part of the larger web conversation, even if there really isn't one and I'm typing this to the ether.

I remember thinking once that I didn't need Google Reader anymore – I had Twitter and I didn't need to follow anyone else but I could see what the current conversation was. How naive! The early days of Twitter were fun (anyone else remember TweetUps and Tweet Lunches?). But that didn't last long… soon there was so much noise and very little content. I rarely use Twitter anymore. But how am I going to learn and be exposed to new ideas if there is so much noise in the "noise" in the public forum. Now I'm back to using as RSS reader a lot and even though blogs aren't as active as they once was, there is some great stuff out there.

I don't blog because I want to be a professional blogger. Honestly, I don't care about traffic…I don't even keep track. Maybe no one will read it. I'm fine with that. Maybe this is more online journal for me than "wow someone will find is useful." But I do want someone to find it useful. Maybe not you but perhaps someone still stumble on to this and think "wow, that helped me more than StackOverflow" or "I never thought of it that way."

Basically – I blog for me and hope that other people find it useful as well.

Category: blog Tags:

Emacs as your RestClient


A few weeks ago, I was surprised when I was asked to demo a webservice that I wrote. Since I didn't prep a Postman config for it (because I don't use Postman unless I have to, like during demos ) I got out Emacs and opened the orgfile that I had used to test the service. Suddenly the Architect piped in and said, "Emacs? Who uses Emacs to test services? I really can't stand people who use command line tools!". What he didn't know is that I wear comments like that as a badge of honor. So let me teach you how use Orgmode as a RestClient to annoy your co-workers just like I do!

There are lots of links out there how to set this up and how it works. Mike Zamansky has a great post/video of the basics of RestClient. For the OrgMode part, you basically need to use the Babel functionality and ob-restclient. This sounds like a lot of work but Doom Emacs (the config distro that I'm currently using) has all of this included.

At it's most basic, you can just do this:

#+begin_src restclient
GET http://openlibrary.org/api/volumes/brief/isbn/9781429992800.json


Enter Ctrl-c Ctrl-c (or C-c C-c as an Emacs person would write it) anywhere in that source block and it will execute. The result will be a long-winded response around a #RESULTS: section that magically appears below it. OpenLibrary has a nice API in that you don't have to specify a content type (or even an API key). Here is how you set some headers, via this sample API.

#+begin_src restclient
GET https://airport-info.p.rapidapi.com/airport?iata=OMA
x-rapidapi-key: <some key>
x-rapidapi-host: airport-info.p.rapidapi.com


You will then get the information of the Omaha airport back. Note that the headers appear directly below the GET url line. Note that you can also replaced GET with POST, PUT and etc.

If you need to put in a payload, you don't need to do fancy JSON things, just put in the string with a blank line between the headers and the payload, like so:

#+begin_src restclient
POST https://airport-info.p.rapidapi.com/airport
x-rapidapi-key: <some key>
x-rapidapi-host: airport-info.p.rapidapi.com


(Note that the above won't work, but it's still a good example)

All this is well and good, but isn't very real-world. What if you have to authenticate? What if you have to specify a content type? Well you can send the results of one evaluation to another. That document is hard to follow but essentially you can evaluate an OrgMode source block and put the results in another. You basically put it in a variable that you carry from block to block. And it doesn't matter what language the blocks are written in.

So here is an example of using Python's requests library, which makes getting an oauth token pretty easy. Note the :results token in the header – that declares a variable to put the result in.

#+begin_src python :results token

import requests

data = {"client_id": "<client id>",
"client_secret": "<some creds>",
"grant_type": "client_credentials"


r = requests.post('https://some-url/oauth/token', data = data, verify=True) #False if you have weird SSL stuff
return r.json()["access_token"]


And then you declare the token as a variable on requests and use it in the block – note the :token in the Authorization header:

#+begin_src restclient :var token=token
POST https://some-app-url/path/to/api/thing
Content-Type: application/json
Authorization: Bearer :token



So run C-c C-c on the first (python) source block and then again on the second. Boom – your call to the service it authenticated . I find this a lot easier than using alternatives.

Category: tech Tags:

Advancing my Todoist


My previous post about my bullet journal got me thinking of rapid logging, and got me thinking about how projects in Todoist aren't just working for me – and suddenly I found myself in another Todo App Crisis.

I have a friend that that shares the productivity bug with me and we chat a lot about idea. He sent me the link to The PARA Method which really screwed up my thinking but I felt like it gave me the permission to look at using more than one app to accomplish what I wanted. I then tried both Trello and OmniFocus and figuring out how they can fit into my paradigms of what I wanted to achieve. To make this shorter: I gave up looking at other apps and dug into the Todoist help a bit more. My final decision is to change how I am using Todoist.

I won't want to belabor points about Trello and OmniFocus – this is really on how I can start using Todoist better.

Use the web, dummy

I am now of the opinion that the Web App for Todoist is far superior than either the mobile or the Desktop apps, which is funny to me because the "apps" are really Electron apps so you would think they would be the same. But what I figured out is that the web app gives me so much more.

Rapid logging, for example, is so much easier through the browser:

  1. Type each task, one a time in a text editor, using the DSL if you want
  2. Copy all those lines to your clipboard
  3. Find the label or project you want those tasks in – or Inbox if you want
  4. Paste – the app will ask you if you want one task per line

And… that's it. If you wrote 100 tasks in the text editor, you now have 100 new tasks in Todoist.

But managing tasks is also easier on the web version simply because of the todoist-shortcuts add-on which basically puts the GMail shortcuts into Todoist. Obviously you can only do this in the browser.

One trick that works both on the desktop and in the browser is to Shift-Click on several tasks and you can edit many on once. What a time-saver!

Labels over Projects

One of the mind shifts that I had to change is that every task had to be in a Project and have a Due Date. I will say that most things do need to have those things, but I found that some things I just want to get done, and maybe one task will take me a few days (say, like writing a blog post). Do what to just keep moving the date? Is that a project instead of a task? Well I had to really think about it.

I experimented with this before but now have started in earnest – using Labels instead of throwing things in a project. This way I can put a bunch of stuff in at once and not worry what project it goes into. Instead I give it a label right away. If I want to do it soon, I can leave it in the Inbox. If I don't want to, I can deal with it later by setting a due date. If I think it belongs in a project later on, I can do that too.

To do that, you have to harness the power of Filters. I've played with them long ago but now I really dug in and think they are the key to my effectiveness. Here is an excellent unofficial guide to writing a Todoist filter. My default view is now a filtered list called tasklist that is simply :

overdue | (no date & #Inbox) | ( next 2 days )

I use that as my default view on my phone and as the default view in the Android widget (which is my usual default completion device). Works great – I can see the tasks without a Date and things due in the next couple of days.

Completed tasks

One thing I did want from PARA is to keep track of my completed tasks. Todoist's interface doesn't make it easy to browse through completed tasks and that makes sense – it's not something you do often. But as PARA said – how can you review what you accomplished without have access? I found a IFTTT recipe that records each completed task into a Google Sheet with a link to the individual task in Todoist. I was going to do something fancy with that, but really having it in a Google Sheet is perfect – you can slice and dice it from there.


This seems to satisfy my changing needs .. it helps me put and manage a lot of tasks and helps answer my questions like "What have I done in the last year?" when I do my yearly job evaluation.

I stumbled onto a currently maintained cli for Todoist written in Go and I think I could use a lot of things in there.. but I had to compile it and then get an exception while running the initial sync. I'll keep mucking with that to see if I can get it going and how I can use it.

Category: tech Tags:

Handwritten Notes



If 2020 was the Year of Taking Notes, then 2021 is turning into the year of handwriting notes. And if you know me this is quite a change – I have been proudly typing things out for years, leaving writing things by hand proudly behind. A big part of it is my handwriting is deplorable and always have been. And really it's gotten worse. I also tend to lose the pieces of paper I written things on. The later is really organization problem and not a handwriting problem. And the organization problem really that is what I ended up solving, even if it was by accident.

But how did I start down this handwriting path? Simply because it's faster. But it turned out that I remember things better if I write them out as opposed to type it. And with some organization I can say "I know where that is!". And not only do I remember it better, I tend to be more thoughtful when I put it down. As long as I have my little notebook nearby, I can quickly jot things down, not worry about them again until I need them.

I was the Apple Pencil that started me on it. I bought it because I thought it was cool and then I got a copy of GoodNotes on my iPad.A bunch of things suddenly just clicked. I started drawing and filling out PDFs. This is very handy for print-and-play games like Bargain Basement Bathysphere and Utopia Engine: Beast Hunter. I can easily erase, don't have to worry about printing things out and keeping track of paper. I found that once I got used to the Pencil (which did not take long) I really liked this style. But I didn't want to keep everything in my iPad… gee, am I going to start writing things by hand?

Through a long series of looking at random things, I somehow stumbled into the concept of a Bullet Journal. This video is really the best overview and currently my journal looks a lot like that, as opposed to a work of art.2 I don't follow it fully, which is really on of the beautiful things about the system – you don't have to. Honestly my Bullet Journal is mainly headings and lists. I don't do the "rapid logging" part of a Bullet Journal, but instead instead I focus on The Collections to brainstorm and rapid collection of ideas into a collection and then turn those into tasks in my Todoist. While that seems like a lot of work, it actually works great.

Ironically I could do all of this in a Bullet Journal but, however, it's hard for me to leave Todoist simply because I always have it with me, via my phone. I could do all this list management into Todoist and have tried it before. The problem is that I tend not be able to find things again and entering a bunch of items in a brain dump is not very fast in Todoist. For example, my wife would come up with ideas for the new house and I couldn't keep up in putting them into Todoist. With my bullet journal, I just found that collection, grabbed the pen that I always have in it, and we record things as fast as we say them.

Basically, my workflow is like this:

  • my Bullet Journal is for ideas, lists, brainstorming, and facts (you know, like what address you're new house is at)
  • When I'm ready to put things into action, I open my journal and Todoist and start moving things over.
  • it's important that everything in Todoist has a due date… or I will never find it again.

This has started me on a strange path of being picky about notebooks and pens. What I ended up choosing is this notebook which is dotted, not lined (non-negotiable), has a bookmark ribbon, a sleeve for the pen and has a band to keep it closed. I've had this notebook in my living room table, in appliance stores, etc and it's held up well. I think the paper is a little thin so a dark pen will bleed through. I've settled on this Pentel pen which I had used before. I like it because it writes thin (so my handwriting is more legible) and doesn't bleed through. This arrangement is … OK. I think I would like better quality paper but do not want to sacrifice the closing band or the pen holder. Decisions, decisions…

It's strange about how I've fallen back into low-tech habits in the time of COVID and that I am keeping those habits around.

  1. And yes that is actually my journal index. Ugly, isn't it?

  2. When I first saw this video, I laughed my head off. Not only does my journal not look anything like that, I would never put that much work into how it looks. It's 100% function over form.

Category: notetaking Tags:

New House


The idea of the new house started when we moved into the old one. It was a concept, an idea that we joked about. "Well in our next house we want… "" and then we would chuckle. I mean there were things that we didn’t like and so we changed them. We got rid of some dark, 1970’s chic and made some more space.

Then it became less of joke as years went by. “There are too many steps to get into this house” and “It’s a long way to carry groceries to the kitchen” and “our backyard is too big” and then there was “these rooms are so small.” There were things we could do and we did a lot of them — but frankly we couldn’t move the garage closer to the kitchen. Or take out the steps to get into the house. But we dealt with it. And did more stuff… we redid the kitchen! We redid a bathroom! But still the laundry room is off the kitchen. And the kitchen is floor and half a house away from the garage.

We made a list of what we wanted. Zillow weighed heavily in our browser history but we didn’t like what we saw. Not enough hit the must haves. We had a realtor come and he gave us a list of things to do to sell. Another bathroom changed! New flooring! Lots of things move out! And we cleaned. But Zillow still didn’t show us anything we were happy with.

But then Zillow started showing up some brand new houses… “Hey this is done, why not look at it?” So we walked through a couple model homes.. hm, close but not quite. We drove further to walk through another model. Wait… this.. is perfect! Big rooms! Nice basement! Smaller yard! No deck! Laundry by the bedrooms! Um… so… we are going to build. Never our plan. Building was always a ephemeral idea and then became permanent. Contracts were signed, money changed hands… and an old house was fixed. Or tweaked. And then put up for sale… and quickly purchased.

We moved to an apartment…cozy but comfortable. And we go to our patch of dirt and see progress. And hey we do see progress.

Category: misc Tags:



It was a long time ago when I first discovered Sudoku. I do remember it well… I had a long flight ahead of me and this was before I had a smart phone..I had some books (like printed) but wanted something else in case the books made me lose interest. I picked up a book by Will Shortz and made sure I had a couple of pencils with me. I'm not going to say I was good at it, but I enjoyed it and it helped whittle away the hours (yes, hours) of flights I had.

I toyed with it off and on for years but waned in my interested of it. Fast forward to last week and I saw someone mention that Microsoft (yes, that Microsoft) has a good mobile app on both Android and iOS, so I put it on my Android phone and took it for a spin. And hey I really liked it – and I was better than I remembered being! Oh and then I tried a hard puzzle and that humbled me a bit. There were ads on the MS version and I didn't feel like paying a monthly fee to get rid of them. And it was small on my phone screen. Oh, but I have an iPad…

After some research I found lots of people like Good Sudoku. As I loaded it up and noted it was by the same developer as Spelltower, another game I enjoy, even though I really don't always like word games. And Good Sudoku is aptly named – and it has taught me how to get better. At first I thought the first few puzzles were hard (certainly harder than MS's version) but then I realized I was playing Advanced puzzles… oops. So I went to the beginner and played a bunch, and then went into the tutorial where it talked about note taking. That really helped my Sudoku game. Now I see more patterns, how to utilize notes, etc. Of course, now it's hard to go back.

So, if you need something to occupy your time during Zoom meetings while zoning out to TV, why not fire up a Sudoku app for a bit?

Category: misc Tags:

Working the cloud with rclone


TL;DRrclone truly is the Swiss Army knife of cloud storage and you should look into it if you have to deal with that world at all (S3, DropBox, OneDrive, etc).

In the past I really had an addiction to Humble Bundle, where I bought a lot of cheap ebooks and comics. I dutifully put both of these into Calibre and then put it from there into my devices. Now for epubs to my e-reader, it was pretty easy. But it was quite a bit hard for comics. Eventually I forgot about all the comics.. until I bought some more. And then instead of just putting them in Calibre I put them into a folder in my pCloud storage. Then I find Panels, a really good Comic app for the iPad. But downloading a file from pCloud and then importing it into Panels was painful. I saw that the commercial version of Panels offered integration with OneDrive, GDrive, and DropBox – but not pCloud. Well I have a OneDrive that I haven't used… maybe we can move my files there? Oh but I struggle with pCloud's macOS client when I copy or rsync a lot of files out of there. It simply crashes. So I can't do all the work locally.

So that is the setup… I've had rclone on my watchlist before and mucked with it a few times but nothing serious. Well this seemed like a good way to learn about it. First I had to setup both pCloud and OneDrive – that was pretty easy. I naively decided to run a cloud-to-cloud sync, thinking that it would bomb. I was pleasently surprised! The command was:

rclone sync "pcloud:comics" "onedrive:comics"

I did this about 6pm and it finished about 11pm. I didn't think that was too bad. Oh and Panels was able to read my OneDrive and download the comic file just fine. Fantastic!

The next day I was wondering about the gigs (yes I said gigs) of other comics I had in pCloud (where I back up my Calibre) library. So I decided to copy those out of pCloud and into OneDrive

My comics are all in cbz format so I essentially had to find all my .cbz files. With rclone, this was pretty easy:

rclone ls --include "*.cbz" pcloud: > file.lst

I could have immediately copied the files to OneDrive instead of making a file list but I wanted to change the directory structure from what Calibre used. For example, I didn't want comics/My Books/Unknown/starwars legacy vol1 1412979773 (18)/starwars legacy vol1 1412979773 - Unknown.cbz but (an attempt) to do comics/starwars/starwars legacy vol1 1412979773 - Unknown.cbz. Also I really did not want to re-copy the files already existing in comics. So I wrote a quick and dirty Python script:

#!/usr/bin/env python3

from pathlib import Path
from string import Template

rclone_cmd = Template('rclone copy "pcloud:$infile" "onedrive:comics/$dirname/"')

f_list = Path("file.lst")

with f_list.open() as fp:
    for line in fp:
        size, name = line.strip().split(" ", 1)

        if int(size) < 0 or "comics/" in name:

        new_name = name
        if name.startswith("My Books/"):
            new_name = name[(len("My Books/") - 1) :]
        if " " in new_name:p
            prefix, junk = new_name.split(" ", 1)
            dirname = prefix.split("/")[-1]

        outname = name.split("/")[-1]
        print(rclone_cmd.substitute(infile=name, dirname=dirname, outfile=outname))

The result didn't really give me a directory structure that I wanted, but close. I figured I could change it manually but what I had was a good start. I also could have ran the rclone copy command in the python script, but I wanted to see the finished commands them all. So then I captured the output of my script, and then I basically had shell script. I kicked it off before bed and it finished long before I got up. And everything was copied!

So yeah… everything I wanted to do I was able to with rclone. I for sure will keep it in my toolbox.

Category: tech Tags:

Video Games as Art


Been thinking a lot lately of the current state of video games.. I'm not sure why. Technically, we own an XBox One but my son plays on it mostly (or, er, most of the time) and I've dabbled a bit in other games, specifically Minecraft and Stardew Valley, which in some ways are similar – both are pretty open and you can kinda do whatever you want. Stardew Valley certainly has a linear story and it has much less variation but it certainly has a lot of charm (and hey, it's still being developed, as well as Minecraft). I don't spend a lot of time with either one of late but I go back and forth. Since video games are at least on my periphery, I do keep up on an eye on the big news so I had to chuckle when Cyberpunk 2077 didn't live up to the hype. But of course it couldn't.

I don't really care for AAA games – mostly because it takes 20-45 minutes to actuall start (sometimes longer) and I don't have long gaming sessions to begin with. Add in the grotesque, sex and language they tend to put in (and I'll say it) the same thing over and over again. Another thing I can't stand is when it's really a conceit. My son and I played Human Fall Flat because the controls are stupid. Maybe I'm an old man.

What I have discovered is that I like smaller, more independent games. They try to do things different and maybe they fail at it but at least it's original. Sometimes they have a story, sometimes they don't. Minit is a good example of this. It looks like it was ported from the C64. And it's basically a puzzle game but you only live a minute but one you do in one "round" carries over to another. Clever, fast, and kinda hard at times.

This summer I've bought into itch.io's Bundle for Racial Justice and Equality. Mostly because I figured that I would easily get my money's worth and also because I supported it's cause. Some of the games I had heard of (like Minit, which I had played before and Celeste, which is a very humbling plaformer). Few of these games rival a AAA in story and graphics, but the ones I have played are a lot of heart. Take, for example A Short Hike, a game I would have never heard until I bought the bundle. I've played it throught twice and may do it again… and I never take the time to actually finish a game! But it's sweet, with a fun little journey and story. Another one (and game I should get back to) is Signs of the Sojourner, a RPG/interactive story with a card game in it. And part of the game is to figure out when to win and when to lose.

Ironically, I have played none of these games on my iPad, which is certainly my main "gaming machine". Regardless, this started going through my mind as I'm playing Florence on my iPad. For a game, it isn't much. In fact, I'd say it's more of a story with easy puzzles (literally jigsaw puzzles a lot of the time) as you go along. But the story is so very well told… I was engrossed with it and how they told it. Another example is Gris, which is certainly more involved than Florence but certainly more art than game. A few years ago I was really into 80 Days, which is a re-telling of Eighty Days Around the World. It's not far (or hard) to get around the world, but there are so many paths to take that when you do it, you start again! And then probably again!

I guess this rambling is – I like story. I value story over form. I like many tasks, open world.. but if it's going to be a story, then make it a story!

Category: art Tags:

Streaming TV Shows -- COVID edition


As this crazy year closes, my wife and I were chuckling about how many TV Series we binged while in isolation. We started more than we finished – if one us is isn't totally into it, we have no problems in stopping. These are the ones we liked the best. This doesn't count movies, just TV series.

In any order:

  • Tiger King (Netflix) – like who didn't watch watch this at the beginning of quarentine? How lucky could Netflix get then to get a docu-series about crazy people in a weird American subculture just when we needed it? Not the best docu-series ever but worthy of the cultural phenom it became and the perfect show to make us laugh and cringe when we needed it. (B+)
  • World’s Toughest Race: Eco-Challenge Fiji (Amazon Prime) – so crazy-man Bear Grylls decided there were other survivalist crazies, so he made a course in Fiji for them to race on. The best part of this series that they didn't just follow the leaders but other people way back in the pack with intersting stories. It was impressive… but these people were crazy. (A)
  • The Crown (Netflix) – a show I didn't expect to like but I really do. It's a slow burn but everything is well done – acting, costume, scenery, script. I don't care how accurate it is, but it's probably accurate enough. There are a lot of great episodes but I think my favorite is "Moondust" from S3. (A+)
  • How to Get Away With Murder (Netflix, now) – I wanted to quit this after Season 3 because that season was a diaster – I felt the writers didn't have enough story per episode, so they filled time with sex scenes. But we kept watching Season 4 because they left some things hanging and they somehow found good writers. Anyway the premise is good and Viola Davis is downright amazing in her main role as a diabolical law school professor. Lots of great themes like loss of innocence, sexism, childhood trauma. But sometimes the characters are kinda dumb and it probably goes a season longer than it should have. (B-, D+ to Season 3)
  • Big Little Lies (HBO) – We don't have HBO but sometime in quarentine HBO was giving shows away via Amazon Prime. Season 1 had a brutal display of domestic abuse and a great "Well what happened?" to it. It was impossible to carry that on to Season 2, but exploring more characters on the fringe and the aftermath of what they did in Season 2 (instead of creating something else) was an excellent way to go (A, Season 1 was A++)
  • Outer Banks (Netflix) – What starts out to be a teen drama turns out to be an adventure show more akin to Indiana Jones than Gossip Girl. It took a while to get there but when it turns, it was worth it (A-)
  • Schitts Creek (Netflix, well now) – techncially we haven't finished this yet but we will – and will probably watch it all again. Our favorite comedy since The Office. It deserved all it's rewards. And if you love the show like me, then you need this site. (A+)
Category: misc Tags:

Webfaction to Netlify


It was funny – the day after I finally put up a blog post I got an email from Webfaction that my account was closed. That was funny. I mean I knew they were migrating sites and I had a couple of old Django playgrounds on there, plus my person blog generated from Pelican. I got the emails over the past couple of months that my Django sites (and their pgsql db's) weren't migrating and I was fine with that – they were ideas that didn't go anywhere. But I was surprised that my account was closed. I check my blog – nope, down. It seems that they didn't move anything of mine. I then said some non-professional phrases, and continued back to my day job, thinking of a plan of action in the back of my mind.

Important to note that I hadn't lost any of my content – my files were still there, I just needed another place to put them. I played around with Netlify once, just to see what all the fuss was about and I did like it. I figured I could move my content over there pretty quickly. I was already using GitLab to store it (and my personal projects) so I figured it wouldn't be too hard to just move it over. I started working on it when I had some free time and went down quite a rabbit hole.

I didn't like having to move the DNS over to Netlify's control, but I understand what they are doing and Netlify controlling the DNS makes this possible, so that wasn't too bad. I made a requirements.txt of my simple Pelican area (under a venv ) and that was good to go. I checked that into my private gitlab repo, which I had already setup Netlify to monitor and it saw it and built it. Well, not really. It failed miserably. This was where things started to get even further off the rails.

First off, Netlify's default Python is 2.x. Yes, still Python 2, even though it's been sunsetted for almost a year now. They do have Python 3 – to use it you need a file called runtime.txt with simple 3.7 (or whatever version of Python 3 you need). Note – not python3.7, just the version number.

So once I got that going, I saw that the deployment was successful! I went to the URL… and it was blank. I looked at the Netlify log and I had a bunch of Emacs errors. You see, previous setup was to write my content in Emacs with OrgMode. I used a Pelican plugin called org-reader to convert the files to HTML on deployment. Locally, I just used a Fabric task to generate the static files and sftp them to Webfaction. I did everything locally, and just copied the HTML to Webfaction. Well now I'm relying on Netlify to do the build and copying. What was weird is that Pelican wasn't existing with an error when Emacs bombed out on each org file.

I was able to determine that Netlify was using Emacs 25 and I was on 27.1 locally. That is kinda old but there was no way to change what Netlify had – I wasn't allowed to run apt install there (permission denied). After beating my head against the wall a bit, I decided to look for another Pelican plugin. What I found was org-pandoc-reader, which really could work well. It obviously uses Pandoc, which I have used before and it works really well. I first used the plugin locally to make sure it could handle my existing org files and it did with no problem. So, just assuming that Pandoc was there in Netlify, I committed and pushed. And in a few seconds all my content was there. A good side effect is the Pandoc renderer is faster. I think it takes multiple org files in on one command and my Emacs also loaded my full initialization when running org-reader (which I could have fixed.. but still wouldn't have worked on Netlify). Locally this made rendering the pages when testing a lot faster.


  1. While it was painful my host went away and closed my account, I still had my content in pure text. So I could put it anyway… there are more places I can put it besides Netlify. If this didn't' work I could have made another choice, like GH Pages, AWS S3, etc.
  2. Netlify is pretty open about what they provide… You can even see the Dockerfile that they use to build and deploy content on. This was invaluable to me
  3. Not mentioned above, but I found it handy to put the build commands in a script (which I wittily called netlify) and put my Pelican build command there. This allowed me to easily add other commands to it (like emacs --version) to help troubleshoot what was going on.
Category: misc, tech Tags:

© Mike Hostetler 2016

Powered by Pelican