-
Working for "the man", 2 years later
Three years ago this May, I quit my job and started being an independent software developer doing contract work. I decided that I was tired of my IT job and wanted to go back to writing code all the time (which was a change from a year and a half before that where I was tired of writing code). Working for my last company made me realize that I no longer wanted to work for anyone else and I wasn't going to work for a large company again (I worked for Qualcomm at the beginning of my career. I wanted to be in charge of my work and control my own destiny; I believed that I could only accomplish this being self employed.
About six months after that, I was offered a full time position with eBay and took the job. This, of course, went against me not working for someone else and not working for a large company. Many factors went into the decision, one being getting to work with a lot of really good people; something I hadn't done in years (I had worked with good people, but only a handful).
One of the keys to job happiness, I believe, is good management. Management has to balance overseeing employees with giving them the freedom to do their jobs. I've been quite lucky to have a manager that does this well. I've also been giving the opportunity to work on a number of projects and put my finely tuned skills to work. While I've had some difficulties on some projects, my manager has helped me through them and put me in a position that some say is enviable. At the moment, I control a lot of what I do; based on high level goals, I get to decide what to do on a day to day basis. This is what I believe I wanted when I told myself I wouldn't work for anyone else again.
As for the large company, I work in a group that is fairly small and almost acts like a small company so I don't feel like the big company is constraining me.
I've come to realize my flip flopping on not wanting to write code and then write code has to do with a good mix of work which I haven't had until now. I was either writing code all the time or not writing code at all; I'm now in a position that I get to write some code, but I also get to do other things such as think about high level application architecture. If I want to write code, I have the flexibility to do that.
So, while I'm not saying that this is the perfect job (there is no perfect job), I'm quite content and plan on sticking around for awhile despite the constant recruiters contacting me from companies whose products you use everyday.
-
Bluetooth Knowledge Followup - Apple Radar Filed
In my last article, I wrote about an issue I had with my Bluetooth heart rate monitor and my Bluetooth headset. After analyzing the issue and trying to reproduce the issue, I was unable to do so in my office and then on my next run, everything working perfectly. However, on my run this morning, the problems came back. When I got home, I turned off RunKeeper and ran my test app. My test app either disconnected or I heard an audio dropout every 6 seconds. The big difference between my initial tests and this test was that my heart rate was up and the contacts on the heart rate monitor were conducting quite well. This would indicate that the issue is not a RunKeeper issue, but either an iOS issue or an iPhone 5 issue.
I've gone ahead and reported it to Apple as radar://13004711. Based on my past history with Apple bug reports, I don't expect a resolution any time soon. This would be quite unfortunate as more and more Bluetooth devices come on the market.
-
Using my Bluetooth knowledge
In November, I saw that TI announced a product called SensorTag which is basically a development board for working with Bluetooth 4.0. I was immediately intrigued as iOS 5.0 supports Bluetooth 4.0 (LE) and lets me write apps that aren't certified by Apple via the Made for iPhone program. I ordered the device (it was $25 which I consider a bargain) and then in early December, it arrived.
While I had no real use for it, I decided to learn how to write code to use Bluetooth LE and wrote a app that monitors all the sensors in the SensorTag and reports them. The TI app did this, but wasn't very elegant and I also wanted to add alarms for high/low temperature. A few weeks later (I worked on it an hour at a time in the evenings), I finished my code and had a working app. Since I don't have any plans to monetize my work, I've made all the code available under an MIT license. One of the comments I've received about my work is that my code is better than the code provided by TI! It might be that I've been writing Objective-C and iOS code for awhile or my goal was to produce an app that anyone could use. In any case, I may release it to the app store, but the audience is quite limited as it requires the SensorTag which is basically a developer/hacker tool.
Now, where was I going? With all this Bluetooth 4.0 knowledge, what should I do next? I wanted to learn something new and I did that; I likely won't make any money from my new found knowledge, but it is fun playing around with it. However, today while I was running, I determined what I could do with the knowledge.
Let's rewind a few months. When I run, I take my iPhone, use a pair of Motorola S10-HD
Bluetooth headphones and a Wahoo Fitness Blue HR
heart rate monitor. I use RunKeeper to log all the data. I have been using this combination successfully for many months and have been quite happy with it. When iOS 6 came out and I got an iPhone 5, things started going downhill. RunKeeper was no longer able to talk to my heart rate monitor and they blamed Wahoo Fitness as they use a Wahoo Fitness library to talk to the heart rate monitor (the library also supports ANT+ heart rate monitors via a Wahoo Fitness dongle). After a few app updates, RunKeeper appeared to support the heart rate monitor again.
After hurting my foot and then being sick, I started running again on Sunday. During that run, I noticed that the heart rate monitor reported accurate results via RunKeeper, but my music kept cutting out periodically. I initially blamed the Motorola headset as I've already had to return one pair due to the buttons failing. Today I ran again and noticed the same problem. However, I decided to count how often the drop outs occurred. The drop outs occurred every 6 seconds. For anyone doing sampling of data, this should ring a bell. Every 6 seconds is 10 minutes per minute which is a reasonable period to be sampling data. I took off my heart rate monitor, put it in my pocket and after a few minutes when the Bluetooth connection disconnected, my music continued without drop outs!
So now I knew the problem wasn't necessarily with the Motorola headset, but there were too many variables:
- Switched from iPhone 4S to iPhone 5
- Went from iOS 5 to iOS 6
- Updated RunKeeper
The only pieces of the equation that hadn't changed since everything was working smoothly were the Bluetooth Heart Rate Monitor (it is a Bluetooth 4.0 device) and the Motorola headset. Having worked with earlier versions of Bluetooth, I thought that maybe there was a conflict between the Bluetooth devices. However, the devices remained the same and only the phone had changed. How was I going to track down the problem? Since I now knew had to write a Bluetooth LE app, I decided to write an app to talk to the heart rate monitor and get readings. This turned out to be a simple task and took about an hour to write the app. I ran the app and played music through the headsets; I was expecting to hear dropouts, but no such dropouts occurred. So, this little test told me that the iPhone 5 with the Wahoo Bluetooth 4.0 Heart Rate Monitor and Motorola Bluetooth headset could all be operating at the same time without problems.
So what next? I ran RunKeeper again and tried to duplicate my results from my run, but was unable to do so. Granted I wasn't running, but I expected to have dropouts. I'll go for a run tomorrow and see what happens. I'm a bit suspicious about the Wahoo Fitness library as Bluetooth 4.0 is quite simple to talk to the heart rate monitor. I turned on the option for the device to notify (and not poll) the heart rate monitor and received an update every 2 seconds. So if the Wahoo Library was using the notify option, I wouldn't have heard dropouts every 6 seconds.
I think that this issue is worth a look as the Wahoo Fitness library is doing something funky and that RunKeeper can directly talk to the heart rate monitor without using the library. If the library is polling, it should be changed to use the notify feature of Bluetooth 4.0.
-
Streamlining Receipt Entry
As many that read this blog know, I started scanning in all of my receipts over 6 years ago and pretty much every piece of paper (of some value) that comes into my house gets scanned and then shredded or filed (I'm still not sure why I file it; some places don't accept copies of receipts, but a lot of paper doesn't need to be saved). I use a Fujitsu ScanSnap
scanner along with Mariner Software's Paperless to store everything. I've used a bunch of scanners and still have a few lying around my house.
Yesterday I saw a tweet from Dan Frakes, an author at Macworld magazine about using an Eye-Fi
card with a Doxie
scanner to wirelessly scan. This got me thinking as I had an Eye-Fi card that was just lying around; my wife and I both have iPhones and use them for a majority of our pictures (the best camera you have is the camera you have with you). I also had a BulletScan M40
that was unused. Since the M40 takes an SD card, I thought this would make a great combination.
My plan was to setup the M40 and Eye-Fi card to send all the images to my media center (it is on all the time) and then use Dropbox to sync the files back to my main machine. (If this sounds familiar, I setup something similar two years ago with my Brother scanner.) This morning, I went to set everything up only to discover that for some reason the M40 didn't recognize 8 GB cards, both the Eye-Fi one and one I had lying around. It didn't have a problem with the 256 MB cards. I reformatted the Eye-Fi and tried lots of tricks and basically gave up. However, after staring at it, I realized that the SD card reader that came with the Eye-Fi was lying on my desk. I plugged the Eye-Fi card into the card reader and then the card reader into the M40. Presto, everything started to work.
To put the finishing touches on my new setup, I used Automator to setup a Folder Action that would rotate the images downloaded from the Eye-Fi and then move them to a folder on Dropbox. This offloaded the processing and saved me a step on my main machine.
My 5 year old son was so mesmerized with the scanner, all he wanted to do was scan receipts and see them show up on my machine. He has no idea all the magic that goes into it; he just knows that the scanner is not connected to my computer and receipts show up. Now all I have to do is recruit him to scan in all of my wife's receipts!
(Yes the ScanSnap is much faster at scanning in receipts, but this setup will be much easier to use for my wife and she doesn't have to take over my computer to enter her pile of receipts.)