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 it the most important thing in my life. I cook gluten-free vegan meals. I use Linux as my desktop and Android as my mobile OS. For the rest you'll have to read my blog.

Caller ID Spoofing Gets Personal

December 16, 2017

Last night while eating dinner I received a text from out of the blue.

Sorry, I can’t talk right now.

I recognized the automated message, but I hadn’t contacted this person. I did not have them in my contacts or in my recent calls. After a bit of thought I came to the most likely hypothesis. A telemarketer had spoofed my number using their caller ID.

When caller ID first came out, the telephone company controlled it. All calls occurred over what we call the Plain Old Telephone System. It would take some real hacker know how to alter caller ID data. Then we invented VO/IP and everything changed.

VO/IP stands for Voice Over Internet Protocol. It covers the class of technologies which allow voice and video communication over the internet. Software such as Asterisk and Freeswitch allow anyone to freely configure a software based telephone system which would have required custom hardware and software in the past. I wrote the Philly Touch Tours phone line in Freeswitch.

Unfortunately, telemarketers can use these same tools to easily make anonymous international calls. Instead of their telephone company sending the caller ID data, their software switch sends it. Anyone can easily make their number read as anything. Any reputable VO/IP service provider would ban them, but these people do not care about reputation.

I can’t confirm that this happened in my case, but the facts fit. A random person received a call from someone with the same area code and exchange. This makes it appear like a local call. The recipient sent an automated text message, which as the true owner of the number I received. This left both of us feeling very confused. I explained it to them and they thanked me for the info, so I decided to write this article.

It pains me to see the plain old telephone system abused in this fashion. I remember when I would pick up the telephone and feel delighted to hear another human’s voice. Now I just expect to get scammed. We should not have to get rid of our land lines or nervously respond to unknown numbers on our cell phones, and Jolly Roger Telephone agrees. They make bots to waste telemarketers’ time, breaking their business model. Check out this great example!

A Thanksgiving Gift from Apple

December 06, 2017

It has taken over three years, but my first app Eyes-Free Fitness has gone live in the app store! I wrote it in RubyMotion. The project involves a team of people. Apple has given us quite a Thanksgiving present.

In June of 2014 I attended a tech event at the Associated Services for the Blind. A woman named Lynne Maleeff who works for Apple though not in this capacity battled an unruly crowd and discussed Apple technology. I remember sizing up the situation and trying to play defense, helping a few random users in the back with their problems so she wouldn’t have to. A few of us went out for lunch afterward, and Lynne introduced me to her friend Mel.

Mel Scott started BlindAlive to produce accessible audio workouts for the blind. She noticed that even if workout apps had VoiceOver accessibility, they assumed that the user could see the video. At the time I had given several speeches about RubyMotion, and planned to write an app, but hadn’t started on one yet. I agreed to write her app on the spot.

Mel and I began conversing. This happened in June of 2014. We threw ourselves headlong into the project. I met Chris Cox and Lisa Salinger. Chris writes the web site and the API which the app uses to get data. Lisa does customer support. A few others worked in the background, but the four of us had weekly Skype meetings, and slowly but surely the app came into existence.

I could never have written the app if not for RubyMotion. I have blogged and spoken about it a lot, and for good reason. I find Ruby a more expressive language than Objective C or Swift, and perhaps more importantly I far prefer using Emacs to Xcode. If you check Xcode’s reviews you’ll see why. Had I not discovered RubyMotion I would have probably decided to devote my efforts to other activities. Recently, Amir Rajan has taken over development, and I have good hopes about this. He has already proven himself by writing the extremely popular game A Dark Room, which has first class accessibility.

Writing an app doesn’t just mean writing code, it also means dealing with Apple’s way of doing things.

“I did it my way!”

Fastlane helped with some additional tasks, but I still spent far too much time battling with Apple’s developer portal and iTunes Connect. Sometimes it came down to accessibility issues, and a few times they even fixed them upon request. Other times it simply came down to Apple making things difficult for developers. I’ve begun to understand why many prefer Android development, but I also understand the reason for Apple’s curated approach. In either case you can’t do anything but accept it. I do feel I have some special cause to complain - if sighted developers find it confusing, try closing your eyes and using VoiceOver!

At times the project never seemed to end. I cleared hurdle after hurdle. We brought on testers using TestFlight. In time the app began to fill out and have the same features as the web site. Finally we decided to submit it for review to Apple. They rejected it.

It turns out that Apple requires IPV6 compatibility for any external services. I have no control over this, Chris does. It required him moving a lot of things around. We submitted it again. They rejected it.

They said that the app had in app purchases, but did not provide a way to restore all purchases. This confused me. I pointed out the exact steps to do just this.

  • Tap the button that reads Get Workouts
  • Tap the button that reads Restore All Purchases

They thanked me for the clarification. The app’s status changed to In Review. We waited…

