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 released under The Anti-Capitalist Software License

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

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 Pulse Audio

Recorder Daemon, or recd, uses pulseaudio 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.

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:

"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, 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.

If you hear earcons but no speech the first time, reboot your device. This happens because your rom does not have a built-in TTS Engine. The module installs espeak for you, but extraction of the data needed for speech synthesis is not attempted until the first time the TTS is accessed, which cannot be triggered programatically before talkback is activated. On the second reboot, talkback will come up talking as requested. In order to support accessible unlock when your device is encrypted, please install Google TTS or another TTS that supports android's direct boot facility, or use a pattern unlock until espeak adds direct boot support to their engine.

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:

Jenux Installer (dual i686/x86_64)

This is a bootable DVD 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