Tech-related Projects

First and foremost, let's Get the boring Legal Stuff out of the way!

Unless Otherwise noted, all software and projects are not covered by any formal licenses and can be used, modified, and studied with no restrictions.

VirtualBox USB VM Installer

This script will allow you to create a VirtualBox VM from an OS which ships as a USB Flash Drive image, such as Jenux or Chrome OS Flex. Data such as the VM name, cores, ram, path to iso/raw image, maximum disk size, and other information needed to bootstrap the VM wil be prompted for when running the script, afterwhich the VM will be launched.

Android App Suite, shell based app backup and restore program for rooted devices

This program is used to backup and restore third party apps and data on rooted android devices. To use, place the file in an executable location, such as /data/local/tmp. The behavior is determined by the filename:

BlindShell ADB enabler

This file enables adb on the BlindShell series of modified android phones. Since these devices, as of now, ship with a root shell available in the service menu, this root access is leveraged to enable adb in the main system, allowing full customization and shell access. To use, do the following:

Notes:

Windows 2000 or XP VMs for android

This project relies on termux which hosts a local copy of the qemu hypervisor, controled through the avnc app, to run an accessible version of either windows 2000 or XP directly on an android device. With a keyboard connected, you can experience the fascinating pre-internet world of computing, play classic accessible games, and run old software. The installers are named supermechaboomboom-installer.bat, and can run on any platform supported by the Android Debug Bridge.

camocr: Converts Video from a capture device or camera to readable text

This program allows you to perform optical character recognition (OCR) on a video4linux device, such as a capture card or webcam. The only argument is the full path of the device to be used as input.

Software Requirements:

Hardware requirements:

Usage:

After providing the path of the v4l device, a low tone will be constantly emitted from the default playback device when no text is detected. If new or changed text is detected, a high tone will be played, after which the screen will be cleared, and the new text will be displayed.

Running:

#to use the first video input device

./camocr /dev/video0

#to prompt for the device

./camocr

Use cases:

Accessible, portable Dos Emulator

This package, using mame, provides a simulation of the following:

This allows a 1990's era, accessible pc to be simulated cross platform on anything that can run mame

To run, run startup.bat, press space or any key in both Dectalk and PC/AT windows, then switch back to the PC window and allow MSDOS to boot.

Chrome OS Flex Downloader

This script will parse the Chrome OS build description file, list available builds, and allow you to download a build of your choice, ready to be written to a flash drive or other media.

soxcom: Use sox as a network transparent intercom

This script for both unix-like systems and windows allows you to use the

sox

audio management program as an intercom, remote recorder, and sound player.

Python File Downloader and Verifyer

This set of functions downloads and verifies files against a given checksum. Docstrings are included.

Jenux ISO Downloader and Verifyer

This small python script downloads and verifies the checksum for Jenux, a universally accessible, secure, customizable Linux Distribution

Shairplay airplay server for windows

This is a build of the Shairplay program, which provides airplay streaming support for both Windows and linux. Run pservice.exe once per machine to install Bonjour services, then run build/usr/bin/shairplay.exe to start the shairplay server. While the server is running, your computer will act as an airplay speaker. Run build/usr/bin/shairplay.exe -h for usage instructions.

Click Here to Review the Build Script

Accessible Appliance Install Guides

Shows how to install various Appliance Operating systems

Python Android Media Controller

This script will use the adb command line tool to send media control commands to an android device. To use, adb must be located somewhere in $PATH. It takes one of the following positional arguments:

If ran with no arguments, the missing command will be read using an input statement. If planning to use over the network, you must manually run adb connect <ip>

Jenux Crostini Images for Chrome OS

These images provide a jenux userspace for chrome OS. Thanks to cros-container-guest-tools, linux apps will show up in the chrome OS launcher. To install, select a desktop from the list, download the image,, select it from the files app, and select restore. Linux applications will read using orca, the linux native screen reader. These images support direct integration with most of my projects listed on this page, such as the wine installer, vm script, kodi accessibility installer, among others.

To build your own images, you can use this script as a starting point.

