Languages, Platforms, and Systems that Break from the Norms of Computing
Don't wanna be here? Send us removal request.
Text
I have yet to find a residency brave enough to let me perform this language, by continually rearranging all of their stuff
11 notes
·
View notes
Text
Escher Circuits: Using Vision to Perform Computation
In 2008, Mark Changizi, a Sloan-Swartz Fellow in Theoretical Neuroscience at Caltech, noted that the eye can make sense of complex relationships that often mystify the brain.
Our everyday visual perceptions rely upon unfathomably complex computations carried out by tens of billions of neurons across over half our cortex. In spite of this, it does not “feel” like work to see. Our cognitive powers are, in stark contrast, “slow and painful,” and we have great trouble with embarrassingly simple logic tasks.
Might it be possible to harness our visual computational powers for other tasks, perhaps for tasks cognition finds difficult?
In other words, could we trick the eye into performing computation?
Changizi proposed the Escher Circuit, "a special kind of image that amounts to 'visual software' our 'visual hardware' computes" merely through perception.
Escher Circuits work by creating different states corresponding to how the eye resolves ambiguous images. Its core component, the wire, holds a state of 0 when we perceive it as if we are to the right of it; otherwise, it holds a state of 1.
Although we can "flip" the wire visually back and forth in our head, it is difficult to hold both views at once (you can flip it easily by glancing at the 0 and then the wire, and then the 1 and back to the wire again).
READ MORE...
32 notes
·
View notes
Text
Monkey: the satirical Go package used unwittingly by Arduino and SalesForce
Collisions between the personal and the commercial in open-source have become familiar, like when an irate independent developer pulled a widely-used package entirely in 2016 bringing down hundreds of projects. But we don't expect a commercial enterprise to suddenly discover a package they have long relied on forbids any use at all—and does so for a very good reason.
This was the realization for dapr, a “portable, serverless, event-driven runtime,” with 14k stars on GitHub, when an issue was opened last week about its dependency bouk/monkey. Monkey's license, in its entirety, reads:
I do not give anyone permissions to use this tool for any purpose. Don’t use it.
I’m not interested in changing this license. Please don’t ask.
It raises the question: do even corporate entities read the licenses of packages they use? While Dapr was called out, Arduino, SalesForce, and hundreds of other projects also reference Monkey.
Monkey is popular because it fills a real need. It was created by Bouke van der Bijl, a programmer based in Amsterdam, who was eager to add monkey patching to Go. The feature is useful for tests where, say, a repo that talks to a database is swapped out for a component returning test data. The lack of this feature in Go is a testament to the language's resistance to adding the trendy latest features that have bloated languages like Python and C#.
However, adding monkey patching to Go is not a reasonable goal while respecting anything close to "best practices." Like van der Bijl's previous project, Gonerics—which added generics to Go—Monkey asks why this much-desired feature is not already part of the language, and then adds it by any means necessary.
The appeal of van der Bijl's work is in how far he is willing to go to get the language to work the way he wants. For Monkey, this is achieved with assembly-level fuckery predicated on the insight that running Go programs can modify their own binaries.
READ MORE....
20 notes
·
View notes
Text
Coding in Indigenous African Languages
The language Yorlang began like many code projects, with a group of programmers contemplating a what-if.
One evening after work, i was scrolling through the messages in a group chat that i'm in and i read a message by someone talking about how cool it will be to have a programming language in yoruba that can process the command "sope 'hello world' ". So, i thought it was cool and i decided to create a very small language.
With that modest intention in mind, Karounwi Anoulowapo (based in Nigeria) created Yorlang, a JS-like language using keywords drawn from Yoruba. As colleagues requested more features, he kept expanding it until it became a full-fledged language. Other Yoruba-speaking programmers contributed, along with some non-speakers who were excited about a programming language created by and for West Africans.
One of the major contributors to the projects is a guy from the Igbo tribe. He documented the architecture of the code, contributed helper functions to the language, and also made small sample programs using yorlang.
From there, Yorlang attracted more attention, eventually being featured on the BBC, alongside media devoted to creative technology, such as the podcast Artists + Hackers
READ MORE...
19 notes
·
View notes
Text
Fat Dactyls
If you make a language and are lucky, someone else will write code for it. If you are very lucky, someone else will find uses for it you never intended, or that even challenge the premise of the language.
This is not the same as using the language in an unexpected way. Urban Müller could not have foreseen brainfuck as the bedrock for a Rust-like language or a CPU. But do these projects truly counter brainfuck's premise? I would argue not. Brainfuck appears chaotic but part of its appeal has always been in conquering that chaos, in building efficient algorithms using the language despite the challenge. These projects counter the chaos of brainfuck, but that really is the appeal of brainfuck in the first place, they are simply taking it much further than could have been anticipated. If Müller had wanted brainfuck to be impossible to master, he would have designed the language much differently.
Sometimes, however, a language inspires work that falls very far from the intent of its original designer. Most esolangs, like mainstream programming languages, are open systems and don't dictate how programmers use them. C# offers many features to make structured code easy. But I can also write C# that looks like 80s BASIC wrapped in some standard C# boilerplate:
using System; class Program { static void Main() { _01: int b = 0; _05: string t = ""; _10: for(b = 99; b > 0; b--){ _20: goto _100; _30: t = t + " OF BEER ON THE WALL"; _40: Console.Write(t + ", " + t); _50: Console.Write("\nTAKE ON DOWN AND PASS IT AROUND, "); _60: if(b - 1 <= 0) { Console.Write("NO MORE BOTTLES OF BEER ON THE WALL"); } goto _80; _70: goto _200; _75: Console.Write(" OF BEER ON THE WALL"); _80: Console.WriteLine(); _85: goto _230; _90: Console.Write("GO TO THE STORE AND BUY SOME MORE, 99 BOTTLES OF BEER ON THE WALL"); _95: return; _100: t = b.ToString() + " BOTTLE"; if (b > 1) { t = t + "S"; } _110: goto _30; _200: Console.Write((b - 1).ToString() + " BOTTLE"); _210: if (b - 1 > 1) { Console.Write("S"); } _220: goto _75; _230: ;} } }
C# can discourage this—Visual Studio tried to reformat this several times, and it was full of red squiggles—but a determined-enough programmer can always reject the values of that language.
READ MORE...
5 notes
·
View notes
Text
What Programming Language Would Yoko Ono Create?
Secret Piece from Yoko Ono's Grapefruit (1964)
“The arts which today have the most vitality for the average person are the things he does not take to be arts” - John Dewey, Art as Experience
Esolangs are experiential works. As has been expressed since the earliest posts of esoteric.codes (reiterated in this twitter thread this morning), we engage with esolangs by writing code in them, which forces us to come to terms with their logic and with the behavior of the virtual machines they define.
This post is not about such languages.
This post is about languages that deliberately frustrate that experience. They make it hard to write code, not as a tempting challenge—like a Tarpit that promises Turing Completeness via strange machinations—but by absolute refusal. This includes languages where nothing is code or everything is, or where code can be written but carries no signification, or that otherwise break down that process of controlling a machine through a text or binary sequence. Many—but not all—are listed as Unusable for Programming on the esolangs wiki, which does not consider languages like brainfuck and Malbolge “unusable” but only (extremely) inconvenient.
The unprogrammables exist for our contemplation alone. They are no less experiential than the standard esolang; however, they move the experience of the language into the purely cognitive. In other words, they’re still very much esolangs—works that expand ideas of computing; many have weaker or non-existent computational class considered merely as jokes, dismissed without their ideas fully considered.
In this way, they resemble the Fluxus event scores, performance scores that range from the performable to the physically impossible, and like these borderline esolangs, also dealt largely in jokes. Considering where Fluxus went with these works can both give a means to better understand what these languages are doing, as well as point to other ways of engaging with these questions.
READ MORE...
3 notes
·
View notes
Text
Interview with David Madore
David Madore is responsible for one of the best-known and most-confounding esolangs of all time: Unlambda. The language is based on the SKI combinator calculus, a super-minimalist computational system used in the mathematical analysis of algorithms, but considered impractical for coding. In Unlambda everything is a function that takes a single variable, so there are no indicators like ()s to take parameters. Like the SKI calculus, it entirely eschews variables and the lambda indicator, and so is described as lambda-without-the-lambda. If this is entirely new to you, the second half of this post is a nice introduction. Madore, an accomplished mathematician, is also responsible for languages that play at the edges of infinity. His main web presence is his webpage from his undergrad days thirty years ago, which remains a fascinating portrait of the sincerity, optimism, and banalities of the early Web. He is also on Twitter with a handle derived from his engagement with The Hackers' Zen.
In response to a flurry of questions about creating Unlambda, Madore gives us some notes:
I think I came up with Unlambda in 1999. I knew very little about other esolangs at the time (and I still don't know much about them), that is to say, I knew a bunch of names but didn't try programming in any of them.
I was reading a book on logic that mentioned the Hilbert-style axioms (S: (A⇒B⇒C)⇒(A⇒B)⇒A⇒C; K: A⇒B⇒A; and I: A⇒A) and I was simultaneously thinking about the Curry-Howard correspondence between proof systems and typing systems, so I thought about what these axioms meant in terms of functional programming and how we could use them to re-explain the lambda-calculus without lambdas: this is how I came up with Unlambda. The 'c' function is because I was also fascinated by call/cc at the time (and still am, I guess), especially as it also has a nice interpretation in the Curry-Howard correspondence as Peirce's law (((A⇒B)⇒A)⇒A). The 'd' is clearly an error of mine, I should never have included it, it's unnecessary (I thought it might be, but it was a misunderstanding on my part of how normalization proceeds) and it makes the language far less elegant (on the other hand, it makes the interpreter's job a bit more complex, which is maybe fair for an obfuscated programming language).
At the time, I was thinking about proposing another obfuscated programming language in a somewhat similar flavor, where everything would be written in continuation-passing-style (no function ever returns), but never got around to it.
I think Unlambda got some attention from various teams writing compilers with multiple front-ends or stuff like that, or in compilation courses, because it can be an interesting test case, toy example or illustration.
I once had a page in Wikipedia because of Unlambda, but it was later decided that I wasn't notable enough. :-(
[Ed note: while Madore's page is gone, Unlambda's lives on]
READ MORE...
7 notes
·
View notes
Text
Interview with 100 Rabbits
Perhaps best known for their esoteric livecoding language ORCΛ, 100 Rabbits (Rekka and Devine) have a creative practice that seamlessly crosses from the esoteric to the practical. Living on a boat and relying primarily on solar energy, they create their own tools to avoid the impracticalities and wastefulness of commercial software. Their work has a rare coherence of thought and design that bridges art, code, and life.
» There is an idealism to many of your projects that reminds me of the early Web or perhaps the Amiga era, with a sense that anything is fair game to be re-thought; from the recipe site grimgrains with its unusual sign to even representations of time and dates with Neralie and Arvelie.
This extends to the tools you adopt by others, like Plan 9 and Gemini, that are not as widely used or supported but are built on better logical or aesthetic principles.
I'd like to begin by asking you to describe a bit of your creative philosophy and process as a team.
Our development philosophy comes down to a strong belief that solving problems is more efficient than looking for solutions.
I say this to mean that, based on personal experiences, searching for a password is more expensive and less fulfilling than cracking the safe itself. It does mean reinventing the wheel many times over, but the process has led us to many unforeseen places, often in areas we had previously taken for granted, or considered solved.
Orca x Ronin
Philosophy
We will always choose a lesser home-brewed tool tailored specifically to our own needs, over a better generic tool that we have not built and do not understand. This scenario is often called the "Not Invented Here"(NIH) syndrome. It's a choice we made that works for our unique financial situation, but it's not something that we advocate for, or that we think would scale well in for-profit environments.
» Orca is an esoteric language. It is also a live-coding environment, which means what it is esoteric to is a different set of behaviors, mainly languages designed for performance, with programs that can be altered as they run. This crossover is unusual, and I'm curious first could you describe how the idea of Orca evolved?
For instance, was the idea of each letter corresponding to a command part of the original concept, or did it grow from experiments?
Orca was first a terminal utility designed to simulate moves on a game-board to help with the development of a project called Markl, in which the state of each character is represented by a single character.
The simulator was later re-purposed into a demake of Pico, a color-based game created a few years prior. This early iteration of Orca included some of the operators that are still part of it today. As the Pico playground became more popular, people started to point at the name and its overlapping with that of Pico-8 so the name was changed.
READ MORE...
0 notes
Text
KFC Mascot Col. Sanders Talks Malbolge Programming on General Hospital—Wait, What?
"I was once cursed by a warlock," says Col. Harlan Sanders, in not even the most unhinged moment of this ill-conceived piece of product placement on General Hospital.
Sanders is visiting character Maxie Jones to request she secure his secret recipe (all 11 herbs and spices), which had been threatened by a bomb Sanders himself defused using the classic esolang Malbolge. Unfortunately, this all happens offscreen.
Damian Spinelli, mentioned by Sanders, is a private investigator / hacker who General Hospital's casting describes as a mix between Seth Green and Sean Penn's Spicoli (as if we couldn't get that from the name). Spinelli is unable to defuse the bomb, not knowing Malbolge, but Sanders had picked up a little of the Turing Tarpit as one randomly does (without learning how to pronounce it) and saves the recipe from being incinerated.
Sanders apparently feels no reservations about then asking Jones to then hide this recipe which has attracted this violence, which she does without question.
READ MORE...
7 notes
·
View notes
Text
xchg rax, rax
Assembly code can appear mysterious to the uninitiated. Aspects of the physical machine abstracted away in higher-level languages are referred to directly in its terse commands.
This chapbook of minimal assembly code poems (its author refers to them as "snippets") offers no solutions, context, or explanations to ease this gap, leaving the work of deciphering to the reader. For xorpd, its pseudonymous author, this is exactly the point: to immerse the reader in the machine level of code.
When working inside a computer, everything is eventually made of assembly, so this is where you go if you really want to understand how things work.
There is no extraneous word of text in the book to break that context. The title, xchg rax, rax, is a NOP instruction (pronounced no-op, for no operation): xchg exchanges the data of two operands, in this case of rax with itself. The author's name, xorpd, is a bitwise logical XOR (exclusive or) of packed double-precision floating-point values.
The xor logical operation is one of my favorites. It is the foundation for most of our modern cryptography.
The "xorpd" instruction allows xoring 128 bits at a time. It is really the kind of instruction you want to be when you grow up.
READ MORE...
60 notes
·
View notes
Text
Turing Paint
An annotated Busy Beaver program in Turing Paint
One doesn't so much write a Turing Paint program as scribble it, preferably in MSPaint.
Think of it as Piet meets the Turing Machine. Where Piet uses colors to indicate commands, it also essentially a Funge, where the instruction pointer is sent left or right, up or down via a command (indicated with a relative change in color). In Turing Paint, those directions are determined by paths marked in black, similar to the lines of an AsciiDots program.
However, the real charm of Turing Paint is in the crudeness of its programs' visual design, where programs can be quickly scribbled doodles, so long as the logic is correct. In fact, the more basic the editing tool, the better: anti-aliasing, on by default in most imaging programs, causes interpreter issues. Turing Paint creator Byron Knoll, a software engineer at Google, suggests writing programs in JSPaint, which simulates MSPaint in the browser.
The language is a simulated Turing Machine with a tiny set of instructions, fewer than brainfuck. A green spot marks the beginning of the program flow. The first spot encountered after start or an intersection writes 1 if red or 0 if blue. It is followed by another spot, which moves the pointer in memory to the right if red, left if blue. If red and blue spots are mashed together, this indicates a branch. If the value currently pointed to is 0, it will follow the path extending from the blue spot, otherwise the red for 1. Yellow spots let the paths cross over other paths without interacting. Black regions (the paths) never split on their own, always at one of these red/blue branches. A loop can be formed by drawing a black line back onto itself. That is all it takes for Turing Completeness.
READ MORE...
10 notes
·
View notes
Text
Oak
Oak is a rust-like language built on esoteric-inspired architecture. It was conceived as an alternative to C according to creator Adam McDaniel:
I wanted a language that had all the elegance of C, such as the potential simplicity of the intermediate representation, without all of the things that make C ugly and dangerous. I added stricter type checking rules to prevent simple memory errors, and a lot of the ugliness and difficulty of writing C code went away.
Its tiny back-end, built on experiments with brainfuck, is "infinitely more portable" than C. Even the smallest C compilers, designed for highly constrained environments, have around twice the number of opcodes that Oak relies on.
READ MORE...
3 notes
·
View notes
Text
Computing with JS's undefined
Why use numbers or true or false in JavaScript when you can just simply use undefined for ALL values?
From reddit's esolang subredit
Let's break down what the above code is doing, and how it all works. JS is loosely typed, meaning values of one type can be used as another (this is called type coercion). Something that is not true or false will adopt a truth value when used in that context. The first example below is comparing a value with the same value, which we expect to be true. What is odd is that adding undefined to the result will then make it false (undefined is "falsey"):
(undefined == undefined) == true // undefined is equal to itself (undefined == undefined + undefined) == false // undefined is falsey, and we've added it to a truth value
Once we have truth values, we can add them together, to get integers:
(true + true) == 2 // equivalent to this below: (undefined == undefined) + (undefined == undefined) == 2 // the initial assignment to j: (false + false) == 0 // equivalent to this below: (undefined == undefined + undefined) + (undefined == undefined + undefined) == 0 // the initial assignment to output: (false + true) == 1 (undefined == undefined + undefined) + (undefined == undefined) == 1
Keep going down this road and you'll end up recreating JSFuck.
READ MORE...
3 notes
·
View notes
Text
Classical Chinese as a Programming Language
In the previous post, David Branner's insights helped explain the expressiveness of code in Wenyan, a programming language built on Classical Chinese. However, Branner's own research shows parallels between Classical Chinese and programming languages that already exist within the language. Specifically, that "Classical Chinese grammar has approximately the order of formal simplicity of a programming language, rather than that of a natural language."
This unusual feature comes from a fluidity in its parts of speech. In English, we can verbify a noun: "knife" someone or "book" them, etc. Classical Chinese goes much further; there all verbs can be nouns, and nouns, verbs.
The transformational grammar for Classical Chinese is thus very different than that for English. In analyzing an English sentence, we have rewrite rules such as NP→Det N, meaning a noun phrase can be replaced ("rewritten") with a determiner + a noun. Additional rules might give us Det→"the" and N→"person," ultimately resolving our noun phrase to "the person." Because of its fluidity of speech, Classic Chinese adds recursion, with circular patterns like the grouping of V→N and N→V.
READ MORE....
4 notes
·
View notes
Text
Wenyan-lang
The Wenyan-lang Hello World program reads like this:
吾有一言。曰「「問天地好在。」」。書之。
Even those of us who don't understand the characters can likely recognize it as a form of Natural Language Programming—a programming language whose code mimics prose—in its wordiness and its structure as sentences. In fact, Wenyan is built on its namesake, Classical Chinese (or Wényán), the written form of Chinese used from the 5th century BCE to the early 20th century. Because Wenyan-lang's inventive feature occurs in the nuance and humor of its multicoding between Classical Chinese and code, as a non-reader, I am exploring this language through the insights of others. Yidi Tsao, a Berlin-based artist, curator and writer, explains that the text the Hello World actually prints (you can see it between the quotes 「「 and 」」) translates not to "Hello, World!" but closer to "Greetings to Heaven and Earth."
The humor and poetry in its engagement with Wényán become more clear in longer examples. In the 99 Bottles program below (translated and notated by Tsao), beer is replaced with the more era-appropriate wine:
吾有一言。曰「「春日宴。」」。書之。 I have a word, called “spring feast”.
有數九。名之曰「酒數」。 There are nine numbers. I call it "wine number". (note: 九 nine and 酒 wine are homophones in Chinese.)
恆為是。若「酒數」等於零者乃止也。 It is always like that. It only stops when "wine number" is zero.
吾有三言。曰「「與君」」。曰「酒數」。 I have three words. one is "with you". The other is "wine number".
曰「「杯酒。可以窮歡宴。綠酒一杯歌一遍。」」。書之。 It says, "glasses of wine. All the fun of the feast. A glass of green wine then a song."
減「酒數」以一。昔之「酒數」者。今其是矣云云。 Minus one from "wine number". Previous "wine number", now is this.
吾有一言。曰「「綠酒千杯腸已爛。」」。書之。 I have a word. It says "thousands of glasses of wine. my stomach is done."
The phrases came from a poem called "to Wang Han Yang" by Li Bai, who is famous for his drinking habit, also the greatest poet in Chinese history. :D
READ MORE...
6 notes
·
View notes
Text
Open and Shut
How would you write text on a laptop without touching the keyboard at all? Have you tried opening it and slamming it shut repeatedly?
Open and Shut is a bash script that allows you to do exactly that. It turns the laptop into a telegraph key, where you push the computer closed to mark dots—or for longer durations to mark dashes—and pause in the open state to start a new letter.
Jesse Li, a computer science student at Swarthmore College, created this while holed up in his childhood home, a creative piece coming directly from the downtime of the caronavirus quarantine. He describes how the project came together:
The idea has probably been simmering in my unconscious for quite a while. Some of my friends at college are weirdly into Morse code (they don't even do amateur radio! Or anything that requires Morse code!) so about a month ago I enabled the Morse code mode on my phone's keyboard and tried out Google's Morse code trainer.
A few days ago the idea just popped into my head while I was doing a reading assignment for class. I texted my brother right away and got to work testing if it'd be technically possible.
READ MORE
12 notes
·
View notes
Text
Gottlob: Write Code in Frege's Concept Notation
In 1879, Gottlob Frege wrote the Begriffsschrift, an attempt at a logically perfect language. Begriffsschrift is often translated to "concept-script," essentially a formula language, an arithmetic for pure thought. It was intended as a "system of evaluation that will make it a mechanical task, once an inference is expressed, to determine whether or not it is correct and gapless," as Joan Weiner puts it in Frege Explained.
This new system clarified and dispelled ambiguities of language that had seeped into logical analysis, making it easier to differentiate logical relationships apart from the content of the specific claim being investigated, more or less founding the movement of analytical philosophy. However, where Frege's legacy was huge, his notation system was never widely adopted. Frege saw it as simple, but others found the bars and the mix of German and Greek characters overly ornate. Only a few disassociated symbols from Frege's system are still in use, such as the turnstile ⊢ operator in symbolic logic, meaning "provable." But there it has been stripped of its context: in Frege's system, it sits at the upper left of all his diagrams (see the two images above), serving as an entry point to an assertion and the propositions used to evaluate it. So granular was Frege's design, he ascribed meaning to both its marks. A horizontal line alone refers to a combination of ideas, it's the vertical mark that indicates that the resulting combination can hold a truth value.
While the notation system may not been practical, it is a Turing Complete system that could theoretically work as a programming language. Matthew Dockrey, intrigued by its aesthetic while investigating Frege for a book, decided to actually implement this concept-script as a runnable language. He named it Gottlob, continuing the tradition established by Piet of adopting its subject's first name, when their last name has already used for a rather boring, non-esoteric language. Dockrey describes it as if from an alternate computer history:
To not only watch someone inventing a modern logic system from scratch, but to come up with such a unique formalism in the process really captivated me. I immediately started thinking about what it would have been like if his notation had caught on... I really wanted this to feel like something from a different timeline, so I tried to stay as faithful to Frege's paper as possible... Even when it came to quote marks for strings, I went with the central European chevrons instead of English "inverted commas", just to make as clean a break from established conventions as possible.
READ MORE
34 notes
·
View notes