You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

317 lines
20 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ideas | tait.tech</title>
<link rel="stylesheet" href="/assets/css/style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Tait Hoyem">
<meta name="keywords" content="">
<meta name="description" content="">
</head>
<body>
<div id="wrapper">
<header>
<h1>tait.tech</h1>
<nav>
<a href="/" class="nav-link" >Home</a>
<a href="/blog/" class="nav-link" >Blog</a>
<a href="/ideas/" class="nav-link" class="on-page" >Ideas</a>
<a href="/links/" class="nav-link" >Links</a>
<a href="https://github.com/TTWNO/" class="nav-link" target="_blank" rel="noopener noreferrer" >Github</a>
</nav>
</header>
<main>
<div style="position: relative;">
<a href="#toc-skipped" class="screen-reader-only">Skip table of contents</a>
</div>
<h2 class="no_toc" id="table-of-contents">Table of Contents</h2>
<ul id="markdown-toc">
<li><a href="#1-accessible-bios" id="markdown-toc-1-accessible-bios">1. Accessible BIOS</a></li>
<li><a href="#2-terminal-oriented-browser" id="markdown-toc-2-terminal-oriented-browser">2. Terminal-oriented browser</a></li>
<li><a href="#3-dead-simple-chess-app" id="markdown-toc-3-dead-simple-chess-app">3. Dead Simple Chess App</a></li>
<li><a href="#4-open-source-vpn-deployment-system" id="markdown-toc-4-open-source-vpn-deployment-system">4. Open-Source VPN Deployment System</a></li>
<li><a href="#5-3d-printing-of-google-mapsopenstreetmaps-data-for-the-visually-impaired" id="markdown-toc-5-3d-printing-of-google-mapsopenstreetmaps-data-for-the-visually-impaired">5. 3d printing of Google Maps/OpenStreetMaps data for the visually impaired.</a></li>
<li><a href="#6-3d-printed-binary-trees" id="markdown-toc-6-3d-printed-binary-trees">6. 3D Printed Binary Trees</a> <ul>
<li><a href="#65-javascript-binary-trees" id="markdown-toc-65-javascript-binary-trees">6.5 Javascript Binary Trees</a></li>
</ul>
</li>
<li><a href="#7-legopi-powered-logic-gates" id="markdown-toc-7-legopi-powered-logic-gates">7. Lego/Pi-Powered Logic Gates</a></li>
<li><a href="#8-more-tutorialsmaterials" id="markdown-toc-8-more-tutorialsmaterials">8. More Tutorials/Materials</a></li>
<li><a href="#9-self-voicing-modal-editor-like-vim-but-accessible" id="markdown-toc-9-self-voicing-modal-editor-like-vim-but-accessible">9. Self-Voicing Modal Editor (like vim, but accessible)</a></li>
<li><a href="#10-new-business-idea" id="markdown-toc-10-new-business-idea">10. New Business Idea</a> <ul>
<li><a href="#cost-and-copyright" id="markdown-toc-cost-and-copyright">Cost and Copyright</a></li>
<li><a href="#105-tactile-diagram-creation-tool" id="markdown-toc-105-tactile-diagram-creation-tool">10.5 Tactile Diagram Creation Tool</a></li>
</ul>
</li>
</ul>
<div id="toc-skipped"></div>
<h2 id="1-accessible-bios">1. Accessible BIOS</h2>
<p>Update:
See my blog post with the guy whos writing the <a href="/2021/06/21/uefi-audio/">new audio driver into EDK2</a>.</p>
<p>Some server motherboards include serial UART/I<sup>2</sup>C ports which can be used to manage a BIOS via serial.
If this is possible, would it be able to attach to a braille display via an intermediary like a Rockchip/Pi SBC or Arduino compatible chip using <a href="https://brltty.app">BRLTTY</a> and serial input from the motherboard?
Maybe not as it <a href="https://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/rhl-biosserial.html">appears to require</a> a full Unicode terminal, which I have the suspicion that BRLTTY will not be able to automatically filter out the formatting characters.</p>
<p>I found one paper referencing the (in)accessibility of BIOS, specifically UEFI BIOS from Brazil.
I have downloaded the paper and uploaded it here for reference.
<a href="/assets/pdf/bios-accessibility.pdf">PDF of “UEFI BIOS Accessibility for the Visually Impaired”</a>.</p>
<p>After emailing the authors of the paper, I found out that one of them, Rafael Machado, was able to get a song playing in UEFI as a part of his masters.
Here is a link to the Github <a href="https://github.com/RafaelRMachado/Msc_UefiHda_PreOs_Accessibility">Msc UEFI PreOS Accessibility</a>;
he has links to YouTube videos where he is shown playing a song on an ASUS laptop with PCIe connected speakers: <a href="https://www.youtube.com/watch?v=2De9dI9WbwM">Song Playing in UEFI</a></p>
<p>I have downloaded and played around with his Github project but to no avail.
Either I am not setting it up correctly, or I do not have the proper sound setup, but in any case no sound plays from either my laptop or desktop.</p>
<p>This requires more research and investment to understand UEFI, HDA audio, what systems have it and how to work with words and other sounds.</p>
<h2 id="2-terminal-oriented-browser">2. Terminal-oriented browser</h2>
<p>Use selenium to allow a cross-engine compatible terminal-browser with JS support. Yes, sure, it has all the bloat of the modern web as it uses the full code of Chrome/Firefox/Webkit—but at least it can be used in the terminal.
Guaranteed to be accessible.</p>
<p>Im thinking of similar key commands to Orca/NVDA but output is send to the terminal. Unsure of how to handle aria-live regions, but perhaps a queue could be used to print text. Unsure how to calculate delay as the user may be using a screen reader at different speeds and/or a braille display.</p>
<p>Change backend on-the-fly with a page reload. So if a website doesnt work with Webkit, load it in Firefox with a key command.</p>
<p>Just an idea.</p>
<h2 id="3-dead-simple-chess-app">3. Dead Simple Chess App</h2>
<p>I want to make a simple chess app which can connect to multiple backends
(i.e. Lichess, Chess.com, etc.) and then users can use one app to play many games.
This should be quite simple given how easy the lichess API is, and the <a href="https://www.chess.com/news/view/published-data-api">chess.com API</a> coming soon!</p>
<blockquote>
<p>This is read-only data. You cannot send game-moves or other commands to Chess.com from this system. <strong><em>If you wish to send commands, you will be interested in the Interactive API releasing later this year.</em></strong></p>
</blockquote>
<h2 id="4-open-source-vpn-deployment-system">4. Open-Source VPN Deployment System</h2>
<p>Help my business and others start their own.</p>
<ul>
<li>Update active servers with pings from said server. Encrypt with GPG to verify, send over HTTPS. Use sub-keys (?) so they may be revoked anytime. Use token to login server.</li>
<li>Ability to create new tokens with no priviledges; only to say “Hi Im still here.”</li>
<li>All IP address changes need to be manually approved.</li>
<li>Status queries, must be logged in: POST /status/[id/] should give back info about:
<ul>
<li>Number of connections.</li>
<li>Level (paid, free, plus when I can find out how to get Netflix working).</li>
<li>Protocol (OpenVPN/Wireguard). Wireguard should be default.</li>
<li>Max throughput (i.e. 1Gb/sec, 100Mb/sec)</li>
<li>Current average throughput over last minute, 15 minutes, hour and day. (i.e. 15Mb/sec 12Mb/sec)</li>
</ul>
</li>
<li>Decide server: POST /new/[coutnry_code/] should send a response of a possible server to connect to (or even the full Wireguard file possibly)</li>
<li>Get server files: POST /download/[country_code/[number/]] return the wireguard config file for that region, or a zip file containing the group of them.</li>
<li>A client would be able to use a native wireguard client on linux (i.e. store in <code class="language-plaintext highlighter-rouge">/etc/wireguard</code> (or its default location).</li>
<li>A client would allow local options like blocking LAN, kill-switch support, and the ability to change your VPN region based on latest list of servers.</li>
<li>The list of servers will be updated manually with <code class="language-plaintext highlighter-rouge">bt update</code>.</li>
</ul>
<p>I love this idea, but unfortunately, Canada has data retention laws that would stop me from protecting the privacy of anyone using a system delivered by me.
Unless I incorporate in Switzerland or the Seychelles, this is not a viable option.
Doing the above costs a fair amount in up-front investment that I am not willing to make at this point in time.</p>
<h2 id="5-3d-printing-of-google-mapsopenstreetmaps-data-for-the-visually-impaired">5. 3d printing of Google Maps/OpenStreetMaps data for the visually impaired.</h2>
<p>A larger project, to be sure, but one I think could be of interest.
Imagine being able to download some data from Google or OpenStrretMaps,
then put it into a program and have it generate a 3d map which can be printed.
Unsure what to do, as the braille overlay on top of the streets and important buildings, etc. needs to be of a uniform size (braille cannot be scaled) but the buildings, streets, and parks do need to be scaled in size.</p>
<p>I think for beginning, forget the braille entirely and simply product a map.
This can be done in the STL file format or some intermediary if that is easier.
Roads will have a slight border on the side,
parks will have a diamond texture,
buildings will have slight rectangular borders (slightly wider than the roads),
paths will be a thin line, and the label for the path will need to extend the thin line into a (rounded) rectangle with text on it.</p>
<p>Start with roads.
Get a road, get it to generate the correct shape.
Then add a border around the side.
Then, add 4 more roads and figure out how to intersect them.</p>
<p>If it can be done on a display, it can be done in a file.</p>
<p>Start with that. Wow what a daunting project!</p>
<p>This is being worked on through the <a href="https://github.com/skarkkai/touch-mapper">touch-mapper</a> project.
They do not, however, have labels yet.</p>
<h2 id="6-3d-printed-binary-trees">6. 3D Printed Binary Trees</h2>
<p>A simple hub/connection system to connect nodes of a binary tree together to have a physical object for visually impaired computer science students to use for initial introduction into the subject of (binary) trees.</p>
<h3 id="65-javascript-binary-trees">6.5 Javascript Binary Trees</h3>
<p>Have a simple module for loading in an SVG of a tree, along with Javascript to make the diagram accessible by jumping left/right with the arrow keys and up to a parent with the up arrow.</p>
<h2 id="7-legopi-powered-logic-gates">7. Lego/Pi-Powered Logic Gates</h2>
<p>Lego or 3d printed logic gates with physical switches for in and out.
Again, sore of as an introductory tool for blind students learning computer science.</p>
<h2 id="8-more-tutorialsmaterials">8. More Tutorials/Materials</h2>
<p>Perhaps a broader selection of materials for computer science students with proper transcriptions for everything in this list:</p>
<ul>
<li>UML diagrams</li>
<li>UML sequence diagrams</li>
<li>Gantt charts</li>
<li>Advanced math equations</li>
<li>Stacks, Queues and Linked Lists</li>
<li>Memory layout tables</li>
<li>Logic gate diagrams</li>
<li>Decision charts; I think I could add some macros on top of</li>
<li>Timing diagrams (i.e., watching the state of various inputs and outputs over time [usually in relation to a clock cycle]); my current idea for this is a dynamic audiogram where you can listen to the clock + any other tracks at the same time to “see” the diagram</li>
<li>Circuit diagrams (not 100% relevant, but I have seen it in CS courses)</li>
<li>Database tables as HTML tables</li>
<li>Properly transcribed security content like buffer-overflows, underflows and similar things</li>
</ul>
<p>Although developing these is good, I think it is worthwhile to also create tools that make creation of these easier for both sighted and blind individuals.
This will make it easier for course transcribers who are not tech-savy and will enable the blind student to create the diagrams and send them back to their teachers.
Preferably have a “plain text” version which can be rendered as an SVG for use by visual learners, then make sure the SVG can be accessible with a Javascript hook.
This would (in theory) make it possible for a teacher to create the graphic in the specialized tool for that kind of chart, put it in their slides/course info/textbook/whatever and have the student able to extract the SVG and paste it somewhere where a script could make it readable.
Yes, the best case is the teacher cooperates 100%, but considering that is never the case, I figure making it easier to convert between the two is the best I can hope for.</p>
<p>Some other things I would like to do, if I could find the time:</p>
<ul>
<li>How to get started with Linux.</li>
<li>Text-based tutorials from start-to-finish with various frameworks: SpringBoot (Java), Django/Flask (Python), JavaEE.</li>
<li>Specific programming language instruction in all the basics: C/C++, Bash, Python, Javascript, HTML, Java. Perhaps in the future branch into Rust, Golang, Zig or Haskell.</li>
<li>Custom-made braille manuals for a set of affordable computer parts which can be purchased to assemble a computer from scratch, without sighted assistance (see <a href="/2021/06/21/uefi-audio/">current status of accessible BIOSes</a>).</li>
</ul>
<p>This would all be licensed as CC-BY-NC-SA.
I may drop the NC. As long as I have specified SA, then anyone (even for-profit companies) can use it as long as any changes are shared to the public as well.</p>
<h2 id="9-self-voicing-modal-editor-like-vim-but-accessible">9. Self-Voicing Modal Editor (like vim, but accessible)</h2>
<p>Some pieces of conversation about it:</p>
<blockquote>
<p>“Vim itself is fine, almost any plugin that puts things on the screen isnt though because all Orca sees is a 2d grid of characters. Thats why I want to build my own modal editor, with a screen reader plugin. Id build one for vim but I really cant be bothered to figure out all of its quirks, and viml. I know I can write most of it in Python, but still, it wasnt designed to allow speech to read the stuff plugins throw on the screen, so it wouldnt work as well anyway.”</p>
</blockquote>
<blockquote>
<p>“Vim, which I intend to take inspiration from when it comes to modes and key bindings, doesnt really fit with the standard key bindings for moving around a graphical app, and its hard, sometimes impossible, to replace all the OS standard behaviour in graphical apps, especially while keeping it accessible. Plus, what if you want to run this on a Raspberry Pi, with no desktop environment? What if you want to include it on an accessible Arch Linux install CD, with no Xorg or Wayland?”</p>
</blockquote>
<blockquote>
<p>“Not just that, earcons for acknowledgement of your actions. If a : command is successful, play a small sound. If it fails, play an error sound and read the error. If your cursor smacks into a line boundary, perhaps play a sound. It all depends on the user settings of course.”</p>
</blockquote>
<p>All of these are from <a href="https://thefakevip.xyz/">TheFakeVIP</a>.</p>
<h2 id="10-new-business-idea">10. New Business Idea</h2>
<p>Given the current lack of accessible content at universities (see #8, I think),
what if I created a business around supplying accessible diagrams to the students.
I would have multiple services, and would price them differently depending on my involvement.</p>
<ol>
<li>Tool Access
<ul>
<li>The university already has somebody with some programming experience doing the transcriptions.</li>
<li>The transcriber needs some tools to make his job easier.</li>
<li>Python scripts to create binary trees, stacks and queues, concurrent blocks, clock timing diagrams etc.</li>
<li>Cheapest option as this requires very little from me other than hosting online access to the tools.</li>
</ul>
<ul>
<li>Note that although all the source code would be open source, unless the transcriber is actually a software developer by trade (which is very unlikely) they will need access to some kind of web interface to these tools, and they will not be ready to set it up themselves.</li>
</ul>
</li>
<li>Consultation
<ul>
<li>This is what I think works best for most universities.</li>
<li>A standard run-of-the-mill transcriber will transcribe all plain-text portions of the documents.</li>
<li>I (we, the company) transcribe all diagrams using our ever-expanding arsenal of tools.</li>
<li>Flat rate per course per month, over time with more tool development this will work in our favour; at the start it might not quite be worth it, however.</li>
</ul>
</li>
<li>Full Transcription
<ul>
<li>I (we, the company) transcribe the entire set of documents, slides, assignments, reference material, etc. (Although no textbooks… Unless the teacher created the textbook themselves, it would be very hard to get copyright on it… see more on this in next section.)</li>
<li>Most expensive option</li>
<li>Allows further development of the web tools for our own good.</li>
<li>Opens some position for semi-skilled collage/uni students.</li>
</ul>
</li>
</ol>
<h3 id="cost-and-copyright">Cost and Copyright</h3>
<p>So heres my plan for sticking to “free culture” licensing while still maintaining profit:</p>
<ol>
<li>License all code under the GPLv3</li>
<li>License all transcribed documents under CC-BY-SA-NC, and add transcribed files to a directory of information available to anyone.
<ul>
<li>(CC) You may change and redistribute our content.</li>
<li>(BY) You must credit the company.</li>
<li>(SA) You must keep the same license.</li>
<li>(NC) You may not make money selling the documents.</li>
</ul>
</li>
<li>If a school is willing to make the transcribed version of their courses available to the public, then I will offer a pretty substantial discount, probably in the range of 25-ish percent.</li>
</ol>
<p>I think it would be a great deal better for schools like SAIT, or AUArts, or VCC (smaller schools) to just contract out the hard stuff like this.
Given my experience with a larger school (SFU), it makes me think even large schools could use help with it.</p>
<h3 id="105-tactile-diagram-creation-tool">10.5 Tactile Diagram Creation Tool</h3>
<p>For the case of a diagram like a clock timing diagram,
which is basically impossible to just “write” in any exact way,
make a tool which can do the following:</p>
<ol>
<li>Take an image upload (a screenshot from a slide deck, preferably.</li>
<li>Grayscale the image.</li>
<li>Find text by OCR and offer to automatically delete it and replace it with braille.
<ul>
<li>Allow repositioning via an advanced feature set; automatically draw a line to where the OCRed text originally was.</li>
<li>This should be relatively straightforward, even with a complex diagram, you can always move the braille outside where the text is.</li>
</ul>
</li>
<li>Save image, print, run through special printer to make black “pop” off the page.</li>
<li>Send to student (by courier if local) and the fastest possible shipping by Canada Post/DHL/UPS otherwise. This is expensive, but necessary on tight deadlines.
<ul>
<li>The other option is to have a friend in various cities around Canada have a special printer and special paper that they can print on demand for me. More money, again, but also might be worth it depending of if I know I will have a consistent base of clients in a given area.</li>
</ul>
</li>
</ol>
<p>This seems like something that, if it does exist, is probably proprietary and costs the same as my services would as a whole.</p>
</main>
<hr>
<footer>
This page will be mirrored on <a href="https://beta.tait.tech/ideas/">beta.tait.tech</a>.
</footer>
</div>
</body>
</html>