Kodi Screen Reader Automatic Installer

This script for windows will install the Kodi Media Center, along with the Kodi Screen Reader, allowing eyes-free access to the kodi media center platform. The script will do the following:

A Mac OS X and linux version of this script can be found here

Audio Feedback Addon for Windows Boot Manager

This script, executed under linux, will override Windows Boot Manager with GNU Grub. This provides audio feedback and control over the following events before windows loads:

After installation, the configuration file which chainloads Windows Boot Manager will be located at c:\boot\grub\grub.cfg

For uefi systems, the original default loader application will be placed in the ESP at /EFI/Boot/bootx64.efi.orig

Accessible waydroid installer

This script, executed under sudo, will install and set up the waydroid container for android apps. This script will modify the projects images to allow for native translation of arm/arm64 instructions executed by apps to x86/x86_64 equivalents. The script will also install the talkback screen reader, espeak TTS engine, and support for google services such as the play store.

Contact VCard to QR Code Converter

This simple program will prompt for contact information and output the entered data as a VCARD, image and raw content of entered textt, as well as a QR Code, readable by most mobile devices. The following information can be stored:

BGT Serialized Dictionary to Plain Text Converter

This program can convert serialized BGT dictionary files to and from plaintext formats, allowing them to be read and written in standard programs such as text editors. This is a command line program. If ran with no arguments, a usage message will be displayed. Convertion of bools, doubles, floats, ints, strings, and unsigned ints are supported.

The source can be found here

CSV to JSON Converter

This zsh shell script can be used to convert a csv file into json. The field names must be the first line. Also, quotes will be deleted from values.

Virtual Number Pad for Windows

This program emulates a numpad. The mapping, static for now, consists of the following:

Activate any of these keys while the program is running by holding down control and pressing one of the above keys. Quit with control q.

The Source can be found here

Quick and dirty, but small! MAC Address Generator

This program will generate mac addresses based on the CRC32 checksum of entered data. Data can either be entered as the first command line argument, or, if missing, will be requested interactively. The generated mac addresses probably violate every possible rule set out by the IEEE, but on the upside, they are unique based on whatever data was supplied, so they can be used, for example, to uniquely identify traffic coming from VMs with a given name, among other uses.

Automatic Jenux and Android VM Creator

This script will allow you to automatically install either jenux or android. It uses my Qemu VM script, along with udisks2 in order to create and mount the virtual disk containing the unattend instructions. The progress of the install, as well as bootloader prompts for the jenux ISO can be monitored using qemu's serial console facility. If the supplied ISO does not exist, the script will automatically download the latest jenux ISO, as well as the latest copy of the VM script. The syntax is as follows:

./newjenux vm_name vm_cores vm_ram_in_mb vm_disk_size_in_qemu-img_format path_to_jenux_iso optional_path_to_unattend

If a path to a valid unattend is supplied, its content, such as Jenux installation settings, including user details, will be copied as is. If the path exists relative to the ISO root, the unattend will be copied from the ISO instead. For historical reasons, if invalid or no settings are supplied, an android 8.1.0 vm with 2 cores, 2048 Megabytes of RAM, and a disk size of 256G will be created.

vmsandbag: Qemu Internal Networking Made Easy!

This script will automatically set up one or more vde switches, connect them to a created TAP interface, set up firewall policies to disallow trafic to the host except for DHCP and the outside world, and allow VMs to only talk to each other, great for malware analysis, or simply screwing around in a safe and secure environment. This script only supports two commands as of now, start and stop. Upon a start, a new IP range and TAP interface is allocated. Interfaces are started and stopped in a FILO configuration, i.e. start, TAP0 is allocated, start again, TAP1 allocated and so on, stop, TAP1 is removed, stop again, TAP0 is removed, etc. By default, users need to be members of the network group to make use of the created interfaces. While dnsmasq is used as a dhcp server, VMs are required to have unique link level addresses, which must be set up manually.

Raw Recruit: Download and extract INF format drivers for apple hardware, without the need for bootcamp

