teliva/README.md

111 lines
4.5 KiB
Markdown
Raw Normal View History

2021-11-06 06:30:21 +00:00
# Teliva - an environment for end-user programming
2021-11-06 06:30:21 +00:00
> “Enable all people to modify the software they use in the course of using it.”
> — https://futureofcoding.org/episodes/033.html
2021-11-06 06:30:21 +00:00
> “What if we, and all computer users, could reach in and modify our favorite apps?”
> — https://www.inkandswitch.com/end-user-programming
2021-11-06 06:30:21 +00:00
> “Software must be as easy to change as it is to use.”
> — https://malleable.systems
## What's this, then?
An extremely naïve, [brutalist](https://en.wikipedia.org/wiki/Brutalist_architecture)
attempt at packaging up simple [Lua](http://www.lua.org) ([5.1](https://www.lua.org/manual/5.1))
2021-11-14 20:32:27 +00:00
apps with almost all the stuff needed to edit and build them. You will need
2021-11-14 20:32:53 +00:00
some Unix-like platform[1] with a C compiler and the ncurses library.
2021-11-06 06:30:21 +00:00
2021-11-14 20:20:14 +00:00
Here's how you run one of the example apps (the [Tower of Hanoi](https://en.wikipedia.org/wiki/Tower_of_Hanoi)):
2021-11-06 06:30:21 +00:00
```
git clone https://github.com/akkartik/teliva
cd teliva
make linux
src/teliva hanoi.tlv
2021-11-06 06:30:21 +00:00
```
<img alt='screenshot of Teliva running the Towers of Hanoi' src='doc/hanoi.png'>
2021-11-06 21:13:39 +00:00
No matter what app you run, you are always guaranteed access to a single
2021-11-06 21:44:07 +00:00
obvious, consistent way (currently the hotkey `ctrl-e`) to edit its sources.
And to run the updates after editing.
2021-11-06 06:30:21 +00:00
2021-11-14 20:32:53 +00:00
[1] Tested so far on Linux and Mac OSX; should also work on BSD, WSL on
Windows, etc.
2021-11-06 07:14:52 +00:00
## Isn't this just an IDE?
There's one big difference: these apps are not intended to be runnable outside
of the Teliva environment. Editing the sources will always be a core feature
that's front and center in the UI.
A second, more subtle difference: it's primarily an environment for _running_
apps, and only secondarily for editing them. Starting up the environment puts
you in a running app by default. Creating an app from a clean slate is a
low-priority use case, as is lots of specialized support for developing
complex apps. The sweet spot for Teliva is simple apps that people will want
to edit after using for a while.
2021-11-06 06:30:21 +00:00
## Why Lua?
It's reputedly the fastest interpreted language per line of implementation
code.
## Will it run any Lua program?
2021-11-09 03:09:28 +00:00
Not quite. My priority is providing a good experience for newcomers to
comprehend and modify the programs they use. If it's not clear how to provide
that experience for some kinds of Lua programs, I'd rather disable support for
2021-11-14 20:17:46 +00:00
them in Teliva and let people use regular Lua. Or other platforms!
2021-11-07 00:31:49 +00:00
2021-11-07 23:30:32 +00:00
- This approach doesn't make sense for batch programs, I think.
2021-11-07 00:31:49 +00:00
2021-11-07 23:30:32 +00:00
- I don't know how to obtain a simple, shallow graphics stack, so there's no
support for graphics at the moment.
2021-11-07 00:31:49 +00:00
2021-11-07 23:30:32 +00:00
- Teliva initializes the ncurses library by default, so apps should assume
they have access to a text-mode window for printing text to, and a keyboard
for reading unbuffered keystrokes from.
2021-11-07 00:31:49 +00:00
2021-11-07 23:30:32 +00:00
- I want to provide sandboxed access to system resources (file system,
network, etc.) which will likely create incompatibilities with the standard
library. I'm disinclined to try to &lsquo;improve&rsquo; on Lua syntax,
however. It's not my favorite, but it's good enough.
2021-11-06 06:30:21 +00:00
2021-11-07 00:31:49 +00:00
Teliva is not tested much at all yet. This is my first time programming either
2021-11-07 23:30:32 +00:00
in Lua or within Lua. So bug reports are most appreciated if Lua programs
behave unexpectedly under Teliva.
2021-11-06 06:30:21 +00:00
2021-11-07 23:30:32 +00:00
## Will it run any ncurses program?
2021-11-07 00:36:40 +00:00
2021-11-07 23:39:27 +00:00
Hopefully. ncurses is extremely portable; I don't test on all the
2021-11-19 15:10:36 +00:00
configurations ncurses runs on. In particular, I assume terminals with colors
2021-11-07 23:30:32 +00:00
and UTF-8 support.
2021-11-07 00:36:40 +00:00
## Will it run any Lua [lcurses](https://github.com/lcurses/lcurses) program?
Some functions in lcurses have [additional smarts](https://github.com/lcurses/lcurses/blob/master/lib/curses.lua).
Teliva is consistent with the underlying ncurses.
2021-11-07 00:36:40 +00:00
2021-11-06 06:30:21 +00:00
## What's with the name?
Teliva is the Tamil root for &lsquo;clear&rsquo;. Very much aspirational.
2021-11-14 20:15:08 +00:00
## Coda
2021-11-19 15:10:36 +00:00
In addition to Lua 1.5, Teliva forks or depends on:
2021-11-14 20:15:08 +00:00
* The [ncurses](https://tldp.org/HOWTO/NCURSES-Programming-HOWTO) library for
building text-mode user interfaces. ([Alternative documentation](https://tldp.org/LDP/lpg-0.4.pdf))
2021-11-19 15:10:36 +00:00
* The [lcurses](https://github.com/lcurses/lcurses) binding for ncurses.
([Documentation](http://lcurses.github.io/lcurses))
2021-11-14 20:15:08 +00:00
* The [Kilo](https://github.com/antirez/kilo) text editor. (Read more about it
in this [fantastic walk-through](https://viewsourcecode.org/snaptoken/kilo).)
2021-11-21 22:20:44 +00:00
* The [luasocket](https://w3.impa.br/~diego/software/luasocket) library of
networking primitives.
* The [json.lua](https://github.com/rxi/json.lua) library for
serializing/deserializing to JSON.
2021-11-14 20:15:08 +00:00
Send all praise to them, brickbats to [me](http://akkartik.name/contact).