Teliva - an environment for end-user programming

Related tags

Build Systems lua
Overview

Teliva - an environment for end-user programming

“Enable all people to modify the software they use in the course of using it.” — https://futureofcoding.org/episodes/033.html

“What if we, and all computer users, could reach in and modify our favorite apps?” — https://www.inkandswitch.com/end-user-programming

“Software must be as easy to change as it is to use.” — https://malleable.systems

What's this, then?

An extremely naïve, brutalist attempt at packaging up simple Lua (5.1) apps with all the stuff needed to edit and build them.

git clone https://github.com/akkartik/teliva
cd teliva
make linux
src/teliva hanoi.teliva

Here's an example app (the Tower of Hanoi):

screenshot of Teliva running the Towers of Hanoi

No matter what app you run, you are always guaranteed access to a single obvious, consistent way (currently the hotkey ctrl-e) to edit its sources. And to run the updates after editing.

screenshot of Teliva editing the Towers of Hanoi

Toggle the same hotkey to restart the app with the new sources.

Over time I hope to improve the experience for error messages, failing tests, undoing changes and so on. The emphasis will be on maximizing hackability rather than functionality. I plan to be extremely parsimonious in taking on further dependencies. It should need just a Linux (or maybe some other Unix?) kernel, a C compiler, 12kLoC of Lua in this repo, ncurses.

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.

At the moment this isn't much of a restriction given how trivial the differences with Lua are. You also don't get much benefit in exchange for taking on this restriction. Let's see if that changes.

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.

Why Lua?

It's reputedly the fastest interpreted language per line of implementation code.

Will it run any Lua program?

Not quite.

This approach doesn't make sense for batch programs, I think.

I don't know how to obtain a simple, shallow graphics stack, so there's no support for graphics at the moment.

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. Compare hanoi.teliva with hanoi.lua to get a sense for what changes are needed.

My plan is to disable support for certain Lua libraries as I gain experience programming in this way.

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.

Teliva is not tested much at all yet. This is my first time programming either in Lua or within Lua. Bug reports most appreciated.

Will it run any Ncurses program?

Probably not. Ncurses is extremely portable. I don't test on all the configurations Ncurses supports. For example, I assume terminals with UTF-8 support.

Will it run any Lua lcurses program?

There are some exceptions. For example, lcurses has some strange “smarts” that result in wgetch() not behaving like getch(). Teliva doesn't reproduce such bugs.

What's with the name?

Teliva is the Tamil root for ‘clear’. Very much aspirational.

Credits

This repository is an unholy union of:

Send all praise to them, brickbats to me.

README for Lua 5.1

  • What is Lua?

    Lua is a powerful, light-weight programming language designed for extending applications. Lua is also frequently used as a general-purpose, stand-alone language. Lua is free software.

    For complete information, visit Lua's web site at http://www.lua.org/ . For an executive summary, see http://www.lua.org/about.html .

    Lua has been used in many different projects around the world. For a short list, see http://www.lua.org/uses.html .

  • Availability

    Lua is freely available for both academic and commercial purposes. See COPYRIGHT and http://www.lua.org/license.html for details. Lua can be downloaded at http://www.lua.org/download.html .

  • Installation

    Lua is implemented in pure ANSI C, and compiles unmodified in all known platforms that have an ANSI C compiler. In most Unix-like platforms, simply do "make" with a suitable target. See INSTALL for detailed instructions.

  • Origin

    Lua is developed at Lua.org, a laboratory of the Department of Computer Science of PUC-Rio (the Pontifical Catholic University of Rio de Janeiro in Brazil). For more information about the authors, see http://www.lua.org/authors.html .

README for Kilo

Kilo is a small text editor in less than 1K lines of code (counted with cloc).

A screencast is available here: https://asciinema.org/a/90r2i9bq8po03nazhqtsifksb

Usage: kilo

Keys:

CTRL-S: Save
CTRL-Q: Quit
CTRL-F: Find string in file (ESC to exit search, arrows to navigate)

Kilo does not depend on any library (not even curses). It uses fairly standard VT100 (and similar terminals) escape sequences. The project is in alpha stage and was written in just a few hours taking code from my other two projects, load81 and linenoise.

