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 identify as 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.
A few months ago I began a project called Braille Street Art. A friend of mine does sticker art, and I had the idea to roll one up in a braille writer. The blind don’t usually have access to this form of art. For whatever reason, sighted people have also really begun to enjoy it as well. We had a booth at the Philly Tech Week signature event. Now, Geekadelphia has just nominated me for Visual Artist of the Year at the Philly Geek Awards. What irony! I must now accept the fact that I have become an artist.
When I first started this project, I just sort of went with it. I had a fun idea and it seemed to work. Having a partner with similar political and spiritual views also helped. At first we started out doing political slogans such as “Buy silver. Crash J.P. Morgan!” and “Aaron Swartz died for you!” We also did some animal rights ones such as “Love cats. Always adopt.” As I began to get the feel of things I started wanting to expand into more artistic realms. At the Philly Tech Week event I did one that said “e=mc^2”. I really liked the direction we had started going.
For a while I forgot about braille street art, though we both fully intended to do more. Then one day last week I woke up to a Twitter mention on my iPhone congratulating me for my nomination. I checked my email and sure enough, I got an email from the Philly Geek Awards team. They had nominated me, a blind person, for visual artist of the year! The irony overtook me, and I began to laugh and laugh. I posted on Twitter that if I won it would make me laugh for a year and I meant it. It would also speak to the diversity and accessibility of the awesome Philly art/tech scene. I didn’t even consider myself an artist. I just stuck a label in a braille writer.
I knew I had to make some more stickers. I recently reread Illuminatus!, one of my favorite books. I also read the Principia Discordia, the scripture of the Discordians. These gave me a lot of great ideas. The subversive nature of street art appeals to my Discordian side. I love having the ability to confront someone with a message in an unexpected way.
And with that I made some of my new batch. “Illuminate the opposition!” “The only solution is a yin revolution.” “Freedom defined is freedom denied.” “Omnia quia sunt lumina sunt.” (All things that are are lights.) I also made a few favorite including love cats, Aaron Swartz, and Protect Snowden.
I blessed the stickers and counted them. I came up with twenty-two. Discordians consider twenty-three a sacred number. I knew I had to make one more, a very special one. I also had a strange feeling that I would have some sort of realization with it.
But what to write? I settled on “The Goddess Prevails!” a standard Discordian exclamation. I then thought about the symbols. Normally on the bottom of each sticker I put my symbol, as well as The Cat Ears for my partner. When we started out I had no idea what symbol to use, so we looked at the glyph for my Mayan birthday. We used the number eight, which in the Mayan numeral system looks like a line with three dots over it. That worked well enough and I didn’t give it any more thought, until now.
The Discordians have a symbol called the Five-Fingered Hand of Eris, which consists of two arrows converging onto a common point. I realized I should put this symbol on the bottom of this special 23rd card. Then I realized that I should also use it as my own symbol. This batch of twenty-three cards served as the final steps in a birthing process. At the end I had my symbol and with it a realization. I have become an artist.
But what next? I enjoy doing street art, but it has its own set of limitations. I want to do something big. Really big! I have no idea what, some Goddess-inspired weirdness no doubt. Now that I consider myself an artist I have already bung having some very strange ideas. Stay tuned. And send good vibes to help me win the award for visual artist of the year. I heard last year they gave away a 3-D printed robot. That sounds cool!
I just released my second RubyMotion gem. I call it motion-accessibility. It makes it much easier to make your applications accessible by providing Ruby-like names to Apple’s accessibility APIs. I have some great plans for the future as well. It feels great to contribute to the RubyMotion and iOS community.
It all began at the RubyMotion conference. Colin gave me a little sneak peak at what would become motion-xray. We talked about accessibility, and I had the idea to make some sort of automated accessibility test. This way developers could get an idea of the accessibility of their views, with easily understood error messages telling them exactly what to do. I first thought of it in the context of Colin’s view inspector, but quickly realized the general application. I’d love it if in a spec file someone could just write:
And at that point I foresaw that I would write this gem, and call it motion-accessibility, and so help elevate the collective spirit of humanity.
I didn’t start work immediately, I needed some time to wind down. Instead I released another gem, golden-sections, but I knew I would have to do this. Then while on my Asbury Park adventure, someone asked if RubyMotion made it any easier to program accessibility. “Well…no…not really…but….” I knew I had to start work.
It took me two weeks to get the first version working. I kept thinking I had finished, but would then find one more thing that needed doing. First I realized that I couldn’t just alias the methods. Apple lets you define attributes in two ways: by using a setter or by overriding a method. Using a setter wouldn’t present a problem:
alias :accessibility_label= :setAccessibilityLabel
But what if someone wanted to override the method? I asked for help, and my friend Thomas from Germany suggested the method_added method. Now I had gotten into the interesting realm of metaprogramming. And it all worked. Now you can do:
and it will also override the original accessibilityLabel method. It works both ways. Ruby rocks!
I came up with some neat solutions to some things. For example, setting accessibility traits could take a lot of writing. Now instead of
you can write
Notifications also bothered me. Let’s say you have a view controller that at some point makes a change to the screen. You should tell VoiceOver of this by posting a screen changed notification. Before you would have to do
Ouch! How about
Much easier, don’t you think?
Apple has a bunch of protocols. At one point I swore if I read the word UIAccessibility again I would go mad. I kept finding new ones and new methods and figuring out the best ways to add them. I think I got them all.
Then came a real shocker, for me at least. I thought of these attributes and methods as relating to views or accessibility elements. I realized that they actually belong to the root NSObject class. As I explained in another post, in Ruby all objects have a parent. All objects go back to Object, or NSObject in RubyMotion. You can’t get any more “baked in” than that!
Now I can proudly say that yes, RubyMotion does make it easier to program accessibility. Enjoy more Ruby-like names and ways of doing things. I hope this will encourage developers to make their apps more accessible. I know it will help me. And the future looks bright, with thoughts of automated accessibility testing.
While speaking at the RubyMotion conference in Belgium I met Bret Morgan, who runs a coworking space in New Jersey called Cowerks. Since we live near each other and both like coworking, we had a good conversation and I agreed to speak at the Jersey Shore Tech Meetup. Two months past quickly and before we knew it the time had come. He arranged everything, I gave my speech, and we had a great time. I really like Asbury Park.
RubyMotion lets you write iOS and Mac OS apps in Ruby. A bunch of us love it. At their first conference I gave a speech about RubyMotion and accessibility, discussing the tremendous benefit an iPhone has for a blind person, how developers could make their apps accessible, and some of my own observations learning how to write apps as a blind programmer. It went over well, and I agreed to give a similar speech at Cowerks. Bret said not to make it too technical, so I substituted the code examples with an introduction to RubyMotion. I also updated the speech to reflect the exciting new development which lets me use the REPL with VoiceOver. I thought I had everything prepared down to the letter. Of course, life rarely works that way.
Meanwhile we planned logistics. Bret’s friend Meghan would provide transportation. Sure enough at 03:00 on the dot she pulled up. We made the drive in an hour and a half, not bad at all.
I arrived at Cowerks and set up my computer. It felt weird to work with my luggage sitting next to me. It also felt weird to sit in a coworking space other than Indy Hall. I kept expecting one of my friends to come up and say hi. I made some final tweaks to my speech and emailed it to Bret so he could try to coordinate the slides which now differed. And of course I would like to thank Adriano Martino of Italian Label for doing such a tremendous job with them. Bret and I grabbed a bite to eat at the cafe downstairs. We have identical diets: vegetarian leaning towards vegan, no cheese, and lots of garlic.
We came back up and Bret asked if I’d like to say a few words about Indy Hall and coworking for a video project. I said sure and to my amazement stepped out onto their balcony, and I don’t mean a tiny little balcony with a few chairs either. They had the real deal, with benches, tables, and even a hammock. Coworking from a hammock sounds like a great idea to me. I met the guy doing video and said a few words, still marveling at my surroundings.
I heard that people here run on beach time. I didn’t fully understand. The meetup started at 07:00. I remember checking the time at 07:22, and they still calmly waited for people to show up and made no attempt to start it. I had an idea, and rigged up KoalaSAN to stream the speech live, something I really enjoyed and will do again. Finally at around 07:30 we started. I love beach time!
The speech went as well as it could have. You can listen to it here or use the links at the end of the article. Even though I didn’t include technical material, I kept getting interrupted with derailing technical questions. I began to wonder if I should work in the more technical material, but I soldiered through my notes and finish the speech I had prepared and practiced. At the end we decided to go for it, so I went back to my Belgium speech and went through the technical details of the UIAccessibility protocol and related code examples. In hindsight it would have worked better if I would have inserted them at the proper point, but everything worked out. Bret said you never know who will show up, and this time we happened to get more developers.
After some closing words we went out for drinks. Some things never change. Just like after Philly Cocoaheads, I found myself at a bar, but not National Mechanics. I had a Black Hat #9 to get things started, but then switched to a local brewery called Kane. I enjoying sampling local beers and comparing their tastes. I had a hoppy IPA and one which tasted lighter called Carton. Event hough it tasted lighter it still had plenty of alcohol. For this reason, they call it getting Kane’d.
I met some cool people. A fellow pipe smoker named Dave gave me a tin of vintage Dunhill Nightcap pipe tobacco from 1995. I understand its value. He must have given it to me for that reason. Wow!
A girl named Jess and I talked a bunch. I mentioned the Dreamz app which uses the iPhone’s sensors to monitor your sleep state, and deliver an audio cue to help you achieve a lucid dream. A girl had an iPhone with a broken home button. Oh dear.
As the night got on I found myself in an enthusiastic discussion with a surfing instructor. He really wanted to take me surfing and I really wanted to go. He wanted to get in the cold water at 08:00 in the morning. Somehow I knew that wouldn’t happen. “I wouldn’t worry about it.” someone said. “He will probably call you on the other side of noon.” He hasn’t called me yet. I keep picturing a surfer in Asbury Park waking up the next day with a hangover wondering why he has the business card of an iOS accessibility consultant. Oh well. I really would like to try surfing with him sometime.
We got home a little after midnight. Justine made me a quick snack of pita chips and almonds, and gave me plenty of water. This helped so much. Nevertheless, the next day I got Kane’d! I felt better after lots more water, aspirin, and cacao, which I had brought with me. Bret had to get up early – running a coworking space means constant work. Justine makes jewelry and showed some to me. I enjoyed the feel of the polished stone and intricate wiring. Eventually we got ready to go.
The night before I met a girl named Kara. The parallels with Indy Hall continued, there Kara cooks dinner for night owls. Here Kara runs a vegan restaurant called From Seed to Sprout. It sounded like the perfect cure for the previous night. I had their multi-vitamin juice, a raw taco, and kale marinated in olive oil and salt. I also got a raw margarita pizza for later. It all tasted exquisite! I felt 110% better.
Meghan met us at the restaurant and we went home from there. At 03:00 I had made it home. Now I sit here with a pipe of this wonderful tobacco, my memories dissipating like its smoke. I thoroughly enjoyed my twenty-four hours in Asbury Park. Justine called it “Bizarro Philly” and that pretty much sums it up. It has a strong local vibe, but it also has a beach. It feels more laid back than south Jersey where I’ve often vacationed. I would definitely like to return. And if you find yourself in Asbury Park, definitely check out Cowerks and From Seed to Sprout. And try not to get Kane’d!
A few weeks ago I attended Open Access Philly. While there, I heard a presentation about a new service called SideCar, which does something called ridesharing. I felt immediately intrigued. As soon as I used it for the first time I knew it could revolutionize transportation, especially for the blind. The more I learned, the more intrigued I became. Now I want to tell everyone about SideCar.
I first met Yuriy at some event, I think the Drink Philly celebration. My friend Sonia introduced us but really didn’t get to talk. He runs Philly Startup Digest and works as a venture capitalist. He strongly encouraged me to come to an event called Open Access Philly. I said I’d check it out but sort of forgot about it.
Time passed, and SOnia and I did braille street art at the Philly Tech Week signature event. Yuriy acted as the carnival barker to use his own words. As things started winding down he came and sat down so we could talk. He got me a beer and we had a great conversation. He practically forced me to come to the next Open Access Philly. Civic-minded people meet and discuss their projects. It makes a great networking event, because the presenters actually get things done in their companies, they don’t just come there to get their name on a sheet. He wanted me to come for one or two meetings, then give a presentation myself. This excited me so of course I agreed to go.
While there I heard a presentation from Knick Knack Learning, an initiative to bring low-cost Android tablets to disadvantaged schools. I asked her about working with the blind and she wanted to know more. Apple products offer the best accessibility in comparison, but their higher price presents a challenge.
Then came the presentation about SideCar. Steve runs SideCar Philly. He introduced the company and the concept of ridesharing. Inspired by carpooling, SideCar uses an iPhone or Android app to connect drivers with riders. Riders enter their pick up and drop off locations, which gives drivers a way to only accept rides convenient for them. This makes it different from a taxi or limo service, or something like Uber.
Obviously people feel worried about safety. Their FAQ addresses this. A driver told me he had to give over practically every piece of information about himself to join: his name, SSN, driver’s license, insurance, and even his checking account. They go to great lengths to get the best drivers. A driver must also maintain a consistently high rating. Passengers rate drivers and drivers rate passengers. The company tracks the ride with GPS, and the passenger can even share this information with a friend.
A few days later I had a chance to download the app and try it out. I must say that the current version of the iPhone app lags horribly with VoiceOver, and I would like to work with the developers to resolve this. If you don’t mind battling with the lag then you can use the app. Sighted people won’t notice.
I entered my address as the pick up location, and Indy Hall’s as the drop off location. It displayed the estimated time of the nearest driver. I confirmed the ride and in a moment it dinged. The driver had accepted.
I still felt a little unsure. Would I get someone cool? Would I get someone mean? Would I get an axe-wielding maniac?
A few minutes later I got a notification that he had arrived. The button which says “Driver” calls him, so we talked and found each other. “So, you’re going to Indy Hall?” he asked. It turned out he worked with a database programming company which worked there. He knew exactly where to go, and we talked about programming the whole time. I felt amazed.
Every ride since then has seemed equally amazing. I have made friends with several drivers, and they accept my rides as soon as they see them. SideCar has revolutionized my life. It also has the potential to revolutionize Philadelphia.
And therein lies the problem. As of this writing, SideCar has entered into a battle with the Philadelphia Parking Authority. The PPA has their share of enemies. One restaurant will give you a free meal if you bring in a parking ticket. The cab companies have corrupted everything. This should not come as a surprise to anyone who has taken a taxi in Philadelphia.
The city of Austin, Texas undergoes a similar battle. I laughed when I read that article’s title: Austin Wants Sharing. Yes, I do! Similar situations happen in other cities.
Because of this unfortunate situation, SideCar cannot accept donations from riders in these cities. In response, the company has decided to make rides available for free. Yes you read that right, you don’t have to pay anything. The company pays their drivers themselves. Until they resolve this, you can get free rides in Philadelphia and some other cities as well!
Obviously this situation cannot last forever. They have had to cut down on the number of drivers. This decreased supply has met with an increased demand, making rides sometimes hard to find. This puts people off to the service, which could cause a vicious cycle. Have faith. The system works.
If they can resolve this battle, and I desperately hope they can, then they will shift to a donation-based model. Riders will make donations to drivers. Even when you do have to pay, it will cost less than a smelly cab. Donations will also give them the ability to expand the number of drivers. Then the system will begin to realize its full potential, and we can all get safe, comfortable and fun rides around the city.
Do what you can to defend ridesharing. Ridesharing means less cars on the road with less impact on the environment. Ridesharing means safe and easy transportation anywhere anytime. Ridesharing means something amazing for the blind and disabled. Ridesharing means the future.
I love it when technology makes an authority obsolete. Filesharing did it with music. Bitcoin has begun doing it with currency. Now SideCar has done it with public transportation. Join the ridesharing revolution.
Epilog: Today SideCar announced that they have discontinued service in Philadelphia. It really makes me angry. How will we evolve into an interstellar species with parasites like the PPA? Negotiations will continue, and they still hope for a resolution. I hope the story doesn’t end here.
While publishing my Golden Sections gem for RubyMotion, a friend on Twitter had an idea. He suggested making a podcast demonstrating how to write a simple RubyMotion app. Apparently some blind people have started selling their Macs because they believe they cannot program on them. I believe I have disproved this. Sighted people also felt curious, so I hope they will find it valuable as well.
The app asks the user their name, then displays it in an alert. I have written this simple program in a dozen languages, starting with AppleSoft BASIC. Now I can add RubyMotion to the list. It makes an easy demonstration. I use Geomotion, SugarCube, and Bubble-Wrap to make life easier. I also highlight the recent improvements to SugarCube which help make the REPL accessible with VoiceOver.
I recorded a podcast going from start to finish. I create the app, write a spec, test the app in the simulator, and deploy it to an iPad. I recommend getting the code from GitHub to follow along. Have fun. Write in if you enjoyed it or have any questions. I hope it will encourage you to check out RubyMotion and start writing apps of your own.