Raw Recruit allows you to, with the help of brigadier, which is obtained automatically if needed, to extract windows drivers required for full functionality of apple hardware on the windows platform. Since the drivers are unpacked automatically, imaging of apple hardware using windows tools such as dism can be effortlessly automated, without having sub par functionality during setup, such as audio and network, which is especially important from an accessibility standpoint, illiminating the need for external hardware if the drivers are slipstreamed into an image ahead of time. Raw Recruit requires the following software:

Automatic Windows Install disk/flash drive creator

This script, given a windows ISO, containing an install.wim, can extract a given image index, add drivers for a given system, and essentially reimplement Microsoft's setup.exe using a created batch file. To run, create a directory called drivers, place system specific drivers in INF/SYS format anywhere unde this tree, select a disk index on the target system which will be wiped, and run: ./winmaker /path/to/windows.iso /path/to/output.iso disk image_index, replacing /path/to/windows.iso with a retail or other windows iso containing an install.wim, bcd, and bootmgr as well as its supporting files, /path/to/output.iso with the generated output, disk with the disk identified by diskpart, usually 0, and image_index with the index of the windows edition to install from the install.wim in the iso. Several outputs are produced:

  1. A subset of the install.wim containing only the source edition, saved in the current directory, for future use, since it takes quite a while to generate
  2. A legacy/CSM bootable iso
  3. The output with .img appended for writing to a flash drive, which is directly uefi bootable

If all requirements are satisfied, one can install a fresh copy of windows on a machine with enough physical memory to hold the boot.wim. The requirements for this script are the following:

espeak-ng build for android

This is a recent build of the espeak-ng text to speech engine for android, which contains more recent variants and voice data

The following changes have been made:

The patches that provide this additional functionality can be found here

Automatic Icecast Mountpoint Monitor

This script, given the status page of an icecast instance and the desired mountpoint, will echo the current and peak listener counts to your terminal every time they change. Each count is tracked separately.

Windows Defender Exclusion Helper Script

This Script, run as administrator, will allow you to exclude a file or folder from windows defender by simply opening the file's context menu and selecting Exclude From Windows Defender. This script only needs to be run once per machine. If the script is shown instead of being run, open the context menu on the link and select save link as...

Android Storage Maker for Rooted Devices

Using this script inside termux, a local image file, either an ISO or sparse image, can be exposed over the device's usb interface. This device can be manipulated like a standard cd rom or flash drive, partitioned, booted from, etc. The syntax is as follows:

sudo mkstorage function /full/path/to/image

The available functions are as follows:

USB Rubber Ducky HID Injector for Raspberry Pi 0"

This set of scripts, extracted on top of an arch linux arm installation for armv6h, can turn a raspberry pi 0/0w into a USB Rubber Ducky using its OTG connecter for power and data. Implementation instructions are provided with the package.

Talking Clock, In Eight Lines Of Code

This program is exactly what it says on the tin, a talking clock. The first and only accepted parameter is how many minutes between announcements. If no parameter is given, the default behavior is to announce the time every 15 minutes. For example, to announce the time every hour, run:

clock 60

Side note, since when do programs come in tins?

Recorder Daemon for PipeWire

Recorder Daemon, or recd, uses pipewire's virtual device support to create virtual recording devices that applications can use to listen to audio. It runs in the background, monitering headphone plug and unplug events. If headphones are connected, the default recording device is set to a virtual device, suggesting to newly started applications that they should record using that device rather than a real recording device such as a connected microphone. This allows the audio output from applications, such as media players, virtual machines, etc to be moved using pactl to the virtual devices, allowing the audio of these applications to be streamed, recorded, broadcasted over the network or to a file, etc, along with any audio from a connected microphone. If headphones are unplugged, the microphone's input will be disconnected, ensuring privacy for any newly started applications, as the default input for new applications will be the virtual device. While recorder daemon is running with connected headphones, your microphone's audio will be played back through your headphones, as well as any audio played through the virtual device. If headphones are not connected, audio played back through the virtual device will still be played.

The previous version, compatible with Pulse Audio, can be found here.

ClipTrans file and text transfer utility

