Category Archives: Software

A crumbling railroad bridge over snow, the uprights are worn and look ready to give way.

Zero to One to Crumbling

It’s a golden age of convenience and ease! The speed that we can get something usable up, working and deployed these days is incredible. The sheer amount of good engineering infrastructure we can take for granted is astounding – and that’s good.

In Deb Chachra‘s How Infrastructure Works she has a tricky definition of infrastructure that really works. Roughly it’s that “infrastructure what you can take for granted”. It’s the stuff you don’t have to think about. In my neighborhood, that’s a lot! I don’t think about water, light, heat, electricity, or food supply. At work, I don’t really think much about compute availability or disk availability – though I do have to design systems that use these mindfully at scale.

In software, there’s other kinds of infrastructure. Do you have to manually allocate memory? Do you have to destroy objects and free up allocated memory when you are done with it or does a garbage collector handle that for you? Do you have to optimize your control flow and loops or does an optimizer do an incredibly smart job of that for you? The more that there is good software infrastructure, the more you can spend time on the biggest difference maker for you – handling the business domain problems that you want to solve.

Old Man Story Time:

For my first job in NYC, I was given a C# code test. This was difficult for me, as I had no copy of VisualStudio.net available to me. Also, I didn’t know C# and figured it can’t be harder than C. I had to look up online manuals of C#, write the code in Notepad, and use csc.exe to test if it worked. A lot of what the test demonstrated was that I could write a for loop and that I was bull headed enough to push through obstacles and find out how to get something done. Now I write fewer for loops.

The last repository push I made I didn’t bother locally cloning – I was able to use the web based editor in GitLab to branch, make a change with auto-suggests, then commit, push and create a merge request. Unbelievably easy and cool.

But Jim Nielsen‘s Zero to Unmaintainable raises a good point:

There is such a focus on how quickly you can get going, but so little focus on how you maintain what you just created.

The developers I work with are so bright and smart and full of ideas. And they can get smarter, more reactive, better designed systems than I can think of up and running so quickly it’s astounding. But I see them frustrated, because they are held up by different things than I was. I used to get frustrated by the failures of the technology or the ability to even get simple things connected. They have best practices built into the new tools. But they are now frustrated by the organizational demands associated with new tooling.

Who will support this new application? How will we keep it updated? How will we secure it? When the APIs we interact with change, is this application well enough documented that someone else can fix the problem or do we need to take you off a project to fix it?

Part of my job is to help identify these issues early and turn them into infrastructure so that they can concentrate on the business problem and solutions to them – rather than these concerns. Instead of frustrated developers working out non-functional requirements, it’s better when we turn them into things they can take for granted.

This means working out commonalities across solutions we build for clients. Deployment’s a big one to get right once and then not talk about much. Same for version control. Same for dependency management and security scanning. Same for support after go-live. Same for maintenance. Same for self-service for clients.

The response to people being super fast to solve problem and come up with ideas isn’t to slow them down – it’s to solve the next bottlenecks.

These opinions are, of course, my own and published by me, not my employer.

Default Apps 2023

It’s a blog trend!

Every once in a while, everyone wants to share the tools they are excited about.

When I saw Ankur Sethi’s post about it on Mastodon, I was in.

  • Email: Outlook (because work) / Thunderbird on the laptop
  • Calendar: Outlook (because work) / Thunderbird or a pinned google calendar tab
  • Reminders: put it in the calendar.
  • Chat: Beeper (because it handles everything) or Slack (because work/school)
  • Photos: the iOS camera app
  • Books: BookWyrm, Libby, CloudLibrary, Aldiko, and the Kobo app. But I only really use my Kobo.
  • Mastodon: Ice Cubes
  • RSS: newsblur
  • saving things to read later: Pocket – which syncs to my Kobo
  • Browser: Firefox
  • Search: duck duck go.
  • Music: play:Sub or Navidrome
  • Podcasts: Overcast
  • Audiobooks: I don’t. I don’t understand how the rest of you can. I’m glad you enjoy it.
  • Photo Editing: Whatever iOS provides natively or I use the GIMP on my laptop.
  • Todo: Vim and todo.markdown in project folders, Trello for family projects, otherwise, pick a time and put it in the calendar to get done.
  • Grocery lists: a pad of paper
  • Presentations: Vim and markdown -> pandoc -> reveal.js is incredible.
  • Writing: Vim
  • Code editing: Vim
  • Spreadsheets: Google Sheets
  • Budgeting: Google Sheets
  • Terminal: Whatever is handy, but tmux inside of it.
  • Git: the git commandline. (or fugitive inside vim).

For more of the tools other folks use, Robb Knight is collecting these lists on App Defaults.

Automated export of your goodreads library

Goodreads used to have an API but they stopped giving access and it looks like they are shutting it down. A real garbage move.

I like to be able to use my data that I put in so I wrote a script to automatically download my data regularly. Then I can do stuff like check to see if books I want are in the library or keep my own list or analytics, etc.

Here’s the python script to export your good reads library, hope it helps you. I’ll put it in the public domain.

Updated to add: I got tired of dealing with places that do garbage moves. I left GoodReads for BookWyrm and it’s better.

