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.

Take-aways:

  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:

2020 -- The Year of Taking Notes

 — 

Hey it's December and it's my second blog of 2020. Almost a year since my last update. Let's not talk about the strange year of 2020… sometimes I do an unintentional Big Thing(tm) for me, learning-wise or tech-wise of the year. A few weeks ago I figured out what 2020's was and why not share it now?

I've never been really good at taking notes before. Not really sure why. Some of it was stemmed from "Sure you can write it down but you will never find it when you need it" and some other was "You fight the tools to do it well."

There is a concept called Zettelkasten that is becoming very popular. I suggest you read that article or this one to get an idea. You can google the Zettelkasten name yourself and see what is out there, what tools are our there. If you want a good book to convince you more and more details see How to Take Smart Notes by Sönke Ahrens . I'm not going to get in the nitty-gritty details of how to do it (because I'm not sure I'm doing it well) but simply a note should have three things outside of it's content:

  • tags
  • links to other notes
  • A title to find

It took me a little bit to find my own system to make it work for me. I declared bankruptcy on my Emacs config and started using Doom Emacs. Doom make it easy to install Org-Roam, which is a re-build of the Zettelkasten system Roam built on top of the ever-powerful OrgMode. I use Deft to quickly lookup notes.

This is all fine and good on my Mac but I'm not always on my Mac. What if I find something I want to remember while reading on my Android phone or iPad? this is Trickier. If it's just an article I want to read (again) later, I add it to my Todoist. If it's something I want to remember… well sometimes I still add it to Todoist with a comment and add it to my Org-Roam later. On my iPad I've started using (and paid for) Bear to write notes into. I think (usually) copy the notes out of Bear and into an Org-Roam note later. Bear is really a joy to write with – it gets out of my way, let's you (or makes you) do Markdown, and generally does the right thing.

This is all about implementation and workflow, which I will admit isn't great and is evolving. But the idea of Zettelkasten is great for me and while the literature talks about it for writing, it's really useful for all knowledge workers. If I figure something out in the application that I'm writing, I make a Org-Roam note about it. Or something I want to try, I make a note (and generally a Todoist item to revisit it eventually). And if I run into something, I looked my notes before Googling around about it. And hey sometimes I write a note about "Look how cool X is!" and then later I figure out it isn't go cool, so I make another note how I fixed it and make sure that links to the original and then edit the original to say "hey use this instead".

Basically, little by little, I'm making my one Wikipedia, but better because it has my own thoughts and opinions in it. I'm not terribly picky about what I put in – technical, other soft-skills reading, etc. As Ahrens said in his book:

Working with it [Zettlekarsten] is less about retrieving specific notes and more about being pointed to relevant facts and generating insight by letting ideas mingle. Its usability grows with its size, not just linearly but exponentially. When we turn to the slip-box, its inner connectedness will not just provide us with isolated facts, but with lines of developed thoughts. Moreover, because of its inner complexity, a search thought the slip-box will confront us with related notes we did not look for. This is a very significant difference that becomes more and more relevant over time. The more content it contains, the more connections it can provide, and the easier it becomes to add new entries in a smart way and receive useful suggestions.”

So really, the bigger the better. Personally I looked up five different notes together to write this article.

The thought came to me the other day how different I have become to notes when I was working on a church Bible Study, Book in hand, iPad on my lap. The iPad is in split-screen with Bear on one side and the Bible passage on the other, ready to take notes. The Mike from last year would have squeezed his answers into the fields but now he wants to keep them later.

Category: misc Tags:

My Uses This

 — 

This year I've discovered the blog Uses This and I'm fascinated by it. Since I will never be on there, I decided to roll my own. As I started thinking about it, I realized that I kinda have something like it, at least describing my current development environment so maybe I will just allude to that when I get there.

The hope is that maybe others will post the same type of thing in their blog. I just find it interesting. Maybe I'm just weird.

Who are you, and what do you do?

I'm Mike Hostetler and I'm a Principal Consultant at Object Partners, which is probably the best place to work for my current station in life. Historically I've been doing Java development but now I'm living in the world of AWS, Python, and NodeJS (if I have to). Since Python is my favorite programming language, I'm ok with that change.

What hardware do you use?

My employer issued me a MacBook Pro. I like the CPU and memory but ignore the Touchbar and dislike the keyboard. A lot. While working, I usually have it closed and hooked up to a monitor.

