Author: Joe McMahon

  • Just barely not Perl 4: diving into the old WebWebX codebase

    Hoo boy.

    I’ve put the basics in place now: there’s an App::WebWebXNG.pm nodule, and I’ve moved the page management and file locking modules into /lib. The load tests for the existing library modules pass, but there aren’t any functional tests yet.

    Now, on to the old core script, webwebx.pl.

    I’ve imported it as close to as-is as possible into App::WebWebX.pm, and added a main if not caller() to run the old script as the main program.

    This script was just barely converted from Perl 4. There’s a giant pile of globals, and the majority of the “database” stuff it does is in DBM (if anyone still remembers that). I don’t even know if DBM still exists in more modern Perls!

    All of the HTML generation is from interpolated print statements. There’s no CSS (browsers didn’t even support such a thing at the time; it was Mosaic or nothing. Okay, maybe IE, but the number of Windows machines on base at GSFC that were being used by our user community was probably countable on one hand.).

    This should be convertible to Mojo::Template relatively easily, which is good. And the command dispatch is driven off a hash of code references, so that should work fairly well too.

    It’s not terrible, it’s just old. Well, off to see how much will work!

  • WebWebXNG: revisiting a 25-year-old project

    The past

    Back in 1998 or so,  or long after I’d switched for system administrator to web developer, I stumbled across Ward Cunningham’s original WikiWiki. It was, at the time, a mind-blowing idea: a website that people could edit and extend themselves, without any programming at all. Simply sign in to the wiki, and start editing. Adding a specially-formatted word automatically generated a link to another page, either an existing one…or a brand new one, that you could start expanding on yourself.

    I can’t say that I conceived of Wikipedia when I saw this, but I absolutely zeroed in on how we could use it for several problems we had:

    • We didn’t have a bug tracker/project tracker for our project. With a wiki, we could just have a page that linked to all of the features we were working on and the bugs we were fixing.
    • We didn’t have a formal release process at all, or much in the way of source control. We started using RCS and noting the version number(s) of files that fixed bugs. We still had to build up a canonical checkout of everything, but we at least had some tracking that way.
    • We really wanted (and needed) an easy way to build a reference manual for our users that was easy or them to browse and search, and easy for us to keep up to date.

    We (okay, I) decided to try a wiki. The original WikiWiki didn’t have a number of features we really felt like we needed for this to work: no authorized users and no access control being the big issues. I found WebWeb, original written by (I will have to look at the WebWebX source!), which had part of, but not all of what I needed, and with their permission, I created an extended version, rather unimaginatively called WebWebX.

     

    The present

    RadioSpiral has a lot of stuff that we need to have documented: how to connect to the streams, configs, where Spud lives and how to reboot him, policies, etc., and it’d be nice to have all that in a wiki instead of in documents (our last update of our docs was 5 years ago!). I remembered that we’d had a private Notion instance at ZipRecruiter — it wasn’t great, but it was usable, and private. So I signed up for Notion…and discovered for a mere $720 a year, I could have the level of support that included a private wiki.

    Given that RadioSpiral’s income is in the red at all times — it’s 100% a labor of love, and a place for us to have fun while playing good music — that was just not a tenable solution. I didn’t want to run the old Zip wiki either — it was written in Haskell, and I didn’t feel like learning a whole new programming paradigm just to get a private wiki.

    The I remembered, well, I have the old WebWebX source out there, and it did have access control. Maybe I could get it running again, and modernize it in the process. I’ve pulled the source from ibiblio and started working on the conversion. First things first, I’ve installed Dist::Zilla so I can build it out in some kind of reasonable fashion, and I’ve decided to base the whole thing on Mojolicious to try to make it as self-contained as possible.

    My goal is a private wiki that can be deployed with a dead minimum of effort. Which will probably entail a lot of effort to write and fix up, but that’s time better spent than trying to find a free alternative somewhere that I’ll have to accept compromises in, or yet another paid service that I’ll have to pay for myself.

    So far, I’ve created the initial README.md, initialized Dist::Zilla in the new App::WebWebXNG repo, and imported the old code into the repo to start work. I’m choosing to implement the main program as a modulino, to make it easy to test (did I mention that the old code has exactly zero tests?).

    Updates to follow!

  • Useful shortcut for cleaning up files

    Useful shortcut for cleaning up files

    The situation

    I’m in the process of moving from one computer to another. My old 2010 MacBook Pro is still running very well with a replacement SSD for its internal disk, but it’s stuck at Catalina and won’t be going any further, mostly because the firmware has a password which I’ve lost, and Apple can no longer unlock machines that old.

    So if I want to do development in a recent Xcode, and I very much do, I need to upgrade. One side-effect of my recent layoff from ZipRecruiter was that they let me keep my machine, so I now have a 2021 M1 Pro that will run Ventura. (It’s possible that I’ll never need another machine, given that Apple machines stay supported for ~7 years; in seven years I’ll be 73, and either dead or unlikely to be programming on a daily basis.)

    The problem here, though, is that the internal disks are considerably different sizes. The old machine’s internal disk was 2TB, because that was the biggest affordable SSD I could get at the time. The new machine’s disk is 0.5 TB, and a straight copy from the old machine to the new is not an option — the immutable law of storage is that if you have it, it fills up — so I need to clean up the stuff I’ve got on the internal and move it elsewhere.

    I’m using a mixed strategy for this:

    • Anything on the internal disk will be there because it has to be.
    • Anything I want to keep and be able to access, but that doesn’t need to be available right now is going on Dropbox. (I will have to back this up separately; I’m going to work out a script to back it up with Backblaze.)
    • Anything that I need quick access to will go on an external 2TB SSD, which I will back up with Backblaze.

    So far, I’ve done the following:

    1. Gotten a copy of my most recent backup of the 2 TB internal disk from Backblaze on a 4TB spinny disk. (Costs me the price of the spinny disk, but worth it.)
    2. Copied the failing spinny disk copy of my old backups to an external SSD. (In hindsight, it should have gone to the empty space on the spinny external; I may do that later).
    3. Started walking through the SSD copy of the old files to clear space on the SSD for the files I want from the Backblaze spinny disk.

    The actual meat of this post

    So fine, I’m cleaning up the SSD. The actual thing I want to note here is that I have a collection of ebooks on that external that I want to file onto a folder in Dropbox. Problem is that a lot of them are probably already there, and the drag, get the duplicate dialogue, dismiss it, trash the file process is tiresome on the hands. I discovered a significantly faster way, and I’m noting it here for anyone else who might be doing something similar.

    1. Open the source folder (for me, that’s the “books” folder on the SSD) and the destination (that’s a categorized and subfoldered “Books” folder on Dropbox).
    2. For each file in the source folder, use the Finder search field in the Dropbox window, limiting the search to just the “Books” folder on Dropbox, and start entering the name of the source book.
    3. If the book is there on Dropbox, you’ll find it — and if there a duplicates, you can clean up the duplicates right from the search results.
    4. If it’s not there then it can be dragged over to the appropriate folder in “Books” on Dropbox after clearing the search field.
    5. In either case, the book is now either found or filed, and can be removed from the source folder.

    This is way faster and easier on the hands than dragging and dropping the books one at a time.

  • Via Medium: A step-by-step intro to Go concurrency

    I recent wrote a blog post on the Zip tech blog about Go concurrency; it’s mostly an intro to how channels and select both work, and how to use them effectively.

  • Considering the Cloud

    After the LastPass revelations and reading Jason Scott’s FUCK THE CLOUD essay today, I started considering what I should be looking at in terms of data security this year.

    Not as “can this data be stolen”, but as “can this data be lost irretrievably — and how bad would it be if it was?”.

    I have already lost access to my Twitter account, but I don’t think there’s much there that I’d care about if I never saw it again.

    I still have the EMUSIC-L archives, even though the ibiblio site has been broken for years. They are incomplete; we lost some of the really good stuff, including Mike’s hot-off-the-experience posts about the first Team Metlay gathering. Still, okay.

    My VFXsd sequences and patches are backed up on slowly-deteriorating diskettes, and it’s only a matter of time before those go. I think I have sysex dumps of all of them; I can replace the diskette drive with a USB one, but the SD-1 is getting long in the tooth, and I’m not sure I really mind if the various didn’t-quite-ever-amount-to-anything sequences are lost before I record them.

    Photos. I have several dozen photo libraries in various states of cleaned-upness, and that is a project I should devote some time to actually catching up on, even if it’s simply to pull out the good ones and let whatever happens to the rest, happen.

    Facebook does allow you to dump everything off, and it’s probably time to grab another archive.

    Most of my music is up on the Internet Archive, which is likely to outlast me, and that’s OK. Should consider packaging more of the tracks on Soundcloud into albums.

    I’ve lost all of my archived data from the mainframe era, and I’m a bit sad about that; there was some really elegant stuff in there — elegant for OS/360 and MVS, I guess…

    I’ve shrunk my physical memorabilia footprint a lot; I have a few things I’d hate to lose, like my board from the 360/95 (did lose my mass store carts and my original FE manual somewhere along the way) and my pocket trumpet, but not as much as I thought before.

    So I think my work for this year will start with finishing up the cleanup of both of our LastPass vaults — that’s mostly done at this point, but making sure we both have a clean copy is a chore — and then finding a way to compile and then deduplicate all those photo libraries (and separate my photos from Shymala’s — we did and still do tend to take shots with each other’s equipment and then forget to split them up).

    I anticipate that job will take quite some time.

    Once that’s done, I’ll come back to the various places my music is stored and get everything out on a release on Bandcamp and the Archive, which will make it available and as safe as I can make it.

    I’m backing up my personal laptop with BackBlaze, which is probably safety enough for most of my data. Will need to review though and make sure it’s all getting backed up. Possibly spending a little to save the various backup disks in BackBlaze is a good idea as well…

    I’ll revisit this over the year, but writing about it helps clarify my thinking some. Back to the passwords.

  • Too long since I contributed to Perl

    I’ve put in two documentation PR’s; funnily enough, I’ve changed email addresses, so now the infrastructure has forgotten that I wrote all the internal comments in the debugger, and I have to wait for someone to trigger the acceptance process.

    Should have done them earlier in the month…

  • I Only Wanted to Use My Time Capsule…

    I Only Wanted to Use My Time Capsule…

    A while back, I disconnected my Ethernet-connected Time Capsule because it was no longer working at all well for Time Machine backups. Somewhere in the update March of Progress, Time Machine became very sensitive to network drops. It may have been that way all the time, but we now have a lot more people with networks (I count 25 right now, as opposed to maybe 10 when I first moved here), and I think there’s simply more interference that Time Machine simply isn’t able to handle.

    I have found that regular mass-storage seems to work okay — I have an AirPort Extreme with an external 2 TB disk attached, and that seems to work fine as an external backup and organization disk.

    So I figured, why not switch the Time Capsule over to just being a big dumb network filestore, and not try to use it for Time Machine anymore? And it was kind of in the way when it was hard-wired, so setting it up like the Extreme should be fine.

    It was not fine.

    I was able to hard-reset it okay, but the current AirPort Utility (both on the Mac and the iPad) would not attach it to a non-Apple network. It was simply no go. After a lot of thrashing around, I found that AirPort Utility 5.6.1 should be able to fix this, but I couldn’t get it to run on my Catalina machine (I didn’t even bother to try on Big Sur). I did dig out my 2008 MacBook Air running El Capitan; surely this would do it!

    No, it didn’t. El Cap did not want to run it. I finally found BristleConeIT’s launcher utility for 5.6, and was able to get it to run on El Cap. Unfortunately, the straightforward “extend the network” (“join the network” was oddly not there) wasn’t available. I gave up and tried configuring it with no network, figuring I’d try later to fix it.

    This was the key to success: AirPort Utility diagnosed the settings as bad, and then led me through fixing them — and the fix process allowed me to join whatever network I wanted! I pointed it to my (non-Apple) Xfinity router, and said go. It restarted, and when I went to “Network” in the Finder, there it was!

    I launched the current AirPort Utility, which allowed me to access it and erase the disk. I chose to zero it out, and I’m waiting for that to finish, but so far, it seems like it worked.

  • Fixing the Twenty Seventeen Theme Zoom Problem on the iPad

    The Twenty Seventeen WordPress theme is a beaut. You can set up your home page to scroll any number of fixed pages, each with its own header image, each appearing as you scroll down the page. For an art site, like shymaladasonart.com, this is gorgeous and lets you show off sample images.

    Problem is, on the Pad the images look horrendous because the CSS makes them weirdly zoom in at a huge magnification, and the previously-lovely effect becomes a mess.

    After a lot of poking about, this bug’s apparently been an issue for quite a while, and obviously still isn’t fixed. Fortunately, there is a workaround. You need to log in to wp-admin, select Appearance > Customize > Additional CSS, and add this:

    @media screen and (min-device-width:768px) and (max-device-width: 1024px) {
        .background-fixed .panel-image { 
            background-attachment: unset;
            width: 100%;
        }
    }

    This will check specifically for the iPad, and turn off the pretty effect that scrolls the page content over the header image. It’s not quite as cool on the iPad, but at least now it doesn’t look bad.

  • The Good Friends of Jackson Elias and Structuring Scenarios

    The Good Friends of Jackson Elias podcast recently did an episode about scenario structure for Call of Cthulhu. I thoroughly enjoyed listening to the episode (and I recommend the podcast in general – it’s really excellent!), but I wanted to have notes to refer to later; I’m currently working on the Storytelling Collective’s “Publish Your First Scenario” exercise, and the ideas in this podcast are extremely useful.

    This is a set of notes on the episode, not a transcript, so I do recommend you listen yourself. What I’ve captured here is an outline of what was said, in a form that should be useful for a quick refresher on the concepts.

    What is a scenario structure?

    • How related information is presented for use by the Keeper in playing a module

    • Goal is to make the presentation both as efficient and as user friendly as possible
      • Example: introducing NPCs in a scenario
        • Chaosium house style is NPC description and picture up front, stats at the end
        • Other publishers might have everything in the same place as the character is introduced
      • You probably won’t use only one way of organizing the information and presenting the situation
      • But one particular way will probably dominate
    • Questions you need to ask yourself as you’re assembling your information
      • How is it structured when the players play it?
        • Do the event occur in a fixed order?
        • Or are they flexible?
        • Are they tied to a location, or are they relationship-based?

    The Linear Series – “On Rails” design

    A set of fixed encounters in a particular order

    • Has occasionally gotten a bad rap
    • It can be very good for certain setups
      • Get from point A to point B, with events along the way
      • Assumes a fairly straightforward path: a single road, a train/boat/airplane ride\
        • Events are added to make that one way more interesting
        • Gives the players something to interact with along the way
        • Allows them to pick up more information, clues, impressions, or needed paraphernalia
        • Alternatively, a logical path or fixed set of events in a more unconstrained geography
          • A clues B, B clues C, …
        • Another option is a linear set of sandboxes
          • Example: Masks of Nyarlahothep
            • Investigators move between a series of locations
            • Each location is a sandbox, but is generally completed before moving on
            • I.e., Paris, then Peru, then London, not part of Peru, then Paris, then back to Peru, etc.
      • An “on rails” design is very different from “railroading” the players!
        • Railroading implies lack of player choice
          • bad: things will happen in this way, nothing the player can do will affect it
            • E.g., NPC must escape, so she does, despite being riddled with bullets and blown up with a grenade
            • Makes the players feel that they have no agency, and they might as well just sit back and not do anything
            • The Keeper should never have to negate or deny actions to maintain the forward flow
          • better: a event that happens in a particular way, with flexibility, that no matter how it comes out, still guides the players to a big set-piece encounter or event
        • Structuring this way can make things easier for a less experienced Keeper
          • As long as the players have complete freedom of choice within a scene, it’s fine
          • A set of things can happen in order as long as the players have some ability to affect them
          • The more options they have in a scene, the more enjoyable it is to play and to GM

    The Dungeon – Constraint by geography

    A map and locations within it, and there are specific ways to move between locations

    • The Haunting, from the 7th edition quickstart rules, is a dungeon once you get to the house

      • 1st part is free-form, during the investigation prior to going to the house
      • 2nd part is one location, the Corbett house
      • There are things you can do in each room, all building toward one location
      • The connections between rooms are fixed
    • Uncle Timothy’s Will
      • Description of each room
      • Something to do or obstacles to pass in each room to obtain clues or things you might need
      • You can go out in the grounds and things happen there, so less restricted than The Haunting
      • There’s no fixed order in which you have to do things
      • There are different encounters as time progresses
    • “Amongst the Ancient Trees” in the 7th Ed. Keeper’s Handbook
      • Splits the difference between a pure dungeon and an pure sandbox
      • The different clearings are places where different things happen
      • Players can choose one of many different paths through, possibly bypassing some places altogether
    • Different from a sandbox in that you’re building toward one location where the climax will happen
      • Object is to get the investigators to that location for the big showdown

    Sandbox – Unconstrained set of locations and events

    Branching set of possibilities based of player actions

    • Typically has lots of different locations
    • No fixed order of events
      • All depends on what players choose to do first
      • May change what happens at other locations later
      • Not all of the events may happen
      • Investigators chose their route through the possible spatial/temporal locations
    • Generally have many different possible outcomes
      • More fun because they have more replayability
      • Keeper needs to be a little more experienced and ready to improvise in response to player actions
    • Number 22 from the Blasphemous Tome issue 5 [note: added by me as an example]
      • There’s a setup and a few events that will happen in a particular order
      • There are locations that have to be discovered
        • May happen through exploration, or NPC prompting
      • Antagonist is non-human but intelligent, and may or may not have raised the stakes through its actions
      • Investigator actions will determine reactions and final outcome of events
    • D&D has “wilderness adventures” that are sandboxy
      • CoC difference is that the full sandbox is more geographically constrained
        • One particular city/town/place
        • A number of locations, relatively easy to travel between

    Geographic Sandbox – True open world game

    Unconstrained hexmap – who knows what’s out there?

    • Still constrained to some extent
    • Locations are mapped, but the playerrs may travel in any direction for any distance
      • “Draw maps, leave blank spaces” Dungeon World philosophy
    • Players make up their own story as they travel around
    • Not hugely different from a dungeon
      • Keeper will have things for them to come across if they travel to them
    • No geographic contraints (specific roads/rail lines/paths)
      • Here’s a set of locations
      • How do you choose to go between them?
      • Not “one way from A to B” but “where would you like to go on leaving A?”
    • The scenario writer and the Keeper have to impose a structure on things
      • Players depend on the GM to supply what’s important and what’s not
        • E.g., labelled locations are more likely to be interesting and productive places to visit
        • Unnamed road intersections or train stations probably not
        • This is a gradual reveal process, which is uncommon in CoC
    • Examples
      • Blackwater Creek
        • Past the first scene there’s no particular order for things to happen or for places to go
        • There are some major set pieces that might be the climax for any given game
        • There’s a situation to investigate, but players can do that as they wish
        • Several possible avenues to explore
    • There doesn’t have to necessarily be an overarching plot
      • Because of the structure of the game, CoC sandboxes are more limited
      • There’s content to investigate that leads the investigators to find something out
      • They can then make a choice of how to respond to what they find
    • D&D will let you wander off the map into the unknown, and things will still happen (e.g., wandering monsters)
      • CoC tends to not have anything of interest outside of its sandbox
        • E.g., there’s no reason to go to Jersey City during Dead Man’s Stop; you could, but there’s nothing there related to the scenario
    • All RPGs are, at the bottom, investigations of something the players don’t know about and must discover
      • Keeper’s job to make both the process of discovery and what is discovered interesting

    Web of Intrigue – Abandoning location and time for interaction

    Structure entirely dependent on the relationships between the players and the NPCs

    • Crimson Letters from the 7th ed. rulebook
      • Interviewing the NPCs, what they know, who they are is the important part
        • Locations are “where can I find this person”
        • Not important in themselves
        • Note that a given NPC may be more or less forthcoming depending on the location [added by me]
          • Finding an NPC at home vs. in a speakeasy or jail
    • Figuring out what the story is from what the NPCs tell the players
      • What is truth, what is lies
      • What the pattern is
      • Think Agatha Christie: Poirot interviews the suspects, observes, figures out what has happened, or will happen
    • Very different from most scenarios
    • Sandboxy, but a social sandbox, not a physical one
      • Go and talk to a given person
      • You may say what you like
      • Interact positively (befriend, woo) or negatively (threaten, beat up)
    • Assembling the web of relationships must be done first and is critical to success
      • List of NPCs, their knowledge and secrets, their connections
    • No longer a go to the library or newspaper, research, find the clue, go somewhere else, find another…
      • Clues live inside people’s heads, not books!
    • Relationship maps are critical to build such a scenario and for the Keeper to be able to play them
      • Almost like dungeon maps, but for social instead of physical connections

    The Garden of Forking Paths – A scenario as a set of scenes

    A set of possible timelines, with different options forking and possibly rejoining

    • Scenario is no longer a single X, then Y, then Z, but a web of possible events and alternate paths
      • What will happen if the investigators do X, or Y, or miss a clue and do nothing?
      • Example: Go talk to X; if they do and do and/or say the right things, they find out something that lets them make a choice about what they do next
        • May trigger another event based on this
      • Clues lead to clues leading to other clues
      • Meanwhile the clock is ticking, and events happen, influenced by what the investigators know/don’t know, have/haven’t done
    • Harder for less experienced Keepers to run
      • How long do players take to do things?
        • E.g., timeline would have things happen on day 1, day 2, day 3, but the investigators don’t sleep and don’t eat, pushing forward and doing things before the clock can tick forward
        • Days are easier to handle than hours, but are subject to disruption by players plowing through
    • Flowchart it out, with all the branches lined out
      • Do think about the possibility of the schedule getting changed by the players’  choices
      • Scenes that might or might not happen
      • Branches to alternatives; may join back up, may go off to a completely different ending
    • Common in Gumshoe scenarios
      • Here’s an optimal route through. but these others are possible

    Situation – As wide open as possible

    Set up an opening situation and a set of characters, and then let the players take it

    • Here is a problem. Given who you are, how do you solve it?
    • Commonly includes a series of “bangs” – things you can throw at them to push the narrative along
      • Chandler’s Law: When in doubt, have a man come through a door with a gun in his hand.
    • Hardest for newer Keepers not experienced with making things happen when the players are not moving
    • Most satisfying for both Keeper and players
      • Far more scope to play characters and make choices based on who they are
    • Easiest for one-shots, but can be done for full campaigns
      • A set of pregenerated characters with specific backgrounds and conflicting motivations makes for a great convention game
      • If you’re playing a home game, it may be more fun for everyone to have the players devise the motivations and conflicts themselves
    • Keeper has the luxury of taking the conflicts and pushing on the intersections of those hard via events or NPCs
      • Ex. A wants to save the library, B wants to burn it down
        • Add one can of gasoline and matches, A, and B to the library
        • See what happens
      • This kind of setup is common for LARPing
        • Set the agendas
        • Put the investigators in a situation with individual (probably conflicting) goals
        • Let them run wild
      • In Medias Res from The Unspeakable Oath #10 as an example
      • This is just a different kind of sandbox
        • It’s more abstract and there’s absolute freedom of play
        • Investigators can do anything as long as it’s justified by the fiction
      • It’s not really as scary as it seem
        • The players will keep it going as long as you kick things once in a while if they seem to be running down
      • Will be harder for players who are more cautious and less proactive
      • Critical for enough to be supplied to make it easy to keep providing those kicks
        • Depending on how much is supplied, it can be completely amazing…or crash and burn spectacularly
        • It may be hard to figure out how to work through one of these
        • If it’s too open without any direction, it will be difficult

    Hybrids – Pick some from here and some from there

    Choose parts from each type to build a unique approach

    • Realistically, everything already is a hybrid
    • Preferences from the crew:
    • Matt
      • Prefers to write a replayable scenario with lots of ways for it to go
      • If people can do anything, it’s much more fun for replays
        • The jam band vs. “show up and play our greatest hits in the same order every night”
      • Branching events are really fun – build a tree
        • Set it up with different things in different locations
        • Depending on what they find first, the other locations change
      • Thinks of it in terms of stories
    • Scott
      • Likes to vary approaches
      • Preferred types
        • Situation + bangs
          • Run this through playtests several times, then document to formalize the most common things
        • Geo-sandbox and dungeon
          • Simple, direct structures
          • Easy to write up and communicate
        • Thinks of a scenario as a place or time where things might happen, not as a story at all
      • Paul
        • For a one-shot, you need a beginning, a middle, and an end
          • Likes to have an opening scene or establishing event to kick it off
            • Maybe dramatic, maybe gentle, but set the mood
          • Then have branching options of scenes and locations
          • Some set of events that occur (perturbed by investigator actions)
          • Leads to a climactic scene to wrap up
        • Longer campaigns
          • Have a start, but the end may be a long way off
          • Build in some mini-climaxes to prevent a long, dull middle
        • Doesn’t think about structure to start from

    Conclusions and opinions [all me, and not The Good Friends]

    If you’re looking to build a one-shot scenario, Paul’s “beginning, middle, end” linear approach, the “dungeon”, and the “situation” setups are good to build a smaller, self-contained game meant to take a few hours.

    Gauge your players before dropping them into a social sandbox or a situation; if they’re not heavily into role playing, you may have to carry the scenario yourself. A linear or branching scenario with relatively fixed events may be more to their taste, and you can gradually let them get comfortable with these setups and gradually take off the constraints.

    Beginning scenario writers may find a hybrid restricted-area geo-sandbox+dungeon structure similar to The Haunting to be the easiest to write and run: a preliminary investigative phase, which can be played fairly freeform, as long as the minimum clues needed are found, followed by a relatively constrained dungeon crawl. (e.g., The Haunting‘s BBEG will pretty much lie in the basement and try to spook the investigators until they challenge him directly.)

  • “I just wanted to play Portal…”

    Prologue

    A friend on Facebook mentioned that he wanted to play some games on his Mac to help with an inner ear problem (practicing with virtual motion apparently helps with vertigo from real motion) — I had suggested Portal, as that’s a very changing-viewpoint-intensive game. Unfortunately, neither of us knew that Portal and Portal 2 are both 32-bit apps, and so they don’t run under more modern Mac OS X’s — anything past Mojave dropped 32-bit support. I said, “I’m sure there’s a way I could make this work.”

    Hubris.

    They don’t call it Boot Camp for nothing

    My initial thought was, well, of course most games run best under Windows; why don’t I set up Boot Camp on this machine? I’ve always wanted to see if it would work.

    Well, it might. But the machine I have to play around with — a 2011 MacBook Pro, the last one to have user-upgradable memory and disk — does not play well with modern versions of Boot Camp. See, modern versions of Boot Camp assume that you’ll be able to build a Windows installer USB stick and boot off that to install Windows. Boot Camp does build the installer USB stick; it’s just that my 2011 MBP can’t boot anything except OS X from USB. It could install from DVD, but a) I had no DVD blanks on hand and b) newer Boot Camp does not believe in DVD drives. There’s no option to tell it “please burn this to DVD”.

    I started exploring other options, trying to find one I wouldn’t feel like an utter heel trying to convince a not-so-technical friend to use, and there just wasn’t one. The closest I got was building a Windows VM, but that started getting messy and I decided if this was going to work, it needed to work with the tools that a typical Mac user would have, and shouldn’t require the installer to understand how to mount ISOs on virtual machines, and worse.

    Dual-wielding Mac OS installs

    My MPB can run 32-bit OSes, so I decided that the simplest possible option was create a second partition on the internal HD and install Mojave (the last 32-bit OS X) on it. This was a less complex option by far; the worst it required was a little work in Disk Utility to create the target partition, and issuing one command in Terminal.app to create the installer USB (which yes, my MBP would boot, since it was OS X).

    This article was really helpful in getting it done; I won’t repeat the whole thing here, but just mention the highlights:

    • Modern Mac OSes use APFS, and creating an extra APFS volume in free space on the internal drive only took a couple minutes.
    • Links to older version of OS X are available through this Apple support page; because Apple does get rid of older OSes, I recommend getting the installer you want and backing it up in case you ever want it again. Currently (as of May 2021), you can get Catalina, Mojave (the last 32-bit OS X), and High Sierra as installer apps from the App Store, and Sierra, El Capitan, and Yosemite as .dmg files, which install the installer. Older versions are probably available out there on the Internet, but they won’t be official Apple source.
    • Creating the installer is the one more-sophisticated step, in that it requires you to enter a command in Terminal.app to create the USB stick. That’s documented in this Apple support document; it’s only one command, so it’s not too scary.
    • Once you have a usable USB stick, it’s relatively straightforward. Boot the machine while holding down the Option key, and you’ll get a menu of disks to boot from. Pick the installer USB. You go through a couple screens to get to the install disk; pick the APFS partition you added.

    The result

    That’s pretty much it; wait for the installer to do its thing. One it’s finished, you’ll be up in Mojave. If your Catalina or Big Sur install is on an encrypted disk, you’ll get a prompt to enter your userID password from the other install; note that there are two partitions it will have to unlock. The first will use a bizarre dashed-hexidecimal username; if you’ve got more than one user, you’ll have to try combinations of different weird usernames and your login password until it unlocks. The second will use your regular username. (You can have Mojave remember these so you won’t have to enter them again.)

    And now you’re up on Mojave! Note that since your Catalina/Big Sur install is readable, you can run applications that are installed on that system in this one without reinstalling them. In this case we want to run Steam, which runs just fine and allows you to install Portal to the Mojave partition and run it there.

    This still isn’t as simple as having an OS that supports both 32 and 64 bit apps, but it will work. If you’ve got 32-bit apps you really need to keep, then this is a way to have the best of both: the newest OS and one that still runs all the things you need.