just wasting time.
coded a basic chess set with manual placement of pieces, so not a really playable game yet, though maybe hexapawn soon though? (no promises!)
just wasting time.
coded a basic chess set with manual placement of pieces, so not a really playable game yet, though maybe hexapawn soon though? (no promises!)
some bug fixin' of L5 today. I tracked down a bug that was messing up the origin point location for shapes and in the process fixed some shape drawing modes. In the evening I visited Offline for the Show Us Your Screens event, which was really nice, a totally packed crowed. Alex McLean gave a cool demo of new functions coming to Strudel, Tidal and other uzu-langs https://uzu.lurk.org/
I presented my work on L5 (it's first pubilc showing) and recent work in a bit of a hodge podge. It was really nice to hear others' talks and see/hear what they're working on.
Hmmmm, on a flight of fancy I decided to add in filters. I did it through adding in shaders, which I am really a dilettante in. But.....it's working. Took me 3 hours tonight. Not happy with gaussian blur but the rest are ok. Again, a bit of a hacky approach. Essentially i have a flag checking for whether if a filter is on. if so, set the shader, send optional parameter if available, draw canvas to screen, then set to no shader and turn shader flag off. currently prevents switching filters but i think i could solve that.
next i went back to my own artwork i had turned in for an exhibit and revisited the alternate version in L5 (i had sent the work as a p5.js project). now with the filters working my L5 version is fairly comparable to the p5 version. one weird timing issue in that L5 cycles the background color fade much faster. so i'll look at debugging that later.
pretty happy with things in L5 now. need to look at error() messaging, testing on Mac/Windows/any other computer besides my own, and documentation and testing next.
So glad I added filters! I'm able to just drop into L5 and work on some interactive artworks.
I started with some of the source images from the previous artwork I was working on, but made a different kind of variation. I may actually like this one better.
Code:
require("L5")
function setup()
--size(400, 400)
fullscreen(true)
windowTitle("The L5 logo")
imageMode(CENTER)
face={}
for i=1,30 do
face[i] = loadImage("face/"..i..".png")
end
drawFaces()
frameRate(1.7)
end
function draw()
drawFaces()
filter(THRESHOLD)
end
function mousePressed()
end
function drawFaces()
for i=1,100 do
image(random(face),random(height),random(height),width,height)
end
end
working on documentation website and a logo for L5. could this be it?
i am trying out mkdocs with the material theme. pretty mainstream i know. typical problem: was easy to get started and easy to render pages but customizing it is a pain since you have to figure out how they've done it and override their choices.
i made a batch of reference pages today. it's slow going because it lets me do bug testing and for each one i'm drafting the page by hand, converting processing or p5.js's reference examples to L5, then running the example code, screenshotting, converting to webp, formatting, etc. My friend told me "don't you have a student that can do that for you?" but i don't really work that way, and i don't have students to work on my projects! we don't have grad students at my school, for one. maybe i can write some automated script to run through the processing or p5 examples, do a brute force conversion to L5 and dump them into a templated page that i could then go through and clean up. it might make things faster. but writing that script could take me a couple hours.
I'm getting closer to being ready to build the website for the lang and think i'll likely use ye olde GitHub because of the pages feature, easy to collaborate, accept issues, even from beginners, and that's where Processing and p5.js are. But if I want to make a new organization the name L5 is already taken. So what to do: L5-Lua? L5-processing? L5-sketch? something else?
while i feel pretty great about my progress, i can see that hand retyping out the reference pages (and later the example pages, and my own p5.js code saved from the past decade of teaching) makes no sense.
And i don't have time/money/energy to recruit a volunteer or student so i reached for bash and sed and have a pretty good converter in less than 100 lines of code! i've tested it on a half dozen p5.js scripts so far and all have come out well. added a warning on the output of things to check.
https://gist.github.com/lee2sman/f84e03ef5e5209a9466d2c0795c2d50a
today i moved apartments so not a ton of coding. moving was half done by subway and half done by bike.
in the evening was the Creative Code Berlin meetup. before heading out i sent the latest L5 to Dan to check on his Mac. The horror, error! I could'nt understand it. (solution later...)
At the Creative Code Stammtisch i showed my work on L5 and other projects, and mentioned i need to test on Mac/PC hoping someone would say, here's my old Mac for testing purposes! Alas.
Presentation was fun and I got some good questions, including about later adding a 3d library. Maybe!
Back home at 11:30 and decided to see if i could figure out the Mac problem Dan had earlier. Ohoho: it seems that between Lua 5.1 and 5.2 they switched from unpack to table.unpack, however, Love uses LuaJIt and it might be the mac one compiles a different version of Lua?
Hmm, what to do about not having a Mac for testing. And Dan is 6 hours behind me, out with his family at dinner.
Well, I do have an iPad mini. And there is a Love2d Studio program. After I converted all table.unpack to unpack globally it solved that error. But now I get a bug that seems to result from shader code not working the same on iOS/Mac as on Linux. So I axed the shader code section temporarily on iOS (only used in my filters) and then I was able to get my sample programs to run. Phew, if not a total solution i'm at least glad things compile and work. I'll have to look into how to write shaders differently, or else have a mac and pc and linux version of the library. hmmmm.
this weekend was more social than coding but i did find a little time to do some work. the positive was that i solved one of the cross-platform bugs, and it was way simpler than i had feared. The other one seems to be a difference between how shaders are written on Linux vs Mac (and probably PC?) due to different renderers I think? I've not really delved into shaders much previously because i thought it didn't interest me, but since it's useful here i'm spending some time trying to understand at least the basics. i need to rewrite some of the shaders so they work on mac but i feel like i'm monkey-patching everything all the time. i am still "in-progress" on this but think i'll get it. honestly, so far the shaders are only used for filter() which is only a single function, but it's so very useful (threshold, grayscale, invert colors, blur) that i want to get it to work.
On the domain side, i purchased L5lua.org though not plopped anything down yet. i wanna try to get the reference done this week, then soft-launch, then add in more examples, tutorials and maybe even a video intro. I particularly think a video for "how to install" could be useful as i think that's the hardest part of getting started for non-command line users.
Feeling good: Mac bugs seem to be squashed now too, so the L5 library is cross-platform again.
I am going to transition back to continuing work on the Reference pages trying to finish up in the next week so that the L5 site can be ready to soft-launch, and then I can do a first round of testing L5 with friends.
I will try to devise a crazy bash script tomorrow that uses my p5.js -> to L5 bash script to convert the hundreds of reference pages examples and then test and modify them.
Somehow almost 2 weeks have gone by. Well, took a break from writing code (mostly) for the week since I had a friend in town and a series of concerts and such, and i started German classes last week, but that's no excuse!
After meeting with Stef and Raphael Friday to talk Processing we talked L5 too. I showed them my prototype and asked some questions.
Haha, they confirmed that blur is not gaussian blur as described on the reference but is exponential blur. And for example the perlin noise is actually Value Noise but mis-labeled and they may switch to Perlin or Simplex (which is what L5 is using due to its implementation in Love2d). They showed some tricks for automating converting the p5 reference pages from mdx (React) to my simple Markdown without frontmatter. I re-worked on this pipeline at home tonight and had an initial success converting them! Phew, the idea is to cut out a large time sink. I combined this with my bash script that converts p5.js code to L5 code. Finally, i worked on a script to screenshot all the example code and place in an assets directory, matching the reference page, but this will need some more work and need to be done after completing migrating p5 reference pages to L5 and removing any unused pages (and WEBGL examples). Excited to get back into this.
Ok, Using the brute force node script to convert p5.js's reference website (in react-markdown .mdx files with frontmatter) to simple markdown, and then using my sed/bash-script to convert the p5 reference examples to L5 code.
I'm doing this while watching the August WordHack event streaming on Twitch.
Ah, I just remembered Kit told me the p5js reference is also available as a json file. hmmmm. well, i already have my brute force method and seems to work for now to get my own reference pages started. i converted 105 pages that i hadn't written yet.
my next step will be to try to get a script to automate taking screenshots of running reference code examples with scrot, and saving them correctly to the assets folder with the right name and number.
and here's an example page from that process:
I did not write this page. It's a port of the p5.js "movedY" reference page here: https://p5js.org/reference/p5/movedY/
As with all of the other 105 pages, this page is originally in react-markdown, ported with my script to markdown. And the reference example code is converted from p5.js to L5 code. But I still need to have an image screenshot generated and review (and potentially edit) and text for things that are changed or different.
almost a month has passed and i am finishing up some other work this week so have time to get back into this.
on a whim i decided to write a turtle graphics library in L5 tonight and it was pretty fast and fun.
by the way, i am using the "Studies" approach to working that I think I gained from working in the Lines / Monome community and specifically the Teletype Studies. in this approach, you start using the tool/instrument from basics, creating a variety of projects and little experiments along the way. it's a way to learn the tool, like Drawtober or "everydays". (feel free to pipe in if you think i'm describing this incorrectly!)
My previous "Puzzlescript Studies" can be found here for example:
https://leetusman.com/puzzlescript-studies/
My work on "L5 studies" is a way for me to both bug test as well as find its affordances and limitations, but thankfully, since it's an implementation of the Processing language API, it's very front of mind to me.
In doing "L5 Studies" tonight I made a simple reimplementation of my posterer generator. The idea is it grabs a folder of images then generates 1 up, 2 up, 4 up, overlaid, etc layouts procedurally. In that process I realized I was missing the int() function from L5. How had I missed that from the Processing API? I added it, which wasn't quite as easy as leveraging the math.tointeger() function since that's been added in Lua 5.4 but Love2d uses an earlier version.
Next I finished the posterer program and now I'm ready for bed.
While doing L5 Studies tonight I wanted to draw to an offscreen buffer. The reason for this is because I wanted to draw freehand but have the underlying background color change randomly only once each time the mouse is pressed. To do this requires allowing continuous drawing on an offscreen buffer that then gets applied on top of the background. This meant it was time to implement offscreen buffers in the L5 library, so I created the createGraphics() function (that's what it's called in Processing API).
Added and tested. In this example I created a drawing program that lets me draw with photographs. The background only changes when the mouse is pressed down, but the drawn photos are persistent due to...the new createGraphics() function.
For my L5 Studies tonight I took on a bit of a challenge to make a collection of microgames in the style of beloved Warioware D.I.Y. I was looking earlier today to see if such a thing existed for Playdate. It seems like it should exist, no?! There was evidently a microgames jam with that idea in mind.
In any case, for my L5 programming tonight i ended up making some confused hacker mini game system with 3 different games. it's 'complete' in the sense that you can play it. it took me a couple hours and is a couple hundred lines of sloppy improvised coding. i've been using my own reference pages from the as-yet-unpublished L5 reference docs website (they still need work, more pages and polishing before going live), which has been helpful.
anyway, here's some gameplay of my silly microgames.
some work on L5 tonight.
i updated blur filter shader code from gaussian to exponential and dialed in some good defaults. now it more closely lines up with processing/p5.js.
i also started building out a table of processing family langs, inspired by the uzulangs page https://uzu.lurk.org/
lastly i tried some initial work to fix my setup / load system but didn’t get to a solution yet. essentially i am currently running setup twice, the first time to grab the set global vars like width and height among other things, the second time to run any graphics code. this is a modification of love’s library which normally only allows graphics code in draw. the problem is that running setup twice can cause issues.
i tried setting default sizing that dynamically changes when draw runs the first time but for example this won’t work for fullscreen programs. i will have to step through my modified love.run() to better understand exactly how and where various globals need to be set before graphics draw. there must be a simple solution but i can’t seem to get it yet.
Tonight in L5 studies (which i began working on AFTER I was already supposed to be asleep), I coded a simple toothbrush timer. It shows a moon or sun smiling depending on time of day, and a rotating toothbrush. Every 30 seconds the toothbrush moves to a different position to remind you to move to a different quadrant of your teeth. When you're done, it just says "Donezo" but maybe it should stick out its tongue? dunno. I need to go to bed or else I'd have the animation be smarter (toothbrush motion, and more precisely moving through the quadrants. maybe i'll finish that part tomorrow).
Anyway, this was a good task because it reminded me I should add hour() minute() and second() functions (trivially easy in Lua).
Also, earlier in the night I went out with Fletcher and Grayson, who both wanted to know why they or other folks that already use Processing or p5 would want to use L5. (or even vs TouchDesigner, OpenFrameworks, etc for that matter). Good question! I gave some answers! To be presented later, but here's a few Answers:
- works on old/ancient computers (need to define this)
- stable, fast, consistent
- cross-platform
- consistent cohesive syntax
- long term reliability of Lua and Love2d
- small (size)
- can package up sketches into application
- advantages of compiled languages, advantages (and disadvantages) of scripting language, advantages (and disadvantages) of dynamic typing
- desktop-oriented though same code can (likely) be packaged for browsers via love.js (Emscripten)
- works offline - doesn't require Browser
- more TBA
I'm participating in the Creative Code Lab at MotionLab in Berlin today and am working on L5. I cleaned up the comments in L5, then implemented custom shapes - adding beginShape(), vertex() and endShape() functions - copying most of the functionality from p5.js.
and in L5 Studies tonight before bed I decided to use the new functions to draw a grid of random polygon shapes and colors
Warning: fast flickering frames in video.
Lots of fun today: woke late, read in the cafe for two hours, took a long walk, cooked with friends, then two hours of no-input-mixer-board music with friends in the studio (and on clarinet).
I also worked on L5 for a couple hours and implemented a lot:
* I fixed looping! loop(), noLoop() and isLooping() should all work correctly now
* I added default width and height to the offscreen buffer for createGraphics
* I added the ability to draw textures to (custom) shapes with newly implemented functions texture(), textureMode() and textureWrap()
* I added a bunch of reference pages, example code and screenshots
Then implemented a rapid L5 studies test drawing randomly selected textures to screen.
a further iteration testing out the functionality added. i tried adding a folder of 50 JPGs to load but found it crashed the computer. i resized them to screen size instead of 4MB files and worked fine.
not sure what speed i should run this "screen saver" at or whether i should do the abstract or more clear version. here's a medium speed abstract one using graff images.
During my dogfooding process of creating little art and code projects ("L5 Studies") while working on the L5 language, tonight I added in a basic loadVideo function and created a minimal example showing how to play a video in L5.
Unfortunately, it can only play ogg theora (.ogv) video files, which means mov, mp4, mkv, avi files need to be converted prior to running. This is a limitation that results from the underlying Love2d library architecture as well as licensing issues, as far as I understand. While it is currently a requested feature, it does not look like mp4 and other video codecs will be added to the library too soon: https://github.com/love2d/love/issues/2089
To consider, shipping a little video converter tool or linking to one, just as Processing has a color selector and video recorder.
Processing: video requires a separate library. Can be any codec video. API differs from main Processing.
p5.js: video requires loading via DOM, then some trickery to hide from the screen and then to draw to canvas. not hard, but maybe a pain since a different workflow.
L5: video can only be Ogg Theora ogv file (so videos must be converted prior to being added to the sketch), but loading and playing video is trivial.
was encouraged by @dantescanline to keep going on the quasi-broughlike roguelike i started yesterday while watching the Roguelike Celebration @roguelike_con
i added a bit more functionality, but this is still far from a fun/playable game
Nice studio visit with @computersandblues today, checking out the inkblot library and showing my progress on L5 and jamming with PureData/PlugData.
In the evening, I wanted to make a Captcha font writer type program and it took me a surprisingly long time. I added applyMatrix() functionality to L5. Each key press currently redraws a scrambled matrix so the writing gets re-funkified with each keypress and mousepress.
I solved a huge bug that I have been trying to solve for months, and that moves me much closer to getting ready to put out a pre-alpha version of L5. It relates to what I've been calling the "double setup problem."
Basically, I was calling a user's setup() function twice even though it's only supposed to run once. I did it once to grab sizing defaults, for example from the size() function or fullscreen. Then again inside the love.draw() once in order to draw graphics the first time.
By default, the underlying love2d framework only allows drawing in love.draw() but I am attempting to clone Processing's ability to display graphics in setup as well as in events like mousePressed and keyPressed. Basically what I had to do was majorly modify the love.run() underlying love2d, as well as love.load() and love.draw() and some other things. Finally, I have a solution, by handling canvas states at the correct place and buffer recreation.
Okay, then I found another bug. I could not get fullscreen() to correctly draw graphics to the screen any longer as a result of those changes to the underlying way that love2d functions.It's a testament to its incredible documentation that it didn't dawn on me til now that I should have perhaps studied Love2d's underlying functions for setting the mode because I was getting really stuck on why graphics rendering no longer worked. It turns out that I needed not just to declare setFullscreen but also setMode, so I needed to write this:
love.window.setFullscreen(true, "desktop")
local w, h = love.graphics.getDimensions(display)
love.window.setMode(w, h, {fullscreen = true, fullscreentype = "desktop"})
This to me looks bizarre, like I'm redoing the same thing multiple times, and it's likely a result of my monkeying with the underlying love.run but in any case, all 3 of these lines are needed to be able to draw graphics in setup with fullscreen on. Anyway...
I also made a change from p5.js style implementation of fullscreen(true) to Processing's cleaner/easier: fullscreen() or fullscreen(display_number) which will send to whichever specified monitor (by number of display).
lastly, i tried to figure out a way to allow a user to write code without a setup function but i couldn't figure out how to do that. Beyond this, I think I just want to finish the basic documentation reference site and get it up and then start doing a pre-alpha test with friends. Hopefully can wrap this in the next week or two. Maybe 2 - 10 hours more effort? (though by saying that, it guarantees i'll need double that time!)
In L5 Studies tonight I implemented a first version of a webcam library!
I'm not targetting finishing this by the time I release a pre-alpha of L5 but it is important to me that there is a useful audio library and a camera library that can be used with L5. I have already set up a test of a audio library a month ago and it went ok. Tonight I tried to take on accessing the webcam, which wasn't obvious what to do. I implemented a little webcam library using libjpeg-turbo in C wrapped in a little webcam.lua library that can be used with L5.
still goin'. have been working on the documentation site for the past couple days. i am cleaning up the reference and reviewing missing functions. i kind of wanted to freeze where i'm at and do a little pre-alpha release but i am still trying to pick up and implement more bits of functionality.
tonight i added a few helper conversion functions from p5/processing: boolean(), byte(), char(), float(), hex(), str(), unchar(), unhex().
more on the way.
Ok, from my git log I also added fract, log, norm, pow, sq, sqrt, asin, acos, atan, atan2, randomGaussian, randomSeed.
I experimented with a headless noWindow() mode but basically it just closes the window. It's not really a headless mode for rendering graphics/sketches, so I removed the functionality and will rethink it again in the future if it's possible to implement differently (maybe not).
I also spent a great deal of time tonight cleaning up the L5 documentation site to get it ready for a soft launch. It still feels a bit basic in terms of design, but good to get something up and then build from there. I have 186 reference pages now! But in a fit of reorganization I realize I broke the reference page image paths tonight before bed when I fixed a different path issue. So tomorrow I'll have to write one hell of a regex to fix all of them in their various sub-directories! But overall, things are in a good shape.
I have Openhaus open studios at ZK/U Thursday the 20th and would like to be at a point where I can tell friends about the site/language and have them start playing around and testing and giving feedback then.
spent much of the weekend plugged into my laptop trying to grind through the damn reference pages and fixin' little bugs. Fixed some of the color modes like HSB and HSL which I think should be working.
So now you should be able to work with colors in all of the following ways:
fill(grayscale)
fill(grayscale, alpha)
fill(R, G, B)
fill(R, G, B, alpha)
fill(HSB)
fill(HSL)
fill('HTML color name') or
fill('#3-digit hex code') or
fill('#6-digit hex code') or
fill(color-object-table) or
wow, that's a lot. and that's why debugging took me some time. i had to build in some sanity checks and make sure things worked correctly for:
color(), fill(), background() - which also takes an image file input, and fixed lerp(), lerpColor(), brightness(), lightness(), hue(), alpha(), red(), green(), blue().
In addition, I had to fix all of the documentation pages for each of these, plus many others, test all of the code and produce screenshots to add to the documentation pages. It's a lot.
Still a lot left but i'm on a roll. Will keep grinding through it this week.
oh i am so deep in this hole. i am hand-checking every one of the 200+ reference pages, which can take me 3 to 15 minutes a page or so. For each page, I check my automatically converted p5.js to L5 reference code examples (i have a bash script that built these!). then i alter the description if needed, run all example code and screenshot, and then usually have to hand alter the parameters section as my conversion script didn't successfully build those. Also, for a sizeable minority of these reference pages I realize I left out a parameter or add in an extra error checking code or something. So that expands the time considerably.
Yesterday I checked and edited maybe 20 or so pages and fixed textAlign(), textWrap(), text() (added BASELINE positioning correctly this time), added in error correction to rectMode(), imageMode(), ellipseMode().
With each reference page i generally compare to both p5.js's reference as well as Processing's reference. Well, Cloudflare is down today so I can't check p5.js's site which relies on it. A good reminder to myself NOT to use services like that, I think, as it feels very un-resilient.
Right now I'm testing the L5 website to run without Javascript. I loaded it up in Links and w3 in the terminal, w3 with the img extension actually, and then with @dillo
Looks good.
I am using mkdocs with Material (a static site generator) for rendering the site. It makes many things easier and organized well for a documentation reference site for an API, but it has one big drawback: while the site works without JS, I think the site is larger because of it, 6MB page load, which I'd really like to get down to under 500k but not sure it's possible with this framework! I tried to use Firefox's built-in memory profiler and read its documentation so that I can learn how to cut things down but (argh!) the documentation site for Firefox is down due to a Cloudflare outage.
In the meantime, here's 4 views of the documentation site so far:
1. with w3 in the command line,
2. with netSurf
3. with Dillo (landing page)
4. with Dillo (an example reference page)
One other issue: I've been using webp images to make everything render out in small file sizes, but that doesn't worth on everything! I guess I'll have to have jpg fallback files? I anticipate another bash script to make that happen...
ah, i think i fundamentally misunderstood how the memory profiler and network tools work and what they mean.
i removed loading 2 custom fonts, but that's it. might slim the fonts and put em back.
in the meantime, locally testing the site is about 650kb and i think that when deployed based on gzip compression it might go down a few hundred k more. hopefully i'm understanding this correctly.
fixed a ton of smaller functions and built maybe 60 reference pages total now. there are still 140 page to do! lol. one accomplishment: i fixed multi display support and tested on windows and linux so you can correctly specify which display to run a sketch fullscreen in.
here's my multi monitor installation coded in L5 with the updated library.
the last week was a bit of a blur as it was my last week in my art residency and then some international travel.
On my flight I got back to L5 studies and built "Photocrapier", a photocopy machine emulator with various features like rescanning, jiggling the paper, glitching the paper (i guess jiggling it a ton while scanning?), sliding the paper around, rotation, etc.
I wonder if i should package these things up as little binary files and make them available for download. or at least make my whole L5-studies code in a git repo.
Staying with my parents is a bit like a mini residency. This weekend I worked quite a bit on the reference pages website for L5 and performed a variety of smaller bugfixes to the lang.
* max() and min() can now accept tables
* added exp() function
* deltaTime global var now outputs millis() to match Processing/p5 output
* added resetMatrix() and fixed addMatrix() (and used these to complete the L5 studies project photocrapier)
only 60 of the reference pages (out of about 200ish total) left to do.
I did 10 more pages of the reference and deployed to the (not-so-secret) website. Basically, the reason it takes so long for each reference page is that I use writing the page as a chance to go through and bug fix the actual function I'm referencing. loadTable() and saveTable() were my time stealers today, among other things. for example, I modified saveTable() to deal with both a single table as well as a table of tables. That added...dozens of lines of code, plus debugging.
I also kicked off #DecemberAdventure today after forgetting about this annual tradition and then seeing it pop off on Mastodon here. I participated in the last 2 years and basically liked it so much I continued doing it year round on my log page, so I made an anchor tag to jump to my December Adventure 2025 posts here:
Today was spent working on reference pages and debugging the L5 language library, getting ready for the pre-alpha release. What I worked on today: save() can take an optional filename. I added an alternate data structure for single element tables to saveTable. I updated text() to deal with non-strings. Lots of fixes to events: key detection majorly mproved, fixing delete and function keys, etc reporting. Surgical fix so that keyTyped() reports true at the correct spot. Cleaned up mouseWheel() (no need to report x-value since wheel only scrolls vertically). The biggest update/fix was debugging and correcting the order of mouse handling events. mousePressed() runs as soon as the user clicks the mouse. mouseReleased() runs as soon as the user releases the mouse click. mouseClicked() runs immediately after mouseReleased(). Phew. Worked through a ton of reference pages and it looks like I have a bit under 30 left to do now. At the rate of 10 a day I seem to be on now maybe there are 2 - 3 days left.
churned through a bunch more reference pages, updated the p5.js to L5 conversion script too to help me with that. Thinking I will likely finish the remaining reference pages tomorrow.
A BIG DAY FOR ME: I HAVE AN INITIAL ALPHA RELEASE OF L5, which I have been working on for 4 months so far. I also have a nice website up for it with 200 documentation pages!
My next step is to try to get the word out to friends to try out L5, give initial feedback, and see if folks find it useful, want to contribute, etc.
I then need to concentrate on getting some more tutorials done, more/better error() message reporting, just general bug-fixing/refactoring, and add a L5 mode to the Processing IDE application.

7.02K Posts, 558 Following, 510 Followers · artist, educator, programmer, learner, traveler, eater, biker, reader, writer, musician. i teach and make new media art and work with art collectives. based in NYC. I only accept follow requests from people who have their own posts, an avatar and bio.