December 18, 2022

Now that I’ve removed the web-based admin interface from this blog in favor of a desktop Mac App, I think I’m going to see how far I can get converting that Mac app into a static site generator. The main challenge will be figuring out how (or if) I want to use html page templates for the index, post and archive pages, and the RSS feed. I could use something like Vapors’ Leaf, but it seems like it’s just too much. Can I get away with something simpler so I don’t have to use a third-party dependency?

November 1, 2022

I hope Oregon doesn’t elect a Republican governor or legislative majority this year. It’s not clear to me that Democrats can solve any of the problems around the state to much satisfaction (they are hard problems), especially given how demonized they are by Republicans who seem to attack the very notion of solving problems, but it’s clear the Republicans aren’t going to achieve anything outside of opening more loop holes for corruption and engaging in election denial. It feels like local Republicans are no different than national Republicans. Ugh.

July 29, 2022

All of my problems are the result of being inconsistently raised, and being unraisable.

July 28, 2022

I like super bright screens not so much for the light but for the contrast. A dim screen (even on a Mac) is too washed out. I don’t feel the strain, but I notice its absence one I increase the brighness to max. Do you think it’s possible to have lower brightness, but increased contrast?

July 13, 2022

Some reasons why I like anime. I’ve not already written this post before, have I?

sincerity - Despite when a character says, “I’m not just a side character in a manga,” the characters and the shows they’re in are earnest. The anime itself does what it does as if it’s the first anime ever produced. No character ever ends up just going through the motions.

cinematic - Anime directors use all kinds of camera angles you wouldn’t find in a typical TV show. Even when the show is low-budget, they make the framing and angles work despite the static drawing, or pan/scan over a beautiful scene with dialog voice over. Who can resist the moment when the ice, in an otherwise motionless shot of a glass, clinks?

consequences - Quite often when a disaster happens that’ll radically change the world, it actually happens. No return to the status-quo.

tonal shifts - The animation style fits the mood, turns into a goofball style when it seems appropriate. The animation is free to fit the inner mood of the characters.

dubs work - Dubs work well for anime when they never work for live action. The worst you can say is that the acting might be bad, but that’s on a case-by-case basis and isn’t the fault of the dub itself. My guess is that any animation can be dubbed well. That said, the original is always good, too.

optimism - Every main character says, “I can do better” and they keep trying until they either do better, or are routed into their proper course, where they bloom. Hard work. It pays off, and it’s fun.

found family - Anime almost always ends up being about a found family and how that family makes you a better person, makes your life worth living. It’s not a groups-over-individualism thing, it’s that the group and the individual are two sides of the same coin. The Japanese, or at least as they’re depicted in anime, do not poison themselves with too much individualism.

adult wish fulfillment - High-school anime has the kids relating to each other, their sports (or other interests) in ways we, as adults, wished we had experienced at school. I don’t think anime even gets the feeling of high school correctly. I’ve come to believe that’s not even the point of it. Coming of age stories are for people who have already come of age and (maybe) look back at their own experiences with their mature perspectives and would love to have a chance to try it again. Anyway, the imagined high school anime authors come up with is, on the whole, about people being or learning to be generous and kind to one another. I like to see it.

There you have it. Thems might thoughts on the matter. Profound, eh? Despite the fact that so much anime is the same in terms of tropes, I keep watching it. Each series has a unique set of characters, but, really, it’s the earnestness that keeps me interested.

July 6, 2022

@History of Persia Podcast:

Anybody else feel like we’re headed toward the Holy American Empire? Not just in the literal word play sense of theocratic imperialism, but also that the theocratic imperial center will be surrounded by only loosely connected states as civil rights become distinct state to state?

I get the impression that Christianity is not the goal but the means to an end: destroy public education, for instance, or strike up fear of the other in order to keep the oligarchy going. So, yes?

Giving room to actual Christians is a friendly hand masking a strangling grip.

What Trevor’s alluding to above (I think) is more like the authority of the Pope just before the rise of nationalist monarchies in Europe. Even though the king ruled a territory, all education was by the Church. The people lived their lives according to church communities, holy days, common teachings, etc. Christendom.

I don’t know if that’s where we’re headed. I get the feeling that kind of thing is a temporary model until the entire country is completely in the grip of an oligarchy that’ll use any idea, consistency be damned, to keep people from throwing them out. Divided we rule, etc.

May 29, 2022

Have to admit that it bothers me: the amount of criticism SwiftUI gets from the developers I follow on Twitter, a few blogs, and a few podcasts that boils down to “it sucks” or “it’s a boondoggle” or “Apple has lost it”. It feels like these folks gave it a small try, then wrote it off as insufficient for the complex apps they write. Thing is, how many of them have started writing an application from scratch, lately? And how many of them have built up a deep intuition about AppKit or UIKit over many years and don’t realize they have to set all that aside with the new framework? How many of them remember the months of struggle they went through to do the simplest things with AppKit? SwiftUI will not help you write better UIKit apps, or help smooth off the edges of AppKit. You have to unlearn all that in order to give SwiftUI a fair shake.

Let’s say you’re a new developer (at least to the platform) and you want to write a Mac App. AppKit or SwiftUI? AppKit will let you do everything that’s possible to do, sure, but to do any of that sophisticated “non-toy” stuff requires even more work then to figure out how to do something similar-enough with SwiftUI. I think you can get a lot further a lot faster with SwiftUI both in terms of the application you want to write, and in terms of your intuition about how to go about it, how to troubleshoot, how to adjust your initial expectations about what a desktop app should act like given your current skills. Writing an app is a process, obviously enough. An old timer tells you your app isn’t mac-like in some specific way? Great! Now you have new and interesting challenges.

