I did a quick talk and demo at iOS Dev Camp Colorado this past weekend in Colorado Springs about PassKit and how to update a pass using Apple Push Notification Service (APNs).
Tom Harrington (amazing organizer of the event) and a few others asked me after how hard it was to send push notifications to APNs using NodeJS. It was one of the most intimidating parts I had to figure out for my demo but it turned out to be incredibly simple.
I used node-apn.
npm install node-apn
That’s the first NodeJS code I’ve shared here. Be gentle. I didn’t really ask or search how others prefer to do NodeJS, I just wrote it in a style I like.
I try to always own up to my mistakes. We all make them. If we don’t own them we don’t learn from them.
This evening I got caught up in a “Twitter Outrage Frenzy” around HBO Now and Comcast. I saw some posts about Comcast subscribers not being able to get to order.hbonow.com. Being a Comcast subscriber I tried loading the page myself and it did indeed fail to find the server. I then tried on my iPhone over T-Mobile LTE and low and behold there was the page.
Then I made my mistake. I took to Twitter to pile on with my own story of how terrible Comcast is:
— Nick Harris (@nick_harris) March 10, 2015
I couldn’t believe a company would do such an thing, and that was also my mistake. I should have looked at the situation through Occam’s razor before the tweet instead of after – which I immediately did. Situations like this are almost *always* DNS related. I’ve spent enough time trouble shooting my own DNS issues to know. This smelled like DNS from the start.
While I was starting to look at different ways that DNS could cause this, Jason Livingood (@jlivingood) VP of Internet Services at Comcast, replied to my tweet explaining it was a DNS error on HBO’s end:
— Jason Livingood (@jlivingood) March 10, 2015
I quickly posted my own apology:
— Nick Harris (@nick_harris) March 10, 2015
Marcus Zarra’s post The Dangers of Misinformation has changed my perspective on how I use my digital voice. After my initial post I had a handful of friends try the same thing and jump to the same conclusion as I did. That is completely my fault. I used my digital voice to disparage the wrong party for an issue I was having. My “shouting” on twitter then had reverberations to people who follow me. That troubles me deeply.
I made a costly mistake on Facebook a few years ago that burned bridges that did not deserve to be burned. The way I perceived the situation correctly made me angry but it was only after hearing the other side that I realized my perception was out of focus. Since then I’ve been very cautious about what information I put out into the world.
Tonight I discovered that I still have more work to do. I own that mistake, along with its lesson.
Supporting multiple languages in an app is hard. One of the hardest things is finding spot on translations.
NewsGator Inbox, at one point of its life, supported a handful on languages. NewsGator outsourced the translation. We gave them our English string files and they gave us back translated versions. We would test them for UI layout but nothing else.
The nomenclature of RSS at the time was to refer to blog enteries as “posts”. When our partner got one of our translated builds they were not happy to see all blog enteries referred to as “fence posts” – the translation of the word our service used in all of our apps strings.
When writing my book I also noticed this. Wiley had multiple levels of copy editing and I realized as they went on that the purpose was to have copy that was easy to translate. It was a fascinating process.
I guess the moral of the story is that if you invest in translation, pay for a company that will know dialect and apply it wisely. Having a plan to verify the translations independently sounds like a good idea too.
The debate about whether a software engineer should go to college seems to come up from time to time. Some of the best developers I know didn’t graduate from college as well as some of the worst. To me its really just a personal choice. But if you have the means and the drive to get the most out of a college experience, my advice would be to take it. You’ll be surrounded by thousands of people who are all there to teach and learn. That can produce some pretty unique opportunities that can have a major impact on your career later on.
At Ohio University I had one of those opportunities. Being a fulltime student while finding meaningful work that can kick start your career can be a challenge. With that in mind, the university setup a program where students could apply for on-campus internships. You had to interview in order to get hired for any position, so you would have a few real world interviews under your belt. If you found a good job you could pick up some great professional experience while also broadening your skills and talents.
My senior year (1999-2000) I applied and got a job building and maintaining the website for the School of Visual Communication. I spent most of my days in the Mathematics and Engineering buildings working on Sun/Unix workstations writing code. This job meant that I got to spend a least a couple hours a day in a school that (straight from their current website):
“…offers an interdisciplinary visual communication degree with four specialized sequences: informational graphics and publication design, interactive design; documentary photojournalism for newspapers, magazines and the Internet; and commercial photography.”
After a few months I had become friends with the administrators and professors. They liked me enough that they allowed me to audit any class I wanted. I took them up and sat through an entire quarter learning how to use Photoshop and other tools to design and create web sites. It was fantastic to learn along side people who were creating the layouts, color schemes and graphics that I would then put together with my code to build cool webpages (as cool as webpages could be in 2000).
I look back on that experience as the time I discovered the importance of design in technology. Its also the first time I realized that as much as I love Photoshop, I suck at it compared to professional designers.
I’m thankful I had that opportunity. I wouldn’t have had it if I hadn’t gone to college, and I don’t think I would be the software engineer I am today without it.
Working with Node has been different though and npm is the biggest reason. Third party code dependency is a balancing act. Typically I avoid them, opting to use them as examples instead of forcing a peg into a square. But the idea of this was to get a prototype up with the least amount of effort, so I gave npm a shot and grabbed two frameworks…
I was up and running with my Express server in under 10 minutes. I would have expected much more effort.
My alpha prototype just needed a SQL backend. I’ve done enough with SQLite on mobile devices so I used it for my first go.
Once I downloaded MySQL Workbench, it was an easy decision to build on MySQL instead of SQLite.
I love stored procedures. Mixing SQL statements into other language code files has always made me cringe. Let the separation of layers work for you.
SQL is so powerful and database engines like SQLServer and MySQL use of Store Procedures allow you to encapsulate the syntax to exploit that power away from your C based algorithmic code.
I’m sure I’ll hit pitfalls, but this feels like a pretty solid technology stack.
Yesterday was my first full day of work with Yosemite. One of the first things I noticed was the plethora of notifications. I was getting notifications for every message on Skype as well as every incoming email with Gmail running in Safari. Being a savvy user I went to Notification Center in the Settings app and made the changes I wanted.
Today was my second full day of work with Yosemite. One of the first things I noticed was the plethora of notifications. I was getting notifications for every message on Skype as well as every incoming email with Gmail running in Safari.
I went back to Settings and made my changes again. I also made a note to make sure I wasn’t crazy at the end of the day.
This evening I logged out of my work account, then logged back in. All of my Notification Settings were back to their defaults.
Its hard for me to articulate in writing just how flabbergasted I am at this bug.
Saving user preferences is beginner stuff. How a bug like that could make it past any type of real world testing is beyond me. Add this to the growing examples of other “how did this make it into the wild” bugs – like iOS 8.0.1 – and I’m left seriously questioning Apple.
One of the biggest draws for me to make the jump from Windows to Mac was the simplicity and genuine quality of Apple products. Though the developer tools were downright terrible compared to .Net development, I trusted the OS and its frameworks to be superior to Windows and all of its flaws. But over the last two years, my trust in Apple has taken a serious hit.
I hold out hope that these problems are transient. But the more they pile on, the more I think that there’s a much bigger issue.
A tweet from Onyx Mueller caught my attention this afternoon. I thought I had spotted a TI-85. It turned out to be a TI-83 Plus (which took me a while to get the joke) but it reminded me of my old TI-85 and TI-92.
College was a challenge for me. Math is not my strong suit and I had to get through 4 courses of calculus. Luckily I found classes that allowed you to use a TI-85 or TI-92 (this was 1997). If you could program your calculator to solve the equations, you passed. I passed… then wrote a bunch of other programs on my TI-92 that summer.
I suppose I should count them as the first mobile computing devices I programmed for.
I found my TI-85 and TI-92 in excellent condition this afternoon:
and for fun, here’s a photo taken with my iPhone 5 of my iPhone 4, iPhone 6, TI-85 and TI-92: