- To Mock a Mockingbird, by Raymond M. Smullyan
- The Little Schemer, and sequels, by Daniel P. Friedman et al: I'm not saying there's scanned PDFs of these floating around, because how would I know? But a search might find one. Dead tree-only books are bullshit.
- The Why of Y, by Richard P. Gabriel, more essays
- How to Design Programs
- Schematics Scheme Cookbook: Annoyingly defunct, should be refunct somewheres.
- Implementation of Functional Programming Languages, by Simon L. Peyton-Jones: Good introduction to Lambda calculus, Y-combinator, and building a programming language.
Month: November 2018
Resize Windows with Applescript
- jwz mixtape 200: Best videos of all time? Pretty good, anyway.
So I downloaded it with youtube-dl (after more annoyances with MacPorts updates ) and a helper script ytplaylist
: [updated 2019-06-22]
youtube-dl -i --yes-playlist --restrict-filenames --recode-video mp4 -o '%(playlist)s/%(playlist_index)s-%(title)s.%(ext)s' "$1"
osascript -e 'display notification "Youtube playlist downloaded"'
where $1 is the actual playlist URL; "show video list" under the video player or pick from DNA Lounge playlists
Now I have a folder full of properly-named videos. VLC can be opened from the shell with:
~/Applications/VLC.app/Contents/MacOS/VLC jwz_mixtape_200 &
Frustrated by VLC constantly resizing, I then ignored the problem for most of the morning, finally wrote resizeWindow.applescript
:
#!/usr/bin/osascript
global appName
global windowX, windowY, windowW, windowH
on run argv
parseArgs(argv)
wrapCoords()
resizeWindow()
end run
on parseArgs(argv)
set argc to (count of argv)
if argc ≠ 5 then
display dialog "Usage: resizeWindow.applescript APPNAME X Y W H"
error number -128 -- User canceled
end if
set appName to item 1 of argv
set windowX to item 2 of argv as number
set windowY to item 3 of argv as number
set windowW to item 4 of argv as number
set windowH to item 5 of argv as number
end parseArgs
-- Wrap negative coords around to other side
on wrapCoords()
tell application "Finder"
set desktopBounds to bounds of window of desktop
end tell
if windowX ≥ 0 then
-- no changes
else
set windowX to windowX + (item 3 of desktopBounds) - windowW
end if
if windowY ≥ 0 then
set windowY to windowY + 24 -- menu bar
else
set windowY to windowY + (item 4 of desktopBounds) - windowH
end if
end wrapCoords
on resizeWindow()
tell application "System Events"
tell process appName
set frontWindow to the first window
set appPos to position of frontWindow
set appSize to size of frontWindow
-- display dialog ("front window of " & appName & ": " & (item 1 of appPos) & ", " & (item 2 of appPos) & ", " & (item 1 of appSize) & ", " & (item 2 of appSize))
-- display dialog (appName & " at " & windowX & ", " & windowY & ", " & windowW & ", " & windowH)
set size of frontWindow to {windowW, windowH}
set position of frontWindow to {windowX, windowY}
end tell
end tell
end resizeWindow
Now I can just leave it running to update every 5 seconds:
while true; do resizeWindow.applescript VLC 0 -64 720 640; sleep 5; done
Slight annoyance, sometimes it's still expanding the size further down than it should until I size it smaller, and then it works. Fucking software.
I don't know that what I've done is productive in any way, but I have my MTV.
The kids are disco-dancing
They're tired of rock and roll
I try to tell them, "Hey, that drum machine ain't got no soul"
But they don't want to listen, no
They think they've heard it all
They trade those guitars in for drum machines and disco balls
We can't rewind now; we've gone too far
Internet killed the video star
—The Limousines, "Internet Killed the Video Star"
Advent of Code 2018
- Advent of Code 2018
- my 2018 attempt
- 2017, Week 1 report: I got too busy to finish even week 2, and fell further behind, but still some interesting results.
- Learn2JS came out of that.
I don't know how much I'll do this year, but I'll do it in Chicken Scheme as a way of improving the text-processing and math functions in my library, and publish it. Source is now on gitlab, above.
The competitive part is still bullshit, the single starting time of midnight EST is utterly useless to most people who could participate; even in Pacific time, that's late at night. On my quiet night schedule, that's way too early to wake up; in Europe, that's 04:00 or so, long before coffee could percolate. Mid-workday for Korea & Japan. So, only for Finns and Russians?
Netflix Genesis Evangelion
- Netflix trailer: FUCK YEAH.
And my favorite AMV (anime music video) of all time:
- AMV - Neon Genesis Evangelion - Rammstein - Engel: "Goddamn not an angel when I die!"
Blueholme Referee Repository
Just a collection of the charts from Blueholme, plus a new chart listing all the monsters with Size, AC, HD, Movement, Damage, Align, Treasure, Page; that's super helpful for a game with some weird monsters.
The front and back covers don't show up in Preview or Skim on Mac, only in Adobe's reader (ugh), but the clean art version does on page 3, and the interior seems to render fine. There's some scaling & half-toning artifacts in a few pieces, some of which are rendered differently but also wrong in Adobe. I think the editor needs to ship printable and screen versions.
There may be too much whitespace and large fonts. Holmes was Futura 10 or 11pt, mostly tightly-packed paragraphs; maybe that's too small for quick reference sheets, but this goes too far the other way. The art's great, though. Like the main book, it has the tone of the original Holmes boxed set, but modern artists.
You could make a home-made Referee screen out of these pages, but you'd have to do some editing: Pages 16-17 are the combat charts, but Turn Undead is buried with the classes on page 7, and page 11 has the movement & getting lost charts.
★★★½☆: It's a buncha charts.
Coincidentally, I'd been thinking about and writing some notes for using Blueholme in a Discord or Skype chat game, so this comes at a good time.
InSight Mars Landing
- NASA Live: Watch InSight Mars Landing Online: 11:00 PST, runs until 12:30.
Updated with permalink.
Jack Kirby in Zen Pencils
No Aesthetic Sense
You may think "Mark, you're exaggerating when you say:"
In order to run Windows, you need to have a total lack of aesthetic sense, a willingness to put up with "updates" that brick your computer, a tolerance for Microsoft-Quality™ software ("let's add more buttons to a ribbon bar and ship it!"), and a willingness to use junk hardware that consumes twice as much power as needed and makes noise all the time.
—me, yesterday
And then immediately an argument broke out on Mastodon where someone (I'll not shame him here) claims aesthetics are unnecessary and ruining the world, artists are frauds, a computer held together with zip-ties is good, and runs better than a pretty, well-built machine (what's EM interference? what's noise? why doesn't Windows wifi work? He does not know.)
These people exist, and are the majority of the customers of Microsoft and other artistically-void software companies.
And I have to point back to Steve Jobs, in 1995, just before NeXT got "acquired" by Apple and immediately took over:
The Stubbornness of Windows Users
What we've got here is, a total failure to understand the purpose of the device or the OS.
A somewhat long sidebar here, state of the world in desktop operating systems:
- Windows: Redmond still ships a garbage toy OS which is the bastard child of VMS and MS-DOS, that costs a lot of money, but runs on cheap (but not sub-$200) computers, many of which come in every shape and size. In order to run Windows, you need to have a total lack of aesthetic sense, a willingness to put up with "updates" that brick your computer, a tolerance for Microsoft-Quality™ software ("let's add more buttons to a ribbon bar and ship it!"), and a willingness to use junk hardware that consumes twice as much power as needed and makes noise all the time.
Slightly positive, the graphics and sound systems work, and you get all the games; if that's all you're after, though, a PS4 or Xbox OnePlus+Ultra/190 (whatever the name is) is a better deal. You can generally browse the web on Windows, and you'll get some viruses and ransomware but it works. Dev tools on Windows are expensive and shitty, so in order to get real dev work done, Redmond now also ships Linux inside Windows. My bias shows, sure: I've never owned a Microsoft product in my life, and I'd eat broken glass before doing so, but I've had to use them in some workplaces. Dire, but minimally functional. -
Linux: Distros ship a garbage OS for free that runs on garbage computers, including sub-$200 microcontrollers. In order to run Linux, you need to be masochistic, technically educated, not have any need for desktop apps, sound support, graphics support, games (some Steam stuff now works, sometimes, on higher-end machines!). As a server or microcontroller OS, or a very nerdy dev machine (emacs and C), it's adequate and somewhat supported. Only insane people use Linux as a working desktop. I say that as someone who ran it as a working desktop for a decade, and I loathed it.
-
FreeBSD, OpenBSD, NetBSD: Great server OS's, that ship for free and run on slightly more demanding computers. Only the most technical nerds will even know that these exist. Software, you basically write your own or port from other POSIX systems, which half the time is written for broken Linux APIs and so doesn't work right. On the bright side, they have such limited sound and graphics driver support that if you do have compatible hardware, you'll have working sound and graphics. If Mac OS X didn't exist, I'd be using FreeBSD.
-
Haiku (aka BeOS): Seriously, they shipped a working beta, and it seems nice. Great desktop, graphics and sound support if you're on compatible hardware. Down side, minimal software for it, and if you want to write your own the APIs are in C++. Fuck that, no. But… I do like BeOS, probably tolerable as a nerdy dev computer.
-
Mac OS X (or "tacOS", er, "macOS" as they now style it): The last of the UNIX® workstation OS's, that only runs on expensive devices Apple makes (it's possible to "Hackintosh" a garbage computer to run Mac OS X, but half the services won't work; don't do it unless you're nerdier than a FreeBSD user). Everything actually fucking works. Sound has no latency, and always works. Graphics, aside from low-end devices having a shitty Intel GPU, always works; I'm unhappy with them deprecating OpenGL and going with Metal instead of Vulkan, but Vulkan libraries have been ported. It's fine.
There are games, Elder Scrolls Online and World of Warcraft in particular, and Steam's full of Mac games. Desktop applications on the Mac are adequate to amazing; there's no "you must use this one shitty program because it's all we've got" like GIMP on Linux. As a dev machine, it's unmatched. I don't touch Xcode unless I have to anymore, but that's what you use to make iOS and Mac apps, and it has some good dev tools like Xcode Server.
Of course, I say that, and:
So, end sidebar, the reason you buy Mac hardware is to run Mac OS X, the least bad hardware/software combination available in this horrible century.
What you'd use a Mac Mini for is what you'd use an iMac for, but cheaper and often hidden away:
- Switch to the Mac from another OS. Steal the keyboard and screen from your garbage computer. You may need some dongles to convert the cables. Learn how to use a Mac. Buy something better when you need it, and re-sell the Mini, which will still be worth 2/3 or more of the original price.
-
Run a multimedia display. Put a playlist of music, photos, or videos on one or a bunch of LCD panels; you can't do this with a Linux microcontroller like Peter suggests, because their graphics and sound don't work worth a fuck. Just try playing a random folder of media on Linux, you'll throw it through the window. It's worth $800 to not fight with Linux.
-
Run a build farm for Xcode Server. Probably need a mid-priced Mini for this, but speed won't matter much because it's an invisible server. It can't be rack-mounted, because not every workplace has a machine room with racks, they just need a little device in some (well-ventilated) cupboard to support the developers.
-
Streaming audio, video, or other server. Put this in a colo farm with a static IP, and deliver whatever media you want. Your podcast and web site has to live somewhere. Now, you can do that with AWS/EC2 and other shared servers, much cheaper, but you don't control the computer, they mostly run Linux (ugh), and often you've written software for the Mac.
I have an old Mini at colo that runs Minecraft, some file shares, holds backups, used to run Xcode builds but I don't need that now, sometimes runs one-off networking services I want to try out. I may upgrade to a new one, but my needs aren't quite as heavy on it as they were. Invalidstream is currently run from an old Mac pro, but I think he'd be fine on a higher-end Mini now. -
Literally any other use that doesn't require using it on the move, or extremely heavy CPU or GPU loads. Not a top-of-the-line gaming, Photoshop, or movie editing device by itself, but an external GPU could put it on par with an iMac, maybe even an iMac Pro for some jobs. Probably not a stage DJ device, there they'd use a MacBook Air or even an iPad, but ideal for sticking in an audio booth and doing podcast recording and mixing. Unlike a garbage computer, you can be in the room with a Mini and not be blasted off the air by the overheating fans and clicking drives, and unlike a MacBook it has enough ports.
Most of those tasks require it to be small, quiet, and still attractive if it is visible.
The $799 base model is for only the most minimal uses. For $1,599, you can get:
3.2GHz 6‑core 8th‑generation Intel Core i7 (Turbo Boost up to 4.6GHz)
8GB 2666MHz DDR4
Intel UHD Graphics 630
512GB SSD storage
10 Gigabit Ethernet (Nbase-T Ethernet with support for 1Gb, 2.5Gb, 5Gb, and 10Gb Ethernet using RJ‑45 connector)
That seems like a reasonable Mac workstation, if it had more RAM. +$200 to get 16GB RAM is OK, +$600 to get 32GB RAM is overpriced, +$1400 for 64GB is "bend over and squeal like a pig". You can get 64GB of the same RAM for under $500, and there's a Snazzy Labs RAM Upgrade Tutorial and Teardown; the disassembly doesn't look fun, but worth doing if you're going to use it as a server. A casual user can live on somewhat less RAM with the Apple RAM tax.
Windows and Linux users, people who've only used garbage computers, are confused by Apple's attitude on pricing, upgrades, and repairs because they've never thought about non-garbage computing.
Apple doesn't price based on hardware costs (except for RAM, which they tax 50-300% over cost), but on where it fits in a Portability/Power chart, starting at $1000, because you're buying "machine that runs Mac OS X", not "random collection of parts that does not run Mac OS X". You'll never see Apple micro-adjust prices day to day as part prices or exchange rates change, because it has nothing to do with that.
If you want to upgrade an Apple device, other than RAM in some models, you sell it at a high resale value and buy a better one. Garbage computers are useless in a couple years, cost more to replace parts than they're worth, and have no resale value at all.
If you want to repair an Apple device, it's either free for as long as your AppleCare lasts, or $100 in most cases. Don't keep open containers of liquid on your desk (*), don't abuse your expensive hardware, and the repair isn't a problem (notably, the same guy at Snazzy Labs fucked up his iMac Pro and Apple unsurprisingly told him to go piss up a rope).
*: I wanted to link in the atp.fm episodes where John warns about this, and then gets to say "I told you so", but I can't find them with obvious keywords.
Coffee
Why isn't there a show about coffee? Like, set entirely in a coffee shop (Friends and Frasier spent only some time there, too much time in preposterously large apartments). Only talking about coffee. Wacky coffee-related hijinks, or grim dark Scandinavian-style coffee-related drama. Licensed brand coffee, good stuff, available in every store.