Jörmungandr, Fenrirs Brother

Linux for blind general discussion blinux-list at redhat.com
Fri Jan 4 19:56:55 UTC 2019

Howdy Lists,

Sorry for the cross posting but i want to share some useful information 
to you.

Storm and Me cooking since some months a Idea i want to introduce here.

We call the Project "Jörmungandr". We choose this name because 
Jörmungandr is as a child of Loki Fenrirs brother. It is an huge Sea 
Serpent in Mythology.

Some information:

You may say: "WTF, chrys are you f..ing crazy? what do you telling here?"

Let me explain...

On Linux we work with different environments like TTY, GUI or an 
Terminalemulator. for this we fight with even more different screen 
readers. But all of them do a single job.

- Read TTY: like espeakup or fenrir
-Read Desktop: like orca or the old stalled gnopernicus
- spawn an subprocess to read an Terminal Emulator (PTY Emulation): like 
yasr, emacspeak or fenrir

Fenrir does already a good job for terminal emulation and read TTY as a 
single screenreader cause by its modularity...

This is not enought!

The Jörmungandr Project is a "new" screen reader what should be able to 
read All of our environments (TTY, GUI, TerminalEmulation). This is also 
not enough to me. I want to have it network transparent to be able read 
RDP, VNC, ssh or similar stuff (useful for admins). So its something 
like an uinified speakup, orca, nvda, yasr, sbl and so on.

Sounds like crazy shit and it is. but its indeed doable. And the best, 
we can reuse fenrirs codebase for some parts in first place.

Some technical details:

To have this we will create several components:

- Data Miners: running as standalone application to collect data for the 
given screen. Its something like an "Networktransparent Screendriver" 
what runs as own process and connected to an Processor and the Core. We 
will i.e. have Data Miners for PTY Emulation, TTY reading, at-spi 
reading and for inaccessible applications OCR.

- Processors: does work with data given by the data miners. GUI and CLI. 
it will do stuff like Review Mode, Define a Window or SayAll. So the 
Functionality. Why we need an own component for this? Lets say Text and 
Graphical environments are completely different. For GUI we have Roles 
(Button, Checkbox, Textbox) and States (Checked, Selected,Focused) what 
could be proceeded and presented. In Text we just have an 2D Matrix of 
Characters. All Textbased Mines will connect to an "Textprocessor" and 
all GUI Miners will connect to an GUI Processor to process the 
information correctly.

- Drivers: Like Braille, Speech, Sound, Input, Remote are connected to 
the core or loaded into the core. some of them are also Network 
Transparent to be able to run it on other machines to have speak at your 
server or anything else. you can have multiple Drivers of the same 
category connected to the core as well. maybe you want to create speech 
or sound at your server and your local machine as well (maybe you do 
help desk or switch between them). Some of them are loaded into the Core 
directly like input or remote.

- Core: Is where all pieces come together. Its the "Server" part of the 
screenreader. Drivers, Data Mines and Processors connects to it. it does 
manage the components, settings, event queue and the Shortcut handling

Not in 1.0:

- Fixer: Is loaded into the Core and connected to the Processors. It 
should "learn" about accessibility issues baased on the processed data 
and try to fix those issues automatically. I work a lot with Google 
Tenserflow and would use something like that. The idea is for example on 
websites fi you stuck in an area, Jörmungandr should recognice this and 
bring you out. or for some nasty timers what tick once per second what 
floods the TTS, detect those cases and make them more "quite". this is 
not part of the offical 1.0 but an nice idea for later. so i didnt 
finaly think about the design here.

I choose C++ as primary language for 3 reasons:

1. Many blind people seems to have problems with pythons indentation.
2. C++ offers all needed bindings
3. its fast as hell

Fenrirs components could be recycled for most part. those will be 
replaced step by step with an C++ component after having the core finished.

Jörmungandr should not only focused for Linux - But also work on other 
operation systems. to smelt them all together.

Let me know what you think. Maybe you wanna help? let me know. We need 
any help to accomplish this mission.

More information about the Blinux-list mailing list