AppKit is difficult and non-obvious (responder chain, delegates, layers, autolayout, nibs, storyboards, events, UI validation) until you “get” it, at which point you kinda understand the underlying culture of it. Thing is, the more you understand it, the more you realize that culture is built on Objective-C’s dynamic nature. Swift is engineered to participate in that domain (amazing in itself, I think), but by its nature it doesn’t help you understand the fundamental message-passing paradigm underneath AppKit. How many practitioners know about message-send vs function-call method dispatch? Do you really need to know that to kinda “get” the responder chain? That kind of stuff never comes up in SwiftUI. I don’t think it needs it. If you do, based on your intimate knowledge of the platform, you’re going to see SwiftUI as extremely limited.

Let’s say you can’t make the perfect Mac App with SwiftUI (perfect being something that provides the affordances common 10 to 20 years ago and still good ideas today), but you can get close. If you’re just starting out, you don’t even know what a perfect Mac app is, where you should have keyboard shortcuts, when to use an inspector vs. a modal form, etc, etc. You have to get something that functions, and then you refine and learn and refine: see someone else’s app and think, “I should do that,” or “I never noticed before how many apps do that, I should, too”. For the most part, if you can’t quite get it done in SwiftUI, the fallback to NSRepresentable is more straightforward then doing everything in AppKit. You can find good examples for, say, how to embed WKWebKit in SwiftUI.

My own experience with SwiftUI is that I make things super complicated for myself, paint myself into a corner, then step back and realize that there’s a simpler way, and reduce my code down to something simple. Part of the process is that SwiftUI makes it easy to iterate on UI designs so that you can make a lot of mistakes in a short period of time.

It’s not that either SwiftUI or AppKit is better than the other for some notion of better, its that you don’t have to disparage the one you’re not inclined to use. You don’t even have to say, “It’s not for me.” How about, “It’s a really neat system. I kinda get the idea of it. Useful! Hey, how do you do this one thing?”

March 20, 2022

Now that I think about it, I’d prefer an updated (form-factor) MacBook Air, something I’d use instead of an iPad, which isn’t a thing I really need unless I stumble into iOS development.

March 15, 2022

Right now, my basic needs are served by an iMac 24. About the heaviest thing I do is run Xcode, by which I mean stare at it while I read what I’ve done and think about what to do next. Idle time. I bet Xcode spends more CPU time on syntax completions than on actual builds, even with occasional build-and-run bursts. (For all I know, the occasional homebrew upgrade is the hardest this Mac has to work.) If I want to replicate the old iMac 27, my option is the new Studio Display and an M1 Mac mini. I could trade in this iMac for a discount. Then again, I could just get the extra display and pair it with the iMac 24. Or do nothing. I don’t mind the 24 inch display.

March 13, 2022

In a podcast about the Bronze Age collapse: “According to royal inscriptions, Egypt never suffered a defeat, however their victories kept getting closer to home.”

March 10, 2022

Getting near the end of Servant’s third season and I still have no idea what’s going on. Looking forward to Season 4.

March 3, 2022

I wonder if the people who record stunning Classical performances realize their efforts fall on the ears as pleasant background harmony. All that artistry and emotion. Then again, the doing of the performance has to be some part of the pleasure (else why bother these days) and it has to be far better than sitting in an aristocrat’s shadow sawing away while all the inbreds eat.

February 28, 2022

Hey! I can create a post from the mac app. I actually send a stub to the server which creates it, returns a new version of the post, which I then insert into the post list and select. Hit the edit button and there you go. No need for a “create” vs “update” mode in the editor. I don’t know why I didn’t think of this (i.e., see that desktop apps worked this way) decades ago.

Added a delete post function, too.

What about this: the blog platform lets you write a lot of “micro” posts, spots, let’s say, just small paragraphs. You can set each of them to “publish” or “draft”. You bind those spots to a day. Select the day and hit “publish” and all the spots get bound up into a single post. I’m not sure that the binding needs to be a day. A session, perhaps. Or packet. Or moment. Pick a term. Stanza? Write up small thoughts as they occur to you. At the end of the day, or the next morning, put selections in a box and publish them.

February 27, 2022

I can edit posts using my Mac “WeblAdmin” app, but I can’t create a new post. Instead, I have to use the web app to start one, save it, then go back to the Mac app, refresh, and then I can edit (which is what I’m doing right now). Hopefully, refactoring my “source editor” for the “new” case will be pretty easy. Just insert a new Post into the list of posts, then select and edit. Maybe that’s all!

Right now, the app presents a list of posts with a viewer (a split view). To edit, I hit a toolbar button and then I get a modal with the source editor (plain text for markdown), and an optional preview (HTML presented in an embedded WKWebKit view). The modal isn’t the greatest thing. Except it’s not bad. I can just create a new app window to look at other posts if I want. Seems to work despite a few issues. If I save this post, another editor of the same post doesn’t get the update. And it’s possible for one editor to clobber the work of the other. I’d add a check-out system or lock system … but it’s just me.

Right now, the editor recalculates character/word-count on every keystroke. I think I need to implement some sort of delay thing so that the word/char count only updates on pauses. My Work Manager project has an example of that.

As I write this, Ukraine is still holding out against the Russian invasion. There’s a notion of a peace negotiation, but Zelensky has said that while he doubts it will amount to much, he will do anything it takes to stop the fighting short of surrendering independence.

February 25, 2022

I’m against Russia invading Ukraine, or, really, any country invading another country. No good, very bad, don’t do it.

Enterprise software management software (ahem) have awful user interfaces. It is known. I don’t mean that they’re clunky or awkward as if designed by programmers who had to get something on the screen and have no aesthetic sensibility or sense of how attention flows. I mean that the user interfaces are tarted up with lots of color and curves and typography such that it looks, at a glance, like something amazing, but that is even harder to use than the previous awkward version. It’s as if Enterprise software now has to seem modern with lots of marketing-website-like flash, as well as have every claimable feature possible. Actual usability, still second class. These vendors know their business. Unfortunately, that business is that they sell software to people who don’t actually use it.