This utility for windows 10 will allow you to transfer files and text to either a host on your LAN or the internet. Instructions and key commands are included in the program. While some functions, such as LAN probe to search for hosts are windows specific, all functions can be performed using the applets provided by most busybox implementations

The Source is available here

AutoMailer for Gmail

This program, given a valid gmail login and messages in html format, can be used to automatically send out emails to user specified addresses at a user specified interval. To use, create a gmail address and allow less secure logins in your account settings

The source code is available here

Shell Script menu Library

This simple set of functions allows you to easily create menus and retreive user choices from your shell scripts, both using items that you specify, as well as dynamically, using the output of commands. Two functions are provided:

The format of menus is as follows:

"title"
"item hotkey one" "item one text" "item n hotkey" "item n text"

Note: when generating your menus, make sure to use the -n option to echo, to avoidincorrect formatting. If you prefer the script to handle the quite literal dirty work of getting your options in the correct format, you can place your options, line by line, in a temp file, and do:
createdynamicmenu cat /path/to/your/temp/file
The following variables are returned:

Note that while waiting for input, all jobs that are not backgrounded are blocked while the menu is displayed waiting for user selection.

USB Gadget Manager for linux

This program will allow you to use your device's usb peripheral hardware to emulate a multitude of usb devices. Currently emulated devices are:

instructions are displayed when you run the script with no parameters.

Android Split Package Installer

This program, once copied on to your android device in an executable location, will allow you to install split apk files. Split apk files are used to segregate components of an android application. By default, the Google Play Store installs applications using this new apk format, rather than using legacy packages. This program also sets the originating installer package as com.android.vending, in order to make applications believe that the Play Store installed them. To use, copy this program and all apk files that are part of a split apk to a directory that your device's selinux wil allow you read access, such as /data/local/tmp, cd into that directory, make this script executable, than run something like:
./splitinstaller *.apk

VM Lab Web-Based VM Creation and management Kit

This package allows a competent linux user to deploy qemu vms, permitting user access through a web browser. Using the spice protocol, along with a preconfigured, slightly modified spice-html5 client, the scripts in this package, in combination with the free Lets Encrypt Certificate Authority, as well as the apache web server, allow users to access virtual machines, with audio forwarding for accessibility. If implemented correctly, this system will allow software training, demonstrations, and other previously inaccessible web based applications to be accessible to the blind, assuming a screen reader is able to be activated within the VM. After extracting this archive into your root directory and adding a system user called vmuser, with the home directory /home/vmuser, the following commands will be available:

Accessible Rockbox Simulator

This is a build of the open source rockbox software simulator with accessibility. While unofficial builds of the simulator already exist, they are not accessible to blind users because they do not include voice files. Since building voice files requires the use of the rockbox build system regardless, this prebuilt win64 rockbox simulator build was created using the ipodvideo target. To control the simulator, you can use the following keys:

To use this as a media player, unzip the file and place your music anywhere in the simdisk directory.

Talkback Installer For Android Custom roms

This flashable zip, installed as a module for the magisk root solution, will install the open source version of Google's Talkback screen reader, along with a build of the espeak speech synthesizer in order to make android roms without built-in TTS capabilities or Google Mobile Services accessible to the blind with no sighted assistance required for initial device setup. After installing your rom and magisk, download and place this zip on your device and install it like any other zip in recovery mode. Since this package is based on the Magisk Module Template Extended project, it does require magisk to be installed on your device. Once the module is installed, simply reboot and activate talkback with the standard accessibility shortcut provided by android. For your reference, an explanation of the shortcuts are listed below:

  1. For android 7.1 and lower, hold your devices' power button until you hear a sound or feel a vibration. Then, place and hold two fingers on the screen until you hear audio confirmation.
  2. For android 8.0 and higher, hold your device's volume buttons for several seconds until you feel a vibration.

In order to support accessible unlock when your device is encrypted, an espeak-ng build which supports android's direct boot facility is included.

The upstream source code for talkback can be found here The build of talkback for handheld devices can be found here The build of talkback for Wear OS can be found here The patches used to produce this build can be found here