Week 2202

In the past week, the federal government used some very flimsy excuses to send federal “police” into Portland and take protestors into unmarked vans without identifying themselves. The scary times have gotten even scarier, the authoritarianism even more blatant. There is so much awful stuff going on that I can’t even take in all of it, much less do meaningful work on it. I’m trying to just do small things often. I’m trying to do things like donate to campaigns that will help, sign petitions, elevate small things that are going to turn into big things.

Since we’ve donated some large sums in the past, I sometimes get directly called by candidates. I resolved to take time to ask them specific questions about things that matter here since I often get called by them when I’m changing diapers or doing other family stuff. I spoke with Alex Morse, who is a Justice Democrat who is running for congress – he’s endorsed by Jamaal Bowman (who just beat Eliot Engel). We talked about his work as a mayor in western Massachusetts, dealing with police unions, restorative justice and combating systemic racism when you are the executive – he’s notable I think for actually working on these things. I also took some time to petition Nextdoor, a social network where local racism is really evident, to halt work with Police departments. Features like “send this to my police” really don’t take into account what happens after the police show up, and why this isn’t something to do lightly.

Family

We paid off the ticket from the fourth, met with a guy about solar panels ( we don’t use enough energy to justify the cost even with multiple incentives from the state). We’re also looking for electricians to add some outside outlets and a ceiling fan in the living room.

We sorted out better schedules for me to work and be with the family predictably during the day. It’s easy to both work forever when it’s in the house or to bunk off when something cute is happening. Trying to be balanced, so we solved it with a gCal that Sam can see with times that are marked out of office on my work calendar. That way it’s easier to know when “I’m definitely working, don’t bother me” and when “let’s take a break and play”. Making it visible to work lets folks there plan around when they shouldn’t expect me to be available.

We got Swale and Zebus some bikes! They rode them! It is cute!

The Brooklyn apartments are getting some interest on the market – 25H at least has some people viewing it. 25J is where the bigger mortgage sits, so I hope that it pans out quickly as well.

Nerdery

I added some better color settings to Jumpstart – and made installing ruby gems safe, similar to what I did earlier for node.

Also set up 2 way syncing on the Synology NAS drives in brooklyn and upstate so that everything is backed up everywhere. For the meantime at least, the upstate is the new primary and brooklyn is the secondary. I tried out Ranger as a terminal file manager. Also, I made a dumb little script to make memes easier.

After I told folks about Pingplotter on the cesspool/hobby network reddit, it inspired Toazd to write an even more complete and colorful version of pingplotter.

Work

Highs and lows in the ladder of abstractions, highs and lows success wise.

I worked very high in the ladder of abstractions, transforming a large backlog of tasks into a program of new product features and a big revenue opportunity. At the same time I had a pull request submitted and accepted to fix a client issue. I got a great review ( we use OKRs to have quarterly conversations around progress, so it is sort of like a review), and then my laptop died!

It’s a sweet little lenovo yoga 920 and was running Ubuntu and Windows, I was loving using it. But it’s really disappointing for it to die hard after 2 years. To get it replaced involves shipping it out, going through a 3 day quarantine, up to 9 business days to fix, then 5-7 business days to ship back. I’m lucky to have enough spare laptops in the house that we were able to get Sam’s macbook hooked up. My 2013 macbook air would have been fine, but the thunderbolt port apparently doesn’t work (first time I’ve ever tried it!)

I hope when I get the Yoga back it won’t be wiped and I don’t have to go through a whole setup process again.

Pingplotter

I need to see if my remote connection to work is healthy and if my remote connection to video conferencing is suffering.

I wrote a little utility to handle that in the commandline. It’s dumb but it works. Let’s call it pingplotter. It’s in the public domain, go nuts.

It’s fine to just pop in a terminal you have open, but it plays really nice with tmux and glances (I use both).

I think I spent nearly as much time making these screencasts as I did writing the shell script. I should blog that too, if only so I don’t have to research that again.

Week 3008

Welp, I’m getting this in a bit late, so I’ll also put in some Music Monday.

But since the world is a pit, you get Cotton Eye Joe Gregorian Chant Nightcore Hardcore Dubstep remix. Do better this week, world! The Senate confirmation hearings for Brett Kavanaugh were a reminder of how little women’s pain matters. The guy is also clearly lying.

Code

My team won one of the 2nd place slots in the Hackathon as “Most Complete Hack”! We are talking about bringing it through to complete prod deployment.

Read up on Conflict Free Replicated Data Types which are a really interesting way to do mergable data structures. Underlies lots of interesting stuff like Redis.

Experimented with Mozilla’s Configman – the docs are NOT good enough, because they actually have a great drop in replacement for the standard ArgumentParser in there.

Bike

Got in all but 1 day last week. Rode in the rain 2 days! The first convinced me that I need to either own rainproof pants or just plan on riding in shorts in the rain. I bought a pair of Showers Pass transit pants and they worked great on Friday. Also got to randomly ride in with my buddy Lance again and reminded how nice that is.

Family