If you’re writing an issue tracker, make sure the issues are front and center and that the project management aspects are in the background. A new person will want to look at that project management stuff to get a sense of the overall status and scope of activity, but a day-to-day person wants to get straight to the queue they care about. They already know all the context.

If you’re writing a monitoring system, you want the errors and anomalies up front, not at the bottom of a knowledge hierarchy you have to click through to reach. Obvious, right? I think a lot of web sites or applications might achieve clarity if they thought of themselves as monitoring systems (even if they aren’t). Why do users open the app, and what do they want to see first if they have a limited amount of time? Design around that, even if just for a thought experiment.

February 21, 2022

Ok, the new old new plan is to re-implement that admin user interface for this site (where I edit posts) as a macOS app. I mentioned the desire to do this some time back, but that was before SwiftUI, which makes things a lot easier.

The app will talk to the underlying server using GraphQL as just JSON/HTTP and once that’s working well enough, I’ll remove the create-react based web-app and thus save myself the constant security warnings Github throws at me.

I do find that the MacApp is so much easier to understand than the Javascript app. React really isn’t good for application level architecture. I think it works much better as a component model you can fold into a larger page architected in some other way. Hot take!

After that’s done, I might try moving the whole thing into the Mac app and then implementing a static generator. I can use Core Data with iCloud persistence such that I can access to site data from any device.

I don’t have any reason to have a blog, but I do like writing the software for it. Who doesn’t want to be able to post once a year right from their phone!

May 30, 2021

I don’t expect that anyone reads this blog. It exists because I wanted to write the software for it. More specifically, I wanted to write a Golang app, using GraphQL and a typical React-style Javascript administrative interface. Another goal was to have the blog itself rendered via templates on the server, rather than dynamically in the browser. Finally, use good old Postgres to store the data. All of this flies in the face of the then (and maybe still current) fashion for statically generated web sites, which I still think is a good idea, fashionable or not. On top of all that, I wanted to develop the code on macOS, and deploy on FreeBSD. All of that worked out fine.

In the end, I wouldn’t make these same choices, even if I kept the basic underlying goal of developing a database backed, templated, single-page-client-app blog engine.

First, Postgres. I love the database and it hasn’t been an issue for me almost at all, though over the years I have to update it and in doing so, the database can become incompatible. You have to run special scripts, or export/import to move to the next point release of Postgres. This is a better fit for a production-oriented web infrastructure, not so much for a one-off blog engine. The better bet (if I want to stick with a database) is sqlite3. That’s a conditional bet. I’ve not yet experienced what its like to maintain such a file over multiple years. What I do know is that I’ve used it as the bases for Core Data persistence in macOS apps over multiple years and I’ve never needed to worry about OS upgrades.

Second, Golang. There’s lots to love about Go, from my perspective, especially these days now that they’ve improved dependencies, and don’t require you place your source code repo in a deep sub-directory based on your domain, and/or the domain of your Github account. The standard library is excellent, at least for any of the server-side things I’m likely to use it for. The problem, for me, and for so many others, is the lack of generics. After using both Rust and Swift, I feel like having to write separate functions for every single data type is not for me. Either give me a dynamic language, or give me something with sufficiently sophisticated types that I can write code as if I were writing in a dynamic language.

Third, GraphQL. On the one hand, I really appreciate that GraphQL has broken the back of REST as an orthodoxy. REST makes sense for some use cases, but it’s unfriendly for rich client development. The real breakthrough (or umpteenth re-invention) is the idea of the query and a query language. Post a query, get tailored results back, let the server do all the complicated joins. GraphQL is one way to do this. Salesforce provides SOSL, which looks like SQL with graph features built in. For me, though, I think I could get away with something way simpler: JSON/HTTP. That’s right, just some non-REST-orthodox queries. For that admin interface, I need a list of posts, and I need a single post. That part can be REST. For updating posts, changing dates, titles, updating passwords and accounts, I can use a single endpoint and POST a command to it. This is similar to the pattern found in GraphQL (query vs mutate), but much simpler to implement. The key is that I’m not developing a set of rich clients for use across a variety of presentation devices. I’m not twenty separate teams each of which need some slightly different view of the data depending on local conditions. Not only is GraphQL overkill in my own case, I suspect it’s overkill for a lot of cases where people use it today. It’s fashionable, has mindshare, can settle arguments inside corporate tech groups, but it’s not often appropriate.

Fourth, React/Javascript. Remember the olden times when you could type Javascript into a file, refresh the browser, and see the changes? Well, those days are still here. I’ve done recent work on a project that still uses a page-based architecture with jQuery built in whether you want it or not and, well, it’s fine. It’s still fine. It actually works quite well, in fact. Wasn’t React a framework that made it easier to inject little components into an otherwise normal web page? And now it’s a complete stack with convenience plugins for all the things it was never intended to use. Beneath that, we’ve got web-pack, all kinds of ecmascript transliteration strategies, dynamic lazy loading strategies, massive dependency graphs, multiple package managers (from declarative to Turing-complete), and on and on. We’ve turned that simple refresh-the-browser mode into something as deeply complicated as Enterprise Java turned out to be. Finally, we’ve got a vast syntactic expansion of the language into classes, anonymous functions, an odd literal map/list interpolation “associate” style mutation syntax, and on and on. Javascript is not easy to read, anymore, depending on how old the codebase is. It’s not like reading the Rosetta stone: three distinct language saying the same thing, its more like reading a single document, parts of which are written in archaic Greek, then ancient Greek, koine Greek, modern Greek, and non-native Slavic attempts at Greek. You can put it all together, but the satisfaction is in your cleverness, not in the content. I’m not sure about this, but I think current React requires you to use transliteration software because it’s based on Javascript classes which aren’t compatible, somehow, with standard browsers. And then there’s the Cambrian explosion of module strategies….

