Home

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.

Writing a Simple RubyMotion App with VoiceOver

May 18, 2013

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.

Golden Sections

May 11, 2013

I just released my first RubyMotion gem. I called it Golden Sections. It lets you create views based on the golden mean. I hope you enjoy it.

The idea started when making a view for a game. It occurred to me that I would have labels and values, a very common thing to do. Then I realized, instead of picking some arbitrary or round percentage, why not use the golden mean? This in theory would enable me, a blind developer, to make views that look more visually appealing.

Artists have known of the golden mean for thousands of years. The greeks wrote about it. Leonardo da Vinci used it in his works. Faces which conform closer to the golden mean look more beautiful. And the latest version of the Thesis WordPress theme employs it.

The README explains how to use the gem, so I won’t repeat it here. I find the implementation interesting, especially adding a golden_sections method to the Numeric class. I wrote a common handler for several of the methods, which cut down on duplicate code. I also wrote some nifty tests. Let me know if you use it in one of your apps. The concept of making visually appealing layouts purely with mathematics fascinates me. Give your apps the Midas touch with Golden Sections!

Using the RubyMotion REPL with VoiceOver

May 05, 2013

The Ruby programming language has a cool feature called the REPL, or Read Eval Print Loop. It allows entering expressions and seeing their results in real time. This can help test a program. If something doesn’t work you can enter expressions to try to narrow down the problem. You can also just have fun and tinker.

RubyMotion brings this same great capability to the iOS world. This lets you modify aspects of your application while it runs in a simulator. You can change the properties of a view and do any number of cool things. Many people consider it one of RubyMotion’s strongest advantages over Objective C.

In my talk at #inspect, I stated that the blind cannot use the REPL. Technically speaking, we can use the REPL, we can’t use the iOS simulator. This basically made it useless, since the simulator made it possible to navigate the app… or so I thought.

After I came back from Belgium I felt inspired to dive into RubyMotion, of course. I explored a lot of gems, including SugarCube. I had already started using it, but ignored the part about the REPL. Now I had another look and discovered the “tree” method. It lists all the current subviews in the current view. The “adjust” or “a” method selects a subview by number. And “a” by itself returns the currently selected subview.

Now I just needed to figure out a way to tap a button. I asked on the mailing list, and someone replied and suggested using the UIButton.sendActionsForControlEvents: method. Sure enough, typing

a.sendActionsForControlEvents(UIControlEventTouchUpInside)

worked. I whipped up a quick test method and it also worked. SugarCube also allows :touch.uibutton for easier reference.

I posted about my progress, and to my delight Colin added this feature to SugarCube. Now after selecting a view you can just type

a.trigger :touch

and like magic it will tap the button in the REPL. This makes it possible for me to use it, something I thought impossible only a month ago. I feel ecstatic.

This rapid feedback loop shows the strength of the RubyMotion community. In a very short time we added a great feature to a gem which will help everyone. It also totally opens the door to greater productivity for any blind developers. I said it in my talk and I’ll say it again here: the future looks very good for RubyMotion!

Braille Street Art at Philly Tech Week

May 02, 2013

Since publishing my initial article about braille street art, interest has increased. It has taken us by surprise. A friend who does sticker art inspired me to put one in a braille writer, since blind people don’t usually have access to street art. Something we did just for fun has really taken off. We even had a wonderful radio interview about it.

A few weeks ago, we received an invite to participate at the Philly Tech Week signature event. My friend called me and cautiously explained it, unsure of my reaction. I enthusiastically said we should do it. The whole thing seemed kind of surreal. We didn’t even know what we would do. We decided to make some stickers ahead of time, and I would bring my good old fashioned mechanical braille writer and we would also make some while there. This would bring an element of reality to the event.

Meanwhile, a girl named Taylor Duffy contacted us. She goes to the College of New Jersey in Trenton, just across the river. She asked if we would like to do a radio piece about braille street art. We said absolutely, and met on Skype. We also invited her to the event.

Friday came soon enough. Two of my friends also came along. Liz actually works as a braille proofreader, so I especially wanted her there. Angie loves exploring and technology, so I knew she’d have a ball. She also has a guide dog named Harry, who everyone loves.

The event happened at Urban Outfitters. The space really impressed us. Since we came early, I got a chance to use echolocation to see a huge space with hard walls and a high ceiling with random things all around. This included a car, yes an actual car inside the building. Just too much. Then the crowd came.

We just sat at our table, dealing with a constant stream of interested people. We gave out over thirty stickers. Liz did a great job proofreading. Our idea to bring the braille writer worked out well, because some proved very popular. This included “Love cats. Always adopt.” and “Open source heroes.” We had others as well: “End CISPA!” “It’s technology!” and “e=mc^2”

We also met some weird and wonderful people. One guy asked if Android powered my braille writer. “No,” I responded, “pure mechanical energy!” He works for the company that writes the awesome and accessible game King of Dragon Pass, so we had a great chat. Another guy writes flight simulators for the military. Someone invited me to a barbecue. And Yuri of Open Access Philly invited me there.

