2021-11-06 06:30:21 +00:00
|
|
|
# Teliva - an environment for end-user programming
|
2021-10-20 04:38:48 +00:00
|
|
|
|
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-10-20 04:38:48 +00:00
|
|
|
|
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-10-20 04:38:48 +00:00
|
|
|
|
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)
|
2021-11-10 23:50:13 +00:00
|
|
|
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
|
2021-11-14 20:19:06 +00:00
|
|
|
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
|
2021-11-14 20:19:06 +00:00
|
|
|
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 ‘improve’ 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?
|
|
|
|
|
2021-11-21 00:48:13 +00:00
|
|
|
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 ‘clear’. 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.
|
2021-11-21 22:21:38 +00:00
|
|
|
* 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).
|