Let me turn down the crankiness a bit, though, and say that this is okay. Unless you’re trapped on a corporate team that made a tech choice in a given year such that you’re condemned to live with it for the rest of your time in that job, this React/Redux/Javascript toolchain is just another tech choice you can make. Or not make. The thing I didn’t anticipate years ago (just to see what it was like) were the massive amounts of dependencies of dependencies of dependencies, something of an industry, what-are-you-gonna-do joke. Being able to depend on the code of a lot of other people is a strength, but I think most of that strength happens at the project bootstrap stage. After that, you’re constantly updating those dependencies against the number vulnerabilities discovered month after month. Generally no big deal (unless you have to constantly cajole product/project/agility managers to let you do it), but each update requires a retest of your application as React and other core tech update over time, not to mention the fact that the browsers themselves (the environment in which these applications run) evolve over time, too. If you’re inclined to think that maybe React was designed by Facebook in order to slow down and overburden other web-app companies, you might be hard pressed to resist. It’s not even Facebook’s issue: it’s our tendency as developers to go all in, to confuse technology with architecture. If I re-do this admin interface (which also contains a tiny editor for writing or pasting in posts), I’d rewrite it in Clojurescript. The language doesn’t change (though I generally love change) in the sense that it consists of data and functions and namespaces, and that’s it. Need something new? Write a function, not a completely new syntax that needs a server-side build system to reduce back down to early-2000 era Javascript. If you want to write the application with few run-time dependencies, you can do that because you can just write the three date functions you need and be confident that the dependencies didn’t pull in multiple date-time libraries as needed for each little thing. Just include React, and do the rest yourself. (You don’t even need Redux. Clojurescript has “reducible” state functions build in.) The stability is astounding, and the satisfaction of well-made, just-what-you-need tech is maybe, at the root, why most of us still like doing this rather than joining up with WordPress. I don’t think I’d go with jQuery and a page-oriented, JSP like architecture for the Admin pages because that requires a lot of set up I just don’t want to do. But a simple Reagent based application is worth it to me, especially if I give up “REST” style paths for deep linking.

What would I do next if I wanted to re-do this project?

  • Rust lang
  • Sqlite3
  • Clojurescript Admin/Post client
  • Single query endpoint, single command endpoint

That’s it!

Well, almost.

I like hosting this on FreeBSD, which might be a problem for Rust and Sqlite3, at least in this one way: I’m not likely to be able to cross-compile the Rust server side on macOS for deployment on FreeBSD. I don’t think Rust has a pure-RUST implementation of the Sqlite3 API on macOS, for example. Maybe it will by the time I get around to doing this.

May 2, 2020

The notion of depression as something other than an existential phase has, obviously enough, come into its own over the last few decades, and that’s all to the good. But one dangerous side-effect for me is wondering if I actually have it at some profound level so native I can’t tell. I don’t, though. I have the existential kind, once in a while, or … well, something similar to that, though I’m not sure what it is.

These days, I find it difficult to move on to the next thing. Or, rather, easier to not move on, so to speak. For instance, once I get up, feed the dog, and make coffee, I’m much more likely these days to sit on the couch sipping just-made coffee listening to endless movie-review podcasts (which are mostly personality driven friends-and-pals-comedies) and keep on doing that, rather than getting to work, or starting a hobby, or sweeping the floor, or any of a number of things I might otherwise do. Like I wrote, it’s easy to not move on to the next thing.

Have you ever binge watched videos or TV series and gotten to the point where you’re so exhausted you think to yourself, “What the hell am I doing?” and then click “Next Episode”? That’s the feeling I have.

Is it depression, though? Maybe I’m just eating too much rice these days, due to minimizing shopping runs in the age of the pandemic — too many carbs — or maybe I’m not getting enough sleep, or maybe the sameness of each day wears me down in ways I’m not attuned to notice.

Still, things have to get done, so I make lists and eventually get them done, but there’s just no energy in it. I’ve always been a person reluctant to start working on something, a task or project or work, but once I do, find a lot of energy in the doing.

These days, not so much.

Maybe it’s the lack of the one or two social encounters I used to have each week? The pandemic has shut those down. But, I don’t know. I can’t figure it out. I’m not that interested in figuring it out.

I need to take a shower, walk the dog — it’s raining — then think about how to replace the battery in my car given that the car won’t move until I do. Chicken and egg. I’ll get to it. Eventually.

April 24, 2020

I use Emacs for general text editing for a couple of reasons, the main one of which is that it’s a lot of fun because it’s a world unto itself. It’s also reasonably OK on MacOS. My first encounter with it was back when I wanted to learn Common Lisp with an integrated REPL and I’ve used it off and on ever since. Textmate was my main editor for a while after I learned Emacs, and then Sublime Text, but I’ve always gone back to Emacs because, I suspect, that once you gain any facility with it at all, you come to like it. It’s got gravity.

Lately, I use it because I do work on a “company” machine. The company policy, insofar as I can understand it, is that you’re not allowed to use any of your own custom productivity tools. I’m guessing you can ask permission, or just ignore the rules (because no one actually cares in a kind of don’t-ask-don’t-tell policy). I decided to bend-the-knee as much as possible and thus use Emacs with lots of customization. Yes, Emacs is third-party, but it doesn’t require a license, which is the real objection.

