Welcome to my homepage. I became blind at birth from retinopathy of prematurity. I developed an early interest in computers and radio. I use Linux, MacOS, and iOS. I have an extra class amateur radio license. I practice Qigong daily. I consider myself a Taoist. I don't eat meat, and have a genetic sensitivity to gluten. For the rest, you'll have to read my articles.


December 01, 2014

Last month I spoke at CocoaLove, a conference about people, not tech. After traveling so much it felt wonderful to speak at a local conference. It had the feel of a classy European conference with the convenience of not needing to travel there. I enjoyed speaking there and I hope it will inspire others to have more conferences in Philadelphia.


The conference spanned three wonderful days. The opening keynote and banquette took place on the night of Friday, October 24. Mike Zornek, the head of Philly Cocoa, gave a great keynote about mentoring. Meanwhile I ate pasta and took in the good vibes. They chose the Chemical Heritage Foundation for their venue, a museum and hall. People had come from all over the country and a few even came internationally to Philadelphia. Everything felt wonderful. After it ended I just took an Uber back home. Excellent!

The next day I got up, ate breakfast, and took an Uber back there. I really liked having a conference locally. I would speak in the morning, and arrived shortly before my time. The non-technical format made my talk about accessibility very accessible. The crowd also felt very receptive. See it for yourself.

I got my adrenaline rush after I finished which always happens, so couldn’t focus too much on the other talks. I enjoyed them though, and I encourage you to check them out. All the non-technical topics began to blend together into an intellectual pillow. It all seemed to boil down to the Reiki precepts, which I will reproduce below.

For today only:

Do not anger

Do not worry

Be humble

Be honest in your work

Be compassionate to yourself and others

I took an Uber back home, ate dinner, and took a power nap. I loved that I could do this. Eventually I made it to the after party at Frankfort Hall. I had good conversations with people from Downcast, Mint, and the Omni Group. A guy asked me about Apple Maps. When he persisted I asked if he had an interest in cartography, and he explained that he works for Apple and used to work on Apple Maps but has since moved to the Apple Watch, which as I recently detailed will have accessibility. You just never know!

The next day they had a walking tour of the Constitution Center. I could not go because I had to have a meeting about the Map4Access Project. Also, eating cheesesteaks doesn’t do anything for me, a vegetarian. I hope everyone had fun though.

CocoaLove began as a few people talking after a meeting of Philly Cocoa. Curtis and the others had no experience running a conference and made it happen smoothly. The site already hints at CocoaLove 2015 and I can’t wait! I have told other conference organizers to consider Philadelphia. Perhaps they will begin taking my suggestion more seriously now. We have great venues, wonderful history, and from what I understand a small conference doesn’t cost a prohibitive amount. See you next year in Philly!

TEDx Philadelphia 2014

November 29, 2014

In late January I received an email inviting me to speak at TEDx Philadelphia, the local version of the famous TED talks. At first I mistook it for spam, but quickly realized its authenticity. I said yes, and spoke in late March. They finally got the video online in mid November. Now everyone can enjoy it!

Initially I felt nervous. I had no idea what I would talk about. Reading the TED commandments didn’t help. The conference had the theme of Philadelphia, the New Workshop of the World. I knew my talk would have something to do with accessibility and Philadelphia, and began to put things together. After a few meetings with the organizers I began to get an idea of what I wanted to say and started to feel better… sort of. They had a press lunch where I got to meet some of the other speakers and members of the press. The day before the event they had a dress rehearsal which helped a lot. Finally the day had come.

The conference took place at the Temple Center for the Performing Arts, with a crowd of around 1200. Hearing the size of the crowd kind of freaked me out. Thankfully I had brought my friends Sonia and Liz to keep me company. Sonia and I do Braille Street Art together, which I would mention in my talk. I met Liz at Indy Hall. She writes strange novels, does political fundraising, and makes yummy peanut butter treats, one of which she gave to me when I arrived.

We had fun listening to a few talks, then made our way to the green room. If you ever get accepted to speak at a TED talk, go to the green room! They had expensive herbal water and snacks which we enjoyed. They also gave out expensive printed programs, which seemed to impress Liz. Everything felt expensive.