People are encouraged to use it as a starting point to write other editors or command line interfaces that are more advanced than the usual REPL style CLI.

Kilo was written by Salvatore Sanfilippo aka antirez and is released under the BSD 2 clause license.

You might also like...
Compiler Design Project: Simulation of front-end phase of C Compiler involving switch-case construct.

CSPC41 Compiler Design Project Assignment Compiler Design Project: Simulation of front-end phase of C Compiler involving switch-case construct. Using

Projeto pessoal: Obter a temperatura ambiente e através de um termistor ligado a um arduino e disponibilizar esses dados em tempo real via API NodeJS. No front-end os dados são acessados por uma interface em React JS.
Projeto pessoal: Obter a temperatura ambiente e através de um termistor ligado a um arduino e disponibilizar esses dados em tempo real via API NodeJS. No front-end os dados são acessados por uma interface em React JS.

INTEGRAÇÃO DA API COM OS DADOS DO ARDUINO FORNECIDOS PELO TERMISTOR Código Desenvolvido por Lucas Muffato. MATERIAIS 1 Placa de Arduino; 1 Cabo de con

Experimental data compressor for 8-bit computers and low-end platforms

ZX5 (experimental) ZX5 is an experimental data compressor derived from ZX0, similarly targeted for low-end platforms, including 8-bit computers like t

LoRaWAN end node built from scratch using CubeMX for WLE5x in the LoRa-E5
LoRaWAN end node built from scratch using CubeMX for WLE5x in the LoRa-E5

Seeed-LoRa-E5 LoRaWAN end node built from scratch using STM32CubeIDE/CubeMX for the LoRa-E5 WLE5x This assumes a general familiarity with STM32CubeIDE

C++ front-end package manager for embedding and redistributing with native applications

Pacm Simple C++ package manager Homepage: https://sourcey.com/pacm Documentation: https://sourcey.com/libsourcey/api-pacm/ Dependencies: LibSourcey (b

Command line front-end to libpwquality

Command line front-end to libpwquality