I woke on Thanksgiving feeling a mixture of emotions. The holidays always make me feel a little cranky, but I also felt happy because of the Mystery Science Theater 3000 Turkey Day marathon. I have fond memories of that going back to high school. I meditated. I’ve begun writing a meditation app. The meditation helped, and my crankiness began to lift. I had some stupid notifications on my iPhone. I ended the meditation in my app, then checked my notifications. The app’s status had changed to For Sale! Apple had approved the app on Thanksgiving!

In shock I searched the App Store and sure enough I saw it: Eyes Free Fitness. It felt surreal after all this time. Mel and I had an excited chat amid our holiday gatherings. MST3K played in the background. Then it hit me. I did it. I had created something from nothing. I had my first app in the App Store. I felt thankful.

Migrating Verizon.net Email to AOL Mail on a Mac

November 01, 2017

My Mom has a verizon.net email address. Recently, Verizon sent out notices informing everyone that they would stop handling email, and recommended migrating to AOL.

“I won’t have an aol.com email address, will I?” asked my Mom.

I assured her that she wouldn’t. At first I simply updated the server settings, but in recent days things became unreliable. She could still receive email through POP3, but could not send mail. I also wanted to move her to IMAP. This took three hours and the help of a knowledgeable Verizon tech named Dan to figure out, so I wanted to document the procedure for any other Moms or anyone else in this situation. The AOL help does not include instructions for Apple Mail. That would make it too easy.

This looks kind of scary, but it works. And before I begin, if you don’t keep regular backups then you really should. On a Mac this means buying an external USB hard drive and setting up Time Machine. The procedure to migrate your account involves deleting your existing verizon.net account and creating a brand new account on AOL. Your messages will disappear but they will return if you do this correctly.

Open System Preferences, located in the Apple menu. Go to Accounts. Remove all of the accounts associated with verizon.net. If you have other accounts such as iCloud or Gmail you can leave those alone.

Now add an account. Select AOL for the account type. Enter your email address, for example whatever@verizon.net. Enter the password and continue.

If you get a warning about a duplicate account, do the following. Open Mail and go to its preferences. Go to accounts and remove any lingering verizon.net email accounts. Close mail’s preferences. Return to creating an account in your System preferences. It gets a little confusing since you have several types of accounts.

It will tell you that you need to create a custom account. For the account type, select IMAP. For the outgoing server, enter imap.aol.com. For the incoming server, enter smtp.aol.com. Hit Create, and with a bit of luck your account should show up in the list of accounts, and your emails should return.

That hurt my head. My mom gave me an apple pastry from La Colombe as a reward. If this post helps someone else in this situation then it will seem worth it.

BarCamp 10

October 18, 2017

It all begins at BarCamp! I gave my first speech at the unconference in 2012 and just gave another at the tenth anniversary of this defining event.

For those who don’t know, an unconference has the same type of schedule and format as a conference, except that the conference starts with an empty schedule. If you want to give a talk you show up and put it on the board and they fit it in. The event starts at 08:00 A.M. and they say to get in early to get on the board.

I woke up at 08:30 A.M. and sent in a plea via Twitter which they accepted. I rolled in around 10:00 A.M. and got online. I received an unexpected text message. I had left my keys in the Lyft. They returned them to security and the BarCamp volunteers did a great job assisting me. My Bring Back Mystery Science Theater key ring made them easily identifiable.

I gave my speech at 12:15 PM to a filled classroom. Some people came in and stood in the back at the end. My friend Meg from Snack like a Local showed up. The audience asked some good questions. Someone asked what I listen to. Later I posted some ambient music by the Future Sound of London. I also referenced my setup using the Raspberry Pi to replace AirPlay.

Listen to my Speech

After a half hour the talk ended and we went to lunch. I always look forward to going to the Sitar Cafe. We got back just in time to attend a talk about mnemonics, but we forgot the room number.

The speaker went over some basic techniques to aide in memorization. I knew of the Loci technique because I used it successfully when I gave my talk at TEDx Philadelphia. He also covered the Major System for memorizing numbers, which I once knew and need to relearn.

We took a break and got small smoothies and big cups with chickpeas. Meg wanted to see Rana Mayez, who organized an Arab-American punk festival called YallaPunk. I enjoyed thinking about the link between startups and the punk rock philosophy. I wondered if we would throw our cups in a fit of rage! That didn’t happen, but my cup’s fate seemed sealed.

A little over a month ago I met a guy named Ajmail. I recently told him about BarCamp, and how anyone could give a talk.

“Oh cool. I’m going to give a talk about psychedelics.”

he stated nonchalantly. It went on the board in the afternoon and quickly filled up. By this point a few friends had joined our core group. We found ourselves surrounded by a bunch of people, including many we already knew, which we found funny. Ajmail played a video about psilocybin, and talked about the efforts to make psychedelics more accepted in medical contexts, including a recent study from England. He covered microdosing, a practice which has become popular in Silicon Valley. A woman asked why we keep using spiritual words to describe the experience. Perhaps she will find out. The talk had become a fun mess of several concurrent discussions. Chaos had begun to prevail. Everyone laughed and talked and laughed a little more. My cup of chickpeas fell on the floor! At least they made some cool patterns.

