MagiCalc 2

I have created a new version of the Magical Probability Calculator. Edited (2015-12-29) to say you can view the code here, but it was written for Processing 1 and no longer works in 2 or 3 as-is, nor does the online Java applet work now. However, I have recently made a JavaScript version sans Processing.

MagiCalc 2 Screenshot

Changes in v0.2:

  • Updated m calculation to reflect changes made in Octavo.
  • Fixed NaN errors for various combos of p=1, m=1.
  • Added toggle for amplification/attenuation.
  • Added dynamic text displaying calculations.
  • Added graph to plot p_m.
  • Added percentage views for glsbm.

Enhancement ideas:

  • Add a toggle and slider for countermagic. (I had intended to do that for this release, but the logic to select ATT when e.g. the countermagic (M_C or Mcontra) exceeds M, was blowing up controlP5, and I did not find an elegant solution before the time I wanted to publish the new version.)

Dreaming of a Radionics Renaissance

I have been reading The Secret Art: A Brief History of Radionic Technology for the Creative Individual, which makes a case for art as radionics (you can read the book’s excellent intro, here), and musing about how open-source and accessible development tools such as Processing and Arduino could facilitate a new era of designs in radionic and psionic machines. The idea is not new to me—I have been mulling it for a few years now—but as my Automagica Theoretica course comes to its official end this week, I am thinking much more about it.

I would love to see online, collaborative communities emerge around this sort of thing. Like the community of psionic machine enthusiasts that developed in and around Astounding Science Fiction (and later, Analog) in the 1950s, 60s, and 70s, but more distributed and accessible. I would love to see it be open-source. Perhaps an interactive catalog of designs, like SourceForge for software, or Open Design Engine for open-source hardware (congratulations to those guys for a successful Kickstarter, BTW). Arduino lets you add knobs, buttons, and switches to pretty much anything—from cigar boxes to t-shirts. Or how about “soft” radionic devices running on our mobile telephones and tablet computers? My imagination boggles at the variety of apps one could develop for these media.

Who’s with me?

The Pathoclast

11.10.13 Update

Just a note to let people know what is happening with hyperRitual…

Automagica Theoretica has been going very well; my most popular course to date. I have proposed several more courses to the Arcanorium staff, for later this year or next. I should also be putting on the “Controlling the World with a Magic Wand” class at Jigsaw Renaissance, soon.

I am writing an article about using Conceptual Blending as a ritual design tool especially when mapping between magic and technology.

Edited 2011.11.28.20.39: Still planning the robomancy project. In addition to the Parallax S2, I will be featuring Guilherme Martin’s Farrusco (first mentioned on hyperRitual here) and some other Arduino-based robots.

The robomancy stuff will coincide with a series of demonstrations in (mostly gestural) interfaces for manipulating magic symbols, which will also be developed with Arduino and Processing.

I do not have any new tech to show off right now, but here are a couple of Daniel Schulke prints I recently had framed, that inspire the magical (especially, witchy) aspects of my work.

Daniel Schulke Print 1

Daniel Schulke Print 2

Processing Action Keys

I recently needed to implement function keys in a Processing sketch, which are not defined as constants for keyCode() within Processing. I was able to sort it out using Java’s KeyEvent, which I was turned onto by this post on the Processing forum. Here is an example sketch I wrote for the function keys (can be easily adapted to other actions keys e.g. Page Up or Page Down):

// http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/KeyEvent.html

import java.awt.event.KeyEvent;

void setup() {}

void draw() {}

void keyPressed() {
  if (keyEvent.isActionKey() == true) {
    switch(keyCode) {
      case KeyEvent.VK_F1:
        println("F1");
        break;
      case KeyEvent.VK_F2:
        println("F2");
        break;
      case KeyEvent.VK_F3:
        println("F3");
        break;
      default:
        println("other action key");
        break;
    }
  } else {
    println("not an action key\n");
  }
}