The fatal hour approached, and my friends walked me upstairs. It felt like going to the execution chamber. The staff wired me up with microphones. I had gone through this before, but this time it felt different, like getting strapped into the electric chair. I heard them introduce me and my friends walked me on stage. I could not go back now.

As it turns out, I gave a wonderful speech. My worries melted away as I began. I used the Loci technique to build a mental model to keep me on track, since TED has a commandment that thou shalt not read thy speech. Rather than summarize it here, you can see it for yourself. Interestingly, they asked me to say at the beginning that I don’t work for Apple and didn’t know Steve Jobs, but they edited this from the video.

I came to the end of my script and the crowd applauded. I had done it! They took the microphones off me and I went outside to smoke a pipe. My family had all come to see me speak and ran out. Trish Maunder, the head of the touch tours program at Penn, came as well. Everyone congratulated me. Since I spoke near the end of the day we just hung around and mingled after the conference ended. After that a few of us wanted food so ended up at a Vietnamese place. I came home and rested.

The next morning at 09:00 my cell phone rang. People rarely call y cell that early especially on a Saturday so it seemed suspicious. I answered, and heard someone from Uber on the other end. Apparently my talk caused some exquisite controversy, another TED commandment. I explained the problem and feel delighted to report they have mostly improved things, and the lines of communication remain open. Uber has since introduced wheelchair accessible vehicles as well, so they clearly have begun considering accessibility.

I have never had so much attention after an event. I appeared in several radio and newspaper articles about TEDx Philadelphia. These include philly.com, the South Philly Review,bizjournals.com, Technically Philly, the Knight Foundation, Geekadelphia, PhillyMag.com, NBC 10, Parents United Phila, Flying Kite Media, and Keystone Edge. Wow! Some other good things have also happened as a result. Most recently I spoke to a class of Temple students because the professor saw my talk. A lot of people have begun identifying me as a “TED talker.”

TED tells its speakers to “bask in the glory.” I began to understand, but for a long time my talk did not go online. One day in the middle of the summer I received a printed letter in the mail explaining that they would have a new web site online shortly. The irony did not escape me, and it gave me a good laugh at least. Finally the talk went on their YouTube channel and I feel glad that I can share it with everyone who did not see it back in March. I worried that I wouldn’t like it, but it stands well, and other than Uber becoming more accessible little has changed.

Thank you TEDx Philadelphia for this opportunity to change the world, starting right here in Philadelphia, the new workshop of the world. We did it once, we can do it again. We just have to JFDI! They have already begun planning TEDx Philadelphia 2015, and I look forward to an even better conference.

Proof that the Apple Watch has Accessibility

November 19, 2014

In October, Apple announced the Apple Watch. The blind all wondered if it would have some version of VoiceOver, the screen reader which they have on all their other products. The demo showed interaction with Siri, but Apple never made mention of accessibility, and apparently no journalists thought to ask. Since all of Apple’s other products have accessibility built in it seemed logical to conclude the Apple Watch would as well.

Today Apple released WatchKit, the API which allows programmers to write apps for the Apple Watch. I feel glad to report that it includes some accessibility features. The information in this article comes from the iOS 8.2 diffs and the WKInterfaceObject reference documentation. Thanks to Jonathan Campbell of Access Ninja for pointing them out.

Before getting into WatchKit, you must first understand how a regular iOS app works. The screen of an app has a collection of views. We call this a UIView. Every label, button, image, etc. descends from UIView. Thus, if you can set a property on a UIView you can also set it on a UILabel or a UIButton. This includes accessibility attributes.

A standard iOS object has a number of these attributes. These include the accessibility label, accessibility hint, accessibility value, accessibility traits, and others. A programmer can define these to improve how VoiceOver interacts with their iOS app by calling methods, pieces of code which execute a function on an object.

Now we can move on to an Apple Watch app. The WKInterFaceObject forms the basic element in an app. It roughly corresponds to a UIView. Descendants include things like WKInterfaceLabel for a text label and WKInterfaceButton for a button. These act similarly to a UILabel or UIButton. A WKInterfaceObject has a property name, a width and height, and yes, accessibility attributes.

