I played surprisingly few games the last couple months.
Beneath the surface, it’s a masterpiece.
(Trust me – I’m in it.)
The original Deus Ex came out in 2000, and is now a cult classic. It was ambitious and brilliant and weird and also a bit of a mess because it tried to do so much.
But the essence of Deus Ex was that it used a first-person-shooter engine to create a first-person action adventure that wasn’t just about shooting things. Violence and shooting is one tool to solve problems, but by itself would almost never work. Stealth, exploration, and outwitting your opponents through clever use of skills and the environment was key. (That and the conspiracy theory / illumnati are real stuff.)
Despite the most recent entry Deus Ex: Human Revolution being a masterwork in the action RPG genre and revitalizing it, this time it feels like the series has run out of steam and ideas. The gameplay and mechanisms feel repetitive and dated rather than fresh after 5 years. The storyline is both incomprehensible (even for Deus Ex) and seems completely unfinished and unsatisfying. It feels plodding and boring. Rather than leave me wanting the next chapter, I felt bored.
Where Mankind Divided fails, Dishonored 2 succeeds. As an action-stealth-play-as-you-want RPG, it enables all sorts of different, varied play styles. Lethal or non-lethal, loud or stealthy, indirect or head-on, and all manners in between.
The characters, voice acting, plot and more seem improved.
Dishonored made Dunwall feel real and interesting. The most remarkable thing is how vibrant and larger and varied yet cohesive the larger Empire of the Isles becomes in this sequel, and how exciting it is each time we see more of it. The level design and setting combines with the mechanics and story to create something spectacular.
The choices and how you play again feel like they have weight and impact the world. Choosing to sow chaos has repercussions. Seeing how Emily and Corvo have changed over the years was actually interesting. Very much enjoyed this one.
Despite more or less buying a 3DS to play this game, I never actually completed it. (I got through the first case and stopped.) Part of it was playing on a 3DS annoyed me.
I then bought it for iOS when it came out and played through the second case and stopped. I got bored.
This time, though, for whatever reason, the love of Phoenix Wright games overtook me again as I completed the other three cases.
If you have never played Ace Attorney, the iOS re-releases are the easiest way to experience them, despite the flaws in the ports it’s a lot easier than tracking down Nintendo GBA imports or DS versions now.
Anyway, I love these games so much, and I hope they keep making them forever.
The nice thing about building your own PC is you get exactly the parts you want.
The bad thing about building your own PC is it’s hard to know exactly what you want.
The last time I built a computer (about 2.5 years ago) was my first time building one completely from scratch in the modern era. (I’d cobbled together some tiny linux boxes from barebones PC’s, but hadn’t done the whole thing, and not for gaming.)
This is something I probably should be leaving to professionals. But I wanted the satisfaction of doing it myself.
I ended up with something that worked and ran modern games effectively on a weird 34” ultrawide monitor but it looked sort of absurd and I’m pretty sure I never got the thermal situation right – fans were loud and always running and it seemed to generated what I thought was an inordinate amount of heat.
This is also the bad thing about building your own computer – how do you even know you did it right?
Anyway, I learned a lot –
- many cases are embarrassingly ugly
- many parts wants to generate obnoxious lights
- if you’re not careful you will end up with a weird looking monstrosity that has branded lighted logos flashing everywhere
Clearly I did not learn “just let the pros do it next time” because I’m stubborn.
So spurred on by my need for Thunderbolt 3 support discussed yesterday, I embarked on a new PC building mission.
A beautiful but functional monolith, without obnoxious branding, windows, or colors.
Focuses on quiet computing so includes sound dampening and quiet fans.
I bought the “blackout edition” which makes even the internals and fans and everything black. It’s nice.
Chose the i5 since it seems like overkill for gaming already and wanted less power/heat than dealing with the i7.
This is a super popular cooling solution that was recommended to me.
Seems OK. It was kind of a pain to install but seems far quiet and more effective than using the stock cpu fan like I did last time. If I do another build I might try something different / quieter / more expensive.
Decision was driven by the need to support Thunderbolt 3 and the latest generation of Intel chips. ASUS hardware and software and BIOS etc. seems relatively inoffensive and functional.
Went with the “stock” Z270 board – seemed unclear what value most of the higher end motherboards with various add-ons actually did.
The add-on card needed to drive my LG UltraFine 5K display via a PC over Thunderbolt.
Damn RAM is fast now. Very fast.
These tiny little M2 drives are mind-boggling. Progress in size/speed/cost even over the past 2 years is significant. Definitely splurged on this because I was sick of worrying about disk space.
Has been super quiet and efficient.
See also: the PCPartPicker list for this build.
Everything actually went really smoothly this time other than I was somewhat confused on how to properly set up the CPU cooler. I think it went ok, but I did spend like an hour watching YouTube videos of people doing it first.
Also I plugged in the ATX power but forgot the separate CPU power and spent 30 minutes checking everything but that – rookie mistake, but, whatever. Helps to build character? It makes the end product feel like more of a triumph, maybe.
I have a system that is quiet, sleek, and just has a single white LED on top to indicate power and no other annoyances that is not embarrassingly loud or flashing ugly lights under my desk.
Despite being officially unsupported, the LG UltraFine 5K Display can mostly work with a Windows PC that supports Thunderbolt 3.
You can even use your existing GPU to drive it with the right hardware. The USB-C ports on the monitor are recognized and works properly. The speakers work too. (They’re terrible, but they work.)
Major caveat: Only 4k as max resolution, 5K is trickier right now.
This is fine for my usage – gaming on PC, everything else on Mac. But if you’re looking for true 5K you may need to get the pricier Dell 5K monitor or try one of the few motherboards that claim to support 5K out of the box mentioned below.
I suspect most recent Intel boards with a 5-pin thunderbolt header will work, as it did for John Griffin who used a similar setup as me but with a Gigabyte motherboard.
After connecting the add-on card to the motherboard, you do an external connection from the Displayport on your GPU card to a mini-displayport input on this card with the included cable.
Then connect to the LG 5K monitor with the Thunderbolt-3 cable.
The display powered up and worked at boot instantly for me, including showing the POST screens.
Support for the USB-C hub and speakers on the monitor required me to make a few BIOS changes to enable Thunderbolt-3. I guess TB3 support needs to be enabled explicitly, but somehow the Displayport passthrough on the card doesn’t require it? Which was convenient but very confusing.
On a PC with Windows 10 –
- 4K – 3840×2160 @60hz
- Speakers – (but again, why) and volume
- Hot swapping the cable between Mac/PC
- USB-C hub (probably)
What doesn’t work –
- brightness adjustments (though maybe that’s fixable)
- reliable USB device recognition on hot-swaps
- the webcam (haven’t tried to figure out why)
The USB-C hub passthrough was recognized and appeared to work, but wasn’t reliable for me on hot swaps. It was always fine on a fresh boot.
That’s hard to debug or speak definitively on as I’m only using it with legacy USB-A peripherals (keyboard, mouse, speakers) that are connected to a cheap Amazon Basics hub, which is then connected via Apple’s USB-A to USB-C adapter. (I think the USB-A hub is the unreliable part.)
Hot swapping the cable generally worked fine, except for flakiness in recognizing USB devices, and sometimes plugging individual devices in and out of the hub fixed it. It worked enough of the time that I suspect swapping out my old USB-A hub may fix it.
I bought the 2016 Macbook Pro a few months ago, and part of my excitement around it was the LG UltraFine 5K Display that Apple announced at the time.
It’s a native resolution of 5120×2880 at 27”, so it has the same screen real estate as a 27” 2560×1440 but doubling the clarity and pixels per inch. It looks really good!
My challenge with it was I have a gaming PC running Windows so I can play real computer games and use my HTC Vive and I didn’t really want to have two monitors on my desk. I also really like having my monitor act as a USB hub and KVM since I use both a Mac laptop and a desktop PC.
Previously I was using the LG 34UM95 34” ultrawide monitor for this – it supported Thunderbolt 2 input from my mac and Displayport from the PC, and happily swapped the USB devices between them.
So I’m losing the KVM aspect with this setup – I have to actually swap the cable between the desktop and laptop.
But the gains – 5K retina resolution on the screen I use most makes a huge difference – and while I enjoyed the 21×9 aspect ratio for gaming it is much less hassle and equally nice to go back to 16×9 but up the resolution to 4K. (Performance of 3440×1440 and 4K on my GPU, a 980TI, is usually about the same.)
Other Compatibility Notes
The LG UltraFine 5K will also work with older Macbook Pros I tried, but at lower resolutions.
As noted in Apple’s support page, most Macs from the past 3 years will drive it at 4K – 3840×2160 at 60hz – the 2014 Macbook Pro I tested worked as expected.
Not noted on that page but tested and verified by me: my first generation 2012 Macbook Pro with Retina Display will drive the display via the Thunderbolt 3 (USB-C) to Thunderbolt 2 adapter, but only at 2560×1440. I couldn’t get USB devices to be recognized or work, just video.
While it doesn’t make sense to buy this monitor except for a recent generation Macbook Pro that can drive it at 5K, you will (in most cases) be able to use this as a secondary display for older machines if needed, which is nice.
Alternatives on the pc side – the Gigabyte GC-Alpine Ridge looks like it should also work, and has dual Thunderbolt 3 ports, and (seemingly) two Displayport inputs. It claims to enable 4K video, and I suspect it’s possible that it supports dual stream and could drive 5K in some cases but nobody seems to be able to actually buy this card in the US or test it from what I could determine.
Gigabyte also produces some motherboards natively support 5K output over Thunderbolt 3 –
I assume these would be limited to the integrated graphics on the board, so wouldn’t be interesting for my gaming setup, but at least one person has gotten the Z170X Designare to drive 5K on the tonymacx86 boards.
The LG Ultrafine 5K is on sale (30% off) at Apple through the end of March so if what was holding you back was PC compatibility, there’s now at least a few documented examples of it working. Mostly.
It’s still early days of super-high resolution displays, so things are a little trickier to get working. I suspect in a year or two 5K and 8K monitors and supporting motherboards and GPUs will be much more prevalent. If you want to live on the bleeding edge now, you have to be picky about your parts.
Gershon, a professor of anthropology at the University of Indiana, Bloomington, spent a year interviewing and observing job seekers and employers in Silicon Valley and around the US. Her new book, Down and Out in the New Economy: How People Find (Or Don’t Find) Work Today explains that branding is largely a boondoggle advanced by inspirational speakers and job trainers. It doesn’t help people get jobs. But it does make us more accepting of an increasingly dehumanized job market that treats workers as products rather than people. […]
When people think of themselves as brands, they are speaking the language of reputation, appearance, and marketing. It’s hard to switch from that to a discussion of moral responsibility. […]
“Maybe instead of thinking about people as property or businesses, we could think of people as craftsman.”
So the conclusion was your personal brand won’t help you get a job. But it may make you more accepting of dehumanization in the postmodern economy.
I’ve been thinking about the complexity of modern technology stacks. See You probably like bad software from earlier this week.
Some of the interesting approaches to dealing with this eschew operating systems almost entirely.
Finding ways to reduce attack surfaces, create more maintainable systems in a world where the cost of hardware approaches zero is critical because we’re going to have a lot more of them.
Nobody (or company) is going to be able to effectively manage an infinite number of unix systems spread across dozens of devices indefinitely. I can barely maintain one unix server running this site and I have a computer science degree and two decades of experience running it.
Some interesting approaches / existing work –
UniK (pronounced you-neek) is a tool for compiling application sources into unikernels (lightweight bootable disk images) rather than binaries. UniK runs and manages instances of compiled images across a variety of cloud providers as well as locally on Virtualbox. UniK utilizes a simple docker-like command line interface, making building unikernels as easy as building containers.
Unikernels are interesting – throw out the OS and write monolithic kernels with a single application on top. Somewhere between “research concept” and “possibly a production-ready technology” but this toolkit makes testing and applying unikernels in various current forms pretty straightforward – I had some basic Go code running on a rump kernel very quickly.
Unikernels are specialised, single-address-space machine images constructed by using library operating systems. Unikernels shrink the attack surface and resource footprint of cloud services. They are built by compiling high-level languages directly into specialised machine images that run directly on a hypervisor, such as Xen, or on bare metal. Since hypervisors power most public cloud computing infrastructure such as Amazon EC2, this lets your services run more cheaply, more securely and with finer control than with a full software stack.
For a long time, we were unhappy with having to care about security issues and Linux distribution maintenance on our various Raspberry Pis. Then, we had a crazy idea: what if we got rid of memory-unsafe languages and all software we don’t strictly need?
MirageOS is a library operating system that constructs unikernels for secure, high-performance network applications across a variety of cloud computing and mobile platforms. Code can be developed on a normal OS such as Linux or MacOS X, and then compiled into a fully-standalone, specialised unikernel that runs under a Xen or KVM hypervisor.
Library OS in OCaml.
Rump kernels enable you to build the software stack you need without forcing you to reinvent the wheels. The key observation is that a software stack needs driver-like components which are conventionally tightly-knit into operating systems — even if you do not desire the limitations and infrastructure overhead of a given OS, you do need drivers.
Uses NetBSD drivers and enables a large amount of existing software to more or less “just work” as a unikernel – some example packages include mysql, nginx, leveldb, haproxy, rust, tor, zeromq.
I’m uninterested in the latest viral content.
I want more exposure to things that are good, even if you don’t want to share them. Or can’t share them in a moment easily.
Or things that won’t get repeatedly re-shared because they are actually complex and require thought and therefore less likely to be a meme.
Or they matter too much to you to share without thought.
Engagement optimized social media underexposes these things systematically.
It’s like we have a biological ecosystem where the most infectious virus won, and we’re slowly seeing all the complex organisms die.
This is a hard problem. All the incentives around attention and money are generally going the opposite direction.
We’re preserving the history of video games, one byte at a time.
Frank Cifaldi’s destiny is this foundation. (At least, that’s what I’ve been telling him.) Preserving video game culture is important – it’s great that Frank has a structure and team to do this full time now. First special collection is great – NES Launch Collection
I think Twitter actually has some sort of weird philosophical stance where brands, consumers, and Russian propaganda bots are all people, and they all stand on equal footing, and must be treated equally. Everybody in charge at Twitter was like “Wow, we live in a world where corporations have all the same rights as people and… it’s turned out great, we better emulate that!”
So great to see Andrew writing. Also, he’s right that foundational assumptions in networks like Twitter (all nodes are equal, anyone can contact people) have huge implications. And they’re hard to change. (See: death of Orkut.com)
Not sure how I missed Jon Glaser getting a new show until my brother sent it to me.
Well, I do. Probably because I pay no attention to anything, and it’s on, truTV – and when John Hodgman plugged the show on Comedy Bang Bang and explained he was playing Gear-i, a Siri-like artificial intelligence on a phone that helps Jon Glaser choose what gear to buy, I assumed he was fucking with the audience. But that’s also true, and it’s awesome.
Last month, my coworker casually told me he still has a 2001 era DoCoMo phone, which is one of the first phones to have emoji […] I then took a 10 hour flight to Europe and, for lack of better things to do while watching every movie that came out this year, I drew every one of those emoji as a sprite. 166 emoji in total, 12x12px each, in one of six colors
Amazing hand-tuned tiny pixel modern usable font rendition of one of the earliest emoji fonts.
This website displays a collection of twelve code poems, each written in the source code of a different programming language. Every poem is also a valid program which produces a visual representation of itself when compiled and run.
This is inspiring – both in concept and execution.
The challenge with software is it gets worse over time.
It seems counter-intuitive that the more people work on something, the longer it takes to get done, but that’s a well established principle in software.
What’s harder to fathom is that it also gets worse. But that is the default outcome. Outside of extraordinary circumstances and extreme measures taken, it’s what you should expect.
Software is a world created by thoughts where real work and progress over time turns into an endless ouroboros of engineers making software that breaks other software then having to fix that broken thing only to break again in new ways.
If you’re an engineer, it’s very likely you are making software worse every day.
It’s ok, most people who work on software are.
If you are using software, you probably use bad software. You probably like bad software.
It’s ok, most people like bad software.
The alternatives are usually worse.
Software gets worse over time because what people change often isn’t related to making the software better in a coherent, measurable way.
It is not fixing bugs (boring! not fun!) or improving security (nobody cares until it’s too late!) or making things faster (who cares! computers and phones are faster every year! Moore’s law makes optimization forever unnecessary!)
What’s sexy and interesting in the world of software is adding features, redesigning a user interface, or integrating it with some other unrelated piece of software to help it (synergy!) or monetization – which these days usually means spying on users to better target ads, serving ads, delivering ads, or in rare cases selling things people don’t need more efficiently.
Often this is how individuals working in software show they did something and that’s how they are judged.
(People brag about the new software they make, nobody brags about the terrible awful bugs they had to fix.)
But if there’s a piece of software people are already using, by definition, it is useful and used.
Most of the above is likely going to get in the way of that existing usage.
If you’re not fixing bugs or improving performance which, you know, unless you are properly testing things and measuring them – also boring! – you’re probably harming those things – you’re making something that people use worse.
It’s probably attemping to solve a company’s problems, not users’ problems. And the accidental outcome is making worse software.
Again, that’s ok, most people make bad software.
Most people use bad software. Most of the software industry is predicated on selling, supporting, and monetizing bad software and making it worse over time.
Underneath It’s Even Worse
The perverse incentives of individuals who work on software is one thing – but it’s when you start moving down the levels of abstraction that things get really scary.
Let’s start with operating systems.
Now the accumulated cruft, random interface changes, inconsistent features, and whatever “me too” garbage thrown in to remain “competitive” doesn’t just impact a little corner of the software world via an application, but has the potential to fuck up every process and program running on top of it.
Eventually, the weight of this nonsense led to people jumping – leaping with joy! – to stop using their computer for phones.
Snobs/weirdos like me in linux/unix/macos/beos/amiga/whateverbsd land were somewhat insulated from this but it’s not hard to understand how using an iPhone 4S with a 3.5” screen and consistent touch interface would be a massive improvement over any verison of Windows released after 1995 which we too quickly forget was basically a wasteland of crashing (blue screens of death) and virus-filled malware.
“Getting rid of the garbage on your parents’ windows machine” is an annual ritual for many people.
2007-10 era smartphones were a clean slate – there just hadn’t been enough time for programmers, product managers, marketing hacks, sales guys, and aesthetic-obsessed designers to fuck it up by larding on complexity.
For those in the future who are baffled, let me set the scene.
It’s 2017, and the Apple iPhone 7, a device previously heralded as one of the most beautiful, usable, and understandable products, has a tentpole feature called “3D touch” – a rebranding of the disastrously named “force touch” – that performs different actions depending on the pressure applied while tapping.
Which is different than the different actions performed based on the duration of tapping.
So trying to rearrange the icons on the home screen – already an undiscoverable action but one users learned over a 10 year period – depending on how hard you press can accidentally trigger a nonsense “app menu” which by default includes a single item – “Share.”
Nobody wants to “share” their apps. That is solving developer and company problems (use more apps you don’t need!) not user problems.
And the few that do want to share an app definitely don’t want to do it by pressing REALLY HARD on the icon. The only reason people press really hard on an icon is to move it which they had to discover somehow in 10 years since there’s no affordance for it.
And the iPhone is probably one of the best case scenarios. Some people at Apple are really good at this stuff – they just seem to be increasingly overruled or making bad decisions.
It’s not just them. These things seem inevitable.
Laws Of Bad Software
Given enough popularity, hardware will be mediated by bad software trying to solve corporate problems, not user problems.
Given enough additional code, all software will become bloated and incomprehensible.
Now imagine these software stacks – applications built on frameworks using libraries dependent on operating systems with kernel bugs all packaged into containers deployed on hypervisors built on other operating systems running on virtual machines managed via orchestration systems that eventually somewhere runs on real CPUs and memory and disk drives.
That doesn’t make any sense because nothing makes sense anymore in software.
We used to call people who understood things end to end “full stack engineers” but that’s a bit laughable now because nobody really undestands anything end to end anymore.
This Is Your Program, And It’s Ending One Millisecond at a Time
If you aren’t measuring latency, it’s probably getting worse, because every stupid feature you’re adding is slowing things down.
Most software would be improved if people just started turning features off.
Turning features off generally doesn’t sell additional units to consumers, close a sale, or make for a PR fluff piece, so people only do it in times of extreme failure or consequences.
I’ve seen an inverse correlation in the amount of engineering time spent on features vs their usage regularly. I’ve seen direct correlations between the amount of time spent on features and higher latencies pretty much constantly.
Some software cultures understand this and put tight controls in place to prevent regressions (because, you know, it turns out to be a real revenue and/or usage problem when people abandon your software because it’s too slow) but if your software is already painfully slow due to low standards and atrophy good luck convincing people to fix it.
Software bloat is the seemingly inevitable and sad reality of nearly all software.
As the layers of complexity start to overwhelm end users, you can only imagine what it’s like for the poor programmers stuck making all this work.
It’s layers upon layers of filth nobody wants to even wade through.
Kind of like how you’d be willing to pay lawyer-like fees just to avoid legal contracts? Well, tech is like that too now, hence tech-wages.
The terrible truth of software security isn’t that people are incompetent or lazy (though that probably happens sometimes.) It’s that the interactions between components, dependencies, and overall systems are now so awful that they may be impossible to secure at a reasonable cost.
That’s not a metaphor – literally – the benefits may outweigh the costs of connectivity according to insurance risk assessments –
“A future where the annual costs of being connected outweigh the benefits is not only possible, it is happening now. According to our project models, annual cybersecurity costs in high-income economies like the U.S. have already begun to outweigh the annual economic benefits arising from global connectivity.”
How To Stop Bad Software
Dead software can’t accumulate additional bugs. It can’t get new features. It can’t get any worse. It also can’t make assumptions about how fast today’s hardware is.
If you disconnect hardware from the internet and run old software (or hide it in a virtual machine) it may actually run better as the inevitable pace of hardware improvements provide speed updates without software engineers using that additional hardware power to get in your way.
If 25 year old dead software is doing a better job of it, then maybe stop trying to top it.
But nobody wants to actually be a neo-luddite and refuse to use any normal technology. It’s like, do you really want to never use Facebook and miss out on everything because you insiste on using a god damned email mailing list? (I do, but I was always anti-social, hence the social aspects of the web were always sort of an anomaly in my life.)
2. Fight complexity
This is fighting the good fight – having taste, being smart and proactive, outsmarting and outwitting an endless array of opponents.
The problem is some of those opponents start to look like forces of nature (hostile nation states, friendly nation state three letter agencies, corporations with more money than most nation states) and actual forces of nature (entropy) and it’s just fucking tiring because you know it’s probably just a losing battle that never ends and everybody is just fucking annoyed at you the 99.9% of the time a disaster isn’t happening and the 0.1% of the time it is, people are really fucking annoyed when you say I told you so.
3. Begin Again
When Microsoft’s and Intel’s duopoly led to a certain terrible low quality / high boredom in mass market hardware and software, it provided the fertile ground for the world wide web. By adding a new magical layer of abstraction (the web!) that made the underlying garbage of Wintel a commodity, there was a whole new world of adventure.
Normal people could like, look at the source of a web page, understand what was going on, and write their own!
The clean slate of mobile applications – where limited memory, screen size, CPU, and battery – actually provided enough constraints to force engineers, designers, and the software industry to shut up long enough to solve some actual problems in a comprehensible way – seems to be ending.
In my tech lifetime it seems that we only get about 5 years of “non-insane complexity” in our platforms before the “ecosystem” shifts into a swampish nightmare, and then 5-10 years of complete hell before we can move in. (My deep worry is this pace may be accelerating.)
The current hot place to jump next (internet of things) is going to be pretty fun when it works!
But when that stuff gets too complex and all the newly networked objects around us start speaking Portugesse we don’t understand and firing off spam emails because nobody bothered to secure the SSH and SMTP daemons on the ancient versions of linux that are lurking just beneath the surface we’re going to be in for a world of pain.
That’s already happening now – we’re already in trouble.
As many predicted, hackers are starting to use your Internet of Things to launch cyberattacks.
· · ·
We’re building the future of super-intelligent robots, but we’ve put brains in them that are hardwired to think it’s the 1970’s.
When things inevitably go wrong, I hope that they’ll let me watch Star Wars
· · ·
An earlier version of this essay was published as trenchant.org letter #9 – you probably like bad software.
A tiling window manager. Set to “widescreen tall” mode.
Faster, leaner, and more dependable than the alternatives, in my opinion, on MacOS.
(Although not as fast or lean as w3m if you’re willing to go that route.)
Used with –
- markdown-mode – snytax highlighting + help for markdown
- flyspell-mode – on the fly spellchecking
- deft-mode – notational velocity-like notes
- tomorrow-theme – I use tomorrow-night-blue
I use standard MacOS terminals when I’m not using my weird fork of CRT.
Usually there’s more interesting things going on, but here we have a live-preview setup for my new static site generator,
This is using
entr to monitor a directory of text files.
entr is great! It’s why I haven’t written a file-system watcher in
With something like
$ ls ~/dailytxt | entr -r snkt -b
Anytime a file changes,
snkt rebuilds the site. This takes less than a second on my MacBook Pro.
The other window is looking at the directory of HTML files created, also using
entr, and reloads Safari with a
So anytime I save a text file in that directory, it will rebuild the site on my local machine, and reload the browser automatically, making for a nice fast feedback loop.
I suppose in the modern era I could be using wysiwyg tools but I find this to be more satisfying and efficient.
Behind The Scenes
The text files that compose trenchant daily are synchronized in real time via Syncthing to my Linux server. Syncthing is a great alternative to Dropbox if you have a lot of time, energy, and desire to not use Dropbox.
The local configuration on my MacBook Pro for
snkt shows all entries, even future-dated ones, but the one on my server will ignore anything with a future date, so if future entries get sync’ed they are ignored.
Because the site only updates once a day, I don’t listen for changes there, but simply have a cron job that rebuilds the site every morning. (Builds take about 1-2s of real time, which is pretty good considering I have 2028 entries.)
I also turned back on a script that
tweets new entries out when I include certain metadata in the entry (which is probably the only reason you clicked this!)
2016 MacBook Pro, 15”
USA Filco Ninja Majestouch-2, Cherry-MX Black – still the best keyboard I’ve ever owned.
SteelSeries Senei Mouse – great despite awful aesthetics but battery seems to have lost longevity over long usage.
LG 34UM95 34” ultra-wide monitor – 21x9 aspect ratio is cinematic and I vascillate between thinking it’s awesome and being like wtf why did I get this. I tried replacing it with one of the new 5K monitors but failed (you’d know the whole tragic story if you were reading the trenchant.org list.)
My favorite kind of joke.
trenchant daily turned 16 yesterday.
trenchant.org daily’s format – one daily post across multiple media formats, focused on quotes, essays, photographs, and links – was intended to be a departure from the weblogs that were dominant.
And now, here we are, a decade and half and change later, and not only is having a weblog an archaic concept – but so is having a personal web site that is regularly updated.
In 2001 the web felt like a place of beautiful chaos where anything could happen, and the frictionless creation and distribution of information would change everything. That mostly happened, though not always in the ways I expected.
the persistence of daily
In past years I used to reflect on whether I’d still be doing this site in the future or not, and how old I’d be.
Now I think about it a little differently – it’s remarkable how little maintaining a web site has changed in these years, technology wise.
HTML, CSS, HTTP, not-quite-Unix servers.
Good technologies and protocols are durable. They last. You can expect they will work in a few years when you need them.
The tech is better and cheaper. For $5 a month you can run a hosted virtualized server that has more power to serve web pages than you’ll probably ever need.
What’s changed is that readers spend time in other places now. The web isn’t it anymore.
But the modern, hyper-optimized, aggregated social systems lack the charm of the personal web.
I was trying to explain to coworkers earlier this week that when we removed web design as a part of web publishing, we lost something magical – the “ugly” web of early web sites, and even the centralized services of Livejournal, Diaryland, Pitas, Blogger, etc. generally had voice and personality that you can’t get when you decontextualize web pages into aggregated social streams.
Also it’s hard to be charming when you are basically highly optimized surveillance technology for more efficient advertising.
I used to think everyone should have a web site and then we had the dystopia of social networks and I changed my mind but maybe everyone should have a web site. They should just have to learn HTML and UNIX system administration first.
· · ·
The web has a look and feel and voice and authenticity and power that you can’t get elsewhere.
It’s still thrilling to have my own domain name and server and site and make it all look and work and feel exactly how I want.
I hope it still does in another sixteen years.
Many forms of Government have been tried, and will be tried in this world of sin and woe. No one pretends that democracy is perfect or all-wise. Indeed it has been said that democracy is the worst form of Government except for all those other forms that have been tried from time to time.
As I break down and rework the tools, personal server, and workflow of how I use the internet today I’ve been thinking about that quote.
Even after clearing out the gunk and stripping down what I do to its core with cleaner, lighter, more efficient tools the sheer insanity of running and maintaining a virutalized Unix machine in a data center just to transmit a few words via HTTP and SMTP seems somewhere between quaint and insane.
Self-Hosting Is The Worst
Self-hosting web sites is the worst form of internet expression, except for all those other forms that have been tried from time to time.
It’s not that I don’t enjoy throwing away inefficient python code talking to a memory hogging Mongodb instance and replacing it with needlessly fast Go code that reads flat files or mysql. Or planning a switch from Ubuntu to Debian. I do. I actually enjoy it. And I’d rather do it than spend one god damned second on Facebook.
And it’s not that I don’t enjoy re-writing configs to cope with nonsensically shifting Linux init systems (who agreed I should use Ubuntu in the first place? I demand to speak to the sysadmin!) but like, seriously, how the fuck is anybody supposed to maintain a Linux machine that has a persistent internet connection in 2017?
Even after abstracting away the physicality of real disk and memory to virtualized io/cpu/magic there’s still the damned operating system software and security updates and firewalls and god knows what in the face of arms races of hostile network entities.
And yet, how can I complain? It’s 100x easier and cheaper than it was 20 years ago.
Deeper and Deeper
I’m getting into the weeds and depth of a problem and solving it for myself in a way that is completely ineffective beyond my own brain and mailing list but you know, tiny victories, fun code.
That’s ok. I have to be ok with that. Sometimes you have to start that way to discover the hard problem and understand it enough.
Do we manage through the spiraling complexity by adding abstractions, virtualizing, containerizing, or just hiding? I’m trying to simplify instead. Saying “no” is somewhat easier when you’re your own and only client.
Internet Of Things Are Tiny Unix Machines Nobody Maintains
But if I can barely do it for something that I care deeply about that includes 15 years of personal expression, how can we expect your refrigerator manufacturer to get the same thing right?
If trenchant.org daily was a person it would be eligible to drive this month.
And also probably wouldn’t want to because self-driving cars.
My site would be a terrible driver.
I rewrote my CMS static site generator (this time in Go) because sometimes you solve the same problem over and over again for 20 years slightly differently because some problems are timeless and it’s comforting to asymptotically approach an idealized solution.
$ time python zinio.py -c trenchant.cfg real 0m7.023s user 0m6.507s sys 0m0.437s $ time fmstatic -build real 0m0.708s user 0m0.553s sys 0m0.263s
10x speed improvements seem meaningless to everyone around me (and hardware is cheap) but time is our most precious resource, even if it’s imaginary and on a Linux server.
· · ·
If you enjoyed these posts, please join my mailing list