The Poco X3 Pro (codenamed
The Poco X3 Pro (codenamed "vayu") is a high-end smartphone from POCO

Copyright (C) 2021 Android Open Source Project Device configuration for Poco X3 Pro The Poco X3 Pro (codenamed "vayu") is a high-end smartphone from P

ML++ - A library created to revitalize C++ as a machine learning front end
ML++ - A library created to revitalize C++ as a machine learning front end

ML++ Machine learning is a vast and exiciting discipline, garnering attention from specialists of many fields. Unfortunately, for C++ programmers and

PLP Project Programming Language | Programming for projects and computer science and research on computer and programming.
PLP Project Programming Language | Programming for projects and computer science and research on computer and programming.

PLPv2b PLP Project Programming Language Programming Language for projects and computer science and research on computer and programming. What is PLP L

Basic Development Environment - a set of foundational C++ libraries used at Bloomberg.

BDE Libraries This repository contains the BDE libraries, currently BSL (Basic Standard Library), BDL (Basic Development Library), BAL (Basic Applicat

Chaste - Cancer Heart And Soft Tissue Environment - main public repository

Chaste - Cancer Heart And Soft Tissue Environment - main public repository

Mystikos is a set of tools for running applications in a hardware trusted execution environment (TEE)
Mystikos is a set of tools for running applications in a hardware trusted execution environment (TEE)

Mystikos is a set of tools for running applications in a hardware trusted execution environment (TEE). The current release supports Intel ® SGX while other TEEs may be supported in future releases. Linux is also a supported target, though only suitable for testing purposes as it provides no additional protection.

Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.
Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.

Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.

Tightly coupled GNSS-Visual-Inertial system for locally smooth and globally consistent state estimation in complex environment.
Tightly coupled GNSS-Visual-Inertial system for locally smooth and globally consistent state estimation in complex environment.

GVINS GVINS: Tightly Coupled GNSS-Visual-Inertial Fusion for Smooth and Consistent State Estimation. paper link Authors: Shaozu CAO, Xiuyuan LU and Sh

A basic system that waters a plant according to the heat index of the environment.

Basic-Plant-Watering-System 🌱 This is a basic plant watering system created on Arduino Uno using DHT11 Temperature and Humidity sensor. DHT Sensor Li

OpenAI GYM environment for 6-DOF Helicopter simulation
OpenAI GYM environment for 6-DOF Helicopter simulation

heli-gym 🚁 OpenAI GYM environment for 6-DOF Helicopter simulation. This is GYM environment package for reinforcement learning for helicopter flight t

GNUWeebBot - High-performance bot Telegram, running on Linux environment.

High-performance bot Telegram, running on Linux environment, written in C. Core Features Event Debug Event Logger Modules Telegram debug info.

BlackDex is an Android unpack(dexdump) tool, it supports Android 5.0~12 and need not rely to any environment.
BlackDex is an Android unpack(dexdump) tool, it supports Android 5.0~12 and need not rely to any environment.

BlackDex is an Android unpack(dexdump) tool, it supports Android 5.0~12 and need not rely to any environment. BlackDex can run on any Android mobile phones or emulators, you can unpack APK File in several seconds.

Comments
  • Function names seem to be unreadable blocks

    Function names seem to be unreadable blocks

    When trying this out on macOS with iTerm2 and my usual theme, the function names seem to be the same colour as the block, so I can't read them.

    Perhaps it's a terminal configuration issue...?

    image

    opened by jryans 9
Owner
Kartik Agaram
Working on ways to write software that make it easier for newcomers to understand rather than for insiders to maintain.
Kartik Agaram
WeNet is to close the gap between research and production end-to-end (E2E) speech recognition models,

WeNet is to close the gap between research and production end-to-end (E2E) speech recognition models, to reduce the effort of productionizing E2E models, and to explore better E2E models for production.

null 2.7k Jan 5, 2023
[RSS 2021] An End-to-End Differentiable Framework for Contact-Aware Robot Design

DiffHand This repository contains the implementation for the paper An End-to-End Differentiable Framework for Contact-Aware Robot Design (RSS 2021). I

Jie Xu 60 Jan 4, 2023
End to end test framework designed for Juce applications

JUCE End to End test framework What is it? This package provides a mechanism to end-to-end test a JUCE application Prerequisites CMake. Must be 3.18 o

Focusrite Audio Engineering Ltd. 58 Jan 6, 2023
BladeDISC - BladeDISC is an end-to-end DynamIc Shape Compiler project for machine learning workloads.

BladeDISC Introduction Overview Features and Roadmap Frontend Framework Support Matrix Backend Support Matrix Deployment Solutions Numbers of Typical

Alibaba 517 Jan 4, 2023
LLVM IR and optimizer for shaders, including front-end adapters for GLSL and SPIR-V and back-end adapter for GLSL

Licensing LunarGLASS is available via a three clause BSD-style open source license. Goals The primary goals of the LunarGLASS project are: Reduce the

LunarG, Inc. 153 Dec 8, 2022
Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator.

News Visual Studio 2013 is no longer supported As scheduled, Microsoft Visual Studio 2013 is no longer officially supported. Please upgrade to at leas

The Khronos Group 2.4k Jan 9, 2023
A programming environment for Lua for the Raspberry Pi Pico microcontroller

picolua A programming environment for Lua for the Raspberry Pi Pico microcontroller. Version 0.3, April 2021 What is this? picolua is a proof-of-conce

Kevin Boone 65 Jan 8, 2023
Circle is a C++ bare metal programming environment for the Raspberry Pi.

A C++ bare metal environment for Raspberry Pi with USB (32 and 64 bit)

Rene Stange 1.5k Jan 5, 2023
Media Downloader is a Qt/C++ front end to youtube-dl

media-downloader This project is a Qt/C++ based frontend to youtube-dl and it can be used to download any media file supported by youtube-dl. Features

null 599 Jan 8, 2023
Project for CS100395, Tongji Univ. A simple compiler front-end for a subset of C.

ToyCC 项目简介 本项目来自Maoyao233,lhl322001,Amazonite合作完成的同济大学编译原理(CS100395)课程大作业的后端部分,针对C语言的一个子集,实现了简易的编译器前端,包括词法分析、语法分析、语义分析与中间代码生成步骤。程序可以生成LLVM IR,也可以单独演示词

null 26 Dec 16, 2022