A WKInterFaceObject includes the setAccessibilityLabel, setAccessibilityHint, and setAccessibilityValue methods. The label tells VoiceOver what to read. A hint can provide additional information. The value can contain the value of something like a slider. iOS has these exact same methods.

While we have yet to see any demonstration of the Apple Watch’s accessibility features, these methods in the basic WatchKit interface object prove they exist in some form. I can’t wait to include them in motion-accessibility. We still do not know how a VoiceOver user will interact with these elements, but we know that the capability exists. If anyone can figure it out, Apple can. We know the Apple Watch has a speaker and the other necessary components to make an accessible interface. In fact, the forced simplicity of the design should work very well for the blind. I believe that the Apple Watch could become the next big thing for the blind since the iPhone!

EuruCamp 2014

October 06, 2014

This summer I spoke at EuruCamp. It took place in Potsdam, Germany. I spoke twice, participated on a panel, and made some new friends. Watch the video. I also had a miserable time in Paris.


One day I got a random invitation from Joshua Ballanco on Twitter. We had both given speeches at #inspect 2013. He gave a great talk about using the RubyMotion debugger. He asked if I would like to speak in Berlin and I said yes before I could think about it. It sounded like an adventure. So off to Berlin I went.

It took some planning. My sister Audrey and her boyfriend Chris would go with me to act as guides and to have a vacation of their own. When I used Expedia I spent over an hour getting everything right, and I had constant help. This time we opted for a human travel agent. My sister’s friend Mark of Liberty Travel helped us out. Things came together pretty well after that.

One unexpected thing did happen. Originally another European conference called EuRuKo would happen in the Ukraine, but they had to cancel it for obvious reasons. Because o this, the organizers of EuruCamp decided to combine the conferences. They asked the speakers if we would speak twice. I said yes. It would change the dynamic but I hoped it would make a positive difference. In some small way I could say I helped the situation.

The eight-hour flight went as well as it could have. The plane had an on-board system for watching movies. It didn’t have any accessibility of course, but Chris helped me select the Desolation of Smaug, and American Beauty. The two choices made an interesting contrast. Traveling east into the sun always feels weird. Your body knows that something unnatural has happened.

We finally arrived and met one of the organizers who drove us to the train station where we could go to the hotel. It overlooked a lake. The atmosphere felt pleasant. Audrey described the town as like a big version of Swarthmore that serves beer. We napped for a few hours, then I went to the speaker’s dinner. They had it at a nice outdoor restaurant. I had Caribbean style fried rice and vegetables. I didn’t realize, but Berlin and its suburbs have a very vegetarian-friendly attitude, the most in Europe according to some.

I came back to the hotel. The door had the weirdest lock. I can’t even fully explain it because I don’t fully understand it. You put a plastic card of sorts up to this little knob that turns. Touching the card to the knob makes it click, then you turn it and push on the door. The true knob that you would turn remains stationary. Very strange. At least I didn’t have to worry about anyone breaking in. “But the key wouldn’t open the door.”

I also took issue with the hotel’s crappy wifi. Germans have a reputation for technological excellence, but apparently this does not extend to this area. It only allowed two concurrent devices, and I quickly found out why. It went so slowly. I have never used such a horrible wifi. I hit send on an email, went to the bathroom, came back two minutes later, and it sent it right after I sat down. Terrible! I went to sleep longing for home.

I woke up in my living room chair. I felt the soft fabric, reveling in the sensation. I felt so happy in my home. But wait a minute. I didn’t remember flying back. And I hadn’t give my speech. How could I have gotten home?

Suddenly it all made sense. All of this happened in a dream, and I had just become lucid. I felt so excited. I called a friend on my iPhone and told them this happened in a dream. It amazed me that I could have this conversation. Eventually things faded and I woke up in my unfamiliar hotel bed. This gave the whole day a psychedelic twist. I wondered if we spent our whole lives like this – going through most of it unaware, but punctuated by sudden moments of lucidity.

My sister and her boyfriend brought me tea and a croissant. Registration for the conference didn’t start until later, so we had the day to have fun. We took the subway into Potsdam. We stayed in a small town near it called Griebnitzsee but I could never pronounce it. I called it “Grip-nip-zee” and that seemed close enough. I found it funny that the Germans complain if a train arrives more that two minutes late. Here in Philly we call that on-time!