It started getting later. They didn’t have much vegetarian food, just small mall snack food, and I felt hungry, and I get cranky when I get hungry, and I also had two friends to suddenly feed. Just then, Taylor showed up. It felt great to see her. She interviewed us and some other people as well. She produced a wonderful radio piece. You can hear it here. Screen reader users might have better luck with this link.

We don’t exactly know what we’ve started here. A guy in the interview described it as “One of the most exciting things in art right now.” We believe this simple low tech street art will form the basis for something even greater. Stay tuned…

The Journey Home

April 19, 2013

_This concludes my trilogy covering my trip to the #inspect 2013, the first RubyMotion conference. If you haven’t, you should start by reading about the trip to Brussels, then read the coverage of the conference. And now we can bring this journey to an end.</p>

We woke late the next day. It felt like we had removed our masks. The carriage had turned back into a pumpkin. Ashley felt sick. I wanted breakfast.

We walked through the crowded square to the cafe where I had that great omelet. I craved the exact same thing. It really hit the spot. Then I realized that this whole time I had not tried a waffle. And so for dessert I had the Brussels Waffle. It had vanilla ice cream and chocolate syrup like hot fudge. I feel like a better person for trying the Brussels Waffle!

Ashley didn’t feel like doing anything, so went back to the room and I sat alone in the hotel bar. I really wanted to do something, so felt sad to find myself here. I figured I’d make the best of it so put the audio of my talk online. I drank two Leffe Blonds, and they brought me peanuts. I really wanted to spend time with some of the people at the conference, so posted a tweet with the #inspect hash tag inviting people to come by.

As I began to really feel discouraged I heard a voice calling my name. Marin said hi. He gave the talk about Bubblewrap. He hadn’t even seen my tweet. A few of them would go out for dinner. Of course I’d like to join them!

We almost went back to Spago, but decided on a cheaper Asian place. I had sweet and sour tofu. I made a new friend. We bored everyone by talking finance. I hope he writes in because we didn’t get each other’s info. How do those VIX options look now? After dinner we all went to a nice quiet local bar, where I had a local beer and a very enjoyable time. I came back to the hotel feeling better. It all worked out in the end.

In conversation someone happened to mention that Belgium would have their time change that night. I hate the time change so much! I always rant about it every time it happens! I wish we would just stay in daylight saving time. We don’t need to readjust our stupid clocks twice a year. So stupid.

I had already endured it here in America, and now I would have to endure it yet again. I left with a five hour difference and would return with six. I knew it would mess with my head even more. Stupid time change! And sure enough it happened. That did it, I meditated and went to bed.

I awoke on Easter sunday at 04:30 in the afternoon. I felt a little sick with a sore throat and runny nose. For some reason my mail server crashed, and my mail filtering had stopped. The wireless network drove me more insane each day, and now it had hit a peak. I really wanted to go home.

Several locals had warned us that everything closes down on sundays. And when they say everything, they mean everything! We could not find an open restaurant. Even the hotel’s restaurant had closed. We could only order from the bar menu. We decided to just go with it.

I actually had a real Belgian vegetarian dish of a salted waffle and seasonal vegetables. I enjoyed it. We also had red wine, figuring it would help our colds, plus the Easter symbolism, even though neither of us consider ourselves Christians. Still it does have a universal meaning we can all find some good in. For dessert I had an amazing fruit tart and a cocktail called a Mojito. I had never had one before, but enjoyed it. It packed quite a punch. We lounged on the sofas where we had eaten feeling very relaxed. Eventually we went back to the room to pack. It had finally come time to return home. I meditated for the final time there with my portable zafu and went to sleep.

Four hours later we woke up. I felt sick. We had breakfast and got assistance with our luggage. I really wanted one of the wonderful goblets from which they serve their wonderful beer. I asked the girl at the front desk if they’d sell me one. She said no, but she’d ask the bar to bring me one. She asked my favorite one I had there, and I said Leffe Blond. She placed a call, said something in French, and retrieved it. She even put it in a bag and wrapped it. I had a little piece of Belgium to take back with me.

The cab ride back stood in stark contrast to our ride there. The guy dropped us off in a road by the airport. We had no idea where to go. We found our way to the airport, and eventually to assistance. We got the last two seats on the plane. We had just made it.

I said good bye to Brussels. Good bye to amazing beer, chocolate, and waffles. Good bye to the endless cobblestone streets with every other shop a chocolate shop. Good bye to the statue of a urinating boy and of a smurf sitting atop a mushroom with a bite taken out of it. Farewell to spotty internet and no cellular communication. And so long to all the wonderful people.

The flight home went fine. I went with my mom to Hawthorne’s, the local cafe. It felt very surreal to drink a Leffe Blond there. After that I slept for twelve hours, then began settling in. My cat didn’t stopped purring for a week. She missed me so much. Well, I’m back.

By the way, RubyMotion first started accepting purchases for licenses a year ago. Since then it has grown to the point of having an international conference with 150 attendees. Not bad. Here’s to an even better year! RubyMotion will change the world.</em>

Turn the Page

Search my Weird Life