So, I use org-mode for notes, task tracking, writing first-drafts for wiki pages or email and so on. It’s good enough, though I’d prefer OmniOutliner and something that I could use on mobile. Markdown would work, but I use org-mode as an outliner more than a document format, so markdown doesn’t cut it.

Here’s a customization:

(defvar kfi/timestamp-formats
  '(("March 15, 2020 @ 9:33 PM" . "%B %-d, %Y @ %-I:%M %p")
    ("March 15, 2020"           . "%B %-d, %Y")
    ("2020-03-15T21:33:54"      . "%Y-%m-%dT%H:%M:%S")
    ("2020-03-15"               . "%Y-%m-%d")
    ("2020-03-15 09:35 PM"      . "%Y-%m-%d %I:%M %p")
    ("2020-03-15T21:39:20-0700" . "%FT%T%z"))
  "Formats for inserting a timestamp into a document.")

(defun kfi/timestamp ()
  "Choose a format, then insert a timestamp."
  (interactive)
  (if-let* ((choices (mapcar #'car kfi/timestamp-formats))
            (choice (completing-read "Format:" choices))
            (format (cdr (assoc choice kfi/timestamp-formats))))
      (insert (format-time-string format))
    (insert "<error:nil-selection>")))

When I type M-x kfi/timestamp I’m presented with a list of example date/time format options. I pick one, and the date/time is inserted into the text. Although I haven’t, I could assign a key binding to the function, and a nice improvement would be to remember the last format I used and supply that as the first choice, or as a second function. I’d like to add some additional time-only (no date) formats, but, eh. I just insert something close, then edit.

Now, here’s the thing. Why not use VSCode? It’s a nice, graphical editor, it’s modern, it has tabs and file-tree sidebars and the notion of a project, all the add-on packages you could want including socket REPL connections.

One reason might be because there’s just too much chrome. But you can get rid of sidebars and tab-bars and scroll-bars and use a command to search for and load files within a project. You can kind of turn VSCode into something as visually simple as Emacs, but get an arguably better integration with language interpreters, completion modes and debuggers than you’d get with Emacs (at least out of the box). So, why don’t I switch to it?

I don’t know. I’ve used it, and it’s fine. I used it to work on a Python project and it provided all the completion hints I could want, the suggestions based on code-format-enforcers and all the goodies. (Same with working on a React-based web application.) But when I went back to Emacs and installed the similar tools on that platform, it was, somehow better. Just … better. Editing felt faster, somehow: as in moving the cursor around.

But it wasn’t that much better.

I think what’s the most fun about Emacs is that you can write dumb little functions like the timestamp-inserter above. It’s just a function in a config file: it’s not part of a package, doesn’t require you to learn a giant object hierarchy, or master much of anything beyond simple programming and a knack for searching documentation or the web. After cut/pasting other peoples’ modifications into your own config file, you start to see familiar patterns and eventually you know how to look things up. How do you present a menu and select from it? Ah! completing-read. Just pass in the choices and the system does the rest. It’s just a function.

I suspect you can’t just make random commands like this in VSCode, but I don’t really know that for sure. If you can’t, it makes sense: you maybe want the editor to be a shared experience for all users, with conventional ways of doing things. I’ll have to go find out. Even if I could make an insert-a-timestamp-here function outside of a package, I still won’t switch to it given a choice. Emacs has got that gravity.

April 22, 2020

Why do people prefer dog breeds rather than a random dog? (I’m assuming that’s the preference, statistically speaking.)

I bet it’s about the problem of too much choice.

One thing I like about using Apple products is that when it comes time to upgrade, or expand, I have just a few options and I know what I’m getting, generally speaking. The lack of choice and configurability is a feature, not a flaw.

If I’m going to get a dog, I’m going to get a greyhound. Might be female or male, brindle or spotted — these are up to timing and availability — but I know what I’m getting with a greyhound, and it’s what I want. Could I love another dog just as much? Yes. But how do I decide? I can talk myself into and out of anything when staring into those liquid eyes. What dog speaks to me? The one I’ve owned for year. Or all of them always.

Branding, right? Once you’ve picked from among a thousand possibilities, unless something goes horribly wrong, you stick with the brand. It’s just not worth optimizing, not worth seeing if another brand is slightly better on one axis or another. If the soap doesn’t actually clean anymore, or gives you a rash, well, find something new, but, otherwise, leave it alone. In fact, you are optimizing: when you go to the store for new soap or toothpaste, you pick up the same brand and size as before with almost zero thought and move on your way, rather than stand there blocking everyone else while slack-jawed by too much choice and the vague feeling you’re making the wrong one, that someone is taking advantage of you. Once you’ve pre-figured out all your choices, you can race through the place quickly, saving the time so you can spend it doing what you really want to do, figure out how to eat all the cookies at once so no one knows you bought them.

So, I can understand the love of a given breed, and even the claims that some breeds are this, and others are that, though I’m generally skeptical that nature can hold a candle to nurture. Still, I get it. Breeds are not going to go away for a long time.

Greyhounds, though. What will become of them after the last track is closed?

April 21, 2020

Do you think it’s possible to make a movie or television show about people who go to work every day and just … work? I don’t mean watching them type at computers or whatever, but I mean the lives of office-worker-ish people in general.

If you’re an aristocrat, or rich, or a detective, or a super hero, you can get up to all manner of things, have any number of noble or foolhardy ambitions and act on them, then deal with the consequences, but if you’re just an office worker, a programmer or an HR assistant, what is it about your life that is movie/series worthy? I suppose you can turn thirty, but there’s nothing dramatic about that from the outside beyond what has become cliché. Or have kids, but while that’s personally eventful, I don’t know how that could be turned into something interesting for a viewer outside of a difficult pregnancy or an alien baby.

In fiction, all those daily, non-dramatic grinds become interesting because we spend enough time with the characters that we care in the same way that we care about ourselves or our friends. Modern fiction has found heroism in the quotidian, after all. But even in fiction, you establish the status quo so you can then subvert or divert it. The main character loses her job, or loses his leg, or is rejected by his friends or spouse, or some other thing that starts that character down a path far from the one you’ve established for the character. The difference between your initial expectation and where the character actually ends up (or what you come to understand about her) is plot. The story is over when there’s a new status quo.

What I’m getting at, awkwardly, is that when we watch movies or TV series, we’re watching what happens when things get extraordinary and if we watch a lot of it, we start to think that life is not life until it’s dramatic like it is in stories. A fun story on screen is a crisis in real life. We long for the kind of job that takes us out of the fixed hours world, out of the thousands of tiny humiliations and micro-aggressions of office-politics and into the world where we have—what?

Efficacy?

I don’t know how others survive the office job. I’m not good at it. I suspect the path forward is to realize that the office job is a daily chore, not actual life. The micro-aggressions (those you suffer and those you author) must be overwhelmed by what you experience outside the job. When the work day is over, forget it in the same way you forget most TV episodes after watching them and get on to the next thing … a snack!

Find where you have efficacy in your life, and live there. Right? Is that it?

April 20, 2020

Do you think it’s possible to enjoy a Dungeons & Dragons game in which you don’t kill every being you encounter? Is the notion so against-the-grain that removing it removes the fun? The fun (I assert) is joking around with the other players and the tension of getting out of sticky situations. Normally, the method of escape is to kill everything and the reason for that is because everything in your way is a monster. I don’t know how the economy in these worlds work: the constant overcast, the constant stream of monsters, the roving bands of amoral adventurers, not to mention dark lords. Are there farms? Does anyone raise chickens? Wondering about the economy and other world-building elements (aside from maybe exitentential/authoritarian politics) isn’t really the point, surely, but what if you did wonder about them? Would that lead to new kinds of adventures?

For instance, your mission might be to deliver a cure to a remote village and in the course of doing so, you have to apprehend bandits and turn them into a sherif, or scare off monsters with a show of force, or deal with one of your party who is somehow a traitor. (DM sets this up before hand?)

Another mission might be to capture a rare “monster” in a remote, mountainous, wooded area because you want to preserve the species. You already have a male, you need a female to start a breeding pair. Maybe you discover that the females are sentient and now you have an ethical dilemma.

Or perhaps you’re hired to find some townspeople who joined a cult. You need to capture them, de-program them (if necessary) and bring them home. You encounter dangers along the way from bandits and wild-animals (or monsters) requiring you to hide and run away, and maybe you get some get from entertaining fellow travelers, or hospitable farmers when a bandit takes your map early on.

Maybe you’re escorting privileged pilgrims to a remote shrine in a time of civil unrest!

I’m not attempting to make the game realistic, at least not all that much, but removing death as the default game-play tactic would surely make for a richer ecosystem.

And make for better podcast listening, too.

April 19, 2020

Sorting people into boomers, millenials, gen-Xers, gen-Zers and the like feels like such a boomer thing to do. Saying that feels like such a gen-Xer thing to do. Why infuse one’s own age-range with some sort of self-congratulatory or pride-inducing self-criticism? We’re all in it together, shoulder-to-shoulder in our fight against the true enemy: Mitch McConnell.

April 18, 2020

Our image of nostalgia was invented in the 70s when you could stereotype old people as the folks with big band music in their record collections. Fifty years later, the folks who were young when punk was young are, somehow, thought to be into big band music. We don’t really have room for new old-people stereotypes, I guess. Or, maybe, what was current for the young in the 70s is still current for the young in the 2010s. The bands change but the genres remain the same, so the old stereotypes persist — nothing has come along to disturb them.

February 10, 2019

An AppleScript to hide the file extensions of the files you’ve selected in Finder: I created a Quick Action in Automator, added a single “Run AppleScript” action, pasted in the following script, saved under the “Hide Extensions” name, and there you go.

  tell application "Finder"
    set theFiles to selection
    repeat with theFile in theFiles
      set extension hidden of theFile to true
    end repeat
  end tell

As a Quick Action, you can run it:

  • From the Quick Action button on the Finder’s toolbar
  • On the Services menu when you right-click the selected files
  • From a button if you have the Preview Window (Mojave) open

You can also run it from the Macbook Pro touch bar, I believe. The fun thing about AppleScripts is that after some familiarity, you start to feel like just about any application you use is scriptable like Emacs is. Kind of. I’ve got one that acts as a Dock icon, lets me open a new finder window. Normally, clicking the finder icon will bring up an existing one. Another resets BBEdit for a distraction free writing configuration. Auto-switch to dark mode via keyboard command. Move the dock to left, right or bottom via a keyboard command. Fun stuff.

Admittedly, I pretty much web-search for just about anything I want to do because the object models are super opaque (to me).

January 17, 2019

Having some sort of health issue isn’t so bad. It’s not knowing when it’ll get better. (I have a sore leg.) When I was in college, I went to the health clinic for some reason or other. Impacted ears? Not sure. I can’t ever remember going to the doctor because I had a cold. When there, I read a brochure that said pretty much no matter what you do, a cold takes about one to two weeks to work through. After that, I tracked my progress. I knew that if I felt a sore throat on Thursday, I’d feel a hell of a lot better by the following Tuesday, and be done with it by the time Thursday came around again. I’d write these things down, you see. Like a scientist (measuring subjective states of being). When I was younger, a week of cold symptoms was almost always followed by a week of coughing. I think that might still happen, but I tend to get cough drops the moment the coughing phase starts. It tamps down on the issue a bit. Coughing is an interesting thing: it starts to become a habit that lasts beyond the scratchy throat that started it. Cough drops help, sure, but I suspect the real value is the mindfulness you need to stop the habit. The end result of all this was that while a cold was inconvenient and awful to suffer through, it had a recognizable life cycle. You could plan around it. My leg issue? I’ve no idea.

January 16, 2019

Was listening to the Ezra Klein podcast. Guest was Cal Newport. He talked about studies showing that people generally need a lot more solitude than they get these days. He defined solitude as the lack of direct input from other minds. In other words, books, music, podcasts, smartphone stuff, other folks, and so on. I think the research he’s surfacing is right. I can’t speak to the efficacy of solitude on the human brain in terms of physiology, but I do know that I, at least, am a lot more calm if I can go for hours without any particular stimulus. This is the case when reading (which is not what he’s talking about) but it’s definitely the case with, say, walking the dog without listening to podcasts at the same time. I’ve often felt distracted walking the dog due to the podcast going one way, the dog going the other. Impatient even. But I’ve never felt any ill-effect from not listening to something while walking the dog. In fact, I remember when I was meditating, when I’d take Jet out for walks at lunch time, especially if it was sunny, or spring or fall, I really enjoyed just looking up at things and I was never impatient with Jet’s need to sniff out this or that thing on the spur of the moment, stopping our progress. In fact, I remember feeling like I did when I was a little kid in a new environment in the early morning. That whole-new-world feeling. Probably what people mean by joy. So, I’m not going to listen to podcasts when walking the dog. So let it be written, so let it be done.

January 6, 2019

Took Trust to the park yesterday and he chased balls for a bit, visited lots of people to get pets. Sula and her people showed up and we talked a bit but I didn’t get a chance to say goodbye. I was a bit tired. He pays attention to small dogs who want to play, and Greyhounds. Trust locked up (like a stubborn donkey) when I was ready to go because the people in front of him kept running back and forth with their dog. He was too tired to chase the stick. Even so, people running is Greyhound crack. The lock-up reminded me that he doesn’t do that as much as he used to, so that’s progress. It’s good to note that. Patience is the key, sure, for both of us.

August 24, 2018

What’s the deal with backpacks? Outside of college, why are backpacks a thing? Or are they? I’ll have to pay attention when out walking.

The reason I ask is because, lately, I’ve heard people talking about them to the nerdiest detail on podcasts.

I cared when I was in college – until I realized that for most classes all I ever needed was a few sheets of paper, a book and a pen. I also cared because all the little pockets and zippers are neat, need them or not.

At work, taking a laptop back and forth made me care – until networks made it easier to just have two machines. Same for work-related paper. Copy machines, right?

Use cases:

  • Taking stuff from work to a café to get real work done in this era of open-plan, low-wall cubicle offices. Something good enough for a laptop and a few other things according to taste: pens, paper, adapters.

  • Day hikes. Water? Sweater? Lunch?

  • Actual travel for a few days either as everything-you-need, or carry-on entertainment gear. Or both.

Personally? I want the smallest bag possible with the fewest pockets. Like a purse, kinda. Throw everything in, then search to get stuff back out. The time spent searching is less than the time spent organizing pockets, or pouring over catalogs for the perfect bag. Fewer organizational choices means a lot less stress.

August 20, 2018

I subscribe to old-fashioned RSS feeds backed by the Feedbin synchronization service. I’ve also got Feedbin compatible RSS readers on all my Mac OS devices.

Thing is, I keep forgetting to use them.

Instead, I use Feedbin’s web application.

It’s really good.

The user experience is similar to a well-crafted Mac app. Like good prose and good furniture, its style erases itself, becoming fully transparent with regard to its function. The affordances are there, you just never notice them until you need them.

When I need to develop a web application, I take inspiration from it. Controls and navigation must be clear, but they’re not the point. They’re never the point.

August 16, 2018

I’ve been thinking about writing a Mac App to post entries here. The apps I’ve already written convince me that AppKit apps are much easier to write than web apps. I get that folks don’t write them because they want cross-platform apps and they cut their teeth on HTML/CSS/JS, but true Mac apps are so nice.

One issue I have is that this blog uses GraphQL as an API (to support a web app) and GraphQL isn’t all that great for simple apps like this. The results returned from a query are a bit too ad hoc for a static language like Swift.

Regardless, I got the authentication interaction working and thus have at least one successful interaction to build the rest on, so it’s just a matter of time.

March 24, 2018

He did his thing, you did yours. The rhythm of the day brought you together. No cadence to the music, now, but the form remains. There’s no need to change direction, get up, move, break to the next thing, but you still hear it. That beat. And when you do, you need it. Desperately.

March 23, 2018

You feel a little tired, or hungry and it feeds the grief. You’re restless to get back to a task, then wonder what he needs, if he’s waiting for you to get moving. You remember before you look. For a moment, you believe in ghosts.

March 22, 2018

Grief feels like a thin, lead blanket you can’t set aside. Not too much weight to walk up the stairs or check email or twitter or add tasks to deal with the day after. You can move around the surface of things.

Sit down to work? Not yet. You can’t.

You have the sharp, sudden eruptions of grief — those feel good and right and awful, the whole of you scrunched up in your face — but the heavy spaces between stop you doing more than the first step, the first if-this-than-that thought.

Remember to eat, you say. Remember to eat. And again, remember to eat. You think you can manage that. Sleep, though, is lost. Maybe it’s over there, on the day after the day after.

March 18, 2018

Productivity! Turns out™ using a separate reminders app for daily routines or chores from the app with your bigger projects and tasks isn’t such a great idea. The reason you look at your task list a lot is because of those daily “take the dog for a walk” reminders. That mix of ephemera and important goals has become necessary.

January 28, 2018

Some time ago I seriously wondered if it was time to move on from the laptop as part of my computing arsenal. I have an iMac 5K which is great, and, really, where I prefer to do any sustained work, especially work involving code editors or database servers or screen real-estate. Do I really need a portable peer for the dining room table, or the couch? Wouldn’t a tablet work just as well, or even a phone?

If I didn’t work on software, even a tablet wouldn’t be all that necessary except, maybe, as a way to watch video while on the treadmill or cooking. In other words, I don’t do that much non-development stuff other than reading (for which an iPhone is pretty good).

Most of what I do involves software development or investigative writing and research. A tablet is too cumbersome for that. Imagine writing a document in Pages based on notes in Notes.app or OmniOutliner, and a browser for looking up stuff on the fly. Easy to do on macOS, difficult to manage on iOS.

Using a tablet is like playing piano on a one-octave keyboard, having to push a button to switch octaves, then discovering the composition requires more than one octave at a time. Damned user-hostile composers!

I sometimes have to run software others have deployed as Docker images. Can’t do that on iOS, or (I don’t think) on the non-Pro MacBooks.

When I upgrade, it’s going to be a MacBook Pro 13-inch.

November 1, 2017

Why am I’m not especially excited when a new episode of The Gifted shows up in my queue? The muted beige color palette washes everything out making the show visually uninteresting. Maybe that’s the core of it. All the locations look like bland Los Angelas and the background/minor actors perform like stage hands roped in to fill negative space. Not every show has to be Mr Robot, but the directors stick to straightforward episodic-television camera angles, beats, and tight shots on sets: all the world’s a backlot.

The show is about a family making their way through the shadowy world of the ostracized, but there’s little for the kids to do except to be present in thematically appropriate ways. The family needs to build trust with the underground. How do we show that? Let’s have them give blood, or apply pressure to wounds via powers. Oh, that’s good! But there’s no real urgency between them underscored by the plot. No damned-if-we-do-or-don’t choices (so well exploited by The 100). The predictable plot machinery is dealt with efficiently in order to get to the meat of the show which is … what, exactly? Four or five episodes in, the show is all prologue.

October 30, 2017

The first indictments roll out of the Mueller-lead investigation today. It’s standard practice when dealing with organized crime to build up from the small fry until you’ve landed the whale. Sure. But as a bystander and headline-scanner, I want to know what the sign is for the high crimes and misdemeanors capable of bringing down the administration. Will the president himself have to be indicted? Is that what we’re waiting for? Will his approval ratings have to drop into the 20’s? Is there anything at all that would prompt the Republican congress into action?

October 11, 2017

I’m watching The Gifted — about a family (normal parents, mutant teens) on the run when the teens’ powers are made public — on the strength of the fact that Amy Acker stars. She’s never let me down, from Angel, Alias, Dollhouse, to Person of Interest. Admittedly, I started the show using her presence as an excuse for impulsive behavior, but I hope I can brag later about her being a good tip for taking a chance on bland-seeming, maybe-this-time-we’ll-get-it-right shows.

And the series does indeed start off bland. Even the color palette: soft grey, beige, washed out. It could be a deliberate choice, affording the writers a dull baseline from which to shock, thrill and develop, or it could be an attempt to use the quotidian as a fresh take on tired mutants-on-the-run fare.

In the first episode, the main “adult” characters (Acker and True Blood’s Stephen Moyer) and their children had no real agency. They’re running. This makes sense — in real life. The characters have to find their way to the center of the group tasked with getting mutants to safety. Like a new job: you sit down and shut up, the team gets used to you, you get used to them, you find a way to make a contribution some time down the road when you’re not so foreign and in a year, you’re jumping off cliffs, running along rooftops, whispering into your earpiece, “I’m in,” dealing with the deaths of major assets, and, basically running the entire resistance as its heart and soul. As you do.

And (though compressed) this kind of process starts to happen, a bit, in the second episode. Acker is a nurse and is critical to getting supplies for an out-of-control mutant whose powers are waxing destructive as she thrashes in a delirious fever. The daughter, and to a lesser extent, the son, help contain the ailing mutant’s unconscious destructive powers and earn a little respect from that, and the husband, captured by the Big Bad, appears at first compromised, but then asserts some double-agency or at least steadfast determination even in what seems to me a hopeless situation.

So, it’s still in the getting-the-team-together stage and I’m interested to see where they go, or, rather, if they go somewhere interesting.

Reminds me a little of The 100, which started out as a CW-style teen-triangle kind of show with an SF edge, but within four episodes turned into a drama of impossible moral decisions.

We can always hope.

September 10, 2017

I enjoy watching James Spader’s pretentious and vicious mayhem on The Blacklist (on Netflix) as much as anyone, but something about the show seems old fashioned. It has a serialized story arc — which is modern — and plenty of episodic, monster-of-the-week plots — which isn’t — except that each monster contributes to the season arc. Maybe the dated sense I get from the show is one of balance. The overall story arc involving Spader’s protection of his daughter-not-daughter Elizabeth proceeds too slowly and the irony that he is the ultimate cause of her need for protection remains static: the same note over four seasons, even if details or shadowy nemeses change. The monster-of-the-week challenges are fun, but each victory doesn’t add up to an overall change in circumstances. Spader is shady, but we’re never really sure why he does what he does or what his end-game is. Elizabeth goes along with things, maintaining a tension between the desire for a normal life and the excitement of being an FBI agent, but she’s no longer the central character outside of the amount of screen presence she gets. She doesn’t drive the plot; she’s the Macguffin. At its heart, the show is episodic story-telling masquerading as serialized story-telling. I’ve gotten used to the over-the-top Spader performance, his constant name-dropping and so on. I kind of like it. An old fashioned show. Why not?

Archive ▶