BarCamp had started winding down. They made closing remarks and told everyone about the after party. I decided to tag along, even though I really wanted the opposite - a hardy meal in a quiet setting. We sat at a table at the bar and tried to have a conversation. Meg offered me a coffee covered cricket and I almost ate it before realizing that she meant it seriously. I’ll stick to hemp seed for easy protein!

I enjoyed the company but the party got progressively louder and louder until I could not hear anyone, and conversation became pointless. I got a ride home and crashed. Another unforgettable BarCamp had ended. Psychedelic!

Update, May 2018

Ajmail Matin contracted me to write the mobile platform for his startup. After three months of work done in good faith and in the worst of my eye pain I made it clear that I could not work until I got paid. He disappeared. This has nothing to do with BarCamp, but it does have to do with a person featured in this article. Please take note.

Replacing AirPlay with the Raspberry Pi

September 13, 2017

A number of years ago I decided to use AirPlay to stream audio through my condo. I picked the best solution for the time but had issues since day one. For a number of years I tolerated them, but I recently had enough. I have switched to a Linux-based solution using the Raspberry Pi and Snapcast. It works and sounds better, and uses open source software. It costs around the same, but potentially does more.

As soon as I began using AirPlay I realized that I would have to find my own ways of doing things. I have a lot of files in OGG Vorbis and FLAC formats, neither of which Apple supports. I also enjoy using the Music Player Daemon, and would far rather have used that than iTunes.

I wrote a simple article detailing how to play an MP3 stream. A few months later I wrote a more detailed article complete with shell script to make MPD work as an app running in Airfoil, a commercial product from Rogue Amoeba. This solution worked, but I always battled one thing or the other. My Apple TV would drop out. Sometimes sources would disconnect. It never ended.

One day I woke up to find that my Apple TV had updated its operating system. I felt pretty certain I had disabled automatic updates as everyone should. The update broke Airfoil and they did not have an immediate fix. I now had no audio for my analog stereo in the living room. I shuffled my Airport Expresses around, but I knew the end had drawn near.

I had such a great experience switching to Linux for my daily computing needs that I figured why not try it for whole house audio. I first considered PulseAudio over RTP, but read reports of mixed success and battles with network traffic. After a lot of searching and comparing I settled on Snapcast. The server simply takes raw PCM audio from a FIFO pipe and broadcasts it using FLAC. Clients then receive the synchronized stream and output it to an amplifier or speakers.

For hardware I used a Raspberry Pi. I ordered four, one for each of the AirPlay devices. I had one Apple TV and three Airport Expresses. The Pi has low quality audio, so I used the HiFiBerry. It took me a little to figure out which case to use. I recommend the stainless steel model. Better yet, just get the combo. As the tables below show, I ended up spending about the same abount of money for something with much more potential.

Cost of AirPlay Devices

Name Price Quantity Total
Apple TV 149.00 1 149.00
AirPort Express 99.00 3 297.00
Airfoil 29 1 29
Total     475.00

Cost of my Open Source Solution

Name Price Quantity Total
HifiBerry DAC+ Standard 28.90 3 86.70
HifiBerry DAC+ Pro 39.90 1 39.90
Raspberry Pi 39.90 4 159.60
Steel Case 24.90 4 99.60
SD Card (8 GB) 12.90 4 51.60
Power Supply 12.90 4 51.60
Total   489.00  

After a short amount of waiting my parts arrived. I installed the Snapcast server on my desktop. I installed the client on my desktop and on my Linux laptop to test it. I also installed the Android client on a tablet, and that came through in a pinch. The software worked flawlessly. To get MPD outputting to Snapcast I inserted the following in /etc/mpd.conf:

audio_output {
    type            "fifo"
    name            "Snapcast"
    path            "/tmp/snapfifo"
    format          "48000:16:2"
    mixer_type      "software"

When it comes to software I can solve any problem I need to, but when it comes to assembling hardware I feel like a bumbling fool. The blog claims you can do it in less than a minute, but it took a few attempts for me. The process involves connecting a board to each of the two parts of the case, then sliding them together and screwing everything into place. I eventually figured it out very late at night while rocking out to some eighties music. Truth to tell one still remains open to the elements, crudely connected to my beautiful boombox I’ve had since childhood. It seemed somehow fitting.

I installed the Snapcast client and everything went smoothly. The crown jewel came when I assembled the computer for my living room stereo using the HiFiBerry DAC+ Pro with its gold plated connectors. The lossless audio stream sounds stunning!

Now I have a little Linux powered computer in each area of my condo. I currently use them to stream audio everywhere, but they can do anything I can conceive of. This begins my journey to have an open source house. I wouldn’t want it any other way.

Turn the Page

Search my Weird Life