Through work, I won a pair of Sony WH1000M3 headphones. It's both Bluetooth and noise-canceling. I would have never bought them for myself but I really love them. I use them for calls as well as having them on for deep-work. Before I used a $30 pair of MPOW headphones – still decent sound, longer range, but not good for calls. Not noise-canceling but it filters out a lot.

At home, I use a Das Keyboard, which I have a love/hate relationship. I love the feel of it, and the keys, and it's sturdy. But sometimes I accidental press a key a little bit and the keyboard sees that as a press. But I haven't found a keyboard I like better. I also have a cheap Bluetooth keyboard from Anker that I port around that works surprisingly well. I had a co-worker suggest a Magic Trackpad 2 and I like it more than I thought I would.

Personally I tend to not upgrade my tech very often. I have a Samsung Galaxy S8 phone and a Samsung Galaxy Tab S2 tablet. I use the phone for …, well, communicating, and use the tablet for games, reading and research. I read a lot of novels have really like my Kobo Aura. Why a Kobo instead of a Kindle? Better integration with my local library and I like the epub format more than Kindle.

And what software?

If you know me very well or frequent this blog, I'm a big fan of Emacs. I won't belabor this point because I've already stated my opinion. I would say there is no such thing as an "Emacs tourist."

So besides that – what other software do I use? For browsing I moved back to Firefox and don't regret it. It was the announcement of the Multi-Account Container add-on that sent me there and I don't regret it . I now use it on my tablet and my phone with syncing, etc. I have things locked down tight with uBlock Origin and Privacy Badger so sometimes a site I need doesn't work quite right, and I have to use Chrome. But most of my browsing is done in Firefox and I like it.

For my todo-list, I'm currently using Todoist, which I've come to really depend on. The Premium version is worth every penny. My favorite Todoist feature is email forwarding – I can forward an email from my (or any) inbox and it will immediately appear in the Todoist app, with my email as an attachment. I've found this really handy for movie tickets, store coupons, etc. There are a lot of integrations with Todoist and plenty of other features. If you want to if you want to try Todoist Premium, click this referral link. I don't think you will regret it.

Other software: Keybase for my private git repos, KeePassXC to manage my passwords, Swinsian for my music collection, Inoreader for blogs, Shift for all the GMail accounts I have to manage, and pCloud to keep my important files in.

What would be your dream setup?

I sometimes think that I would be just as happy or happier with a stronger laptop with Linux on it instead of a MacBook Pro. None of my software I used for development needs MacOS and most of the other software (pCloud, Todoist, etc) work fine on Linux or have good alternatives. And yeah it would have to be a laptop because I really like the portability.

Category: tech Tags:

New Tools for an Improved Workflow

 — 

Kasim Tuman recently wrote that Emacs is like a workbench. It evolves as you get better with your work – or changes as your works changes. I think that is a great metaphor of not just Emacs, but software development tools in general. So this post is about my evolving workbench. My workflow has changed a lot in the last few months to a year because of different tools I discovered and have put into practice. This came as I switched from Java to Python as my primary language. Some of these changes are Emacs-related and some are not. Yet everything kinda coalesces together into one harmonious system and suddenly things become a lot easier.

As I said above, I've been using Python almost exclusively in the past year. I haven't fired up Intellij in months and, frankly, I haven't missed it. Yes a full IDE would give me things like refactoring support but in Emacs I can open up many files and look (and switch to them) with ease – something that Intellij never did for me. It's effort in the JetBrain's world – in Emacs, I do it with muscle memory and routinely am looking at 4 files at once. One time a co-worker was working with me on something and I quickly deleted some files with Dired and he stopped talking. I asked him if I messed something up and he said, "No I just saw you manipulate files while inside Emacs and I'm still recovering from that."

Anyway my independence from Intellij has freed me up to explore other tools to help me with my software development work and I like what I have built up.

Docker

Just as a development tool, things get a lot easier with Docker. Setup a docker-compose.yml file for a database and another other extra services for my projects and suddenly I have a solid local development environment where I don't have to sweat if it will work on a server. You can setup multiple services in one Docker file (I had PostgreSQL and RabbitMQ in one file, for example). It's really as easy as a google search for "docker <service you want>", click one of the first links, and put their snippet into a docker-compose.yml file, and then run docker-compose up -d.

tmux

