Blog

  • 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.

  • MVT under Hercules notes

    I needed a little mental relaxation this weekend, so I spent a while playing mainframe model trains by bringing up Hercules.

    I initially tried the MVS Turnkey system, but ran into some issues — mainly that there are no working (free) 3270 emulators for Big Sur. Since I couldn’t set up any consoles, and Homebrew x3270 didn’t seem to work under Xquartz, and I had no intention of spending $29 just to fool around with MVS for a bit, or multiple hours trying to get X11 builds working, I dropped back to Jay Maynard’s MVT installation instructions.

    They’re a bit out of date at the moment, and the Right Thing would probably be to make the fixes in both the instructions and the files, and move the corrected instructions over to a wiki somewhere. For now I’m leaving my notes here so I don’t forget what I did, and so I can do that later if I get the time. More fooling with the console and running jobs, less file twiddling.

    • You can get the OS/360 “CD-ROM” at http://www.jaymoseley.com/hercules/downloads/archives/os360mvt.tar.gz — this really ought to be on archive.org. It works with Maynard’s instructions and has these fixes:
      • dlibs/DN554.XMI was recovered. The srclibs/dn554 and related files in srclibs/TAPEFILE.ZIP have not been modified (recovered) to match, and should be at sone point.
      • srclib/fo520/IEYUNF.txt has been renamed to original.IEYUNF.txt and a version recovered from the MTS distribution has been added as IEYUNF.txt. The related file in srclibs/TAPEFILE.ZIP needs to be fixed as well.
      • These files are fine as they are to build MVT.
    • You need the JCL and HASP II tapes; they’re at http://www.conmicro.com/hercos360/os360ctl.tar.gz. Yes, I wish it was HASP IV, but I’m playing, so it’s not that big of a deal.
    • Maynard’s instructions are definitely of their time, when cutting and pasting commands was not a thing. The relevant commands are mentioned once, and one is expected to remember them. If I update these, I’ll inline the relevant command and note which console they get typed into. Switching back and forth between the Hercules “hardware” and the MVT console was a tad confusing at times. A significant omission: the devinit 00c foo.jcl command works okay for the MFT starter system and MVT without HASP, but once HASP is running the devinit must include eof at the end of the command or the reader hangs and the job never starts. Also, one of the HASP job filenames is called out by its right name in the section header, but by the wrong one in the text. Looks like a cut and paste error.
    • You should comment out or remove the 3270 definition at 0C0 in the mvt.cnf Hercules config file; if it’s there when you boot MVT, but no 3270 emulator is connected to it, the machine will hang with wait state 21. Took some googling to find that. TCAM will grumble about it when it starts up, but it doesn’t hurt anything.
    • You will need to install telnet on your Mac, since Big Sur removes it. telnet localhost 3270 to connect the virtual 3215 console. It might be worth trying to configure some 3215s for TSO and see if that works. We don’t really need to emulate real serial terminals.
    • Doing the mn jobnames, t and mn status commands will save you a lot of wondering whether anything is going on or not, even after HASP is up.
    • Be sure to copy the prt00e.txt virtual printer text file when:
      • You’ve finished doing both stages of the sysgen on the MFT system.
      • You’ve finished installing HASP.
      • You’ve finished installing TCAM and TSO

    Otherwise you lose all those useful assembler outputs of the HASP hooks and the TSO interfaces to it. The sysgen and TCAM build output isn’t critical, but it’s nice to have.

    Other things — http://hercstudio.sourceforge.net/ is supposed to be a hardware console emulator (lights and dials and stuff) interface for OS X and Linux; it’s written in Qt, which is fine, but the Makefile that qmake builds works to build it, but wants to install things in /usr/bin and Big Sur will not let it go there even with sudo. I might consider just writing a native iOS one instead.

    I’m up a couple hours later than I intended, but I have my notes, and as Adam Savage says, “the difference between science and screwing around is writing it down!”

  • Praise and a warning about using Gemini II and CleanMyMac X to clean up old merged backups

    Time to clean up!

    Earlier this year, my company, in its push to get things squared away for an IPO at some point (note to the SEC: I know nothing about IPO plans, I am not suggesting anyone invest in anything, I’m just this guy, you know?), installed a remote management tool for MacOS. Initially, I was concerned that we might end up being monitored as to what was on our machines, and non-work use might be frowned upon – plus I learned the hard way at WhiteHat that if you’re going to get laid off or fired, no one’s going to give you a day or two to back up anything personal on your machine. (I lost, and later managed to partially recover, all the patches for my Radio Free Krakatau album.)

    IT and upper management, after a couple of days of general consternation and concern about keylogging, etc., formally told us, “no, we don’t care what you do on your laptop, just don’t do anything illegal,” but by that point I’d scoured off the personal files and data and moved them to iCloud, Dropbox, or a spare 2012 MacBook Pro I had.

    The 2012 MBP was the last one that allowed upgrading by the end user. It could accept up to 16GB of memory, had a lot of ports (including a DisplayPort, native Ethernet, and FireWire), and had an internal disk that could be swapped to an SSD.

    I picked up a 2TB Crucial SSD, pulled the old disk, installed the new one, and used Carbon Copy Cloner to copy the old internal disk back on to the SSD. I also pulled in several older backup spinny disks into a folder called “Backups to Clean Up”. This was a superfund site of duplicates, junk, and accumulated files. I took a first cut at cleaning it up right away — deleting old stuff I knew I didn’t care about anymore, like partial iPhoto/Aperture/Photos libraries and old iTunes folders — but I was left with a considerable stash of data that I knew contained duplicates. At the time I was busy and decided I’d work out the rest later. I had removed my Adobe apps and music apps and data from my work laptop, and at the time I just didn’t have any time to work on those.

    Diving in with Gemini II

    Last weekend, I decided it was time to do the cleanup. I had bought Gemini II a couple years ago in a MacHeist bundle, and had tried it a little, but found it too slow on a spinny disk to to be useful. I decided that the job was big enough that I really needed to have some help, so I tried it again. I fired it up on Wednesday afternoon, and pointed it at my home directory on the MBP, and said go get ’em.

    Friday morning (I neglected to exclude Dropbox from the duplicate check, resulting in a lot of “download the file, check it” for the 200 or so GB or data in there, slowing things down considerably), I had a complete comparison. I spent the better part of Friday evening and Saturday and a chunk of Sunday looking at the recommendations and clearing duplicates. In general Gemini had made good choices as to which files to keep and which were duplicates, and this got rid of almost 200GB of duplicates. I did a couple rescans and found another hundred or so that I could clean up.

    Gemini recommended I try CleanMyMac X to help with getting rid of extra junk on the disk, and being in a cleaning mood, I decided to try it. I signed up for a month, and only after I’d done that did I see a “30% off if you own one of our other products”, despite being signed in. MacPaw was very kind and extended my CleanMyMac X subscription for three months to compensate.

    On the initial run, CleanMyMac X was very useful. It cleared a bunch of old caches, got rid of unused languages, etc., and helped me cleanly delete some old apps that were cluttering up ~/Library. It installed a very attractive cleanup and virus checking monitor, and I thought nothing of it at the time.

    Problems surface

    I continued working with Gemini II, and the monitor was solicitously clearing the trash when it got full, and so on. I then tried to use Gemini to just dedup my Music folder, and here’s where the fun started.

    It ran for an hour or so and then I got a “You are out of memory” warning; Gemini II apparently had 69GB of memory allocated. I shut some stuff down, but I ran out of memory again. And again. And again. Quit Gemini. Tried to run Ableton Live; the cursor was sluggish, sound was breaking up, and trying to select a patch in plugins was causing outright crashes. And the laptop was so hot I couldn’t leave it on my legs.

    This was not going to do at all. I wanted to use this machine for music, and it wasn’t able to handle it anymore. Was I going to need a new laptop? It was late. I went to bed.

    The solution

    In the morning, after some time spent with Activity Monitor, I twigged to the problem: CleanMyMac X had installed a lot of startup items. Like four. And Gemini had installed some too. This was not going to get any better with those hanging around. I decided that I was going to have to remove them, and the easiest way was to have CleanMyMac X do it. All credit to MacPaw: it simply warned me that it would shut down all the monitoring if I removed CleanMyMac X, did I want to do that? I did.

    And now the machine is running fine. I’m able to keep a couple of instances of Arturia’s 2600 emulator open and running with Live actively generating sound, and I can tweak the settings without significant effort or the sound breaking up. I ended up using Song Sergeant to do the Music Library cleanup; I can recommend it as doing a good job of finding duplicates, even in different formats.

    Conclusions

    The machine is slimmed down by about 250GB total and running fine; if I decide to do a similar cleanup again, I will probably use both Gemini II and CleanMyMac X to get the cleanup work done, but without being able to easily say no to the monitoring they install, I’ll probably delete them again as soon as I finish. MacPaw, if you’re reading this: make it optional to install the startup items, and give us an easy way to turn them off. If I had those I’d leave the two apps installed, but I just can’t and get any work done.

  • obliquebot returns

    Some time back, when beepboop.com was still around, I wrote a little Slack bot that listened for “oblique” or “strategy” in the channels it had been invited to, and popped out one of Eno’s Oblique Strategies when it heard its keywords or was addressed directly.

    It worked fine up until the day that BeepBoop announced that they were going away, and eventually obliquebot stopped working.

    This month, I decided that I would stop ignoring the “you have a security issue in your code” notifications from GitHub, and try catching obliquebot up with the new version of the SLAPP library that I’d used to get Spud, the RadioSpiral.net “who’s on and what’s playing” robot back online.

    I went through all the package upgrades and then copied the code from Spud over to the obliquebot checkout. The code was substantially the same; both are bots that listen to channels and respond, without doing any complex interaction. I needed to add the code to load the strategies from a YAML file and to select and print one, but the code was mostly the same.

    I also needed to update the authentication page to show the obliquebot icon instead of the RadioSpiral one, and to set the OAuth callback link to the one supplied by Slack.

    Once I had all that in place, I spent a good two or three hours trying to figure out why I could build the code on Heroku, but not get it to run. I finally figured out that I had physically turned off the dyno, and that it wasn’t going to do anything until I tuned it back on again.

    obliquebot is now running again at RadioSpiral and the Disquiet Junto Slack, and I’ve updated the README at the code’s GitHub page to outline all the steps one needs to take it and build one’s own simple request-response bot.

  • Show report: 2020-10-31 “Pharoah Nuff” at radiospiral.net

    My last performance was not as smooth as I hoped, so this time I decided that I would find a way to streamline it even further.

    I decided to go further in the direction I’d taken with the Wizard of Hz show, and strip down even more. I decided to try to perform as much as possible of the set on the iPad, and use the laptop solely for streaming and Second Life. This freed me from hassles in switching setups in VCVRack, Live, and the other software I’d been using, but it also meant that I wouldn’t be using either of my favorite synths for this performance (the Arturia 2600 and Music Easel).

    Having had some time between performances to really experiment with AUM and I felt comfortable using it to lay out my performance. I decided that I wanted to keep Scape as my background/comping program, and that I’d set up a series of light-handed scapes to give me a through-line. I then sat down with MIRack and Ripplemaker to create multiple Krell textures that I could bring in and out, and also discovered a couple of lovely lead patches for Ripplemaker that I paired with a Kosmonaut looper. I also brought in a couple public-domain samples from old sci-fi movies, heavily processed with Kosmonaut again, and felt like I had enough material to do an hour’s performance.

    I used the iConnect Audio4+, which I now finally have the hang of, and set it up so that I had two stereo channels from the iPad and one mono channel routed to the iPad through Kosmonaut (again!) for some subtle reverb when I was doing my intro and outro. With the setup I used, the iConnect kept the iPad fully charged through the whole set.

    I used Loopback to connect the multiple outs from the iConnect to the stereo ins on my Mac, and monitored on headphones. I pulled up Audio Hijack, entered the stream setup, and was ready to broadcast.

    I got up early on the day, started up AUM, and ran a soundcheck to make sure everything was working. All sounded good, and I was good to go.

    Mostly.

    I didn’t stop AUM, and as a result, it ran for several hours before I tried to start using it. This apparently triggered some kind of a memory shortage, and when I started streaming, I was completely mute. Fortunately, I’d cued up a prerecorded VCVRack texture, and started that while I was trying to figure out what was wrong. I gave up and restarted the iPad, and AUM came up like a champ.

    After that it was pretty smooth. I was able to fade the various patches in and out, play the sci-fi samples, and improvise over the Scape-provided background. Once it was off the ground, the performance was very easy to do. I did forget and leave the audio feed from Second Life enabled, so as a result this was a very sparse performance, but the sparseness worked out very well.

    Overall this was a great way to do a performance and I plan to refine this further. Of particular note is that AUM saves things so well that it will be trivially easy to do this performance again, should I decide to; this is probably the first time I’ve had a performance setup I felt was robust enough to say that!

  • RadioSpiral Wizard of Hz Performance Notes

    Last time I did a live streaming performance for an audience, it did not go well. I had long pauses, the mic didn’t work, and miscommunication over Slack to the remote venue resulted in my getting cut off before my set was finished. And this was even after a good bit of practice.

    So when I signed up for the Wizard of Hz concert on RadioSpiral, decided that I needed to have as much backstop as possible in place so that no matter how tangled up I got mentally, I’d have a fallback to something that sounded good and would be a nice navigable arc from point A to point B. Ideally, I should have something that would sound great even if I got called away for the entire set!

    My go-to process for this is Scape. I’ve had it since it first came out, and it meshes very well with what I enjoy hearing and enjoy playing. I started off with the Scape playlist that I often use to relax and get to sleep; this is a seven-scene playlist, with the transition time at max, with the per-scene time adjusted to be just a bit over an hour. This gives me a fallback for the whole hour; I can pull everything else back and lean on Scape while I decide what the next section should be.

    In addition, Scape provides a very nice backdrop to improvise over, so I can be playing something while Scape gives me a framework.

    I then put together a couple of Ableton Live sets: one built on the Arturia ARP 2600 and Buchla Music Easel emulations, and another built on Live’s really nice grand piano and the open-source OB-Xa emulator, the OB-Xd. I finally figured out how to change patches on the OB-Xd about 20 minutes before showtime.

    I had set up a piano with a nice looping effect from Valhalla Supermassive (Supermassive and Eventide Blackhole figured heavily in the effects), but ended up not using it, and doing a small Launchpad set instead using the Neon Lights soundpack.

    I was also able to open and close with the large singing bowl, played live and processed through the Vortex, which was a nice real analog performance touch.

    Overall, I strove for a set that sounded played-through, but that had enough breathing room that I could fall back on Scape while making changes (switching Live sets, etc.), and I think I achieved that.

    I did have Audio Hijack recording the set, so if it sounds OK, I’ll be releasing it on Bandcamp. (Followup: it came out pretty well! Definitely at least an EP.)

    Only real issue was a partially-shorted cable between my iPhone and the mixer that I didn’t figure out until most of the way through the set.

  • Squaring numbers and a forgotten book

    I happened on a demonstration of a mental math trick on Reddit for squaring numbers in your head and was immediately reminded of a technique I learned in 1972 from a great book on speed arithmetic that I have unfortunately forgotten the name of.

    The video’s formulation uses the identity n^2 = (n^2 - a^2) + a^2 to make the multiplication simpler, but the book had an extremely elegant way to notate a different identity that works nicely for doing the squares of two-digit numbers in one’s head, and rapidly doing multi-digit squares on paper.

    The Reddit example squared 32 by changing it to 32 * 32 = 30 * 34 + 4 = 1024, which is clever, but check this out!

    Start with the identity (a + b)^2= a^2 + 2ab + b^2 and treat 32 * 32 as (30 + 2)^2.

    Visualize this in your head:

    0904 
     12

    That’s the a^2 + b^2 on the first line, and 2ab on the second. Now just add it up normally, with blank spaces equal to zeroes, and you get 0, 10, then 102, then 1024.

    The left-to-right add means you never have to remember the carry value, just the changed result. Let’s try 47.

    1649
     56

    1, 21, 220, 2209. Simple.

    The Wikipedia page on mental arithmetic is a great resource that has this technique, but lacks the notation visualization shown here which honestly is what makes it easy. The same technique works for larger numbers too. There’s more to remember, which may make it too hard to do in your head, but it makes squaring large numbers on paper trivial.

    Let’s say we want to square 123:

    010409 
     0412 
      06

    1, 14, 151, 1512, 15129. (a^2 + b^2 + c^2 + 2ab + 2bc + 2ac). Squares on the top row, 2ab on the left in the middle, 2bc on the right in the middle, 2ac on the bottom.

    I will admit that I didn’t properly get how to do the multi-digit notation right 45 years ago, but I hadn’t really understood the mapping of the identity to the positions on the page and was doing it by rote. The notation is the slickest part of this, as it automatically handles the proper number of multiplications by 10 for you.

    The left-to-right addition and a trick of doing mental addition by repeating the current total to oneself when adding the next number to keep from losing one’s place (ex. 45 + 37 + 62 – 45, 75, 75…82, 142, 144 and cast out 9s — 0, 1, 9, and 1+4+4 =9) were all also in that same book. I really wish I could remember what it was!

  • Belloq fail: Roblox

    In the category of “we can’t handle email right” again, or at least, they haven’t convinced me they can: the email that is this blog’s domain name plus .me.com is apparently on someone’s list of “valid emails you can put in forms”, or there’s a tool that exists somewhere to grab an email off one of the numerous breaches that included it, because it gets used by random people around the world to sign up for stuff.

    This is definitely an “I’m doing this on purpose” because the name is unusual for anyone who doesn’t speak Bahasa Indonesia, and I have never yet had a fraudulent sign-up from Indonesia.

    As I do for my other email, I usually punish them by resetting the password and locking them out of the account. For dating apps I add a really savage profile about how dumb they are.

    But every once in a while there’s one I can’t do this for — Capital One, for instance, allowed ROBIN JEAN (yep, it was all caps) to supply the me.com address as their email for a credit card without verifying that it was accessible by their customer. Their password reset requires, if I recall, the account number to do a reset, so there’s nothing I can do about that one except complain every month when the balance email shows up. (We’re three months in; hasn’t helped, though they keep swearing they’ll fix it.)

    The one I’m writing about today, however,  is one that leaves me gobsmacked. And somewhat alarmed.

    On July 1, I got a purchase confirmation from Roblox that read like this (please note that I do not have a Roblox account):

    Thank you for your purchase on Roblox, the online gaming platform that is powering imagination globally!
    
    Please contact us at roblox.com/support, or call us at +1-855-333-4734 if you have any questions about this charge.
    
    Your 6/28/2020 3:11:10 AM order:
    Item Purchased: Roblox Premium 2200
    Item Price: CAD25.99
    Next Renewal Date: 7/28/2020
    Total: CAD25.99
    
    Billing Information:
    sdf sdf
    pemungkah@me.com
    Visa ending in 1563
    sd
    sd
    fsd v6e
    United States
    Username: 45dfgerdfwerewr
    Sale ID: 543250908
    
    You will be charged CAD25.99 per month for this service until you cancel. You can cancel at any time by going to the billing tab of the account settings page and clicking cancel membership. If you cancel, you still will be charged for the current billing period. We hope you enjoy your membership!

    Let’s just luxuriate in the utterly transparent fakery of that address and username for a minute.

    It is blatantly obvious that whoever is using this credit card is not on the up-and-up. So I immediately tried to reset the password. Nope. No password reset email. Well, they allow several other authentication schemes, maybe I can’t reset it this way . I’ll make sure that Roblox Support knows about this; possibly unauthorized, fraudulent charges are most certainly going to be a serious issue for Roblox, and they’ll want to be sure that they’ve protected whoever this actually was, and they’ll take quick action to fix this.

    Ha. No.

    I spent the next eleven days simply trying to communicate that someone was very possibly committing fraud, that I had evidence, and that maybe they should do something.

    Roblox “support” spent that time sending me their form emails about unauthorized charges. Once I battered my way past that, I said, fine, you can’t tell me anything. Please make sure my email is removed from your system.

    They couldn’t find it.

    I supplied the email with full headers.

    Still couldn’t find it.

    Do you have any explanation as to how this order ended up in my mailbox, then? Because it certainly was not me or anyone in my household. I would think this would be an issue, that there are orders going out to emails that you don’t have any record of.

    Time passes. Crickets.

    Then I get the automated “you haven’t replied and we want to close this ticket so our KPIs look good” email. All right, I will explain it carefully so we can perhaps get an understanding going here.

    Hi. Look. This should not be as hard to understand as it seems to be.
    
    I forwarded you an email I got. 
    
    It came to my email address, and had my email address in the purchase record.
    
    The data in the purchase record is obviously random typing on the keyboard.
    
    It’s not my credit card.
    
    It is, however, my email.
    
    SOMETHING must have created this purchase. There has to be an audit trail that points back to some account that this purchase order is associated with, and some transaction that initiated it.
    
    Whatever account it is. Whatever purchase it was.
    
    NONE OF IT should be associated with my email.
    
    Have I made it clear?

    Reply:

    To assist with or provide information about any account, we must first verify account ownership. Unfortunately, there is no email address or purchase information associated with the account. Without this information, we are unable to verify ownership or assist further with the account.
    
    Please make sure that with any account you create, you add and verify your email address. This will allow us to verify ownership and also allow you to use the reset password feature.

    What did I just send you, other than the complete email, with all the headers, containing the account name, the email address, the literal transaction ID for the possibly fraudulent sale…? So I gave up.

    I’m guessing that they may actually have caught that it was bogus right away, and immediately deleted the account, and the stonewalling is to prevent me trying to social-engineer my way into, I don’t know, getting them to confirm the credit card is good or something.

    I’m guessing that there is a  record that this account was deleted because of fraud, but because of policy they can’t tell me that.

    But we’ll never know. To whoever owns the credit card, sorry, I did my best. I hope they did protect you, or that you catch the charge and dispute it.

    I’ll just say that I don’t feel warm and fuzzy about the whole thing.