We went to a historic palace with a park. They had a three dimensional model made out of metal. This really impressed me. I could feel the garden paths and towers. It also had German braille but it used different contractions than English braille so I couldn’t read it.

We enjoyed a snack at a cafe. I had a strawberry-rhubarb cake. The Germans enjoy good cakes in the afternoon. We concluded our visit with a trip to the gift shop. We purchased pieces of the Berlin wall encased in plastic. It has open sides so you can still feel it. It has writing which says “Checkpoint Charlie. You are now leaving the American sector.”

We stopped at a falafel stand on the way to the conference, then proceeded to register. They had the opening keynote outside on the front lawn. Again I enjoyed the outdoor venue. I ate my falafel and listened to the keynote given by Paolo Perrotta, the author of Metaprogramming for Ruby. He just released the second edition and I intend to read it. To become a great programmer, just keep learning.

Tech conferences always have parties. Normally I dread them because they often happen in loud confined bars. But once again they chose an outdoor bar for the party. This helped dissipate the noise. I nursed a beer and talked to some people. A guy recognized me from #inspect 2013 in Brussels. I met two people who know Alex Hillman, one of the founders of Indy Hall. They write software for managing coworking spaces called Cobot. Small world.

My sister went to get herself another beer. While in line she introduced herself to someone who said I would participate on a panel tomorrow. She didn’t know anything about it so thought she should bring him over. Of course I had totally forgotten as I promised I would. A guy named Ben asked me to join a panel about software design. So not only would I have to give my speech twice, I would also have to do this panel. I would have a very long day ahead of me, two days actually. Very long…

I woke up with a headache. That one beer did it. Eventually we got it together. Chris and I went to a local cafe. I had this fruit bowl kind of thing. It had a liquid grain on it. It didn’t taste sweet, instead I tasted the natural flavors of the fruit and grain. I really enjoyed it. I rested a little more to try to combat the jet lag. It sort of worked.

This conference had a mentor program. Every speaker got one to help them prepare. Mine named Jan suggested a demonstration of some of the apps I talked about. I liked the idea, but we didn’t know how to get my iPhone projecting. Nobody seemed to have a Lightning to HDMI cable, so we had to settle on using AirPlay. Jan asked me to download a piece of software called AirServer. I installed the demo unsure of what to expect.

The schedule said that the panel would happen at 05:00 PM and I would speak at 06:00 PM. They live streamed the entire event, and I heavily promoted my speech. I showed up at 04:40 PM and feel glad I did. They had changed the schedule at the last minute. Now I would speak an hour earlier at 05:00, in twenty minutes. This really pissed me off. I had just told friends and family to tune in, and done all the stupid time conversions in my head. Schedules exist so you will know when something will happen! “Didn’t you see the tweet?” Whatever.

While setting up I noticed a machine Named Eris. It belonged to Robert, the person in charge of the network. I asked if he meant it as a Discordian reference and to my delight he said yes. I have only met two other Discordians in my whole life face to face, we must stick apart after all. I felt glad knowing a fellow worshipper of the Goddess of primal chaos ran the network here. No one else could have done it!

I tried to get AirServer working but had never used the program before. Others tried to help and somehow we got working at the last minute, or so we thought. I began doing my speech. After talking about Color Identifier I tried AirServer. It completely failed. This threw me off and ruined my flow. I felt this way for the rest of the speech. I said we would try the demonstration of the end but I had to continue. I didn’t feel happy with my performance but others did so I tried to feel better. At the end we tried another demonstration but it did not go well. I tried to salvage what I could by making fun of Apple and AirPlay. “It just works, right?”

I felt so hot in my suit so went back to the hotel to change. They had perfect weather the whole time with temperatures in the 80s and low 90s with low humidity. The Germans complained about the humidity which made us laugh – try spending the summer in Philly! I put on something more casual since it didn’t seem to matter and came back to sit on the panel. My brain already felt fried but I tried to hold my own. I remember suggesting that when programming, if you find yourself making the same mistake to stop and examine why. For example if you keep typing the wrong name for a variable, ask yourself why you keep trying this wrong name. The mistake might lead you to a more logical way.