Tmux has been in a my tool bench for a long time, but I have started using it with a renewed fervor. Mostly because I have 2-3 projects (if not more) going on at once. It's hard switching CLI's back to that and having a config for it. direnv helps a lot, but doesn't give everything. I found tmux-ressurect, which saves the state of my Tmux prompts. So now when I need to switch a project, I just go to my Tmux-powered prompt and switch. Forced to reboot? I just start Tmux and run my tmux-ressurect command (Ctrl-\ Ctrl-r) and I have everything back from before the reboot.

I will say that I've been using the zsh less and less lately, mostly because Projectile has been taking most of my shell usage away from me. I have been using eshell a lot lately and that is good enough for simple things. The Emacs terminals like ansi-term just fail on REPLs, etc. I played a bit with the vterm module and it shows promise but has a ways to go for my usual workflow. I like that tmux is always there and switches contexts with few problems. It's hard giving up years and years of aliases that you are used to. See my tmux config to see how I set things up.

direnv

If Emacs is my IDE, then direnv runs my config file that the IDE reads. So as the .idea folder is for Intellij IDEA, so is my .envrc for my Emacs/shell setup.

I use direnv for project-specific environment variables (like AWS_PROFILE and even custom PATH). But you can do more than that: I talked about this on my employers blog but I use it to manage my Python environments as well. It took me a bit to find it, but emacs-direnv makes Emacs read it and follow it. Then Emacs knows all about which Python environment I'm using. That makes a lot of things easier. All I have to do is open the project in Emacs and poof it's pointing at the proper Python environment. My only real complaint about direnv is that it doesn't have a parent structure – that I can't declare environment variables on the top level (like AWS account info) and have that go into the direnv-enabled folders below. Recently I started doing source /path/to/some/common/file and that works – you need to use the fully-qualified name to make sure it works. Not quite as nice as just using a parent folder, but it works really well.

Emacs Stuff

Yes, Emacs needs it's own list of things. This part of my workbench is always evolving but I got into a group of tools that have been fairly consistent lately. You can see my Emacs shortcuts here, which give you an idea of what kinds of things that I use.

Projectile

I've had Projectile in my Emacs config for a long file, but haven't used it until the last eight months of so. It has now become the general way I interface with files and buffers in Emacs. Everything is a project (which is easy – it just has to have a .git folder in it). Then I can find files in the project, switch buffers in the project, search files in the project, and compile (or run) the project from any buffer opened in the project. This integrates with ease with direnv and Helm. So, I can find a file in the project via Helm and the search project results buffer is also in Helm.

Let's also not forget that Projectile comes bundled with Prelude, which is a really nice little Emacs starter. My favorite part is that you can put your own Emacs configs under ~/.emacs.d/personal.d where you put your own configs… not having my mess with the main Prelude/Projectile part is nice.

Helm

My newest Emacs addition and, honestly, I'm not sure how I got by without it. I tried to use it before but I didn't get the hang of it. As I mentioned above, Projectile can use it and that got me going with it again. Now I flip through buffers and filenames with ease. So easy to switch to another file. And the interfacing it with M-x to find functions is great I find useful functions I didn't know existed – like pytest-one and pytest-all, which now I use all the time.

Magit

When I first started using Magit, I found it confusing and didn't know what the hype was about. I stuck with it, and figured out how it was structured and the way that it wanted me to work. I found that it's way of dealing with git was smarter than my way. It has now became my preferred way to deal with Git – not just committing, pushing and fetching, but also looking at logs and branching and everything else. I never would have believed I would have given up the command line with git, but yet I have.

Closing

I'm enjoying this freedom from in my current set of tools. I find it much quicker to get a lot of things done, switch projects, etc. Some of these things have been kind of "set it and forget it", which is nice until you need to setup it again.

A big question – how will this work when I go back to Java development? Not real sure that this setup is good for 100% Java… but I could see myself using both this sort of setup with Intellij… use the strength of both. Of course, maybe I will find a different list of things to be using a different list of tools from this list by then.

Category: tech Tags:

Literate Dotfiles

 — 

For several months, I've been converting a few of my dotfiles into OrgMode files and using tangling to generate the config file and the same file generates HTML documentation. The point was to always publish them – and I finally have. See the HTML version or the github project. Note that the Org files are rendered in Github because Github is smart like that – it treats them the same way that it does with Markdown.

I stole, er, borrowed the system from Toon Claes. And, yes, I have had to edit a Makefile to do this.

