Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

2026 Participants: Martin Bartelmus * David M. Berry * Gregory Bringman * David Cao * Claire Carroll * Sean Cho Ayres * Hunmin Choi * Jongchan Choi * Lyr Colin * Dan Cox * Christina Cuneo * Orla Delaney * Adrian Demleitner * Pierre Depaz * Mehulkumar Desai * Ranjodh Singh Dhaliwal * Koundinya Dhulipalla * Kevin Driscoll * Iain Emsley * Leonardo Flores * Jordan Freitas * Aide Violeta Fuentes Barron * Erika Fülöp * Tiffany Fung * Sarah Groff Hennigh-Palermo * Gregor Große-Bölting * Dennis Jerz * Joey Jones * Titaÿna Kauffmann * Haley Kinsler * Charu Maithani * Judy Malloy * Eon Meridian * Collier Nogues * Stefano Penge * Marta Perez-Campos * Arpita Rathod * Abby Rinaldi * Ari Schlesinger * Carly Schnitzler * Arthur Schwarz * Haerin Shin * Jongbeen Song * Harlin/Hayley Steele * Daniel Temkin * Zach Whalen * Zijian Xia * Waliya Yohanna * Zachary Mann
CCSWG 2026 is coordinated by Lyr Colin-Pacheco (USC), Jeremy Douglass (UCSB), and Mark C. Marino (USC). Sponsored by the Humanities and Critical Code Studies Lab (USC), the Transcriptions Lab (UCSB), and the Digital Arts and Humanities Commons (UCSB).

Arf Magna (2022 Code Critique) by Nick Montfort

edited January 2022 in 2022 Code Critiques

Arf Magna

Nick Montfort

HTML with CSS and JavaScript

2021

Platform: Recent version of a major Web browser (Chrome, Chromium, Firefox, Safari, Edge)

Live Version: https://nickm.com/poems/arf_magna.html

Possible discussion questions

  1. To what genre or form would you say “Arf Magna” belongs?
  2. “Arf Magna” declares that it is “after” Ramón Llull; how exactly do you understand the relationship of “Arf Magna” to the work and ideas of Llull?
  3. Do you see any importance to line 10 (the license) and the easily accessed source, and if so, what is it? How does it relate to the answer to (2)?

A Note from the Author/Programmer

Obviously I have some thoughts about these questions myself — I’m glad to discuss them, too. However, by asking for your thoughts I don’t mean to quiz you and see if you get the right answers to “Arf Magna.” I consider this an open work, with your interpretation of it as valid as mine.

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <title>Arf Magna</title>

  <!-- © 2021 Nick Montfort

Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty.
-->

  <style>
    body {
      margin: 0;
      overflow: hidden
    }

    #outer {
      height: 100vh;
      width: 100vw;
      background: #000
    }

    header,
    a {
      color: #fff
    }

    p {
      margin: 10px;
      font-size: 16px;
      text-align: right;
      font-family: monospace
    }

    #proposition {
      text-align: center;
      margin-top: 45vh;
      font-size: 7vh;
      font-weight: bold;
      color: #fff
    }
  </style>
</head>

<body>
  <div id="outer">
    <header>
      <p><span id="label">ARF MAGNA 
          after <a href="https://plato.stanford.edu/entries/llull/#FiguQuatPhasTheiFunc" target="_blank">Ramón Llull</a> 
          by <a href="https://nickm.com" target="_blank">Nick Montfort</a> 
          in memoriam <a href="https://i.redd.it/oe6xt37xhvd01.jpg" target="_blank">Pepys</a></span> 
        <span onclick="toggleFull()">⛶</span>
      </p>
    </header>
    <div id="proposition">(click to begin)</div>
  </div>
  <script>
    const a = 'delightful,playful,close,kind,loyal,cute,good,willful,warm,joyful,inquisitive,eager,attentive,cheerful,soft,love'.split(',');
    const b = '_,_,_,_,ty,_,_,_,th,_,_,_,_,_,_,'.replace(/_/g, 'ness').split(',');
    const freqs = [261.6, 293.7, 329.6, 392, 440, 523.3, 587.3, 659.7];
    var ac, oscNodes = [], gainNodes = [];
    var bell = 0, i = 0, j = 0, last = j;
    function toggleFull() {
      if (1 >= outerHeight - innerHeight) {
        let leave = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullscreen || document.msExitFullscreen;
        leave.call(document);
      } else {
        let enter = outer.requestFullscreen || outer.webkitRequestFullscreen || outer.mozRequestFullscreen || outer.msRequestFullscreen;
        enter.call(outer);
      }
    }
    function checkLabel() {
      if (1 >= outerHeight - innerHeight) {
          label.style.visibility = "hidden";
        } else {
          label.style.visibility = "visible";
        }
    }
    function note(freq) {
      oscNodes[bell].frequency.value = freq;
      for ([volume, time] of [[.2, 1], [0, 8]]) {
        gainNodes[bell].gain.linearRampToValueAtTime(volume, ac.currentTime + time);
      }
      bell = (bell + 1) % 8;
    }
    function start() {
      outer.removeEventListener('click', start);
      ac = new (window.AudioContext || window.webkitAudioContext);
      for (let n = 0; n < 8; n = n + 1) {
        oscNodes[n] = ac.createOscillator();
        oscNodes[n].frequency.value = 440;
        gainNodes[n] = ac.createGain();
        gainNodes[n].gain.value = 0;
        oscNodes[n].connect(gainNodes[n]);
        gainNodes[n].connect(ac.destination);
        oscNodes[n].start(0);
      }
      document.addEventListener('mousemove', e => {
        i = ~~(16 * e.pageX / window.innerWidth);
        j = ~~(16 * e.pageY / window.innerHeight);
        if (j !== last) {
          note(freqs[j % 8]);
        }
        proposition.innerText = 'dog’s ' + a[i] + b[i] + ' is ' + a[j];
        outer.style.background = "#" + (4194304 + ~~(16777216 / i + 1)).toString(16);
        previous = j;
      });
      document.dispatchEvent(new Event('mousemove'));
      setInterval(checkLabel, 500);
    }
    outer.addEventListener('click', start);
  </script>