The first day of the conference had ended, thank Goddess. We went to a restaurant across the street from where we had breakfast. I had a great veggie pizza. It had corn on it. I didn’t feel like alcohol so had their version of non-alcoholic beer. It had a sweeter malty taste than beer. I came to enjoy it. We returned to the hotel as a tremendous thunderstorm began. Lightning flashed in the sky and I smelled ozone in the air. I tried to sleep. Normally I could relax after giving my speech, but not this time.

I woke up feeling very stressed out. We went to the cute cafe again. We decided to go kayaking on the lake. While signing up, they asked if we would like life vests. We found this funny. In America they would force you to watch a lame safety video, wear life vests, and probably sign something saying you wouldn’t sue them if you did something stupid. Not here. They led us to our canoe (they only had canoes for three people) and gave us our paddles. We spent over an hour going around the lake. It felt so peaceful. The rhythmic sound of the oars in the water relaxed me. It almost made me forget about the conference.

We made it back in time and I gave my speech again. It went better since I held the demonstration until the end. AirServer still crashed. On the schedule they had an event titled “Fishbowl” on the lawn. It turns out in this context it refers to a rotating discussion. I imagined something quite different and much funnier.

After that they had the closing remarks. They announced that they would not organize EuruCamp next year, and turned it over to the community. Don’t worry, volunteers have already emerged. I came up with a funny idea: let’s do it in Amsterdam and call it Hash.new!

I had to rest. I missed the party but didn’t feel too bad – I can’t do everything. It also seemed a little unusual that I didn’t see any of the other talks. I didn’t even know who won the race. Maybe nobody.

The next day we said good bye to Germany. We ate our final meal at the cute cafe. I had a croissant, tea, and a freshly squeezed juice of apple, carrot, and orange. They called it Mr. Orange. We made it to the airport without incident. On the flight I listened to the new Caustic Window album.

We avoided getting scammed by a cab (thanks Chris) and arrived at our new hotel. We went out for dinner. Everyone told me I just had to go to a cafe in Paris! We ended up at a chain, but we didn’t know that at the time. They didn’t even have any decent vegetarian food. I ate flavorless pasta and felt miserable. The city had too much noise. The Eiffel Tower lit up but I didn’t care because I couldn’t see it. I also drank some wine out of a small jug because hey why not? It’s Paris!

We got back and I checked my email. I received one from my bank, alerting me to fraudulent activity on my credit card. Earlier I had tried to use it to pay for my last night at the hotel and it didn’t work. Now the full impact of that occurred to me. Now I could not use my credit card. When I went to the bank’s web site to record the disputed charges, I found a form with unlabeled buttons. I felt depressed that once again a financial institution had clearly not considered accessibility. I cursed Paris, took a bath in the impossibly skinny tub, and went to bed.

I awoke to the sound of hammering.They nailed down carpet on the fourth floor. My sister had a migraine. I didn’t feel so hot myself. Eventually Chris and I went to a cafe. I had a good almond croissant, orange juice, water, and coffee.

They got some coffee, Eatin’ right through the cup

And when you go caca they make you stand up

Down in France

Frank Zappa

The food helped my head. A little later in the day I played the album Music has the Right to Children by Boards of Canada loudly near the window in an attempt to fend off the bad vibes. It also helped. Around 07:00 PM Audrey ordered room service, which she described as fancy airport food, coming in plastic containers and all. It seemed a little disappointing.

I needed a good meal. Chris found an Indian place online. I know that people don’t go to Paris for indian food, and that we could have found something more local and representative, but at this point I felt ragged and just wanted to eat something good. Paris presents a mobility nightmare. Streets go out from a center like spokes on a wheel.

Eventually Chris found the place. He said it looked dark. He saw a note in French which he figured meant “Closed from 08-04 through 08-06.” This happened on August 5. We felt defeated. We walked around for over an hour looking for options. A thai place didn’t even offer tofu with their curry. Other local places just had the same unexciting stuff.

Finally we walked in a big circle and ended up right by the hotel at Divino, an Italian place. I had a wonderful pizza with mozzarella, tomato sauce, sun dried tomatoes, mushrooms, olives, and arugula salad. They also gave me some spicy hot pepper olive oil. So good. I ate the whole thing in about 4.2 seconds. After that we went back to Audrey’s room and had macaroons that Chris bought. We especially liked the alt caramel and pistachio. We also had peach, strawberry, raspberry, orange blossom, and double chocolate. At least the day ended well.

