Welcome to my home page. I became blind at birth. I started programming computers at a young age. I also earned my general class amateur radio license, KA3TTT, a hobby to which I have returned with great joy. I practice Qigong and consider myself a Taoist. I use Linux as my desktop and Android as my mobile OS. I eat gluten-free vegan meals. For the rest you'll have to read my blog. To comment on what you read here, visit Disboardia, my bulletin board system.
After twenty years of regular use, I finally had to get a new meditation cushion. As with my previous one, I decided to go back to Dharma Crafts. This time I got an organic one with traditional buckwheat hulls. As the description says, it feels like sitting on sand. This appealed to me because I enjoy meditating. I received it today and immediately fell in love. I have a new cushion for a new phase. Now I need to write about my new blog.
This week I volunteered to help teach a class about web accessibility for TechGirlz. This amazing nonprofit organization offers free workshops to help girls become interested in technology. I really enjoyed the experience, and hope the girls did as well. I look forward to volunteering again.
I became blind at birth, and my parents got an Apple II/e when I turned seven. Another company made a speech card and screen reader, and I quickly took an interest. One day, I didn’t know what command to type, so typed LIST. This listed the current program in memory (Eliza in this case). Instantly I understood that I could make this magic box do whatever I wanted by typing in instructions. I knew that I would become a programmer when I grew up.
I hated middle school. As the only blind kid in a public school, kids bullied me and treated me like an outcast. As a computer nerd growing up in the 80s, the school did their best, but didn’t really know what to do with any of us. They regarded us as antisocial and strange at best, and as potential hackers at worst. And from what I’ve heard, girls had it even worse.
Now, we have TechGirlz, a wonderful nonprofit organization which offers free workshops to middle school aged girls. I forget where I first heard them, at some random event most likely. I remember talking to a woman about Ruby on Rails, which I don’t even use, even though I write straight Ruby or RubyMotion constantly. I remained subscribed to their mailing list because I like what they do.
A recent email detailed some upcoming workshops, including one about web accessibility with screen readers. I felt so excited! Of course, I do this professionally, so look forward to sharing my knowledge. I also recalled an illuminating conversation I had with Leslie Birch where she likened gender issues to accessibility. Framing them that way caused me to understand them a lot more clearly. Now I had the opportunity to teach some girls about accessibility! I signed up before even reading any of the details.
First I had to pass some background checks. This just meant filling out some forms online. Quick tip: on the child abuse clearance form, their system has a bug inputting the SSN, at least with Safari. I proceeded without specifying my SSN and still got my clearance back in a few days.
We began exchanging emails. The lesson plan called for using VoiceOver, which comes on all of Apple’s devices. I use it daily, including right now to write this article. However, the woman at the library said they did not have any Apple products, but that the girls could bring their own laptops. I haven’t used Windows in years, so had to brush up on some things. I thought we would use the full featured and free screen reader NVDA, but we ended up using Narrator, which Wikipedia describes as a light duty screen reader utility. It didn’t really matter, since we would only do the basics. I also suggested headphones.
The day came for the event. The woman heading the event teaches web design at a high school here in the city, so I assumed that the event would happen there. As my centenarian grandmother would no doubt remind us: never assume anything. In fact, the event happened in a suburb forty-five minutes away. It would take more time and money than I anticipated. I ate a snack and pondered the situation. Of course I had to go for it!
I arrived just in time in true Seraphin fashion. We got right into it. The girls went around and said their names and something about themselves. The first girl said that she wants to become an astronaut and an aerospace engineer. I excitedly referenced the breaking news of NASA discovering seven new Earth-like planets. Should could easily make an equal discovery. I expect a card in twenty or thirty years when she does. Another girl acted shyly.
“Don’t worry, I’m shy too.” I said. Privately I thought that if she wants to become a programmer then she will fit right in. When people ask if I feel nervous when I give speeches, I often say that i dread attending the after party far more. Giving the speech just means following an outline with emotion.
During the introductions I also suggested saying if they knew anyone with a disability. One girl had a friend with autism. This started shifting the discussion. I got that idea from the disability sensitivity training offered by Philly Touch Tours, something any organization can benefit from. We also played a fun game where we wore cards with a woman’s name and picture, and we had to figure out her identity from clues. I totally blanked on retired supreme court justice Sandra Day O’Connor’s name, though of course I knew of her.
It amazed me that some of the girls went to a VR school. My parents had to fight with my school to let me use technology in the classroom. Things have certainly changed. Not only that, but schools now have a program called CTE, which stands for Career in Tech Education. I hope kids today take advantage. I can only wish we had programs like these growing up!
The girls got out their laptops and we got Narrator running. I felt kind of sorry that they had to jump in and navigate a site. I would have spent some time going over some screen reader basics. However, I know adult professionals who end up in that exact same situation, so it does mirror something from real life.
I forgot to share an easy way to check for basic accessibility: try navigating the site by only using your keyboard. Don’t even worry about a screen reader. This won’t show screen reader accessibility, but it will show keyboard accessibility. If you can’t access something with the keyboard, then you likely can’t access it with a screen reader either.
Things got a little cacophonous and I think the girls started getting a little bored. They took a break and we had snacks. One remarked about the amount of extra stuff she had to listen to. I’ve always wished I could convey to a sighted person the amount of clutter a blind person has to deal with constantly. If these girls walked away understanding only that then I consider this lesson a success.
We did a little more work after that. One girl noted that Narrator reads the URL, instead of the link text. They looked at various pages, including some projects they have worked on. One did a project about the Northern Lights. Another did a page about Andy Warhol. I showed off my Aftershokz bone conduction headphones. Finally, each had to summarize what accessibility meant to them. One girl said:
“Technology is only fun when it is not annoying.”
That pretty much says it all!
We said our good byes and I took a Lyft back to “the far away city” as one of the librarians referred to it. It felt really good to introduce accessibility to a young and receptive audience. I had a powerful emotional experience imagining a whole new generation introduced to the wealth of computer history and positive hacker lore. We can change the world!
I’ve had an amazing few weeks! At the end of April I gave the technology track keynote speech at the Accessible World, a conference about accessibility which took place right here in Philadelphia. Two days later I judged EvoHaX. I started getting sick, but gave a speech at Dev Talks with a bad sore throat. Then I felt sick for a week. Meanwhile, Philly Touch Tours has hit critical mass.
When Ather Sharif first announced the Accessible World, I felt very excited. The conference would last two days, and would have six tracks covering different facets of accessibility: technology, education, media, recreation, health care, and policy. At first, Ather asked if I would give a fifteen-minute speech, and I said sure. A few weeks later he revised that to giving the half hour tech keynote speech, and of course I agreed.
Meanwhile, Philly Touch Tours, the business I cofounded last year, wanted to play a part. EvoX Labs designed the page for PhillyTouchTours.com, so it seemed doubly appropriate. We created a tour of the Comcast Accessibility Lab, and the Common Touch exhibit. Trish and Katherine, my business partners, also agreed to give a speech. Trish’s daughter Katie gave a lightning talk as well.
After a lot of planning the time finally arrived. I didn’t go on the actual tour because I had seen both places before, and really had to work on my speech. The extra time did me good. I hope everyone liked the tour. Comcast does some amazing work in accessibility. And regarding Common Touch, I can only say that I never thought I’d consider the slate and stylus as advanced.
I only got a few hours of sleep as always happens before I have to speak, but I made it to the conference. My speech happened pretty early on, so I gave it then relaxed. At one point I slipped into a strange dream. They started talking about adapting science, using oscillators and graphs or something. Suddenly they played a loud tone (presumably from said oscillator) and it woke me up and gave me some strange visuals. I wanted to know more, since I always found science labs challenging, and fell asleep every day in chemistry despite my best efforts.
The first day came to an end. I just could not deal with going to the very loud TGI Friday’s. Instead I went home, ate, and rested. I loving having conferences in Philly! I woke up the next day to 193 emails.
I knew I would not make it bright and early. I rolled in around noon and heard a few of the afternoon talks. After the conference we had a happy hour. In an ironic twist, the waitress brought my flatbread, but neglected to tell me, so it got cold. Welcome back to the real world! I met a nice woman from England named Shre, and regaled her with P.E. horror stories. I promised her that she could ask any mainstreamed blind student and she’d hear similar. I think it inspired her. I had another hundred emails when I got home.
I got a day’s rest, then had to judge EvoHaX, the accessibility hackathon. I had judged the others, and felt glad Ather included me again. I thought that more had taken place, maybe five, but I guess not. They have that much value.
The winning team designed a camera meant for OCR scanning, turning printed text into speech for those with difficulties reading or the blind. The device included a camera, LED for providing light, and a bluetooth transmitter. It fit on the index finger. An app could then read the text in real time, using Google’s OCR engine for example. This device has great potential, and I hope they develop it.
The same goes for the other projects. The audience selected for their favorite a device to turn any audible alert, speech, or motion into a smart watch notification to aide the deaf. The prototype had a microphone and an accelerometer. Eventually it could transcribe speech, so it could notify a user if someone calls their name. This could help the hard of hearing a lot.
A team designed an app for mapping accessibility of buildings. It took me back to my work with Map4Access, which sort of brought things full circle. We wanted to do something similar, then we found out that none of the apps for gathering accessible data had decent accessibility. They just didn’t make it a priority. As a result we wrote our own and even conducted some trial research.
Finally, a team designed a really cool magnetic board for making tactile sketches. It had a grid of 384 nails, 18×24, or the common 2×3 ratio. A magnetic pin would pull them up, and a plastic sheet (or the top of the pen) could push them down. I already want the finished version. They spoke of digitizing it, which would open the door for a low cost braille display, not to mention tactile images. They need to increase the resolution and redesign the pen a little, but they already know that. Amazing!
This phase had come to an end, but I still had more ahead of me. Unfortunately I started feeling sick and I could do nothing. I had already promised that I would speak at Dev Talks about RubyMotion and accessibility. I love speaking to developers, and wanted to do something for Philly Tech Week. Even though my body hated me for it, I pulled myself together and gave the speech. I sincerely apologize for sucking on a throat drop the whole time. I simply could not have delivered the speech without it, my throat would have hurt too much. Despite that and my laptop dying I think it went well. You can listen to it if you dare. Also check out motion-accessibility.
Meanwhile, something else amazing had started happening. We got an email from Neema Roshania of News Works WHYY, and she came out with a crew to the Penn Museum. They did a story about Philly Touch Tours, and the story aired during the first day of the conference. They did a wonderful job. NPR picked up the story, and a version of it appeared nationally.
On Tuesday, the day after I started feeling sick, we had a training for the staff of the Magic Gardens. At the last minute we received an email from channel 3, the local CBS affiliate. They wanted to do a story, so they hurried out there, and sure enough it aired on that night’s five o’clock news. Incredible! Philly Touch Tours had hit critical mass.
That did it! I felt sick, but satisfied. I lay around for the next few days and gradually started feeling better. Now a week after Dev Talks I’ve finally gotten around to writing everything down and extracting all the audio. I hope you enjoy it. Remember to help make this an Accessible World! See you in 2017.
Happy Groundhog Day! Every February second I think about bulletin board systems, as I started mine twenty-five years ago, on February 2, 1991. Before the internet became popular, computer hobbyists would call bulletin board systems, or BBSes, over a phone line, using a device called a modem. A system operator, or SysOp, would run a bulletin board system on their computer, which would host callers. I ran mine all through the nineties, and still consider it the most fun I have had using a computer. Last year I began writing my own BBS software for the fun of it, and put up a small BBS in the meantime.
The internet pretty much killed off the small bulletin board system, much as global chain stores have largely replaced smaller more local establishments. A BBS felt like a village inn where people could gather and converse, transfer files, and played games. I wrote a popular game called Barneysplat! You can check out this great interview to earn more. I loved interacting with callers and providing a place for my fellow high school outcasts to communicate. I had a lot of fun but it eventually had to end…or did it?
Back then, we had to pay for long distance calls, or do something illegal. Now we can legally call a BBS half way around the world for free. Back then, most systems only had one node, or connection. Multiple nodes meant multiple phone lines, and a multitasking operating system. Now we can easily run a BBS with 100 nodes. We have what we always wanted!
A number of enthusiasts have setup bulletin boards running the very software we ran in the nineties, and in some cases active development continues. Calling some of them feels like going into a museum, with software with copyright dates in 1993, and ten-year-old discussions frozen in time. Don’t take that wrong – I cofounded Philly Touch Tours, a business which helps give the blind access to museums. I love museums, but I wanted something more modern.
Because of this, in 2015 I began writing my own retro-style BBS software package in Ruby. I call it Disboardia, a pun on Discordia, the goddess of primal chaos. It has all modern code, and uses modern gems and ways of doing things. This lets me leverage the awesome power of the Ruby language. I don’t need to invent a scripting language – I already have an awesome one! It will have the standard features, as well as the ability to customize it in ways we could only have dreamed about back then, unless we had access to the source code, a less than common thing. I will release Disboardia as open source, of course.
To customize the appearance and behavior of the BBS, it has textfiles and languages as many systems did. It also has a simple module system, using a number of hooks. Simply write the appropriate methods and register the module and let Disboardia do the rest. Finally, themes tie everything together. Ideally, you can make Disboardia look an feel like any BBS software you wish, and “mod” it without touching the stock source.
Working in a museum has given me an appreciation for replicas. In our tour about mummies, we obviously don’t want people handling a real brain hook, so we have a replica. This allows safe exploration while still handling a realistic object. Replicas help preserve history. In the same way, I want Disboardia to act as a toolkit to reconstruct the systems from times past, and maybe come up with some new designs for the future. I certainly have!
I really wanted to have something to show on the auspicious twenty-fifth anniversary of the founding of my BBS, but I didn’t quite get it done in time. Maybe I’ll have something by the summer. I work on it in my spare fun time. Until them, I have setup a small BBS to tide us over. Feel free to log in and say hi, but ultimately I plan to replace it with my own software. Still, I just had to do something.
Playing with different BBS software has proven very interesting. I wondered if it would make me want to write my own less, but it had the opposite effect. Many of them require doing some pretty advanced work to get them working, and some of them seemed unstable. If we want to bring back the BBS then we have to offer an effortless installation. Ultimately I want someone to type “gem install disboardia” as they would with any standard Ruby gem, do some minimal configuration, and have a working BBS on their system. I chose to run Synchronet for now because it comes closest to meeting these requirements.
I think people have begun to tire of monolithic social networks, and can’t help but wonder if bulletin board systems will make some sort of return. Every time I go on Facebook I miss the BBS days a little more. Most modern web forums feel kludgy and cluttered, especially to a blind screen reader user. Give me a simple text interface any day! Maybe people will use Disboardia, maybe not. Either way, I can one day check it off my list of things I wanted to accomplish as a seventeen-year-old, and that feels good.
Every few years I feel like learning a new programming language. After some thought and an amazing synchronicity I have decided to learn Clojure. Functional programming has become popular. I learned Lisp in college and loved it. Clojure derives from Lisp, and runs on the Java virtual machine, making it cross-platform. The thought of doing everything in Lisp again excites me.
John McCarthy invented Lisp in 1958, making it the second oldest programming language still in use today. Lisp stands for List Processor, because the linked list makes up the major data structure. I learned it in college for my artificial intelligence class. I got really into it. I felt its natural simplicity and organic beauty. I imagined Lieutenant Commander Data written in it. Lisp would change the future!
I went to college in in the late nineties, sort of a dark time for LISP and artificial intelligence. As a result my interest declined and I learned other languages, such as Perl and Ruby. I don’t regret this. They call Perl the duct tape of the internet. Ruby has a concise and beautiful syntax, and RubyMotion has opened some interesting doors for me. Still, I felt the time had come to learn a new language to keep my brain active and thinking in new ways.
Functional programming has gained popularity in recent years. It has existed for a long time, but renewed interest has come from needing to write code that runs on parallel processors and perform concurrent operations. It also requires a different way of thinking about solving problems. Pure functions take a set of values and return a value. They have no side-effects. You can use them as you would any other piece of data, which means you can do some really cool things with them. You can use them as arguments to other functions, or store them in a table. You can also compose functions based on other functions. Some of this might sound familiar if you’ve studied Algebra.
I therefore decided that I needed to learn a functional programming language. You can certainly use these elements in other languages, but mixed in with other paradigms. I wanted to feel a purity and clarity of logic. I first tried learning Haskell. It warped my brain in a nice way, but I stopped right before monads, something everyone warned me about.
Then I read a random tweet about Clojure. I had heard of it, Lisp for the Java machine, but hadn’t paid it much attention. I remember a talk given by Charles Nutter, about JRuby, so understood the advantages of building a language on top of a virtual machine. Then I remembered all the magical times I had with Lisp and the good memories came flooding back. I had found my perfect functional programming language! Its rationale makes everything very clear.
Lisp has a unique syntax. Most languages try to have syntax that reads somewhat like a natural language, and may have different syntactic rules for different things. For example:
- test_function( argument_1, argument_2, argument_3)
Lisp on the other hand represents all code as a list where the first argument represents the function, and the remaining arguments represent the arguments past to the function.
- (+ 2 3)
- (test-function argument-1 argument-2 argument-3)
- (def a (+ b c))
Note the nested lists. This has a natural symmetry and an organic beauty about it. No one has ever created a language like Lisp, and no one ever will. It has endured for a reason. It would not surprise me if we still used some variant in a hundred years.
Most programming languages have different implementations for different platforms, such as Linux and Windows. Clojure relies on the Java virtual machine to handle all the low level stuff. Sun designed Java as a cross-platform language. Clojure brings a modern version of Lisp to Java.
I quickly found the book Clojure for the Brave and True. . It has an easy-to-read style, a refreshing thing for a book about such a heavy topic. Coming into it with a rusty knowledge of Lisp has helped. So far I have made it to the end of chapter 3, and I completed all six of the exercises. It has me off to a good start.
I tweeted that I had decided to learn Clojure. Joshua Ballanco responded by sending me this graphic classic scene from Indiana Jones and the Last Crusade. “You chose…wisely.” The video inspired me. It captured the feeling perfectly. Indy found the true Holy Grail!
The next day, Philly Touch Tours had a handling session before a lecture at the Penn Museum. The lecture discussed Adapa, a Mesopotamian demigod. While fishing, the south wind overturns his boat, so becomes angry and breaks the south wind’s wings. This causes the wind to stop blowing, and he realizes that he must atone.
His father, the god Ea, warns him that when he goes to the gods, they will offer him the food and water of life. He must refuse, for they will try to trick him by giving him the food and water of death instead. Adapa goes to see the gods, and sure enough they offer him the food and water of life. He heeds Ea’s advice and refuses, then hears laughter. The gods actually offered him the genuine articles, and by refusing them he must return to Earth a mortal.
The museum brought some special artifacts from their collection for us to touch. We touched a clay tablet with intricate cuneiform. We held a beautiful smooth foundation stone. I had a Steve Jobs moment handling an ancient clay stamp, complete with handle. It felt ergonomically perfect in my hand, and I understood the tool’s function. The design still worked thousands of years later. I felt a powerful connection handling a tool used by an ancient people.
We touched a large clay brick like those used in the construction of a temple. I thought to put it to my nose and lightly smell. I faintly caught the scent of aged earth. I felt transported back in time. I smelled ancient Mesopotamia.
Finally we had pieces of pita bread representing the bread of life, and a chalice (really the jar of a canopic jar) filled with water, representing the water of life from the story. I nibbled on some bread, enjoying the tour. As they passed around the chalice I suddenly remembered the scene from the previous night. As I sipped the water of life I felt a new power surge through me. I knew that I must learn Clojure.
As the book says at the beginning: Deep in your innermost being, you’ve always known you were destined to learn Clojure. I had a very powerful synchronicity which confirmed this for me. Something amazing will happen as a result of this choice. Using a Lisp again also has a rejuvenating quality for me, since I learned it in the past. I’ve also gone back to using Emacs, and using a text environment written in a form of Lisp to edit and manage code written in another form of Lisp seems somehow right.</p>
This gives me an interesting feeling that I can’t quite explain, like the wonder of childhood mixed with the thrill of the distant future. I don’t know why I feel this way, but I will follow my bliss. The Goddess prevails! So does Lisp!</span>