Zeebus is really smart and understands a lot of what we say! She picks things up and puts them where you ask, she understands that we need sleep, she’s got a lot going on upstairs.

She puts on Max’s bike helmet to let us know she wants to go riding!

When she slapped Sam hard in the face she realized she had hurt her- then Z gave her a big hug and patted her. That’s what Max does when he plays too rough with her!

Max and I did a really good hike together. We went a little crazy and climbed up next to a little waterfall and did some semi-safe bouldering nearby.  Max and I actually climbed way up a small cliff and got to the top. We also found a cool Puffball mushroom. But we didn’t eat it because we didn’t know how to tell if it was poisonous or not. (now we know and we’ll eat it next time!)

MAX LAZER at the CMOM exhibit "Hello Japan!"

Orbital 0.2.1 – Secure Polyglot is out in the wild

I got a bit busy and I never did the release post for 0.2 so this is a big one with lots of features!
MAX LAZER at the CMOM exhibit "Hello Japan!"

Translations

Orbital is now translatable using the standard WordPress API mechanisms. If you’re a translator please contact me! I’d love to work with you to translate it! You can see the sample .po and .pot files under the “languages” directory in the plugin.

Blogroll as a Widget!

I’m really excited about this! One of the reasons I had an idea for this whole thing is that I was frustrated that the blogroll widget didn’t synchronize with my feed reader.  Why wouldn’t it just be a representation of what I’m actually reading?  So now that’s done! You can choose to display a link to the underlying OPML for download if you like.  I’d encourage you to do that because public OPML files online is a really good idea. I also put in a promo link but you can totally turn that off. I’m conflicted about putting that promo in because I’m not much of a self promoter – but I want to share this thing with more folks if possible.

Fast Feed Switcher

I don’t really like taking my fingers off the keyboard, so I really like keyboard shortcuts. I’ve added one more keyboard shortcut!  Type g to bring up a window that will let you go to any feed. You should be able to start typing the name of a feed and auto narrow down to whichever feed you want, then hit enter to go to it.

Security

I’ve added essential protection against cross site scripting attacks. In case someone is actively trying to mark your feeds read or import new feeds for you, they can’t do that anymore.

Bugfixes

Some folks experience the feeds stopped updating! That’s not good behavior for a feed reader – so it’s now fixed.
Some folks experienced a problem when they had multiple users and a user with non-edit permissions was added. That should be fixed now.
If you uninstalled the plugin it didn’t clean up after itself. Now Orbital is tidier and cleans up to not leave traces.

Orbital Feed Reader 0.1.9 Codenamed “BORN FREE” is out!

Last night I pushed out the final changes to uncage version 0.1.9 and get it out in the wild.
MAX LAZER tears off on his own  to explore Oregon

This version is mostly about giving you freedom. You should be able to easily import your stuff from other platforms into Orbital Feed Reader to use it. If you decide that you don’t want to use Orbital Feed Reader any more, you should have an easy way to leave. Any software that doesn’t tell you how to leave it is something you should be suspicious of.

Get Feeds IN

Share your OPML

For Feed Readers, the standard way to exchange lists of subscriptions is a standard called OPML. It’s an old format, but it’s how they all exchange lists of feeds. I’ve buffed up the OPML import to handle larger numbers of feeds. After you import the file you have a chance to look over the feeds and edit them, tag them or exclude them entirely. Hit save and they’ll all flow into the backend.

 

Get Feeds OUT

But we also don’t want Orbital to be a lobster trap for you. If you import that kind of data I also want you to be able to export that kind of data. Now Orbital is good at exporting your feeds. If you are logged in – we’ll export a file with all your public and private subscriptions and let you take that wherever you want. Some folks want to share their OPML publicly – if you aren’t logged in, hitting the same URL gives you only the public feeds. All your private stuff should stay safe!

Read Lotsa Feeds

Now that Orbital can handle tons of feeds coming in I wanted it to be easy to actually sort through them. Feed Tags now start off collapsed and you can expand them anytime by using the little twiddlers next to each. That’s a technical term. The twiddlers make it much more manageable to see 200 feeds over many subject areas.

Orbital Feed Reader 0.1.8 Codenamed “BEAUTY TREATMENT” is out!

IMG_1185

The most common feedback I’ve heard from folks on Orbital is that it’s not very good looking.  It does the job, but it isn’t a pleasure to look at.

I assume these people are all supermodels, so it looks like Orbital is doing great among the high fashion set.

I got out my scissors, called in the wardrobe department, applied polish and buffed with a chamois. This is the new smooth look, designed to blend in with the new admin themes of WordPress.

Hey, good lookin’!

 

Beauty comes in all thicknesses

Along the way, I’ve added some features – now it is responsive, cleaner and is even usable on my Galaxy S5. Check out this hot resizing action!

Future attractions and graceful aging

Coming soon are some cool things. First, I’m working on version 0.1.9, code named Born Free. It will deal with the how to leave Orbital and how to get into Orbital. I’d never want to trap you!

Second, WordPress is going to upgrade to version 4.0 soon. I’ll be getting Orbital ready for that, and the new REST API should make it easy to build a better mobile experience for Orbital.