I found this documentation on my files to be more useful than I thought. Besides just the documentation of "why is this here" but it also helps in "why am I adding this?". Because the ultimate source is an Org file, I can do a better job documenting why I did something in the file then in the comments of the file. I can (and really should) link my config file to my OrgMode-powered knowledge base about what each thing does. That doesn't give the Internet reader much help, though. But is this documentation more for me for them? That I'm uncertain about.

So why call this "literate"? It's not my word – it's Donald Knuth's. Basically it's keeping the documentation and the code together. Wikipedia has a good overview on it.

I already repeated a lot of links from the Readme of this project. Hopefully these files are helpful to someone.

Category: tech Tags:

On Music

 — 

It's funny as I have hit solidly middle age, when you figure things about yourself that have always been there – but you have just noted it. I can list quite a few things – both positive and negative. But what the one I have just simply noticed is music.

This should be a surprise when I talk about managing a mount of music but cognitively it didn't hit then. It started when I told people about it and said "I imported in about 5k MP3's with it" and their eyes get wide. I guess people delete MP3's? is that a thing? Well it's not for me.

I think music has always been there. I mean, old hymns in church bring back a lot of nostalgia for me. And my kids are constantly amazed how I can sing along songs on the radio. Or on my 5K collection that I put in the car (which of the big triumphs of my nerd career). I generally can pick out a song I know within the first few seconds of it starting. I have less success with some songs but most of the time I can pick out at least the artist. I don't need music on all the time (though I do prefer working some playing on my headphones).

