Future of Coding - Making Your Own Tools: Devine Lu Linvega
Episode Date: February 4, 2020We live in a world that is gradually becoming more closed off, more controlled, more regional. Our relationship with technology is now primarily one of consumption, buying new hardware on a regular cy...cle, using software conceptualized to meet a market need and fulfill promises made to venture capitalists. It's common to hear people talk about both computing hardware and software as though they were appliances, not meant to be user-serviced, not meant to be modified. The tools we use are being designed for the 80% who live in a city, use grid electricity, want to keep up with the industry, and have an unacknowledged learned helplessness about the limitations of their tools. Devine Lu Linvega and his partner Rekka live on a sailboat. He makes art, music, software, and other cultural artifacts. When Photoshop's DRM required that he maintain a connection to the internet, he wrote his own creative suite. When his MacBook died in the middle of the ocean, he switched to Linux with hardware he could service. His electricity comes from solar panels, and every joule counts — so that's out with Chrome and Electron and in with Scheme, C, assembly, and maybe someday Forth. I wanted to interview Devine with a main focus on just one of the dozens of tools he's created over the past few years — Orca, a spatial programming environment for generating synchronized realtime events. It's ostensibly a tool for music, but has been applied to all sorts of other disciplines in wildly creative ways. Devine and I ended up talking for over three hours, and after editing out everything superfluous there was still too much matter for just one episode. So we're going to take this in two pieces. Today, you'll hear the bits of our conversation that covered everything other than Orca — Devine's philosophy, the stories of his other tools, the ways in which boat life have forced certain technology choices on him. On the next episode we'll have the rest — a deep dive into Orca, covering the thinking and story behind the design of the tool, the community that has picked it up and run with it in all sorts of wild directions, and lots of little nooks and crannies in the space around this fascinating project. My hope is that the topics discussed today will let you see from Devine's perspective, so that when we look at Orca in detail you can appreciate exactly why it is the way it is, and take away valuable lessons for your own projects. Given that his most recent explorations have been making art and programming tools that run on the NES, the best quote of the show has to be: "I never want to have a stronger computer than the one I have today." Links Devine Lu Linvega is our guest. He and his partner Rekka funnel their lives and creativity into Hundred Rabbits. Devine has created countless tools, but Orca, Ronin, Left, Dotgrid, the 1-bit drawing tool Noodle and it's 3D scene layout tool Poodle are particularly fascinating. His website is like a wiki, a time tracking tool, and an alternate universe. Devine released a series of beautiful illustrations for Inktober. Repl.it is our Sponsor. Email jobs@repl.it if you'd like to work on the future of coding. Folks interested in energy-efficient spatial programming should watch this Strange Loop talk by Chuck Moore about the Forth programming language. Potentially similar projects include Inferno and ChrysaLisp. The resilient, living systems of Dave Ackley are also fascinating. The transcript for this episode was sponsored by Repl.it and can be found at https://futureofcoding.org/episodes/044#full-transcriptSupport us on Patreon: https://www.patreon.com/futureofcodingSee omnystudio.com/listener for privacy information.
Transcript
Discussion (0)
Welcome to the Future of Coding. I'm Ivan Rees. We've been on hiatus for the last half year,
and I am pleased to announce that the podcast is back. I've spent the last two months planning,
recording, and editing a slate of new interviews, and I'm very excited to share them with you.
That's the good news, but you might be wondering why you're hearing from me
and not your regular host, Steve Krause.
Well, that's the bad news. Steve decided to step back from his role as chief podcaster and
organizer of our community, and he appointed me as his successor. I'm sad to see him go,
humbled that he asked me to take over, and hopeful that you'll stick with me as I find my footing. The backbone of the show
is the guests with interviews that dig deep into their thought processes, how they see the world,
and how that manifests in their work. I want to continue the tradition of highly technical
discussions about computer science and toolmaking and broad exploration of things people do with these tools, whether that's science,
the arts, or education. I also want to create a new space for some of the people in our future
of coding community to share what they're working on, and you'll hear more about that a little later
this spring. One area where I will be investing a lot of effort is the production values, like the
audio quality, the show notes,
transcript, and the sonic identity of the podcast. You'll notice a new sound at the beginning of
episodes, which I'm calling the startup chime. I think it's a fun way to aurally invite you to
the episode. It also opens up the possibility space a bit, allowing other sounds than just
the voice to be a part of the show, and you'll
see what I mean by that in the next episode.
My goal is to release at least one new episode every month, or more if time and my life allow
it.
And now, on with the show. My guest today is Devine Liu-Linvega, an artist, musician, and programmer from, well, everywhere.
Devine has spent much of the past few years living on a sailboat, and as you'll see in the interview,
this gives him a very unusual perspective on software that feels both decades behind and decades ahead of our contemporary practice.
My conversation with Devine lasted more than three hours, so I've decided to split the
interview into two pieces. Today, you'll hear about the large ecosystem of tools Devine has created,
how they're a reflection of his personal values, how he decides when to build a new tool,
and how these custom tools let him make decides when to build a new tool, and
how these custom tools let him make very unique art, music, websites, and more.
On the next episode, we'll do a deep dive into just one tool, Orca, a wildly unique
visual programming environment that is ostensibly a tool for music, but has also been used for
things like procedural animation and robotics, with an
aesthetic that feels like a video game from an alternate history where the Macintosh was never
created and DOS terminals ruled the earth. Devine and I talk about the history of the project,
picking apart a number of nuanced design decisions along the way. We also hear how Devine found a
user community that embraced Orca and pushed it
in all sorts of new directions, how he landed a massive breaking change to the syntax of the
language, and of course, lots of technical details about how the tool works. To start the discussion
today, I asked Devine to explain how his work relates to his view of the world, and he responded that it's all about context.
Throughout our conversation, you realize that while all of these little projects that I'm
working on seem like different things, they're really not that different. Like the connecting
thread that you'll find in one and the other, it's what I usually call context. I spend quite
a lot of time just building tools that would allow me to
share context. In most cases, in the work that other peoples do, if they had dedicated a tiny
bit of time to share the context, that would make the things more understandable and exist as a part
of something bigger. Because I hate consuming things as separate little planets. What I like
is to get a better sense of the whole ecosystem of someone's reflection and also you know like your favorite musician you look at you listen to their music
and you're like wow what kind of person could be behind this and even if the artist didn't decide
to be truthful about who they are and what they do even building some sort of narrative around
their work I find is a way that communicates some context that makes the work more enjoyable and also long lasting.
I mean, we're people who think in stories, especially today with Twitter and Facebook and all these things that just try to take the context away from people's own personal websites into their own silos.
It's harder and harder to kind of like appreciate the full picture of the work.
I'm glad that you mentioned people having their own websites because your website
is fascinating as opposed to a lot of people who are doing work on the internet where these days
for programmers, the norm seems to be that you have a GitHub pages website that has a couple
of pages on it or a blog or something like that. Your website is more like a wiki, but a wiki that
only you get to edit, which is a really interesting feeling for
being invited to explore somebody's work. It's something that I'd love to see more of
where like you're saying context, each of your projects is presented as here's what
this is, here's why I made it. And then links to other projects that are used by this project
or vice versa. You try to make the connective tissue between your work really visible. One of the things that you've made is your own system for,
um, uh, like how do you say this? Your own encoding of time, like your own sort of calendar
and your own clock and that sort of thing. I, I, I, I was like, I know where this is going.
Yeah. Yeah. Yeah. I think a lot of people see them and they was like i know where this is going yeah yeah i think a lot of
people see them and they're like oh this is too complicated you know like your mind just kind of
like erases them but um it's actually pretty pretty clever it's not a system i made up um
for for so it's just a system i i found which i was like wow somebody found something that is
like made this some this thing that is just brilliant. I think it's, it's maybe like 400 years old.
Huh?
Well,
so I have two systems,
right?
I have a time system and a date system.
So the date system is the alphanumeric thing.
So it's like,
it breaks down the year in 26 periods,
26 months,
I guess,
of 14 days.
So what you end up with is that you have from a to z and every letter of
the alphabet is a month and you have 14 like days yeah that you can and i just found that it was
like the best scrum period or something like like you can start a project prototype it in two weeks
you have some a working copy and at the end of the letter you can decide well is it still worth you know bringing bringing
onto the next month i find just you can expect this month to be equally the same amount of days
is a good way to to do work basically that makes a lot of sense um i i wouldn't have
thought that it had that practical merit to it. Because here I am thinking like, if I were going
to adopt a system like that, it would be purely for the aesthetic reasons. It has a very different
feeling from the Gregorian calendar. Yeah, that's usually not a good approach.
The aesthetics of it can take you in, but you have to find a reason that would make sense in
your workflow. For me, counting on my knuckles for the number of days in a month,
I didn't find that super practical.
And I'm not super tied to the lunar phases.
So I guess I was like, well, maybe something more predictable would be neat,
especially in the kind of work that I do, which I don't have.
Like weekends are not any different than weekdays.
I just found that was a really elegant system to work with.
For the time, I think it's called the swatch time or something.
You know, like there's a company, like they make your watches and...
Yeah, swatch.
Yeah, so the swatch made a time system that is decimal.
It's just very simple.
Noon is 500 and 999 is midnight.
It gives you a tiny bit more granularity during your day
and just working with this i found it was really nice i usually work with pomodoro systems
and i have a pomodoro of 30 beats which is the swatch time i preferred 30 beats over 25 minutes
it's easier to break down in shorter periods. That's just a personal preference.
From the way you've described both the date system and the time system,
you've emphasized that it helps you organize your rhythm of work. How serious are you about
organizing the time that you spend working? Is it something where if you don't have those sorts of structures, you feel a bit rudderless, um, to make a terrible pun? Was that a bold pun? Yes. Yes.
Um, or is it, uh, is it the sort of thing where you find it adds cohesion? What is it for you
that, uh, that draws you to those sorts of ways of organizing your time? Well, it's multiple things.
So one thing is that I'm terrible with time.
So let's say, you know, like during these past four years,
I made like, let's say, one or two games,
and you'd ask me like,
oh, so how many time did you spend working on those games?
And I would say, I don't know, I would just make up a number
that sounds like it would make sense but but I would I would actually have
the data so usually when I look at the data and after like just putting out a random number I
realize that I have no sense of time like my my understanding of how something takes is terrible
and also even like how enjoyable something is like I have a way of tracking that gives me a bit of an
of an idea of how focused i
was doing something and that's kind of correlating a little bit with how invested i was in doing that
thing at the time and sometimes i'm like oh yeah that project was had a blast it was great and i
was like really into it and but then i realized that actually i had other projects that were
way more appealing at the time and i would in which I was way more invested and keeping track of these
little things, understanding that I am terrible with remembering how much time things took and
how I appreciate doing these things. Now at least I have some like some data I can rely on.
So I, well, if anything, I can use that to plan. So if I want to start something new,
I'm like, well, there's no way I can do this in 200 hours because last time it took 400. I might have a sense that it's doable, but the data that I have clearly says that that's impossible.
Do you feel like the data that you're collecting is helping you make more accurate predictions about how you're going to work and how you're going to feel?
No.
Yeah.
Interesting. no yeah interesting so it sounds like it's um it's enjoyable to have that data because it helps
you reflect it would be interesting to look back on a project that you'd worked on and think right
now i feel like that project was a blast and it was wonderful and then you look at the data and
go oh but i actually felt terrible while i was working on it like i could see that being
interesting but it doesn't help you look at a new project and say, I think I'm going to
feel good about doing this one. Not really. So that's the whole thing about tracking.
I think it might help in subtle ways. It definitely has worth that I can't really
explain. And it's worth is definitely not that it helps me not make mistakes.
Like the whole quantifiable self and that kind of way of doing things.
I absolutely, I do rigorously every day,
but I know that it doesn't really work that well. For instance,
these kinds of systems are really bad at looking ahead. Let's say like, okay,
so you discovered like 16 new music album and you watched 13 movies
and you read three books and like a book correlates in like 16 hours of output and movie like seven
and a video game like 12 well the thing is that these systems always look backward i made tools that would make prediction but the only thing that it can tell me is that
it can look back really well but it has a really hard time figuring out where i'm going and what
i should be doing which is fair i mean so basically the way i did it is like well you know like these
past few weeks i have a sort of trend in my productivity and i can decide to
do the thing that the system thinks would bring me back to my average productivity in a specific
sector so let's say like i usually have you know 16 hours of music per week well if i'm under this
more than the under under the amount of hours i do in visual sector then it will say like well
tomorrow if you're doing audio by your average productivity
and the way you do output would be your best,
your most productive sector or like domain of,
I guess, work.
So I can decide to follow it
and that would reinforce that pattern
and I can choose to not follow it
and create new patterns.
The statistics from following or not following is not so far from 50%. So like, it's not that much better than doing whatever the
hell I want. So just, just to get clear on this, you're also tracking whether or not you follow
the predictions that your tool is giving you based on the data of what you've done in the past. Yes. That's amazing. That's very cool. It's neat to hear that it's 50-50. Yeah. And I mean,
I look at other tracking system and I'm always kind of looking at ways that they might, I might
have overlooked something, but yeah, it's, it's, I mean, we're fluid like creatures and sometimes
like the Inktober.
Inktober is an annual event that happens in October where people create a new work of art every day and post it to social media.
I decided to do Inktober this year and that just breaks all patterns.
This is just, I'm going to pay for this for the next few months.
I decided that I would invest four hours a day
for a whole month well for like for two uh so so for four weeks i would um i would do this one
sector even though the system would increasingly shout louder in my ear that i should do something
else i i went through this but what's going to happen is that's going to create a precedent
that just raised the number of hours that i can physically invest in in visual arts like but but that was totally enjoyable like
i didn't i mean i don't feel bad at all of having broken that pattern and that kind of served as a
sort of experiment that i might be able to use in the future anyways but there was no way that
the system would have predicted that would have done that and not having done this i think might
have been more costly in my general output.
There's no way of knowing where you're going
and why you're doing anything.
So you might as well just, whatever,
like you can have a look and make a decision
and play along or just follow your own intuition.
But for Inktober, I feel like I did the right choice
of not listening to my system.
This is interesting to me
because it gives me another way to look at your work.
You make a lot of tools, and those tools are all very small and very focused,
and they sort of interact with one another in interesting ways.
It sort of feels like these tools are collaborators of yours.
Hearing you talk about your relationship with the way you're tracking your use of your time,
building tools to make predictions for it
that tell you how you should spend your time.
To me, that sounds a little bit like you're creating
like another agent that you're collaborating with.
And that agent is very rudimentary
and it's based sort of on like an echo of,
of what you've done in the past, but it's still fulfilling some of the roles that you would get
from say, you know, if you're in a band, your bandmates are going to impose similar sort of
constraints on how you should spend your time. Like they might say, you know, we have a gig
coming up in a week and our set is terrible. We need to book a lot more time rehearsing over the next week. Or somebody might say, I'm going away to live in South America process, like that feels sort of similar to this.
Is that how you relate to it?
Is that what it feels like for you?
Or is it something else?
Well, the wiki is a completely different tool
than every other tool that I made.
But that one tool is kind of like a project manager,
like what you're describing.
Like it's like, oh yeah,
you think you can do this in 200 hours
well you have no antecedent of having being able to do that in this amount of hours so like why
would you even and and and in this it has a sort of like prescriptive uh i don't know like a
reminder the other tools that i make usually i don't see them as collaborators they're more like
you know they're just like tools they're're just there to get me someplace with the least amount of friction imaginable.
And you don't relate to them in a way that sort of, earlier in our conversation,
when I sort of said like the reason I would adopt an alternative system for dates and times
would first of all be about the aesthetics of it.
You sort of scoffed at that. Is it that you don't really like imprinting agency
or imprinting sort of like a humanity on inanimate things?
Oh, no, no, no.
I absolutely love anthropomorphizing things,
especially the ecosystem that we created as Underrabbits.
We've given like little character faces
to all the apps that we made,
and that just reinforced this sort of like personality that the software might have when i look at ronin i i see the character that's
kind of like a bit dreamy and lost and kind of like hazy little creature but the orca is more
like a trickster and also like a sharper kind of thing and but but but my website I don't have this sort of attachment to it. It's more, I guess I'm part of it and of me kind of thing.
So it doesn't feel like an external force.
It's more like a mirror.
Yeah, like maybe the mirror in Snow White, I guess.
I do my own sorts of time tracking just for tracking my hours for my job. And when I look at how I've spent my time, it feels a little bit like looking in a compost bucket. Like these are all the, you know, the remnants of the things that I've been eating over the last day or two. with the computer where it's telling you what to do because you told it to tell you what to do.
But at the same time, you have to look at that and say, no, but like you said, when,
when doing inktober that you were going to pay for this over the next couple of months. And I'm
wondering like, what does that mean? Where does that come from? Like, why would you think like
you're going to pay for this? Like that sounds, that sounds punitive. Where's that mean where does that come from like why would you think like you're gonna pay for this like that sounds that sounds punitive where's that where's that feeling of
punishment coming from all right so if we look okay so for audio for instance so let's say well
you'd write music as well i think so you know for me music is like the best music i get from
holding off making music like the like the it has a sort of like a really strong,
like the best music I've written,
I've written after not making music for as long as I could.
So like if I gave in every single day to writing music,
I would have a poor output,
poor general output compared to if I,
I have an idea,
but I just let it ferment in my head for as long as I could.
And then when I just feel like I'm ready to burst,
then I actually do it.
And then I found the most focused, productive periods that I had,
especially for music, because this sector for me is kind of unique in that sense,
has been after like holding out for as long as I could.
Visual, so for
the inktober usually I usually draw a little a few times a year and that is it but I still like
so my impression of visual arts is that you don't really explicitly need to be doing it every single
day to get better I might not draw for two months but the next time two months later I draw
surprisingly I feel like I have improved.
It could be for my eye having gotten worse and my appreciation of things gotten more accessible.
But no, like after a while, just looking back, I feel like, no, there definitely was an improvement.
But I feel like it came from other sources than actual direct drawing.
And if I start to cheat these patterns that I have like if I just decided you
know like let's forget that I need to hold off writing music to actually get good work out and
I'll just spend an hour making music every single day which I tried it took me a while to recover
to be able to write music of a good enough quality again and and for Inktober my fear is that this
would extinguish the already small flame that i have that makes
me draw in the first place by just like draining it dry i feel exactly the same way about the music
that i make and also the programming that i do when i need to do programming that is not just
bugs that need to be fixed or features that need to be implemented, but, you know,
difficult design work that needs to be done or abstractions are not what they should be. And I
need to come up with a unifying concept. That kind of work is very similar to how I feel about making
music, which is exactly what you've described. There's only so much of a flame that I have for it. It's very easy to extinguish that.
And it takes a while to rekindle.
Do you also feel that about your programming?
Or is the way that you relate to programming different yet again?
Yeah, the way I relate to programming is different.
I can do endless maintenance.
So I use that.
Actually, I found that a good way to hack music writing.
Okay, actually, I guess that's a good way of hacking anything.
I noticed that I have endless patience for maintenance.
So the more I can offload into the maintenance sphere,
the more I can sneak in a bit of music, a bit of visual arts into my things.
And that's a fancy way of saying that somehow automating boring things
is actually efficient like I don't think I would have been able to get through Inktober by sheer
investment of time in drawing after five days I was already done I was like that's it there's no
way I'm going to be able to keep moving forward with drawing I had to offload a bit of the visual
tasks into the maintenance thing so what I started to do is I made a tiny tool to do the Inktober.
It was just a drawing tool.
And like, you don't need much, right, for a drawing tool.
It was just like 100 lines of code.
But every single day I found when I went to bed, I thought of both my illustration and
a technique that I would want to use.
What I did is usually I would make a tool designed specifically
for that technique so I could draw that picture and just the shifting the sort of like
the mindset from maintenance to drawing and back and forth allowed me to survive throughout the
months because otherwise from just drawing I would have run out of the juice from the beginning.
That's something I've been kind of testing with recently. So Orca was a good way of hacking back into music. So what happened a few years ago is that I
completely extinguished the flame that I had for audio. There was, you know, like a subsequent
show that I was playing and then I started to write more music than I could afford.
And what happened is that I just ran out of ideas. And when that happened, I thought maybe I'll never be able to write music again.
But Orca was a way of gradually rekindling that flame by just sneaking audio tasks via programming.
So I would create little programs that would inspire music, that would inspire the audio mindset.
And gradually that came back and i've
orca basically revived the flame that i had for for sound and music and all this just just by
hacking tapping into the sort of like maintenance little low hanging fruit programming things that
i had in mind i think i get the the feeling you're describing and the and the drive that
you're describing but i wouldn't use the word maintenance i want to drill into that slightly to see if we're feeling the same thing okay so
you know like the the time tracking system that i have that it has three three numbers so every
single day for as for output i track using three numbers like a little code you know like 345 and
127 the first number is is the sector, so either audio-visual or programming.
The second number is
the vector of
extroversion and introversion
of the task.
Showing something would be
an extroverted task, and watching
something is an introverted task.
Maintenance, when I say maintenance,
basically it's the shorthand that I use
for saying something that is introverted so like something that doesn't really change
like let's say if if we if we looked at that vector from like you know plus 10 and minus 10
where it's at near zero you get these tasks that don't really move the project forward i am very
comfortable at in this space i can spend countless amount of time doing tasks that are
basically just maintenance, just improving, reflecting on how the thing is built or even
generally building tools instead of building an actual game. You know, like it's like the easiest
way of procrastination. You could directly attack a problem or you could spend an endless amount of
time making an engine for getting the thing. So in the sense of getting an end product that is a game making an engine is like a super kind
of introverted task because this is not going to be front-facing and i am i could do that's where
i could act in that space forever so when i'm out of juice basically of like direct action juice
basically i just try to like exist in that space and be productive in this sort of maintenance
stuff and usually it's good for kick-starting a new project or just getting myself back into a
state where i can do finished projects are there kinds of programming that you have to do that
don't feel like maintenance and if so what kinds of programming are that i I find game design, level design, uh, animation, like a assets animation,
right. In a game, this sort of programming is, I find it's like a very, very direct,
like you tell the computer what you want, like you and how to do it. I think I find it's very,
very extrovert. And I have a hard time sometimes tackling, um, these sort of tasks, like repeatedly the kind of programming I hate the most is animating assets. I i have a hard time sometimes tackling um these sort of tasks like repeatedly
the kind of programming i hate the most is animating assets i have a really hard time
putting days of that sort of programming one after the other but i can do endless amount of
tasks of relinting my code and adding comments and you know yeah and and you know fixing up names or
exactly reorganizing things yeah and so you say animating and other asset creation.
Is that something you're doing by writing code, you know, like writing new systems?
Or is it where you're using the tools you've built to sort of create the data for those animations?
Well, in an ideal world, I would already have libraries that I made to do this, but I haven't really.
I'm fairly new to, well, I guess I'll be fairly new to programming forever,
but even though I've been doing that for years now,
I feel like I'm only starting to grasp the basics of how I can be efficient with programming.
Recently, I've been compartmentalizing a lot of the things that I do repeatedly.
It hasn't really reached that kind of stuff yet.
I still do all the animation by hand for moving assets around, and that kills me.
But right now I'm refactoring two games that I want to release,
and this is the last time I'm doing this.
It's the last time I'm doing this by hand.
That means then you now have the impulse to make better tools
so that you don't have to do as much of it by hand
the next time you're doing this.
Yeah, I didn't really understand the problem at first,
so I could not have done it sooner.
I'm usually 10 years behind common practices.
So I don't know, I guess I would be like 2009.
I don't know where JavaScript was at the time,
but that's pretty much where I am at now. Yeah. You have good company there in me,
because I've sort of looked at what JavaScript has done over the past decade and said, no, thanks.
So glasses, really, you can do that. Like my code still looks like,
I don't know. It hasn't really changed much, I guess.
At this point in the interview,
Devine's internet connection died.
And rather than just edit around that technical hiccup,
I figured this would be a good place to put a sponsor break.
Repl.it is an online REPL for over 30 different languages.
It started out as a code playground, but now scales up to a full development environment
where you can do everything from deploying web servers
to training ML models, all driven by the REPL.
They are a small startup in San Francisco,
but they reach millions of programmers,
students, and teachers.
They're looking for hackers
interested in the future of coding
and making software tools more accessible and enjoyable.
Email jobs at repl.it if you're interested in learning more. Thanks to Repl.it for sponsoring
the transcript of the podcast, which you can find at futureofcoding.org slash episodes slash 44.
And now back to the interview.
Can you name all of the software tools that you've made and give like a 10 second description of what they do?
So the ecosystem, which is how I call it,
that we create at 100 Rabbits is basically one called Left,
which is the tool that we use to write.
It's a very simple writing tool, except imagine Word, but with auto-completion.
Maybe Word does it now, but we wanted something that was cross-platform,
that worked on Chrome OS, because we live on a boat and we don't have that much power.
And one of the devices that we use for writing is a Chromebook,
which only has Chrome, so it had to work in the browser.
But it has some interesting auto-completion things,
and it's the thing that we use for long-form writing, usually.
How does it derive the auto-completions?
Where do they come from?
It builds a dictionary from everything that you write.
Oh, okay.
So over time, it just has a good idea
of what you're trying to write.
So it's that classic using a database to do a perfectly good job of things
that everybody's trying to do with machine learning nowadays.
Oh my god, don't get me started on that.
Yeah.
But yes, all the problems that we make are very, very simple.
So this one is the simplest.
Dot grid is the thing that we use to make vectors.
So we do a lot of typographyography or iconography and i'm not a
super fan of gimp and inkscape no me neither so i was like you know sometimes you just want to have
a freaking circle with a cross in the middle and then you're fighting with like 0.005 decimals on
inkscape and i was like i just want something simple to make SVG files or something that can laser cut or whatever.
So I just made a program.
It's almost a single file.
It's a very simple thing.
It works in a browser.
Anybody out there, if you need to make a logo for your project,
go use DotGrid.
It's very cool for that.
Super simple, all keyboard operated.
Well, actually, with DotGrid,
I created all the iconography for Rokka.
The other one is is
ronin which is what i used for doing batch resizing it does a whole bunch of stuff now but the idea
was that you know you take a bunch of pictures and you want to resize all the pictures to
after size and export them into jpeg with a new name there's all sorts of ways of doing this with
the terminal which i find super complicated i just wanted a simple way of scripting
this sort of actions in Lisp
and just getting the result.
So I made a sort of like,
I guess a little engine to do that,
like a little interpreter, a little library,
and you can do all sorts of photo manipulation
and export files.
But people added a whole bunch of functions
to do processing type things.
So basically now it's basically like Canvas
using Lisp in the browser
that can do all the processing things that are visual.
Also even like audio related now,
it's becoming a bit of a monster.
So I'm going to have to take the ax out then.
So for Ronan, just to go a little bit further on that one,
because that one's another really interesting one.
It's a two pane window.
And on the left side, there's a text editor. It works just like a Lisp REPL that, you know, you've all seen a thousand times. You type in your Lisp code and then invoke
it. And it does something on the right pane, which is your graphical preview.
Imagine Photoshop with Emacs on the left side.
There are all sorts of nice
things you can put in, like there's a little special syntax you can enter that says,
replace this spot with whatever position the mouse is in. And so you can use that to,
in a DIY sort of way, like build a drawing tool right there in the program. And there are people
using it to do animations and there's people who have written strange attractors that rotate around. Yes, it's just so simple. But I wanted that in
my life and I couldn't find it. Yeah. You also have tons and tons and tons and tons of little
things that you've built. I think my recent favorite was for Inktober. You made a one bit
drawing tool. Yeah, well, I had just transitioned to Linux from OSX.
And, well, I had been using Photoshop in a while,
for quite a while now, because when you're sailing
and you don't have access to internet,
when your drawing tool and resizing tool breaks
because you don't have internet access,
that becomes kind of a problem.
So we decided to ditch all DRM bullshit but then I was like okay
so I have to draw I just want to draw like something really simple so I was looking up
online you know like something that is web-based that just lets me draw something kind of like
paint basically because I didn't really need much more but I really wanted halftone so that was like
that's where I started I was like well I don't want colors but i do want different weights of halftone and
well there wasn't really much out there i'm not super comfortable with opengl or sdl and and i
was like well i know canvas so i'm just gonna build in canvas and and i was afraid that it
would take a lot of memory you know like sometimes web tools like it's gonna kill my battery or
whatever but the way i've implemented it turns out it takes less power than using GIMP.
So that was a win.
So I did my whole month using this little tool that I made that is a single file.
I think it's like 180 lines of code.
And just to help people picture it, the aesthetic of the images that it creates is very similar to what you'd get using something like Mac Paint on an old black and white Mac from the 80s.
Yes.
It's a white canvas,
and your only operations are to turn individual pixels black.
There's no anti-aliasing.
There are tools for drawing straight lines.
There's an eraser,
and then there's a tool for putting in just individual black pixels.
What else do you need?
Yeah, well, but then the thing that i loved is you you built that tool
and you started doing some drawings with it and then you thought you know what i need is i need
to build a little 3d engine for like like laying out the scene of the thing i'm gonna draw and so
it's like on the one hand it's this throwback to the black and white 80s drawing apps of yore
but on the other hand it's like i'm I'm going to make a 3D engine.
When I saw that, I just like almost fell out of my chair because it's such a beautiful synthesis of
simplicity that takes you back to some of the roots of computing. But at the same time,
you have everything that's happened since the 80s to draw on and so you know when something like a 3d engine
is the right tool for the job by this point it's not hard to make something like that yeah how lucky
are we that we can do this you know like yeah while i was working on this every day i was like
surprised i was like how is this possible that i can you know like in the morning i'm like i really
want to do this i really want to do x and you can actually do it like if if you if you live in on osx and windows your whole
life you kind of missed you you missed this whole way of doing computing where actually building the
thing that you need a specific thing that will that will get the job done with absolutely no
friction it's not that far out of reach yeah i i lived outside of this sphere for
the longest time but now i'm like if something gives me any kind of friction i know i can turn
and just rebuild it because there's a massive amount of really clever people that addressed
these problems before so you can kind of draw on this and pick and choose the parts that you want and actually begin to experience modular computing.
And not to derail it, but I think that's where the people who are the staunchest critics of JavaScript are kind of missing the bigger picture.
Like a lot of these tools you build, you build them in JavaScript to run in the browser.
What you get in exchange for doing that is, sure, you have to use JavaScript javascript which is you know it has some storied history to it and it's it's not the most elegant language by a long
stretch but you get the whole web platform you get canvas you get css if you need that you have webgl
if you need that you have web audio midi vr Now those standards are created to be portable. The browser vendors
are pulling just insane levels of optimization to make sure that you can write all sorts of
malformed, badly organized code and have it not destroy the battery on the computer of everybody
who's running it. So with a little bit of know-how,
you can build yourself exactly the tool that you want using this web platform. And it's such a tremendously powerful point of leverage that if you turn your nose up at JavaScript, you are also
missing out on that leverage. Yes, I think JavaScript is the perfect way to invite you in that sort of place where you can feel empowered by the tools.
On the other hand, I mean, I absolutely love JavaScript and I am on the side of the people who, I mean, I find the language is beautiful.
What you can do with it is great.
Sure, people will always raise the what video and be like, oh like oh like how can you work with things like
this this doesn't apply to my everyday life like doing these edge case and you have to actually
actively look for them especially in my case since i build really simple things
or you can use a transpiler like if you need types use pure script use you know type script
something like that yeah but but all of this is something that i'm i'm
trying to phase out of my like i mean i have no problem with javascript as a language and i wish
it was easier to spin outside of the browser ecosystems i have friends who work at google
on the canvas implementation and when you go there you realize that my ease of being able to tap into all this
sort of these different different technologies to make this these tools really quickly
relies on incredibly powerful machines that i don't have access to and i'm basically at the
mercy of google for anything web midi and firefox and these handful of browsers to create the things
that i do now which is something
i don't really like you know like building chrome is a massive yeah thing i don't have the hardware
here to do this and in the future i'm hoping to actually like one of my the things that i'm really
thinking about these days is like i never want to have a stronger computer than what i have today
there's no reason i shouldn't be able to do what i want with the things that i have today walking that treadmill
of like thinking that i need stronger computer to do more things i think computing kind of like
capped in the 80s and we're like just like nothing really improved so there's no reason to
for me right now and for the few basic things that i need computers for, I don't see why I should want to keep getting more processing power.
So what I want to do now is like
gradually learn how to go a little bit deeper
and build the things on this smaller stack of technologies.
One of my big hobby right now is just
how can I make everything run on Scheme
or run on Vanilla C?
Yeah, just kind of like get away from this thing that invited me
in and that taught me about programming a little bit
and that taught me about how I can feel
empowered by computers. But now,
I also want to be independent from a lot of the
things that I find are destroying
the environment right now, or like
the sort of treadmill of disposable electronics.
I would love to be able to
just keep on using disused or
like second-hand computers and just keep doing the things I like to do with them without having to constantly keep up with the updates of Chrome and so on.
I feel that in a big way, especially you said that you feel like computing sort of capped in the 80s.
And my go-to example of that is a measure of latency called motion to photon.
Yeah. my go-to example of that is a measure of latency called motion to photon yeah if you push a key on your keyboard how long does it take for photons to be emitted from your display and that's something
that in some cases has improved since the 80s but in a lot of cases has regressed it's the sort of
thing where the industry has made choices that prioritize things other than latency. And the motion to photon latency
in most computing systems is at the point where it is slower than the threshold that you need in
order to deal with things in a musical way. So for instance, the granularity of music is at like
10 milliseconds, you know, 15 milliseconds, 20 milliseconds, somewhere somewhere in there if you are more than that
amount of time out of sync you will hear the difference and the motion to photon on most
computers is like 30 milliseconds 40 milliseconds 50 60 so one area that we could have spent the
benefits of moore's law would have been to improve latency but that's not where we went. We went with improving how many pixels of video can you decode per unit of time. I really feel you when you say
you're not feeling the benefit of the treadmill of new disposable computing hardware. I'm very
familiar with that feeling. I feel like I'm 10 years behind because this is, it's something like
it's a whole culture that i'm kind of discovering but
that hasn't been active for a long time it's just it was completely in my blind spot just a few years
ago i was building apps for ios and people were warning me about yeah well i would get this sort
of like i would i would the only part i remember of these comments was the cynicism but i didn't
really quite understand and now i'm kind of like oh that's what people are warning me
against the platform locking that yeah the grip that apple is gradually closing and like just
the january thing like in a few weeks what the all the apps are not code signs are not going to work
on osx and that that's like half our market because we inspired all our friends to migrate
on the apple ecosystem and i feel so bad for this. This is probably one of the...
Yeah, I totally regret that.
I didn't know better.
And I was not surrounded by people who could have showed me.
But nowadays, it's kind of like,
oh, how can I make up for that sort of ignorance?
The web standards people have always sort of held the mantra,
don't break the web.
If you're introducing a new standard, do it in a way that's backwards compatible.
Don't rename existing functions.
Don't, you know, remove features.
And yet it happens.
Like there was a change earlier this year where Chrome changed the autoplay behavior
so that things that use audio won't be allowed to emit any audio until the user interacts
with the page. And that was a breaking
change because previously, if you wanted audio on the page, you could make that auto play as soon
as the page started running. And so a bunch of independent artists and game developers had made
video games that run in the browser that relied on that behavior and the change in Chrome broke
that. And I think that was a really big wake-up call to a lot of independent creators that the web is not a platform where you can
make something and expect it to continue to run indefinitely. Even though there's all the
counter examples of like the Space Jam website from 1995 still runs today the way it did back
then. That's sort of like survivorship bias. Like there are a lot of cases where you can make something,
it will run for a while and then it will stop. You're responding to this by moving more towards
C and scheme. What other sort of changes are you making to try and avoid being herded in the
direction of perpetually upgrading? Well, I feel like this occupies my mind constantly right now. A lot of the time I
spend doing research, I'm absolutely enamored by the sort of like romantic idea of that someday I
could just, you know, just spend a whole year in free BSD and just like, I could build every single
tool that I, that I need and not rely on more.
It's like a road.
I'm not really sure what the ultimate point is or where exactly I'm going,
but I'm trying to explore the idea of modular computing as far as I can and on as little resource as possible.
Our studio runs 100% on solar,
so that means that it makes us very conscious and
where the cycles of our computers are being spent you know like if i had the choice between two apps
i'll usually my first question is you know the one that takes the last amount of cpu and nobody
thinks like this anymore or nowadays like i was giving a talk in portland and every single day i
would have startups coming up to me introducing
me to their product but the first thing i would say is like does it work offline and then oh no
sorry it's some kind of web service so i don't feel like i am a demographic anymore for anything
that is computer related so i figured i might as well just experiment in that space where some people in their 50s now are exploring how to keep Plan 9 running on their Raspberry Pi or just keep their favorite bits and pieces of what's around and live off that and experiment with computing in a way that is not super common. common like recently for fun i just started using gopher it's the best way of getting
access to like long form content or database of things that doesn't need to blinks and play music
and play videos at the same time and ads and all that kind of stuff like if you're looking for one
thing i feel like one third of the web could be just gopher databases and you're looking for
something you don't need bells and whistles well most of the
time i browse i'm in reader mode and gopher gives you that with like 100th of the processing power
they're required and that's a form of computing that is not the norm but i'm all for efficiency
and and when there's an efficient way of doing something i'll try to gun for it if i was for convenience i wouldn't be living on a sailboat and solar yeah but i found that this
way of life advised the way i interact with the computer and even though there's less and less
people that maybe are interested in that kind of stuff i think i could still try to live in that space and build things for that space because I'm pretty sure it's completely sort of like forgotten demographics.
From my perspective, you know, like I look at old people, you know, like, oh, the new Xbox is coming and they're all jumping on that sort of garbage.
And they're not really seeing, you know, like how xbox came into being and how long it's going
to be on earth and how they're going to get rid of it and i find it's completely a tone deaf to
look to these kind of technologies and seeing them as they're better they're really not better
yeah or they're better if you only look at certain kinds of measurements that are very selective
they're not holistically better yeah not. Not better in ways that I value things.
Yeah. You say that this puts you in sort of scarce company, but I would say that there's
actually some places where I've seen a lot of sympathy for this move towards being very
conscious of energy efficiency and being very conscious of the upgrade
treadmill. For instance, the programming language Forth, which is another sort of, I think it was
from the 70s originally, but it's a sort of a spatial language where you're creating little
units of code that exist on a kind of a two-dimensional space and each unit can communicate with the units
side to side or above and below
and they sort of pass data around.
Like I remember seeing a strange loop talk
by the creator of the language.
You have to put that in the podcast links.
I would love to watch this.
Oh yeah, it'll be in the podcast links, yeah.
You know what, actually I'll just Google it now
and then edit out the sound of me Googling it.
Forth programming language fourth yeah so fourth um created by chuck moore it's a language that he created with energy efficiency very much in mind not only is it an interesting language because of
the spatial character of it and the influential role it played in the development of later languages,
but he created it thinking that this spatial character would be useful because perhaps one thing that might have happened in the development of computers would be little tiny independent like micro computers that would communicate
in sort of instead of having like one big single core processor that would do a whole bunch of work
in order you'd have something more like a gpu where you had lots of little independent units
of computation but that they would be arranged spatially and they'd be able to communicate with
their neighbors which in a gpu you can't do in a gpu each core is independent yeah i think inferno works like that right
what is inferno oh it's um well it's an operating system but i think inferno has some ties with plan
nine but also i've seen this sort of like physical computing models also like there's a lisp os
called chrysalis and also i think it's designed
to work on multiple cores that are spatially organized because on this documentation there's
like matrix of computers talking to each other and the os kind of like takes that for granted
to take that in consideration yeah or there's like um i think his name's Dave Adley.
His name is Dave Ackley.
He had a programming model that was designed for resiliency, and it was also spatial.
And it was sort of like each unit in the program would try and build up the units around it.
And so if some of the units were destroyed, because this is executing in an environment where that might happen,
there might be some physical damage or something like that. This is a programming model that would sort of work around that because part of the model is you're not just sending data
over to your neighbor expecting it to be there, but you're handling the case where your neighbor
doesn't exist and you need to sort of build them from nothing and so it sort of makes the code into like this sort of self-replicating self-perpetuating model that's
so cool i love i i actually i'm really excited to look up for it and how they plan for efficiency
of energy and i'm also interested in how these other languages plan for resilience actually that's
things i'm not really seeing a lot or exposed to i'll put
that strange loop talk in the show notes because he goes into a good explanation of like i think
he was aiming for something like uh what was it like he wanted the execution to be like so many
picojoules per clock cycle or something like that like the idea was to make computing happen at many thousandths of
the amount of energy that it would take to run a can x86 CPU or something like that. And
unfortunately, I don't think it works. You know, if you execute it on top of our current hardware,
it would require the hardware that it was being designed with in mind. But it's definitely one
of the shining examples of people looking at energy efficiency
as part of the design of their their programming model oh well i mean you know when i said i was
i felt alone i i think i mean there's so many people in that space doing amazing things that
i'm just not aware of i'm kind of like just new stumbling that kind of stuff i don't want to say
that i've you know covered the whole area there's definitely all that kind of stuff i don't want to say that i've you know covered the whole area there's definitely all that
kind of stuff i still have to find it's just me myself my own experience in that sphere i found
that i mean there's a few people here and there and when i look on their website it really feel
like it's really hard to reach them outside of the mainstream yeah It's definitely not something that Microsoft or Google are saying,
like, this is our vision for the future.
Yeah, that's what I mean.
They're being left out of where things are going.
And that brings us to the end of the interview for today.
Be sure to stay tuned for part two of my discussion with Devine Liu Linvega,
where we go very, very deep into his ORCA spatial programming environment. It's super weird and
very interesting. I've got a couple of quick things to point you to before I conclude the episode today. First of all, the Future of
Coding community is running a survey to collect information about the interests of our audience
and to set the roadmap for what sorts of new projects we're going to be working on this year.
The survey is pretty quick and fun. If you'd like to take a couple minutes to fill it out, I would greatly appreciate that.
You can find the survey at the convenient, radio-friendly link bit.ly forward slash foc2020.
Yes, the implication is that we will probably do another one of these surveys in about a year,
just to see how things change over time.
Thanks again to our sponsor, REPLIT. The transcript is available at futureofcoding.org
slash episodes slash 44, and you'll find links to everything that Devine and I mentioned in the show
today on that page. That's it for this time.
Thanks for listening, and I'll see you in the future.