SAPI Cortana and OneCore Voice Enabler for Windows 10

This script, run as administrator, will add cortana and all installed OneCore/Mobile voices to both the 32-bit and 64-bit speech control pannels. This will give you the option of using the offline copy of Microsoft Eva, the current voice for cortana, and theoretically any other voices that microsoft adds in the future, assuming the internal registry formats do not change too much. Simply download the script, go to where you saved it, context menu or right click on it, and choose the run as administrator option. Since it also is registered as a 64-bit voice, it can also be used in Microsoft's default screen reader, Narrator. I have also tested it with several audio games written in the BGT language, as well as the free NVDA screen reader.

VM Creation script for qemu

This script can be used to create vms using qemu. It provides the following functions:

To connect to your vm after startup, copy the [vm name] file to the control host and run it through VirtViewer

To connect to the qemu monitor, copy the [vm name].pem file to your control host and run: openssl s_client -CAfile [vm name].pem -connect [remote host]:[remote port]

Before running the vm script, install the socat program, ovmf firmware and virtio-win iso, packages socat, virtio-win and ovmf in arch.

Digital Sign In Sheet for Windows

This program is designed to keep track of sign ins to an arbitrary number of activities where no complex solution is required. It logs names, dates, times and activities to a simple text file that can be printed or integrated into a more complex solution if required.

The Sources can be found here

Keyboard tutorial for windows

This program will speak and display pressed keys. Most common keys are spoken, including letters, numbers, common symbols, and text editing keys such as arrow keys, backspace, and other commonly used keys. Using the learnkeys.ini file that the program creates in the current directory, you can change the font size of the interface, startup and shutdown messages, which key sequence is used to exit, shift escape by default, and how all supported keys are displayed and spoken.

The Sources can be found here

Sound Board for braudcasters and augmented communication

This program, once executed, can be used to map key presses to sounds. It is configured using the soundboard.ini file that it generates in it's current directory. The default prefix key combination is control+alt. To program a sound, hold down the prefix key and press a letter, number, or function key. A file selection dialog will appear. Simply select a sound, and the program will remember and play back the sound every time the key is pressed. In case you edit the ini file, the program will reread it's config file every few seconds. To change the prefix key or other settings, change the prefix line in the general section of the config file. Two special values are supported, quit, which unloads the program from memory, and reload, which stops all currently playing sounds and force rereads the config file. By default, quit is bound to prefix+q, and reload is bound to prefix+r. Since the program can be activated using standard key presses, it can be used as a communication aid for those with physical disabilities using alternative input devices that can be programmed to mimic key presses. A caretaker can record and assign sounds for commonly used phrases or other messages.

The Sources can be found here

ebook and document reader for cygwin, linux and mac OS X

This program, given a filename, will make a copy of a supported file and convert it to speech. Adding supported file formats simply requires adding a function that will copy the text of the document to standard output. As of now, the following file types are supported:

1: doc(old Microsoft Word files), uses the catdoc program, which can be installed using your package manager, apt-get, dnf, zypper in linux, and homebrew in Mac OS X

2: docx, uses libreoffice, also installable through your package manager.

3: pdf, both textual and images, uses programs from the popler package, pdftotext and pdfimages, as well as tesseract to ocr images if the pdf cannot be automatically converted to text

4: html, uses the lynx textual browser, which is usually called lynx in package managers

5: JPEG, JPG, PNG, and TIFF image files, uses the tesseract OCR program to extract readable text from these types of image files, even while offline.

6: epub, uses the unzip and lynx programs

7: pptx, uses libreoffice to convert to pdf as an intermediary, runs the pdf to text logic on the intermediary file, then deletes the intermediary file

This program uses espeak to read the output of the text converter functions, and sox(Sound Exchange) to playback the generated files. A speech rate of 175 words per minute is used by default, however, the commands used to speak the text from the converter functions, as well as the commands used to play sounds, if necessary, can be changed by changing the syncmd, synargs, playcmd, and playargs variables near the top of the code. This script will run in cygwin. I plan to make a premade version with all of the dependencies and a GUI based file selection utility in the near future.