I'm not sure why I'm wired this way. I didn't come from a musical family. I can't sing very well (doesn't stop me from singing along) and I played instruments in grade and high school but haven't kept it up. But there is something about music playing that soothes me.

And some random notes about this subject:

  • I don't have a favorite song, or a favorite genre. I like about everything – jazz, country, heavy metal, pop….
  • That said, I think Stevie Wonder's Songs in the Life is probably one of the greatest albums ever recorded.
  • In my post I linked to above, I said I use Nightingale to play music. Well, Nightingale hasn't been updated in a long while and Mojave said it may not work in new versions of MacOS. So I moved to (and purchased) Swinsian and haven't regretted it. I don't use most of it's power but, at it's core, it's like iTunes before iTunes sucked.
  • This old Lifehacker article was my guide for putting together Smart Playlists to keep things fresh and manageable. They do it with iTunes but the same functionality exists in Swinsian
Category: misc Tags:

Review "Relay"

 — 

I'm not sure how many other people remember Nextel but I do, maybe because my first job out of college used them a lot. They had one really cool feature on their phones – a walkit-talkie like functionality. You could hold a button and talk, and people on your list of numbers would get it. You could have a conversation or call for help. It worked pretty slick. Sprint bought, or merged, with Nextel and this functionality faded into history.

I was reminded of this great idea when my first told me about Relay, which is a little square device that lets you do something similar. Its designed for kids and it's literally a button with a speaker – you push it and talk into it. People on your same plan with a Relay, and with the Relay app on their phone, can hear what you say and you can talk back and forth. It also has GPS so you know where your child currently is. The Relay is created by Republic Wireless, and you have to use their network, which is one of the bad things, IMHO. At least for us, not all the networks that RW used (TMobile and Sprint) aren't always great where I live. But I have found Relay support is good – for example, they sent me a replacement SIM card when I was, er, mu cking around with ours. The support person noted that Sprint would be better for us than the TMobile card that they originally sent us, so they sent us a Spring SIM instead. And, yeah, it does work.

Now I can run errands while my son is home during the day and I can message him where I am, and when I'll be home. Or he can be at a friend's house and I can make sure that he is there. We love it and it has made our lives a lot easier. If you are interested, here is an affiliate link for a free month of Relay. I think it's very worth it.

Category: tech Tags:

RSS Reader

 — 

I've gotten back to blogs again. And that meant I needed an RSS Reader. The qualifications:

  • web-based but have an Android app
  • interface gets out of my way to read an article
  • favorite support
  • syncs often
  • still under active development
  • ability to pay a reasonable price for the service (because it's useful for me)

In the past, I've installed readers myself and had it fetch updates, but I don't have the time to really monitor a server anymore. I once used Feedly so I loaded that back up. I paired down the feeds to blogs I was more likely to read and ones that were still updated. And went from there.

Here was what drove me crazy about Feedly:

  • Feeds weren't refreshed very often. Faster updates were a feature of a paid account. I can see that (but didn't like it)
  • Searching for stories/feeds was limited if you didn't pay. That never sat well with me.
  • The Android app didn't sync very well. So an article I read an hour ago on the web would be unread on Android. Apparently this has gone on awhile and it's not solved by paying money.
  • The paid price was too high for me. I'd like something in the middle with fewer features. But it was all or nothing.

I started looking for an alternative this spring. I thought seriously about The Old Reader but the lack of an official native app stopped me. Somehow I stumbled onto Inoreader – not sure how. I had never heard of it before and did some digging and it's ran by a Bulgarian company. No matter – it got good reviews and from what I read it's "for power users". And that's kind me. And it's what I stayed with.

It's interface is seemingly like Google Reader or, er, The Old Reader. Starting was easy – I exported my OPML from Feedly and imported it in. My categories and everything were moved over as well as starred items (i.e. favorites) where there. I've been using it for a few months and finally paid for the lowest plan and may upgrade a tier.

What do I like:

  • It's fast.
  • The Android app syncs my feeds!
  • They have a tiered pay structure so I don't have to pay a high price for features I won't use.
  • Rules is a paid feature. The lowest paid tier that I have only allows for one. I used it to mark certain stories as Read (because I'm not interested in them and they flood my feed). I may need more now that I have it working…
  • Integrations are free! So I can send stories to Pocket without having to login to Pocket on my work computer.
  • A customizable dashboard that I find pretty useful

But there are a few annoyances:

  • There are ads. And no I can't blame them for that.
  • You can add the same feed to multiple folders. This is obviously a feature but when I did it on accident, I found it annoying. YMMV
  • The Starred items are hidden away in a folder that I tend to overlook

Overall I'm pretty happy with it.

Category: tech Tags:

A Wii Bit of History

 — 

In an odd series of events, we played our Wii again for the first time in years. We had a lot of fun bowling and my son discovered how hard Wii golf can really be, but then he cleaned us up on the tennis court. He was a baby in the heyday of our Wii so he doesn't remember much. And let's not talk about Just Dance Kids.

The Wii was clever in it's design and controls. But this post isn't to wax poetically about this game console. Instead, it's an artifact of our family history.

While my son was young in our Wii-hey-day, my now-teenaged daughter was in the thick of it. Opening up and looking at the Mii's we got to see all the avatars she made over the years. Most of them were blonde girls name "Lily" but there were other names too. There were Harry Potter characters. There were also Miis named after foster kids we hand in our home… and Miis made by uncles who visited as well as by myself. My Daddy Duff Mii is still one of my favorites.

It was a weird bit of nostalgia to see all those old Miis running around. And then go bowling with them.

Category: tech, family

The Year of Emacs

 — 

Somehow, by accident, 2018 has become the year of Emacs. I did write about some Emacs improvements I was doing, but it seems to be something I have come back to time after time. My latest work project is a large, mostly-standard Java app with some Spring sprinkled in here and there. I'm using Magit for using all my Git interfacing, which I never thought would happen – I always did the heavy work on the command-line but find Magit much more friendly now. For coding, I'm moving back and forth between Emacs and Intellij. Intellij still does a lot of nice things (like auto-import, syntax checking, etc) but I can type faster in Emacs. And, since this codebase is large and, er, not necessarily well arranged, Intellij can be slow with it. But Emacs with gradle-mode let's me do the TDD things much faster.

All this to say – last week I ascended onto even a higher level of Emacs karma.

Our dev team is transitioning between from Windows to Mac and some are still pedaling away on their Windows machines. This causes our commit-hook to put our ticket name (which comes from the branch name) to go from working to non-working on the Mac, because of permission issue. If I fix it, the next pull may break it. So I'm having to remember to put it in, which, so you know, just isn't going to happen. On a check-in last week, I noticed that Magit has the branch name in the comments when making a commit message. I thought "I could make a keyboard macro that uses the branch name to put in the ticket name." So I quickly created it and tested it out – it worked fine. I didn't know how, but knew I could save it for later. Sure enough I could but first I had to name it – so that was a quick C-x C-k n . I had already setup emacs-bind-map to make my own prefix to put come shortcuts. Of course, I had to run insert-kbd-macro to put in the Elisp code and the named function (the code looks like gibberish… mostly numbers) and then assigned it in my bind-map command.

This is not rocket science, especially for Emacs but my shift in thinking of simply thinking "I know I can do this… let's figure it out" as opposed to "I wish I could…" or simply googling for someone's blog post.

Category: tech Tags:

© Mike Hostetler 2016

Powered by Pelican