</body>

</html>

Comments

  • I cannot speak confidently about Llull rings, but I get the sense that they aim to generate claims of universal truths by stringing together aphorisms… so you can make new “truths” based on formulae, like that joke: if the love of money is the root of all evil, and if time equals money, then loving time is the root of all evil.

    Arf Magna does something similar, taking things we all know to be unimpeachable truths (e.g., that a/this dog is cute) and recombines them to form new ones: if the dog is cute and the dog is loyal, then surely the dog’s cuteness is loyal ('dog’s ' + a[i] + b[i] + ' is ' + a[j]).

    It works on a couple other levels, too… for one, it’s like the bumper sticker “Dog is my co-pilot” insomuch as it takes Llull’s centering of God and God’s “Dignities” (and keeps the lack of an article “the”) to instead recombine Dog’s positive qualities (“const a”): rather than Goodness, Wisdom, Glory, Simplicity, Greatness, Will, Perfection, Nobility, Eternity, Virtue, Justice, Mercy, Power, Truth, Generosity, and Dominion, it is delightful, playful, close, kind, loyal, cute, good, willful, warm, joyful, inquisitive, eager, attentive, cheerful, soft, and love. (I suppose the Ars Magna was sort of an ancient bumper sticker generator.)

    I am unclear on how Llull rings articulate (each ring in a disc can rotate separately?), or how mouse movement analogizes to that… or why a “mousemove” would recombine a dog's (positive) qualities, aside from maybe “inquisitive” and “playful.” But certainly, I can agree that dogs are divine.

    Some questions:
    Do the colors and tones articulate randomly or is there a pattern I am missing?
    Why the adjectives/dignities “close” and “soft”?

  • To confirm, Raymond Llull's wheels are supposed to generate universal truths via combination. They often used letters that were abbreviations for particular virtues (or in some case vices). They, along with many spatial mnemonics, were ways for scholars and preachers (particularly Dominican monks) to generate new arguments and religious theses. If anyone would like to read more about these small-scale medieval technologies, Francis Yates' The Art of Memory is a good starting place.

    I also want to point out that "Arf Magna" is a lovely typographic pun. The "long s" is often visually confused with an 'f'.

  • Silk browser plays it perfectly!

  • edited January 2022

    I was surprised how deterministic Arf Magna appeared in repeatedly loadings (using Safari browser) as it always started with the same string of words. I assume Llull's wheels would have been used from a random starting place, but perhaps Llull would have reset them at a specific starting point? And from then on there is a combinatorial element?

    I also wondered about the use of the x and y coordinates to set the different words and the relationship of that to Llull? So I echo @Zach_Mann questions above.

    I was also wondering about the generated sounds, which seems very anti-Llull in many ways. :smile:

  • @Zach_Mann:

    Do the colors and tones articulate randomly or is there a pattern I am missing?

    Seems (mostly) tied to the y coordinate of the cursor, the tones in a pentatonic scale. I found myself seeking out melodies in it, which guided which phrases would pop up. But also, in Firefox at least, if you move the cursor quickly out of the main browser window, you get seemingly random chords.

  • I showed this to a colleague on Friday who said “so, this is sacrilegious?” I’m curious to know if anyone else had the same sort of response.

  • I launched the live version without even looking at the code. Funnily enough, as soon as I clicked to start it, my dog (who was previously sleeping) starting wondering what the heck was happening! Her ears were swiveling like crazy and she kept tilting her head from side to side.

    Personally, I thought it was soothing, but my friend sitting next to me said her ears were hurting and told me to turn it off.

Sign In or Register to comment.