Youtube Music Downloader and player for linux and cygwin

This program, given a song title, or artist and title, will allow you to download and listen to the many songs available through youtube. It uses the curl, ffmpeg, youtube-dl, zsh, and sox programs. Upon playing any song, the program will place the file in the .cache/ytplay directory in your home folder, allowing you to play the songs you have downloaded, even without an internet connection. A Windows version of this program is available here. The source code for the windows installer is available here


Large Print and speaking Keyboard practice utility

This program, written for windows, allows you to practice your keyboarding skills. After indicating how many lessons you would like, the program will display and speak a key, requiring you to press the key, advancing to the next lesson if you typed the correct key, and flashing the screen red and re-dsplaying the key if you did not type it correctly.

The Sources can be found here


Spiel Screen Reader for Android

This is a build of the spiel screen reader for android. Spiel was a popular and feature filled screen reader in the days of android 2.3 Gingerbread. Surprisingly, it is still being maintained and updated. This version is built from the source listed below:

https://github.com/beqabeqa473/Asra.git

Jenux Installer (tripple i686/x86_64/arm64)

This is a bootable USB image that can be used to install either android or a fully accessible Arch Linux based System called Jenux. It runs on any intel-compatible (32-bit or 64-bit) computer. To start the install, select install Jenux on this device from the main menu. If you are familiar with the Linux command line, you can use this image to repair a damaged system. both csm(legacy bios) and uefi compatible systems. The Jenux installer also has the ability to flash an image to an sd card compatible with the Raspberry Pi series of single board computers, as well as reset a forgotten windows password. For instructions on configuring boot settings for the iso, which includes enabling and disabling speech, choosing a screen reader for the live environment, enabling ssh with a given password, automatically connecting to a wifi network, as well as configuring an unattended install of android or jenux, or accessing a device's disk over the network, a sample config file, which serves as a readme, can be found in rootpasswd.sample in the root of the iso.

Click Here for a sha512 checksum to verify iso integrity
A demonstration of the installation process, along with playthroughs of several audio games can be found here Click here to view a demonstration of how to set up a base install over ssh Click here to download the build script and other files needed to build your own customized copy of the iso

Access Stick Launcher for Windows

This program, once placed onto a USB flash drive, can allow anyone to use any windows computer that allows executing third-party code for free. This program presents a talking menu interface which lets you select speech using a preconfigured copy of the NVDA screen reader, magnification of on-screen elements using the Virtual Magnifying Glass magnification program, or a program that will convert a PDF file or a standard image file containing possibly unreadable text into a standard text file. All of these programs are contained in module files that get extracted on first use to the flash drive containing the main menu program. Please Note: while downloading the modules, it is normal for the program to appear as if it is not responding. If windows notifies you to close the program, please wait for the process to complete.


If having issues with or don't want to use the launcher, you can download the individual modules here

Accessible Wine Installer for linux

This script will allow you to install a wine prefix with speech support. It installs the speech SDK, which contains the SAPI DLL, the microsoft TTS engine, and the RHVoice BDL voice. Since the speech SDK is 32-bit only, the generated prefix is also 32-bit. Since screen reader support is not yet possible in wine, this prefix is only useful for audio games or self voicing applications which use SAPI as a speech method. Since most of these applications are 32-bit only, the lack of 64-bit support is not currently considered an issue.

Android Wear TalkBack Installer

This is a script that will make most android wear smartwatches with recent Android OS Versions use the talkback screen reader, making these useful classes of devices usable by those that cannot see the screen. Note that as part of the installation, you will need sighted assistance to enable USB debugging, accept an authorization prompt, and pair a bluetooth headset or speaker with your watch if it does not have a built-in speaker. To enable USB debugging, go to settings, scroll down and tap about, tap build number a few times until the screen reads “You are now a developer.”, go back to the main settings screen by swiping left, tap developer options, tap adb debugging, plug the device into the computer and accept the authorization prompt. To pair with a bluetooth speaker, go to settings, scroll down to bluetooth or bluetooth devices, make sure your audio device is in pairing mode and tap its name.


Back to Home