Kartik Agaram https://akkartik.name en-us Sokoban http://akkartik.name/post/sokoban 13 Mar 2024 00:00:00 PDT http://akkartik.name/post/sokoban The kids have been enjoying Baba is You, and watching them brought back pleasant memories for me of playing the classic crate-pushing game Sokoban. So I went looking and found a very nice project that has collected 300 classic publicly available Sokoban puzzles. Then of course I had to get it on my phone so I could play it anywhere. The result is the sokoban.love client.

video; 1 minute

On a technical level, with sokoban.love I've finally managed to figure out how to scale modifying programs on my phone beyond the tiny scripts Lua Carousel supports. Carousel treats each 'page' of the carousel as a separate script, and shares the screen between the code for the page and the drawings the page makes. When you switch between pages, Carousel saves and restores code for you so the script currently on screen is always the one currently drawing.

sokoban.love comes bundled with multiple pages of code (including 7000 lines for all the levels; those would be a pain to copy paste into Carousel). The pages all collaborate to create the app; switching pages changes nothing about the code that is running. The screen is also no longer shared between the app and its code editing environment. When you run the app the Carousel menu disappears, replaced by a single button to exit the app and edit its code.

This approach works well for editing on a phone. The trade-off I made is to jettison the live-editing experience. You can still get that with sokoban.love, but you'll need to get on a computer and connect driver.love to it like all my Freewheeling Apps.

As a bonus, sokoban.love includes a simple solver to eliminate some gruntwork for moving the player on touchscreens that you can see in action in this video. Tapping on the buttons along the edges moves the player a single square. Tapping on an empty square moves the player there if that is possible without moving any crates. Tapping on a crate and then an empty square will try to get the crate there if that is possible without moving any other crates. ]]> rabbot.love http://akkartik.name/post/rabbot 20 Feb 2024 00:00:00 PDT http://akkartik.name/post/rabbot rabbot.love is a little helper I whipped up to check the programs the kids were writing for a neat little paper computer.

video; 25 seconds
Lua Carousel http://akkartik.name/post/carousel 23 Nov 2023 00:00:00 PDT http://akkartik.name/post/carousel I finally decided to hang up a shingle on itch.io. My first app there is not a game. Lua Carousel is a lightweight environment for writing small, throwaway Lua and LÖVE programs. With many thanks to Mike Stein who helped me figure out how to get it working on iOS, this is my first truly cross-platform app, working on Windows, Mac, Linux, iOS and Android.


Carousel has its own devlog/notebook. I try to post little scripts that are easy for someone to copy to their clipboard, paste into Carousel and run. Some examples:

sum-grid.love http://akkartik.name/post/sum-grid 16 Nov 2023 00:00:00 PDT http://akkartik.name/post/sum-grid A little sudoku-like app for helping first-graders practice addition. This attempt at situated software for schooling got a little more use than spell-cards.love.

video; 25 seconds
crosstable.love http://akkartik.name/post/crosstable 18 Oct 2023 00:00:00 PDT http://akkartik.name/post/crosstable crosstable.love is a little app I whipped up for tracking standings during the Cricket World Cup, just to avoid the drudgery of resorting rows as new results come in.

video; 20 seconds
Quickly make any LÖVE app programmable from within the app http://akkartik.name/post/love-repl Tue, 22 Aug 2023 11:51:16 PDT http://akkartik.name/post/love-repl It's a very common workflow. Type out a LÖVE app. Try running it. Get an error, go back to the source code.

How can we do this from within the LÖVE app? So there's nothing to install?

This is a story about a hundred lines of code that do it. I'm probably not the first to discover the trick, but I hadn't seen it before and it feels a bit magical.

Read more ]]> A simple app for drawing Wardley Maps http://akkartik.name/post/wardley 02 Jul 2023 00:00:00 PDT http://akkartik.name/post/wardley wardley.love is a reskin of snap.love for drawing Wardley Maps. I've been using it a lot; here's one example:

]]> pothi.love http://akkartik.name/post/pothi 28 Jun 2023 00:00:00 PDT http://akkartik.name/post/pothi I love reading Kragen Sitaker as an endless fount of surprisingly deep programs and analysis. Lately he's been avoiding the web and writing in a directory of markdown files. He writes so much that he switches directories every year or so (I think of them as volumes), and they're all highly recommended for sifting through during quiet afternoons:

pothi.love is a simple browser for such a directory of files that lets me add comments locally to them. Then I can git commit and git push to publish them.

(The name: 'pothi' is Sanskrit for a sort of loose-leaf book of palm leaves, 'bound' with a single string through a single hole in the middle of each page/leaf.) ]]> Using computers more freely and safely http://akkartik.name/post/freewheeling Tue, 23 May 2023 09:03:45 PDT http://akkartik.name/post/freewheeling A 15-minute manifesto (video and transcript) on lessons learned trying to build situated software for a year. ]]> snap.love http://akkartik.name/post/snap 21 Apr 2023 00:00:00 PDT http://akkartik.name/post/snap snap.love is a graph-drawing app that gets closest to what I want when I want to draw boxes and arrows. Unlike Graphviz and PlantUML, this tool is for small graphs where you want complete control over layout. Unlike PowerPoint or draw.io, this tool results generates text files that are more amenable to version control. The catch: it's a lot more limited than all these tools; all you can do so far is draw rectangles and edges between them.