2019-05-09 09:59 am

FLOSS Educational Distribution - Ideas Needed

For a long time now, I've been wanting to put together an ISO with Free, Libre and Open Source software similar to the kind our Linux Users Group gave out on Software Freedom Day. I'd like to gear it specifically toward educational software so that groups like Schoolforge may make use of it. If you'd like to help, I would love to have suggestions for lightweight, portable software that can run in console or framebuffer mode. I'm specifically interested in educational, hobby-related, utility, information/organizing and/or word processing programs. Have any recommendations? Please let me know ( http://www.distasis.com/connect.htm ).

Since I'm creating this to promote FLOSS software, I thought it would be great if I could distribute the software on a remastered Linux ISO that could be run from VirtualBox or Qemu or that might boot from a DVD or flash drive. I'd like to try to stick with a console based distribution so that it's lightweight and runs well on older computers with low resources. That means all programs need to be command line, console based (ncurses/pdcurses) or work in framebuffer mode (using SDL 1.x, nano-x, nx11, FLTK, etc.) in order to run on the system without X Windows or Wayland. For efficiency, I'd prefer compiled programs (such as those written in C) to ones that require an interpreter to run. I'd also like to make it as accessible as possible as far as internationalization and for users that may have disabilities. I'm using internationalized language support when possible via gettext. There are utilities like flite and espeak for text-to-speech support. My goal is to put together a lightweight, low resource distribution that will work well for users with older computers and users with no or limited Internet access. There are plenty of things you can do with a computer even if you can't get access to the Internet. Why not make some of those options more readily available?

I'll list some of the software I'm currently considering for the distribution. I'm still missing functionality in several areas, so if you have any recommendations for programs that would fit the criteria I've mentioned, please let me know.


Graphics applications

grafx2 - graphics editor
lodepaint - graphics editor
graphicsmagick - command line graphics editor
picaxo - graphics viewer
perigee slideshow - slideshow viewer
gifsicle - command line tool to create animated GIF files
GLE - command line tool to produce charts
nanosvg - includes lightweight SVG viewer


Music creation/audio applications

I'm still looking for a good Karaoke program (written in C or C++). TiMidity++ does some lyrics display, but I've yet to see it display lyrics created by abc2midi using the console version of TiMidity++. Some educators have found Karaoke to be a good way to help students improve their reading skills.

abc2midi - create your own music using music notation and convert to midi format (command line)
abcm2ps - creates sheet music (command line)
sox - sound exchange, audio file converter and player (command line)
milkytracker - create and play music
TiMidity++ - plays midi files


Readers

Still need several suggestions in this area. I'm currently looking for lightweight PDF and Postscript viewers. Was thinking of using mupdf but I'd still need a decent front-end for it that will work in framebuffer mode. Xpost might make an interesting alternative for Postscript display, but it's still in the works. I found a cbr/cbz library, but don't have a good framebuffer based front end for that yet either. It could be integrated with mupdf or used standalone. Would be nice to include some educational public domain ebooks with the distribution too.

bard - epub reader with text-to-speech capability
pdftxt - converts PDF to text using libmupdf (Can be used with search tools such as grep.)
qpdf - command line PDF transformation tool
sdlbook - SDL front end for libmupdf (Recently found this and it may fill my needs for a PDF viewer.)


Audio/video players

flxplay - plays flx movies
theoraplay - plays ogg theora videos and ogg vorbis


Astronomy

nightsky - displays stars
pngphoon - graphically shows moon phase (command line)
lcal - command line based lunar calendar that outputs to PostScript


Word processing

I'm thinking of using one or more of the following editors as an alternative to the popular vi/vim and emacs editors. Other suggestions welcome.

nano - ncurses/pdcurses editor
textadept - programming editor that uses scintilla editor widget has ncurses/pdcurses front-end
wordgrinder - ncurses word processor
mp (maximum profit) - editor with ncurses/pdcurses front-end


Other text related utilities

I have a few dictionaries in stardict format that are Open Source. (Created one from the Mobi project.) I'm looking for other Open Source dictionaries in the stardict format or easily converted to that format. Also still looking for a good grammar checker program.

hunspell - command line spell checker
sdcv - command line version of stardict dictionary tool
style - readability tool
diction - readability tool


Information managers/organizational tools

This section needs some additions. Anyone know a good SDL based calculator? I'd love to find a decent command line utility to avoid repetitive stress injury. There are some great desktop ones such as (workrave and prevrsi).

pcal - command line calendar that outputs to PostScript
ckpass - possible command line keepass replacement
sc - spreadsheet calculator


Hobby related

Don't have much in this category yet. There are several good HAM radio programs available. Maybe some of them that will work in console or command line mode could be added. Other hobby suggestions welcome. Also, maybe some public domain ebooks on hobbies could be useful.

nut - nutritional analysis


Educational entertainment

If you have other recommendations, please let me know.

lpairs - memory game
dual-n-back - memory tool
anagramarama - anagram language game
scramble - anagram language game
hangman - language game
concentration - memory game
tuxmath - game for improving math skills
starlanes - interstellar commerce game


That's all I have so far. I still have to look into remastering a Linux distribution. If you have tips for a simple remastering tool to use or know of some good documentation on how to remaster a Linux distribution via command line, please let me know. Would also appreciate other suggestions for lightweight, portable, useful or educational software (preferably in C). I'm also looking for Creative Commons, public domain or Open licensed educational media (ebooks, videos, etc.). Know of a Linux distribution that's already doing a similar project and would like another volunteer? Please let me know. If you'd like to discuss this project further or help out in some way, feel free to contact me ( http://www.distasis.com/connect.htm ). Thanks.
2019-04-17 10:32 am

X Windows Alternatives

X Windows is designed to work well on older systems or systems with minimal resources. However, it's quite complex to build from source. I've built it completely a few times. I've done so on Linux/BSD systems, but I've also built it natively for Windows, it still seems to run rather slow compared to other options such as the console or framebuffer. It also runs quite slow on Windows compared to native Windows applications.

Wayland looks like it will be a popular replacement for X Windows and it will also have backward compatibility allowing users to continue to run X Windows applications using XWayland. Wayland is designed specifically for Linux systems. So, it'll be interesting to see how much work it will take to get this going on other POSIX systems like BSD and how well it will be adopted by users of those systems.

Another alternative to X Windows on Linux is to use console or framebuffer based applications. Since POSIX systems multitask, you can run multiple terminals with an application in each. However, if you want more than one application on your screen at once or an easier way to switch between applications, you have to use a terminal multiplexer. Screen is the most well known, but there are several others such as tmux, dvtm, twin. There are also options like splitvt, terminator and mtm (Micro Terminal Multiplexer). This can be a speedy solution, but it's not always as intuitive to use as a windowing system such as X Windows. A couple of framebuffer related projects that look interesting for their cross-platform support are:
https://github.com/uobikiemukot/yafblib
https://github.com/emoon/minifb

Here's another terminal multiplexer and TUI window manager that looks interesting:
https://github.com/netxs-group/VTM
Nice thing about this one is cross-platform support.

DirectFB is another option. Unlike SDL 1.x which had backend support for the Linux framebuffer, one of the best solutions for running applications in framebuffer for SDL 2.x is DirectFB. Despite it being an interesting project, the original development site for DirectFB is no longer available. Even when it was available, the mailing lists for it weren't very responsive. There is a patched and working version of DirectFB among the Debian packages but with the advent of other options like Wayland, who knows how long it will continue to be included/supported by larger Linux distributions. I did find a github site for the project, but the commits don't look too recent.

https://github.com/deniskropp/DirectFB

When reading about DirectFB, I also saw mentions of GGI. DirectFB only works on systems like FreeBSD if it uses SDL as a dependency. GGI was mentioned as another alternative on BSD systems. I believe the GGI project is no longer active. There is a GGI project at Sourceforge. I'm not even sure if it's related to the original I was reading about, however, it does mention a stable graphics system that works anywhere.

https://sourceforge.net/projects/ggi/

There are mentions of Xynth and XFast as portable desktop environments:
https://github.com/alperakcan/xynth
https://sourceforge.net/projects/xfast/

Not sure how portable it is or how easy it will be to get applications to work with it, but Arcan provides another alternative to solutions such as X Windows. If anyone has any interesting results using it, I'd appreciate hearing about it.

https://github.com/letoram/arcan

Sixel looked interesting as well. It can run some SDL applications via the terminal. I've looked into using sixel in console mode with modified SDL libraries and have mentioned my experiments in another post. I personally found the option slower than using X or X forwarding. I'd be interested to hear if anyone else is using it.

https://github.com/saitoha/libsixel

So is there still a viable middle ground between X Windows/Wayland and console/framebuffer applications?

First off, I'd like to mention nano-x. It works on a variety of platforms. It has basic API support for porting X11 applications (with nxlib) and Win32 applications. You can use it to build single programs, but it can also be run in client/server mode similar to X Windows. That way, you can display multiple programs on the same screen. It's actively developed (even though the number of developers is small). XFDos (which runs on DOS/FreeDOS) and nanolinux are some good examples of what can been done with nano-x and just how portable it is. It also works on Android systems. On systems where X Windows won't build easily or just won't run, it's hard to beat nano-x.

https://github.com/ghaerr/microwindows
https://github.com/georgp24/microwindows-android-bin
https://github.com/ghaerr/nxlib

If you want to create your own windowing system on the style of DirectFB or nano-x, I've seen some developers start with libraries like AGG. Typically the older 2.4 version is used because it's still available under the BSD license.

http://www.antigrain.com/

Finally, if you really want X Windows, but you still want something that uses less resources or might perform better on older systems, there are a fewer lighter versions of X that may be of interest.

https://github.com/pelya/xserver-xsdl
https://github.com/idunham/tinyxlib
https://github.com/tinycorelinux/tinyx
https://github.com/dimmus/X11R8
ftp://distro.ibiblio.org/pub/linux/distributions/amigolinux/download/AmigoProjects/X11-tiny-1.2.61
https://github.com/rswier/picox

As X Windows get replaced by XWayland, support for the X Windows project is waning and some groups are attempting to keep development and support up-to-date with their own forks. These include options such as:
https://github.com/openbsd/xenocara
https://github.com/X11Libre/xserver

There are other windowing systems, however, most of them aren't very portable and are limited to a particular niche operating system. Know of other portable Open Source windowing systems or other good options for POSIX systems like Linux and BSD? Please share the information. I'd be very interested to hear about them.
2017-03-20 08:56 am

How to find lightweight applications

It's fun to discover new lightweight applications. They work well on newer computer systems as well as older or slower computers and low resource machines like many mobile devices. You can run more of them at once. If they're not well-known, they can actually be more secure sometimes (using the security through obscurity principle). I also personally prefer portable applications. That way, you can use the same programs on any operating system. You don't have to relearn new programs for each system you work with.

It can be quite a challenge to find new lightweight applications. I've read several threads on forums where users post their favorite lightweight applications. Many truly are not lightweight by standards that take into consideration memory usage, lines of code, compilation time and/or number of dependencies (libraries).

One way to find lightweight applications is to look for programs built with lightweight GUIs. I've seen a few comparisons of GUI performance. This one is particularly good because it tests the various GUIs and gives statistics:
https://www.pismotek.com/brainout/content/gui-toolkit-resources.php
I was rather surprised by the SDL2 results. Generally, the time it takes to build a GUI from source is one good indication of complexity. FLTK and SDL both build quickly from source compared to the other GUI frameworks mentioned. So, I was surprised that SDL2 scored so badly on the memory usage tests. I'd be curious to know if SDL 1.2.x (which many systems still use) would show a large improvement. Another surprise was how well Tcl/Tk did in the tests. I typically think interpreted languages have worse performance than compiled ones. It would be interesting to see some statistics on response times for similar applications created with these GUIs.

I often go through various source repositories such as Sourceforge, github, etc. looking for code written using specific user interfaces in order to find new and interesting applications. Standard search engines are another way to search for programs. The user interfaces I'm personally most interested in at this point are FLTK, pdcurses/ncurses, SDL and command line programs. These types of applications are typically more lightweight or designed to do one thing well. Know of any other lightweight GUIs or TUIs (text user interfaces)? Please share your recommendations and why you like them.

There are some nice blogs for finding and discussing minimalistic (or in some cases maximalistic) programs. Unfortunately, many are no longer very active. Some favorites are:
https://kmandla.wordpress.com/
https://inconsolation.wordpress.com/
https://web.archive.org/web/20160304000554/http://www.jaredandcoralee.com/CLIapps.html
http://macrofig.blogspot.com/

If you know of others, I'd love to hear about them.

One can also look for lightweight distributions and see what programs they have in their repositories or read their forums for more suggestions. Some of the interesting distributions to check are TinyCore Linux (uses several FLTK programs), Nanolinux (uses more interesting FLTK programs), Rogue Class Linux (uses several SDL programs), Puppy Linux, AntiX (Debian based), INX ( http://inx.maincontent.net/ ), Absolute Linux (Slackware based), 4MLinux ( https://sourceforge.net/projects/linux4m/ ), OLPC. Typically DSL and Puppy get mentioned when people list lightweight Open Source systems. There's been no active development on DSL in a long time and the forums are very quiet. I also found Puppy a little too resource intensive on one of my older machines. FreeBSD performed much better on that system. Puppy Linux has some interesting discussions in their forums.

Linux systems that work in framebuffer mode using DirectFB, nano-x and other alternatives also typically contain many interesting, unusual and lightweight applications. Nanolinux and Rogue Class Linux are in this category.

One can also look at operating systems and development projects that use more lightweight C libraries (such as uclibc and musl). Those projects typically gravitate to choosing lightweight applications, command line and console based programs and lightweight tools like Busybox and Toybox.

Alternative operating systems often offer interesting lightweight application choices. Syllable and Haiku often use SDL programs and other lightweight applications that are easier to port to those systems. Systems like Minix and ELKS are also interesting to investigate. Minix 3 uses a lot of the programs that BSD systems do, but earlier versions of Minix include some interesting alternatives. XFDOS includes many interesting FLTK applications. Plan 9 is interesting as well, but not many of the programs used on this system have been ported to other systems. Another good place to look for unusual applications is on mobile devices.
Here are some application lists from Syllable and Agenda:
https://sites.google.com/site/syllablesoftware/
http://agtoys.sourceforge.net/

I'd love to find more places to discuss lightweight applications. If you've written an article on the topic, please share it. If you know of a good blog, forum, mailing list or other resource, please let me know ( http://www.distasis.com/connect.htm ). If you'd like to discuss your favorite C/C++ applications further, you're welcome to check out the mailing list: https://groups.io/g/distasis I had a mailing list on Yahoo Groups called CppDesign, but Yahoo is no longer supporting mailing lists. So, the new list on Groups.io replaces my old lists on Yahoo Groups.
2016-11-30 09:43 am

libSDL applications list

While libSDL is typically used for games, there are some applications that can be used to replace common desktop and productivity applications. I'll list the ones I've found here. If you have other alternatives, please let me know.

I've been working on simplifying the applications I typically use on Linux so that they can run in framebuffer mode using DirectFB or Nano-x instead or requiring X Windows. I'm always looking for portable applications, so I can run them on any system I'm using (at home or at work) whether it's Linux or FreeBSD or Windows or something else. I'd love to hear from others with similar goals.

The list just covers libSDL applications. They all built with SDL 1.2.x and I'm creating or locating ports to SDL 2.x as well. I haven't listed SDL based applications that use PDCurses or OpenGL/TinyGL. There are enough of those to warrant their own lists. More information on SDL applications and other screen libraries is available at: http://www.distasis.com/cpp/scrlib.htm#sdl I've posted some of the patches/build scripts for my SDL 2.x ports and will add more over time. You can find them from the archive link at: http://www.distasis.com/cpp/lmbld.htm

URLs are accurate as of when this was posted. However, they can change over time. You can use a search engine or archive.org wayback tool to find pages that have been moved or backups of older versions of pages.

Font viewers:

sfontview
Good for picking what font you want to work with quickly.
http://distro.ibiblio.org/puppylinux/sources/s/

sdl_unifontview
Let's you see all the characters in the font, so you can check if there's support for specific characters needed for internationalization.
https://github.com/mkiever/sdl_unifontview

Epub reader:

Bard
Includes text to speech capabilities using Festival Lite.
http://festvox.org/bard

PDF viewer:

SDLBook
I've been trying to put together a SDL based PDF viewer based on mupdf for a while now. Looks like someone beat me to it. SDLBook is a lightweight reader that can handle any formats mupdf and djvulibre libraries can.
https://github.com/rofl0r/SDLBook
https://codeberg.org/rofl0r/SDLBook

I assume SDLBook is designed for the latest version of mupdf. I backported it to mupdf 1.1 which was the last GNU GPL licensed version of mupdf. The latest versions of mupdf have epub support. While the 1.1 version does not include epub support, I've added cbr support using libunarr from sumatrapdf. The library handles cbr and cbz format. I also use nanosvg for SVG graphics.

Gemini browser:

Nemini
There are a few SDL based Gemini viewers, but I really like this one. It's very portable and fairly easy to build from source.
https://github.com/neonmoe/nemini

There are also SDL based web browsers such as a fork of links that uses SDL as a back end.

Word Processors:

There are a series of SDL based text editors that use a core of common code with some variations in order to port to various handheld devices. Tried building and running, but it's hard to work with since it expects an on screen keyboard rather than a real physical keyboard.
http://texteditors.org/cgi-bin/wiki.pl?search=GameConsoleFamily

Left
Haven't tried it yet, but this looks promising.
https://git.sr.ht/~rabbits/left

File Manager:

fm
Completely SDL based, two pane file manager.
https://www.raspberrypi.org/forums/viewtopic.php?f=9&t=1616

Graphics:

picaxo
Lightweight, fast graphics viewer.
http://gigi.nullneuron.net/comp/picaxo/

perigee
Slideshow viewer.
http://jstanley.pingerthinger.com/slideshow.html

grafx2
Graphics editor.
http://pulkomandy.tk/projects/GrafX2

lodepaint
Painting program and image editor.
https://sourceforge.net/projects/lodepaint/

sdl_svg
Older SVG library. Includes a simple SVG viewer.
http://www.linuxmotors.com/SDL_svg/

nanosvg
Supports SVG rendering and is not tied to a particular screen library. I built a simple SDL SVG viewer with it. If you're looking for SVG support for SDL, this is the best option I've found to date. (Looks like other SDL developers agree since it's been added to SDL2_image.)
https://github.com/memononen/nanosvg

photocrop
http://burningsmell.org/photocrop/

xtopng
http://burningsmell.org/xtopng/

fische
http://26elf.at/category/fische/

Tuxpaint and lunapaint are also SDL options for graphics editors, but I'm not currently using either of them.

Audio:

Milkytracker
Mod player. Can also create music.
http://milkytracker.titandemo.org/

wavetool
The project has a simple, lightweight wave file viewer. I added support so that it works with SDL in place of some of the other graphics options it used.
http://tph.tuwien.ac.at/~oemer/wavetools.html

sdl-widgets
Sample audio applications.
http://members.chello.nl/w.boeke/SDL-widgets/

AV players:

flxplay
https://www.libsdl.org/projects/flxplay/

theoraplay
http://hg.icculus.org/icculus/theoraplay/

webm-player
Unfortunately no one's added sound support yet.
https://github.com/doublec/webm-player

playvpx
http://www.philhassey.com/blog/2012/02/02/how-to-create-and-play-ivf-vp8-webm-libvpx-video-in-opengl/

GPS:

sdlmap
https://github.com/jhawthorn/sdlmap

PSP-Maps
https://github.com/deeice/PSP-Maps

Productivity:

Hyperlist
https://web.archive.org/web/20120630103356/http://www.zahniser.net/software/hyperlist

Astronomy:

nightsky
https://sourceforge.net/projects/nightsky/

Emulators:

DOSBox
http://www.dosbox.com/

8086tiny
http://8086tiny.freeforums.net/
http://jaybertsoftware.weebly.com/8086-tiny-plus.html

XRoar
http://www.6809.org.uk/xroar/