I woke six hours later eager to get home. Chris and I ate some average food at the hotel then went to the airport. He said farewell. He and Audrey would continue their vacation. They have friends in England.

The staff at the airport treated me well. I got on the shuttle with everyone else. Suddenly an attendant came up to me and asked me to get off the bus. I felt a little nervous, but as it turned out they had an accessible bus waiting for me. I just relaxed and they drove right to the plane. Wonderful!

The flight went well. I met a nice stewardess named Dara then later another named Jennifer. I got two complimentary glasses of wine. I asked Dara for a beer. I pulled out my debit card and she said don’t worry about it. The man next to me only spoke french and Bulgarian. Still I somehow think he understood my good fortune. Meanwhile I watched the Big Lebowski and Fear and Loathing in Las Vegas. They made perfect choices!

I landed and they helped me with my baggage. Mom and I found each other and she drove me home. It took a week for my body to adjust to Philadelphia time. I had never traveled so far. I will never forget this amazing trip. By the way, I wrote the majority of this text at the Indy Hall Beach House.

Free NoIP!

July 02, 2014

I just had a little service outage. Sorry if anyone tried to access a file and couldn’t. As it turns out it has an interesting story that deserves attention. And as so often happens, the cause of the computer problem goes back to Microsoft.

As I detailed in a previous article, I use a dynamic DNS to run a server at home. A few days ago I noticed that none of the links to my machine worked. I realized that the subdomain didn’t resolve. The problem came from my dynamic DNS provider No-IP.

I originally chose No-IP because as a blind user I had problem using the captchas on all of the other dynamic DNS provider web sites. They actually had a phone number where a human answered and helped me create a free account. Because of their outstanding customer service and because I didn’t feel like renewing it every month, I became a paying customer. I figured my account had expired or something so logged in to the control panel. Instead of seeing a notice about owing them money, I saw a statement about the Microsoft takedown.

As it turns out, Microsoft seized 23 domains used by No-IP in an attempt to control malware. Some malicious hackers used these domains to infect many Windows machines. This made up a small percentage of the No-IP network. Microsoft went to a Nevada court and ordered this without contacting No-IP. This sets a dangerous precedent.

I could do nothing but wait and watch Twitter. No-IP had done nothing wrong and I did not blame them. As a sysadmin I could empathize, and sent good vibes. People began using the #FreeNoIP hash tag. This became a way to congregate.

The outage started on the night of Sunday June 30. The next day Microsoft released an untrue letter claiming service returned at 06:00 AM. The taunting and concern built on #FreeNoIP. Clearly Microsoft’s servers could not handle the flood of requests. On Monday night No-IP also apparently suffered a distributed denial of service attack. Finally at 07:00 PM on Tuesday July 2 my service returned. It felt kind of scary to have Microsoft take away my service for a few days. I have had a Microsoft-free house since 2009, so it felt annoying that they should cause a problem with my Linux server.

I encourage the media to investigate this story. We should all worry when one corporation can seize another’s assets. If Microsoft had contacted No-IP they could have resolved (ha ha) the matter. Instead they went straight to a judge, an four million innocent servers went offline. At least they shut down the 18,000 malware servers using exploits in Microsoft Windows.

Imagine if the police wanted to go after a small gang in Philadelphia, but instead of arresting the members they nuked the entire state of Pennsylvania. They would focus on the fact that they got the criminals. When people would point out that they also nuked the entire state and caused much collateral damage, they would just return to the point that they got the criminals. Microsoft acted similarly, though in this case they could undo the damage they had done. If these events go unreported and unquestioned they will only get worse. If we want a free internet we must peacefully demand it.

In the audio movie Not from Space, the owner of a radio network goes up against Bill Gates in an alien war over Earth. At one point Microsoft disrupts the station’s network to broadcast their propaganda. I guess sometimes life really does imitate art, at least a little. And on a conspiratorial note, I find it interesting that many sources list the number of seized domains as 22, but the court order clearly states it as the mystical 23.

Turn the Page

Search my Weird Life