• Twenty One - content blocker for age verification

    When content blocking apps were first released for iOS 9, they were of the type that most would expect: all-in-one apps that in theory would block all the bad and none of the good.1 As I expected, developers are now starting to release apps with narrower functionality aimed at a specific task that can be used in addition to a main blocker. Image Blocker blocks images only, thereby speeding up browsing of text only and saving on limited data cap plans.

    My new favorite is Twenty One by Greg Fiumara, the developer of Tappd That, a beer tracking app. Twenty One is designed to disable the age verification screens some brewery websites use. It gets its block list from the developers server from an open source list hosted on GitHub. I’ve already updated it with a few rules for some of my local breweries: Devil’s Backbone and St. George.

    1. With variable amounts of minor customization.

  • Posting to a Github hosted Jekyll site from iOS

    Using a Github-hosted, Jekyll blog, I normally write my posts on my laptop, committing and pushing the final product in terminal. While this works well enough most of the time, I do actually like to use my iPhone as my primary computing device and want to be able to do everything as well on it as on my laptop. Frequently I don’t want to carry my laptop with me. Sometimes an idea for a post will come to me while I’m out camping, on a walk, or sailing.

    So, how can you post to Github from iOS?

    Directly on the website

    As far as I can tell, there is no way to create or edit a text file on the Github.com mobile site.

    Directly on the website forcing desktop version

    You can create and edit text files on the desktop version of the website. The drawbacks are that if you are writing into the field form on the website and lose your connection, you will most likely lose your data. You cannot work offline. You cannot use shortcut optimizations such as TextExpander.1 Basically, the experience is non-native. You could write in a text editor and then copy and paste into the form field, but including the logging in and navigation, it is a clunky experience.

    Using a code editor

    I thought that something as powerful as Coda for iOS might be my answer. They support SSH and FTP. Their screenshots show them managing their own website with it. After downloading it and failing to get it to work, I shot off an email to support asking for help.

    Unfortunately Coda for iOS does not currently have support for git. This is something that we are considering for a future update but in all honesty I can’t say for certain when it will be added.

    I couldn’t get Textastic to work either.

    Using a Github client iOS app

    I’ve looked for Github apps before and never found anything that worked well, was being actively maintained, or looked halfway decent. That is why I didn’t start by looking at that solution, but I should have because that ended up solving my problem.

    Working Copy

    The first app I came across was Working Copy. This app is free to use up until the point you need to push commits, and then it is either $2 for 21 days or $10 for permanent unlock. This allows you to make sure you like the app and it works for you before committing to the purchase.2

    Working Copy easily logs into Github using your username and password, and allows you to clone your repositories. You can then browse and manage your files as needed. I won’t go into all the specifics of how it works as I’m not a Git power user, but for my purposes of creating and submitting text files, it works well. You cannot edit files directly in Working Copy<\del> (Update:) I was wrong. The developer reached out and showed me that there is an edit button in the share sheet), but it has been designed to work well with exporting to Textastic, Byword, or Editorial, and then bringing the files back into the app. All of the aforementioned apps are superior text and code editors, which I also already happen to own, so it makes a lot of sense to use them rather than having the Working Copy developers wasting valuable time solving already solved problems.

    Working Copy has been around since 11/2014, gets updates every 1-2 months, and has an impressive ★★★★★ review total for lifetime and current version.


    I subsequently came across Git2Go by Nerdishbynature. This app was just released a few weeks ago and is on version 1.03 with a ★★★★ and 1/2 review total. Only two reviews weren’t 5 stars, and the 1 star review basically said the app only showed repos and nothing else, which I can attest is wrong.

    Logging in to Github is easy and uses Oauth with Safari View Controller. It literally took me 3 clicks on my iPad and 1 click on my iPhone. You can edit files in the app and syntax highlighting for Objective-C, Swift, and Ruby is currently supported with the developers noting their plans to add others later. Oddly enough, they only charge for cloning private repositories. This is a bit of a “problem” for me since I don’t have any private repositories and therefore cannot give them any money unless I create one. I’ve requested they add a tip jar, but I also think they might want to figure out a different monetization strategy.


    I’m not sure if I’m going to stick with Git2Go or Working Copy. I like them both and will likely continue to monitor their development. Byword is my favorite text editor after BBEdit, and the ability to seamlessly move between devices using iCloud sync is nice. If you prefer a code editor, Textastic is great too. On the other hand, being able to make a quick change to some code, or a spelling mistake on a blog post, right from an app is going to be much easier and quicker with Git2Go as you won’t have to make a round trip to another app and back.

    Either way, it is now possible for me to publish and edit posts easily, quickly, and enjoyably on my Github-hosted Jekyll blog.

    This post was written in Byword on an iPhone 6.

    1. When I tried to use the TextExpander keyboard on iOS 9.0, Safari would crash.

    2. Unlike Coda for iOS that required I file for a refund.

    3. Literally while I was writing this they released 1.1.

  • Forcing Pinch to Zoom

    I am tired of developers who disable pinch to zoom on their websites by either setting the meta tag user-scalable to no or maximum-scale to 1.0. I run across this the most when following Instagram links from Twitter, but it is rampant, such as when I followed a link and landed on this page today:

    Maybe it is just my old eyes, but I couldn’t read the text. So I pinched-to-zoom and nothing happened. Because of the poor design decisions of whomever made this page, I was unable to appreciate the content. A view of the source confirmed the problem:1

    Thankfully, I have a series of javascript bookmarklets that deal with such problems.2 The following code over-rides any poor decisions on the part of the developer.


    I wish there was a way to do this with content blockers.

    1. I highlighted the user-scalable=no, but the maxium-scale=1.0 would do the same thing.

    2. Such as disabling copy and paste.

  • Tide information as a watch complication

    Six months ago, Craig Hockenberry tweeted

    This was over a month before the Apple Watch was released, but I also wanted the same. At the time, my sailboat was at a marina with very little depth at low tide. I needed to plan my departures and arrivals based on the tide. Being able get the tidal information at a glance would be beneficial and much more important to me than things like temperature, sunset time, or moon phase.1

    Although watchOS 2 has been delayed, the GM is out and at least one app with a complication has been published to the App Store.2

    My Tide Times Pro has been updated with a watch complication to show the time of the next low or high tide, and depending on the complication, it’s name and height.

    I was already using My Tide Times Pro as my tidal app of choice3 so this is a very welcome addition; however, there was one major, but fixable issue. Actually getting the complication to work was completely unintuitive.

    I was ecstatic when I first saw the app update in the store and immediately downloaded it. I then made sure the complication was active in the Watch App, and went to enable it on my watch face. I switch between multiple watch faces depending on my activity, but I use Chronograph frequently. Unfortunately, the My Tide Times Pro does not show up as an option for those complications. I then switched to the modular face where it did show up as an option, but when I selected it nothing appeared except -.

    I switched back and forth to the app on both the phone and the watch, restarting, uninstalling and reinstalling, all to no avail. There was no prompt, instructions, or other hints that I found. I assumed that something must be broken since I’m technically on “beta” software and went on my way.

    Then a few days ago, I happened to create a new modular face, but instead of putting the tides in one of the small complication slots, I put it in the large central slots. Initially it was just as useless

    but the next time I raised my wrist, instructions telling me to force press my local tide in the app to set the complication appeared.

    I did so and it worked!

    I thought I must have missed something originally, so I deleted the app completely and restarted from scratch. My second experience was identical. The first two times I tried to use the complication failed (first on a face that didn’t support it and second on a slot that didn’t give me any instructions). That is not a great experience and I wonder if the developer is going to get a lot of email about this from people wondering why it is “broken” or one star reviews in the App Store from asshats with a god complex. I did tag him on my Twitter announcement for this post, and if he writes to me to say I’m an idiot for missing something, I’ll post an update.

    In the last episode of Recursion and on Twitter, Wayne expressed concerns about force touch3D touch on the iPhone 6S and 6S+. He is worried developers will use this new interaction method poorly, hiding important functionality behind undiscoverable gestures rather than as a value add to already discoverable and well designed UI. I don’t think this was a case of that, but rather a limitation in options given platform constraints, but it does illustrate the issue of discoverable UI.


    I discussed with Justin, the developer, and he has decided to add a pop up the first time you launch the app on the watch and instructions in the release notes. I think that is about all he can do given the limitations of the platform he is dealing with. It really is a great app and if tide data is important to you, I highly suggest this app.

    1. Wife: When are you going sailing tomorrow?

      Me (looking at watch): Around 9am.

      Wife: When will you be back?

      Me: NEVER!!!! (╯_╰”)…um, around 5.

    2. Three hours after I published this post, Apple released watchOS 2.0.

    3. And I’ve tried them all: all the apps that just report the tides, and all the apps in which tide data is included, such as expensive navigation apps.

  • Apple Watch face complication radar

    You can’t get much cuter than this:

    But you can make them more useful with a small complication in the bottom left corner of the screen.

    Radar filed: 21796301

  • Shower phone

    Most of my best ideas and tasks I want/need to accomplish come to my mind when I’m driving or in the shower.1 When Siri came along, it made capturing these notes or to do items easy while driving. I still didn’t have a way to update Omnifocus while in the shower, until I remembered I had an old iPhone 5s and Lifeproof Nuud waterproof case.

    I’ve moved beyond a day and night phone. It is all about the shower phone now.

    I’ve turned off notifications and cellular radio. When iOS 9 comes out, I’ll permanantly put it in Low Power Mode.

    I guess you could just use a plastic bag.

    1. Probably because it is the only time I’m not actively thinking/doing something else.

  • Virginia car inspection versus fog lights

    Virginia requires yearly inspections for all cars.1 Every year this puts stress on my family as we try to take off the minimal time from work to get it handled. We use to routinely fail due to the fog lamps on our cars.

    The fog lamps on Honda Fits are very low to the ground and the glass frequently breaks due to rocks being kicked up off the road. This is a fail for the Virginia inspection, even though we never use the fog lights and I cannot understand how this is mission critical.

    The first time this happened Goodyear failed me for it. I asked them to fix it (because if I don’t pass I can’t drive, and if I can’t drive I can’t work). They said they’d call me but never did, so I took it to another shop. They said “That would fail, but since you could just take them off and they you’d pass, we’ll pass you.”

    Next time my wife took her Honda Fit in there was the same problem, except this time they told her to go home, take them off, and come back. Given the time missing from work, it was actually cheaper to pay them to do it for her, for $150.

    Tomorrow is my inspection. I took them off myself tonight. 1 screw each. I don’t plan on ever putting them back on.

    1. I think it is a waste of time and money, and likely a scam of some kind.

  • Amazon affiliate link for TextExpander

    My affiliate linking scripts were starting to get out of hand with different versions in Keyboard Maestro, Pythonista, Editorial, Drafts, Workflow, and TextExpander on the Mac. It was difficult to know what scripts worked where and if they were up to date. I decided to expunge them all but one.

    The one would have to work equally well on iOS and OS X as I use them equally and interchangeably. Until now this was not possible as none of those apps was on both devices, but with TextExpander getting JavaScript support, I thought it might now be possible.1

    Code explanation

    • Line 3: Stores the affiliate code to a variable.
    • Line 4: Stores the clipboard to a variable.
    • Line 5: Defines the regular expression and stores it to a variable. My choice of regex looks for the first string of all capital letters or numbers following a slash, which seems to always be the Amazon (ASIN).
    • Line 6: Runs the match for the regular expression, returning null if it isn’t found and an array of it is.
    • Line 8-13: Evaluates the result of the regex search. If it failed, it returns the original text. If it succeeds, it stores ASIN to a variable and creates the new link.
    • Line 15: Writes the new URL to the clipboard. This isn’t necessary for the expansion of the affiliate link by TextExpander as the result of the script is what is expanded, not the clipboard, but I like having the link in the clipboard in case I need to paste it somewhere else immediately.
    1. Dr. Drang had written about converting his script over to JavaScript for TextExpander, and at first I thought I could just steal his, but this was a dead end. Since he used JavaScript for Automation in his snippet it would not work in iOS and his regex didn’t work with the URLs I was getting.

  • My Apple Watch try-on experience

    I had my appointment to try on the Apple Watch yesterday, and was accompanied by the developer of Tappd That, Greg Fiumara.

    We were let in just as the store opened. The Apple employees were their usual friendly selves.

    After checking-in at the door, I was sent to a show table where all the watches were displayed under glass. My initial thoughts were that the sport model is too toy-like in appearance for my tastes. This does not mean others wouldn’t or shouldn’t like it, but as someone who wears a stainless steel, sapphire face, link-band watch every day, it was not going to work for me.

    I was only there for a few seconds before I was taken to the second table where the actual try on experience occurred. The employee had the watches I had favorited in the Apple Store app on his screen and he pulled out the first two.

    The first one I tried was the 42mm Space Gray Aluminum Case with Black Sport band. It was incredibly light. I couldn’t feel it at all. I also couldn’t feel the haptic feedback. I thought maybe it was because the band was too loose, so I tightened it all the way. Still couldn’t feel it. I didn’t spend much time with it as I’d already decided that it wasn’t for me.

    Next, I tried on the 42mm Stainless Steel with Milanese Loop. This is the watch that I had pre-ordered. It also felt light, but a bit more weighty than the sport. The band is comfortable and holds it’s connection well. The employee emphasized that it has a tiny magnet holding it together, but it certainly felt strong enough. Strong enough that he initially had trouble separating it from the band. I was able to feel the haptic tap with this model, but it is incredibly light. Way lighter than a vibrating phone in my pocket. It certainly will not be obvious to anyone else when you get a notification. I’m almost worried I won’t be able to feel it.

    Finally, I tried the 42mm Stainless Steel Case Case with Link Bracelet. This was the weightiest of all, and the closest in style to what I currently wear. It is also my favorite of all the ones I tried on, but the second favorite in the store. The Space Black version of the same watch is the best looking, but they didn’t have it available in the store to try on. If money was no object and it didn’t have a ship date in July, I would likely change my order.

    My appointment was over quite quickly as I didn’t really have any questions, I knew exactly what I wanted to see, and the watches you try on do not have functioning software. We then spent some time playing with the demo watches that are bolted to the tables that do have the software running. Initially, it is a little weird trying to figure out which buttons you push and when, but I think this will disappear after a few hours of regular use. I was unable to pair my phone with the watch to test out some third party apps because a lot of the features were disabled.


    • I had read that the employees were having a hard time finding the right place to put their phone to unlock the hidden drawer. My guy had the same issue.
    • I heard multiple employees stumbling over the verbage, e.g. “scroll wheel” instead of “digital crown”, and correct themselves.
    • The employees seemed incredibly excited about the watch for themselves. I honestly couldn’t tell if they were serious or just being a salesman.
    • The colors in person are much lighter than on the website. I was leaning towards the regular aluminum but in real life it is too light. The space gray aluminum which looked too black on the website is much better in person.
    • Even the heaviest Apple Watch is lighter than my current watch.
    • Although all the appointments for the day were taken, walk-ins were able to be seen either due to noshows or people like myself who didn’t need all 15 minutes.
    • The employee would initially put each watch on my wrist for me, then say I could adjust it as I wanted. That was weird. I don’t know if this is to prevent accidental droppages, to avoid people having trouble getting them on, or to make you feel like you’re being taken care of like at a high end store, but I don’t remember ever shopping for watches at a high end store and having the clerk put them on. Usually, they just hand them to you with what almost seems deliberate nonchalance.
    • If you already wear an “adult businessman’s watch”, I don’t think you’ll be able to tolerate the Sport model.
    • The “edition” verbage led to at least two encounters of an employee showing a customer an Edition model when they wanted a Sport.
    • The functional watches have certain lock-outs, so I wasn’t able to pair my phone and try out some of the third party apps.
    • The sport model is “Space Grey” while the regular model is “Space Black”.
    • The developer with me and the Apple employee, along with myself, were all wearing regular, link-band chronograph watches.


    Finally, I know that as Apple people we are not supposed to be able the numbers, but here is how my current watch compares to what I ordered:

      Citizen Apple
    Shape round square
    Height 43mm 42mm
    Width 43mm 36mm
    Depth 11mm 10.5 mm
    Mass 141 grams 83 grams
    Volume 16 ml 16 ml
    Case stainless steel stainless steel
    Crystal sapphire sapphire
    WR depth 660 feet 3 feet

    Final thoughts

    Before seeing them, I thought the Sport model would be a reasonable purchase for someone more on the nerdy side, who might get some benefit out of it and has the money to waste, but after seeing it in person, the relatively negative reviews, and no clear compelling use-case for normals, I don’t think I will be recommending this to anyone if they ask.

    At the same time, as an hardcore nerd, who already has a killer use case planned, wears a watch daily, and has more money than sense, I’m looking forward to getting it.

    I’m also looking forward to trying Tappd That on my watch at my local dive bar.

  • Prepping for the Apple Watch

    My friend Greg is working hard to get his Untappd client, Tappd That, ready for the Apple Watch launch. I’m looking forward to using it and seeing if I get yelled at less for logging my beers that way than when I take out my phone to do it at the bar.

  • Dictating on Mac from iPhone

    I think that dictating on the iPhone is amazing. For example, this was dictated in a crowded bar at 9 PM on Friday evening1. It was really loud in here with the band and all:

    For some reason, dictating to the Mac in a quiet office room doesn’t work well at all. So if I ever have something I do want to dictate, I will do so on the iPhone and then transfer it.

    At the request of others, here is a video of how I do so using the apps Drafts and Command–C.

    1. Yes. I’m a nerd. I go to a bar to write blog posts.

  • My Apple Watch questions

    The second Apple Watch event is today. I’m personally excited about the watch because I am a fanboy, I am a stock holder, and I enjoyed the wrist notifications when using the Pebble, but hated everything else about it. I will be getting one, but I have a few outstanding questions.

    How waterproof/resistant is it?

    One of the promises of so-called smart watches if their ability to track activity, including exercise. Most of my sports are done on the water: sailing and stand up paddleboarding. I don’t plan on swimming or diving with it, but I’m not going wear a watch that will die the first time I fall overboard.

    What is the battery life?

    This is one of the big questions everyone has. Seems to be “a day” use will be gotten from each charge with 5 hours of active use. That is a bit annoying, but current science and physics likely limits any more than that. I think a better question is…

    How fast does it recharge?

    Since the battery is small due to size constraints, perhaps it will be able to charge rapidly, i.e. the reverse of how slow the iPad charges? This would allow one to wear the watch 24 hours a day except for a short time (20 minutes?) when showering. The last rumors I heard say 2 hours. That’ll be disappointing if so, because any sleep monitoring functions or alarm functions will be useless.

    Can you use any watch band on any watch?

    It was implied from the unveiling that the bands were quickly and easily interchangable, leading many to assume you could buy a low end watch and a higher end band, but on Apple’s site, only certain watches appear to be available for certain levels of watches. Some have speculated that only certain bands will be available for certain watches and that you will not be able to buy the higher level bands separately. Does this mean one band cannot work on a different level watch? That seems ridiculous as you would have to have different mechanisms, increasing complexity. I’d expect this behaviour from any other company, but not Apple. Will you just not be able to buy certain bands with certain watches right from the start, but you can always buy an additional band at any level? This seems the most likely to me. Someone suggested that maybe you’d have to show your watch that you were buying the band for, in order to prove you are able to buy that level of watch. This seems ridiculous to me. Way too much manual effort and elitism involved.


    This is going to be a first generation device and I assume a better one that I will want more will come out every year, so it is unlikely that I will spend much more than the minimum entry price. At this time, this means that although I will hate giving up on a sapphire face, I will get the Sport with the blue band. If money was no object, I would choose the steel with Milanese band, and then get a blue sport band for sailing (if it is more waterproof than reported). I do not think it is realistic that a Steel band with Milanese loop and extra blue sport band will be available for less than $700, so I will be out of luck.

    I might be willing to go double the price of the entry level to get my primary choice, so ultimately the price question will have a lot to do with my choice. I would be willing to pay $150 more for a sapphire face, so if the Steel is $500, I might go for that. I’d be willing to pay $200 more for the Milanese loop, so if that is all it costs and you can buy it separately, I would get the Sport and blue the Milanese loop additionally for a total of $550.

    Update: Sport with blue band plus Milanese loop bought as an accessory: $550. =)

  • 3.9.2015 event predictions

    • Wrong: Will be only about the Apple WatchHBO NowResearch Kit
    • Will spend a lot of time with devs showing their apps1
    • Wrong: Will not announce any other major or minor hardware productsApple TVNew Macbook/Air
    • Correct: Will give firm launch dates in the US
    • Correct: Will give firm pricing information on all models
    • Correct: Will not give firm waterproof information
    • Wrong: Will not give firm battery data informationHere
    • Wrong: Will not give firm information about band/watch combination options or if able to separately buy different level bandsHere.
    1. I’ll define “a lot” as three or more developers on stage.

  • Using labels for alarms with Siri

    When you create an alarm in iOS1, it is given the default label Alarm. I find it useful to change this for two reasons. First, it reminds me why I set the alarm in the first place. This may not be confusing if the alarm is waking me up in the morning, but I might also set multiple alarms during the day for different tasks. These levels remind me what I need to do next:

    • push wash into dryer
    • check on sump pump progress
    • verify boy cleaned his room

    This is easily done with Siri: Set an alarm for 54 minutes labeled 'put wash in the dryer'.

    The other benefit of labeling alarms is that you can edit them by their label using Siri: Change the alarm labeled 'wake up call' to 530am.

    1. iOS 8 as if this post.

  • What is our purpose?

    With insurance companies determining what treatments are allowed, patients self-diagnosing on Google, and non-practicing surgeons being the most popular source of professional medical advice, I think the only reason physicians still exist is so there is someone to sue when it all falls apart.

    …and to prescribe “medical” marijuana in states that don’t have the balls to legalized it completely.

  • Dealing with the devil

    Boy (aged 8): Do you like meat better than rice?
    Me: Yes.
    Boy: I’ll trade you my meat for your rice?
    Me: Deal.

    I’m not sure he’s mine, but I’m going to keep him anyway.

  • I do not miss voice mail

    From the New Tech City podcast:

    Voicemail is a default archive of your life. You would miss it if it were gone

    Voice mail is terrible. It’s just another form of spam. I hate it. I also hate phone calls. I’d decline to answer a phone call from someone (everyone) I didn’t want to talk to, and then I’d immediately have another message from them that I needed to deal with.

    You said “you would miss [voice mail] if it were gone”. Wrong. Absolutely wrong. And I know.

    A few years ago I was at my carrier’s store dealing with something and when they finished they asked if there was anything else they could help me with. Without really thinking, I said “yes, get rid of my voice mail account”. She looked shocked, and perhaps a bit concerned about my sanity. She didn’t know if it was possible to do but got on the phone with corporate. I myself didn’t think it was going to be possible, either because of a technical issue, or just a lack of knowledge from the low level tech support I’m use to getting, but only a few minutes I was told I no longer had a voice mail account.

    It’s been amazing. If you call me, my phone will just ring and ring like an old land line. If I decline your call, you get cut off. It is one less inbox I have to check. One less “to do” list cluttering up my already too cluttered life. My life is so much more peaceful.

    If only I could get rid of my USPS address.

  • Shopping cycle

    1. Search internet for reviews of certain product I need.
    2. Based on reviews and my specific need, determine product I want.
    3. Check if product is on Amazon.
    4. If so, victory. Fin.
    5. If not, go to company’s website.
    6. Struggle through a horribly designed check out process, declining to create an account and sign up for their newsletter.
    7. Two weeks later, use PaperKarma to unsubscribe from their snail mail magazine.
    8. Hate myself for ordering something not from Amazon.
  • It's about ethics in web browsing

    I do not have a problem with advertising. I have a problem with loud, grotesque, ugly, distracting, and insulting advertising. A testimonial ad for Backblaze on a tech podcast by a fussy developer who uses Backblaze is great. A loud, obnoxious, misleading, and outright dishonest advertisement for colloidal silver is disgusting.

    I choose to avoid all such advertising. In the cesspool of the internet, one tool I use for this is an ad blocker. I should not have to go to a webpage and see the ugly ads before choosing to close the webpage as the damage is already done. I also don’t wait for someone to steal from me before putting a password on my computer. Pre-emptive is an acceptable policy position.1

    I completely understand if a content generator says he would rather I don’t view his website if I am using an ad blocker. In such a case, I will either choose to turn off the ad blocker, or not view his website. I know of at least two websites that do test for ad blockers and will not display their content if one is detected.2 I respect that. One of those sites, I have white listed. The other I have not.

    Preferring to pay for content and only be exposed to tasteful advertisements is a logical, consistent, and respectful way to live.

    Update: A friend sent me this:

    Sometimes OkCupid runs this ad for free users using adblockers. Only other way to block ads is to sign up for the monthly pro service. There are some “pro” features but you can get by forever with free.

    This is totally fair. I have no idea what the normal ads are on Ok Cupid, so I don’t know if I’d prefer the ads or not, but if I was in the dating world, which hopefully will never, ever, happen again, I’d pay the money.

    Update 2: He sent me a follow up:

    I think the ads on OkCupid were pretty awful, which is probably why I got an adblocker in the first place.

    1. One Twitter user tested my consistency by querying if I watch TV and subscribe to magazines. I do not subscribe and do not have cable, but I do not understand the connection. Who doesn’t use the commercials to grab a drink or snack, or go to the bathroom. I do not think starting to watch a TV show is a contract to sit chained to the couch and watch each ad intently.

    2. Unfortunately, I’ve had Hulu repeatedly tell me I’m using an ad blocker when I’m not. I browse the web with Safari, which has the ad blocker, and watch Hulu with Chrome, which doesn’t.

  • Tile support fail

    I was looking forward to the Tile.

    Sadly, it was dead on arrival. g I went to their website and did all the trouble shooting activities they recommended, and being the “tech guy” in my social circle I tried several other things, all to no avail.

    I sent several requests for help to them on their website.

    They finally replied to me… 16 days later.

    with the exact same information on the website that I’d already done.

    I informed them that this didn’t work.

    Their response was report the same issue, again, in the app?

    This seemed very strange but I thought perhaps there is some extra data that is sent with the in-app report.

    They replied 12 days later with a completely different ticket number and “activation tips”.

    This is ridiculous. I get better service at the DMV.

  • Only 6 months to go

    Do you have any questions about the new baby?

    Boy (age 8): No!

    Are you annoyed about something?

    Boy: I’m annoyed you keep asking.

    I just want to make sure you’re comfortable with everything.

    Boy: I’m not comfortable with anything.

    What aren’t you comfortable with?

    Boy: It’s been three months and we don’t have a name or a room for the baby.

  • Parenting

    Boy (age 9): Dad, can you make me a sandwich?

    I’m not always going to be around to make you sandwiches, tie your shoes, and kill your zombies. You need to learn to do these things on your own.

    Boy: I can tie my shoes and kill zombies. It’s just a sandwich.

  • Does Dr. Google take my insurance?

    A secretary walks up to my nurse and starts complaining about a minor symptom. My nurse gives her excellent advice. The secretary expresses doubt and starts to argue. I interject that the advice is excellent and should be tried. The secretary counters that she had done a Google search.

    Having become accustomed to this response from patients and family alike, the board certified physician and license nurse both shrug and go back to work.

    Expertise is dead.

  • The Tile - Dead on Arrival

    I ordered the Tile, a BTLE internet-enabled device designed to help you find lost items, to attach to my keys so I can avoid the occasional panic on Monday morning when I can’t find them.

    After waiting a ridiculously long time to arrive, it was unresponsive out of the box. I followed all the trouble shooting ideas on their website without success. I emailed support and have gotten no reply.

    Tile: ★☆☆☆☆

  • FTC sues AT&T over throttling "Unlimited" data plans

    I am not a big fan of class action lawsuits in general because it appears that the only ones who really benefit at the lawyers. Maybe I’m wrong because I’m pretty happy about this:

    The Federal Trade Commission (FTC) of the United States today filed a federal court complaint against AT&T, accusing the carrier of misleading its smartphone customers by charging them for unlimited data while reducing their data speeds by up to 90 percent. - MacRumors

    I had one of those “unlimited” plans and AT&T sent rude text messages threatening to throttle me and then eventually did. I was using just over 2 gigabytes a month. I switched to Sprint.

    The FTC alleges that AT&T throttled customers who had used as little as 2GB of data beginning in 2011, and that the throttling is severe, “resulting in speed reductions of 80 to 90 percent for affected users.” AT&T is said to have throttled 3.5 million customers more than 25 million times, violating the FTC Act in the process. - MacRumors

  • Changing blog platform and host

    I like using static text documents to generate my blog. As many others have already said, it gives me control over my product and is easy to maintain and change. For the last several years, I’ve enjoyed using Scriptogram, which both generated the HTML files from the text files stored in Dropbox, and also hosted the generated files. It was even free.

    Unfortunately, it does not seem to be in active development anymore. I probably could have left it alone and waited until the service died, but I got an itching in my brain after listening to the last episode of Core Intuition and decide to take a second crack1 at doing my own file generation and hosting2.

    I’m currently getting my blog ported over to a Github hosted Jekyll site. Of course, I didn’t do the smart thing and wait until everything was finished before switching over the DNS, because stupid and I didn’t actually think anyone read this site3. Unfortunately, at least one person does and I wasted their time today when they tried to report a broken link in their feed reader.

    My apologies. Hopefully the DNS and RSS is finished. No I just need to import my old articles and futz with the CSS. The latter shouldn’t cause any problems, and I hope the former doesn’t flood anyone’s RSS reader with old posts.

    1. +10 nerd points if you get the reference

    2. I failed spectacularly at my last attempt with Octopress.

    3. What analytics?

  • Create a Markdown link with automatic affiliate codes

    I do a podcast with a couple other guys. As we’re recording the show, I like to create the show notes live so that they’re most accurate and save myself time later. We frequently mention products on Amazon, apps on iTunes, and regular old-fashioned links. I created the following macro for myself so that after I’ve navigated to the webpage of the link in Safari, I can automatically create a Markdown-style link in my text editor, including optional Amazon and iTunes affiliate links if appropriate. The affiliate links are added using python scrips from Dr. Drang and Brett Kelly.

    The macro can be triggered by the string mdlink of the hotkey ⇧⌃⌥⌘p.

    Since I write all my show notes in nvALT and my workflow is to find the webpage in Safari, the first part of the macro activates nvALT. The topmost Safari URL is then saved to the clipboard. The clipboard is then parsed by two If statements looking to see if it is an Amazon or iTunes link, and if it is add the affiliate code. Finally, the text for the Markdown link in inserted using the Safari title as the text for the link.

    Macro Text

    My Macros
    Triggered by any of the following:
    The exact case string ‘mdlink’ is typed (then deleted)
    The Hot Key ⌃⌥⇧⌘P is pressed
    Will execute the following actions:
    Activate nvALT
    Set Clipboard to Text
    If All Conditions Met
    The clipboard text contains ‘itunes.apple.com’
    Execute the Following Actions:
    Execute Shell Script

    # Via Dr. Drang
    # http://www.leancrew.com/all-this/2013/08/new-apple-affiliate-link-scripts/
    from subprocess import check_output
    from sys import stdout
    # My affiliate ID.
    myID = '11l4RT'
    # Get the URL from the clipboard.
    clipURL = check_output('pbpaste')
    # Add my ID and the partnerId parameter to the URL. If there are already
    # queries, add them as additional ones; if not, add them as the only ones.
    if '?' in clipURL:
    itemURL = '%s&at=%s' % (clipURL, myID)
    itemURL = '%s?at=%s' % (clipURL, myID)
    # Write it out
    stdout.write(itemURL) Save trimmed to Clipboard.  

    If All Conditions Met
    The clipboard text contains ‘amazon.com’
    Execute the Following Actions:
    Execute Shell Script

    #!/usr/bin/env python
    # (c) 2012 Brett Kelly.
    # Licensed under the MIT license
    # http://www.opensource.org/licenses/mit-license.php
    # http://nerdgap.com/amazon-affiliate-links-with-textexpander/
    # Some edits from the original to get to to work in KM - ML
    import re
    import sys
    from urlparse import urlparse
    from subprocess import check_output
    affcode = 'soitscometothis-20'
    rawurl = check_output('pbpaste')
    ## Get the base url without all of the query string malarky
    baseurl = rawurl.split('?')[0] 
    parts = urlparse(baseurl)
    except Exception:
    raise SystemExit
    ## Make sure it's actually an Amazon URL
    amazonre = re.compile('[www\.]{0,1}amazon\.')
    if not amazonre.search(parts.netloc):
    # Not an amazon URL, return whatever was passed initially
    raise SystemExit
    # Format the simpler URL and append the affiliate code
    goodurl = "%s://%s%s?tag=%s" % (parts.scheme,parts.netloc,parts.path,affcode)
    # Write formatted URL to STDOUT

    Save trimmed to Clipboard.
    Insert Text by Pasting

    Macro Image

    Macro Image

    Download the macro.

  • Keyboard Maestro macro screenshots

    I create a lot of macros with KM and I like to share them both on this blog as well as in the KM forums1. Taking screenshots of the macro is an important part of this sharing and has been very useful to me as I have learned to use KM from my betters in the community. Previously, I would use the standard screen shot functions of OS X, but with very long macros that did not all fit on one screen there was no elegant solution.

    I believe it was in 6.0 that Peter added the ability to copy a macro as an image. I failed to pay much attention to this at the time in light of all the other great functionality, but recently put it to use.

    The copy as an image puts the highlighted portion of your macro into the clipboard. By itself, this isn’t very useful because I need an actual image to upload to the blog, and as far as I can tell that functionality is not built in2.

    So I created a macro.

    Macro description

    You can either select individual parts of the macro you want to share, or select nothing and the whole macro will be used.

    Using a hotkey, trigger the Create Screenshot Macro.

    1. Select the copy as image from the menu
    2. Prompt the user for the file name
    3. Save the file to the desktop

    There’s also a copy as text if you want to just share the text of the macro. I prefer to write my own descriptions because I think it’s more useful, but including the text is nice too. See below.

    Macro text

    Create screenshot of KM macro
    Triggered by any of the following:
    The Hot Key ⌃⌥⇧⌘M is pressed
    Will execute the following actions:
    Select Menu Item in Keyboard Maestro
    Select: Edit ⇢ Copy as ⇢ Copy as Image
    Stop macro if menu cannot be selected.
    Prompt for User Input ‘File Name’
    What do you want to call the file?
    Input the following variables:
    File Name
    Finish with the following buttons:
    Cancel (cancel macro)
    Store button pressed in variable ‘Result Button’.
    Write Clipboard
    To file: ~/Desktop/%Variable%File Name%.jpg
    With format JPEG).

    Macro image

    Download the macro.

    Room for improvement

    I would like the ability to automatically name the jpg with the name of the macro.

    1. If you use KM and aren’t in the forums, you are really missing out.

    2. Is this an oversight, am I missing it, or is this deliberate on Peter’s part because he wants the user to create the macro by themselves?

  • Conversations with my boy

    Me: Do you need a haircut?

    Boy: No! You need a haircut!

    Me: You’re right. I have one scheduled for this Saturday. What should I do?

    Boy: You have emo hair. You look like Justin Bieber.

    Me: Should I go bald? Should I cut it short?

    Boy: No!

    Me: How about some lines or maybe lightning bolts?

    Boy: No. Don’t do anything weird. Just be normal.

  • Conversations with my employees

    Conversations I probably shouldn’t have with my employees:

    Them: May I see you in your office with the door closed for two minutes?
    Me: I take a lot longer than that!
    Them: That’s not what your wife says.

  • Bribing doctors

    Steven Novella:

    While drug reps are certainly in sales, I have only personally seen a drug rep step over the line on one occasion. A new rep, who was clearly green, actually said to me and my colleague, “what would it take to get you to prescribe more of this drug?” I don’t think he was suggesting anything like bribery, but the statement was clearly inappropriate.

    I’ve been asked that question before. Based on context, I didn’t assume I was being bribed. I took it as “what medical and financial factors are keeping you from using my medication over another?”

    My answers have been along the lines of “make it cheaper and/or show evidence of superiority in head-to-head trials”.

    Interestingly, the £100 that was offered to the physicians in the referenced article is a lot less than the financial incentive when a patient demands oxycodone while holding a patient satisfaction survey.

  • Parenting, Steve Jobs style

    Is your room clean?


    Do I want it clean?


    Why are you still here?

  • On not purchasing Dragon Dictate Medical

    I happened to learn that Dragon Dictate is being upgraded. I own MacSpeech Dictate Medical, which was bought out by Nuance, so I decide to check it out and possibly upgrade.

    Wow. $1000. That’s a lot for something I don’t use that much.

    But look, I can upgrade for only $500. I’ll check that out.

    Just need to log into my account.

    Look, it’s only $300. I’ll totally buy that.

    WTF? That says $600, and it’s for MacSpeech Medical not Dragon Dictate Medical.

    To be perfectly clear. Each screen shot was take in a single series of links, one to the other. The price kept changing. The product kept changing. What is going on here?

    I have no idea what the problem is, but I’m not comfortable with moving forward with this purchase.

  • Logging time per visit with Keyboard Maestro

    I wanted a better idea of how much time I was spending per visit. This data could also be used when billing by time. I wrote three1 small macros to complete this task.

    All three macros use the same trigger, ⌘⌥⌃⇧b.2 This brings up a menu for me to choose what part of the macro-system I want.

    All three macros also write data to the same log file on my desktop.

    Macro 1 - Start of the visit

    I trigger the first macro when I’m walking into the room. It does three simple tasks.

    1. Stores the current time of the day in milliseconds to a variable.
    2. Displays the current time preceded by the phrase “Visit started at “ in a small window on the screen
    3. Writes the current time preceded by the phrase “Visit started at “ in the log file

    Macro 2 - End of the visit

    I trigger the second macro when I’m walking out of the room. It does 5 simple tasks.

    1. Stores the current time of the day in milliseconds to a variable.3
    2. Calculates the length of the visit, rounded to the nearest minute.
    3. Appends text to the log file with the end time of the visit and the total visit length.
    4. Pastes a template phrase required by the government and insurance companies into my clinic note with the length of the visit as calculated above.
    5. Displays the various code levels on the screen for each time interval, so I know what billing level to code the visit.

    Macro 3 - Set a new date

    This is just simply appends a break and a date header to the log file. I trigger this before my first visit each morning in order to keep the log file neat and organized. I could automate this, but for each way that I thought to do so, I thought of several possible fail points.

    1. I’d previously tried to do this with one macro, but had too many complications and bugs. Seperating them out is equivalent to writing well-contained functions.

    2. ⌘⌥⌃⇧ is mapped to the caps lock key on all my computer, so it is just one key.

    3. Now I have the start time and the end time, in milliseconds, stored to separate variables.

  • Using Keyboard Maestro to control windows on dual monitors

    I just started using a second monitor at work1. The problem was that every time I would plug my Macbook Air into the monitor via the Thunderbolt connection, the previously arranged window position was lost. I have a very simple arrangement: my text editor maximized on my laptop, and the EMR maximized on the external screen.

    Keyboard Maestro to the rescue.

    The main actions just move the desired application window to the top left of the respective screens, SCREEN(1, for the laptop screen and SCREEN(2, for the external monitor. The +22 for the downward direction moves the window down below the menu bar, which is 22 pixels tall. The -22 for the window height subtracts the menu height from the total window height so you don’t lose the last 22 pixels below the screen.

    The hardest part of this macro is figuring out that you can type these commands into the action. Normally the action looks like this:

    It looks like you can only input numbers2, but if you start typing, it will transform to this:

    Update: From the Yahoo Keyboard Maestro user group, I found more information on picking which screen you’re giving instructions to.

    • Numbers: designates the screens from left to right. 1, 2, 3…
    • Main and Secondary: main refers to whatever screen is currently being used by the active window/application
    • Internal and External: the iMac/laptop display versus the external display

    You can use these various designations depending on your use case. For example, I was originally using numbers, but that meant I had to have two separate macros for making a window maximized, one for the main monitor and one for the external, but by changing the 1 and 2 to main, it will maximize the window that has the focus on that screen. They have slightly different meanings, but this allows different functionality.

    1. The EMR we use is so poorly arranged that a larger screen is needed to make up for the poor design.

    2. This has screwed me up several times when trying to create an action. It is not always obvious that another type of input is possible.

  • Argument by counter example

    Boy (age 8): Why do you and I play a lot of video games but mommy doesn’t?

    She doesn’t like to play video games.

    Boy: Why doesn’t she like video games.

    I don’t know. Maybe because she’s a girl?

    Boy: I know like a hundred girls that play Minecraft!!!

  • Knowledge

    I should add your iPhone to the wifi.

    Manager: We don’t have wifi.

    Yes, we do.

    Manager: No, we don’t pay for that.

    The first thing I did when I started working here was install wifi.

    Manager: But that costs a lot of money.

    No. It was free.

    Manager: They told me it costs $50 a month!

    Who told you that?

    Manager: The internet company. We were going to have wifi for the customers, but that seemed like too much money.

    Well, you can pay me $50 a month if you want, but it’s not costing me anything.

    Manager: So, you can install wifi for the customers?

    Sure. First thing in the morning. I have an extra Airport Express laying around the house somewhere.

  • Affiliate link Tweeting with Pythonista

    This is a quick screen capture I made showing how quick and easy it is to tweet out a link to an iOS app with your attached affiliate code, and campaign flag if desired.

  • Forced productivity with Keyboard Maestro

    I get easily distracted. I can be working on task A, which reminds be to do task B, then get into task C, and end up working 3 hours on task C, then back to 2 hours on task B, and finally get back to task A many hours later. Most of the time this isn’t a problem, and makes me very productive. Not so much at work. Writing an epic blog post or researching the perfect way to make ginger chicken at work–not such a good idea.

    So, I made a quick Keyboard Maestro macro to force productivity:

    While logged in, repeating every 1 minute during the hours of 8am-5:30pm Monday through Friday:

    If my medical record app or my text editing app are not at the front, then:

    1. Quit the front application
    2. Open my medical record app

    Brutal, but efficient.1

    1. I could make it even more cruel but quitting any app that isn’t my medical record app or text editor app anytime I switched to the a new app, but that’s a little extreme. At least now I have up to 60 seconds to look something up.

  • An intellectual beating

    Steven Poole for The Atlantic:

    In doing so, you might, like him, become incapable of understanding the stories in any other way than through the lens of your prefabricated idea. And so, because your idea is never allowed to be challenged by opposing evidence, it will languish forlornly, like Malcolm Gladwell’s, at the level of vapid homily.


  • Choices; diet addition

    How do you stay so skinny?

    I don’t eat.


    No breakfast. No lunch. A small dinner.

    You don’t get hungry?

    Of course I’m hungry.

    Oh. I can’t do that.

  • UI insanity; iTunes Radio

    I don’t mind, and actually appreciate some, hidden UI features, but I also think basic features should be clearly labeled with intuitive labels that don’t suggest the opposite of what I want.

    On the left is the main play screen of iTunes Radio. If you click the star it brings up the menu on the right.

    Why on earth would I hit the star, a universal symbol for favoriting or liking, when I want to “Never Play This Song”?

  • Time Capsule back up vs. Siracusa

    On the last1 episode of ATP2, Siracusa said that the Time Capsule had “a terrible reputation for reliability, and I still think Time Machine over the network is not great”.

    I love my Time Capsule and see myself continuing to buy them.

    The Time Capsule I have is a 1st generation that I bought when they first came out. Living in an area without an Apple store at the time3, I ended up driving 3 hours to get one. It’s been with me ever since through many years and 3 interstate moves.

    I, like Siracusa, have many redundant backups of my data. I have multiple local clone copies4 and I also offload the raw data by itself on to external drives.

    Several weeks/months ago my internal SSD suddenly died completely. I hadn’t made a clone back up or manually offloaded the data since the morning. I’d been working all day and had many, irretrievable projects that were lost, except for the Time Capsule back up from 30 minutes before.

    I sent in the SSD on warranty, and when I got it back a week later, I booted up the new drive with it connected to the Time Capsule. It asked if I wanted to restore from the Time Capsule. I said yes and went to bed.

    When I woke up in the morning, my baby was back.5

    The beauty of the Time Capsule is it’s fire and forget usability.

    That earns some loyalty.6

    And Casey was right.

    1. 27

    2. The Accidental Tech Podcast.

    3. And mistaking Cedar Falls for Cedar Rapids.

    4. SuperDuper! FTW!!!

    5. I’ve also used it to save large amounts of data that I’ve accidentally deleted, such as when I deleted my entire music library before the days of iTunes Match.

    6. And it’s also priceless for easily backing up other family member’s computers, who may not be as diligent as you are.

  • Google search fail

    Dear Google,

    The following sites will show up on the first page when a patient is trying to search for information on a doctor by the syntax Dr. firstname lastname:

    1. Google +1
    2. Healthgrades.com
    3. Vitals.com
    4. Wellness.com
    5. Betterdoctor.com
    6. Ratemds.com
    7. Manta.com
    8. Doctor.webmd.com
    9. Lifescript.com

    They are all link-bait, content-farm junk sites. Yes, including your own.

    This is not helpful for users. This is not helpful for the internet.

    Fix it.

    1. An auto-generated page, not an actual user made account.

  • Editorial workflow - switching list types

    I’ve had Editorial for less than an hour and I’ve made my first workflow.

    I create my hacks as I need them and shortly after I starting writing I needed to change an unordered list to an ordered list.

    First, I picked the action that outputs the selected text from the document. I then did a regex search for ^(\s*)[-*] 1 to find the beginning of each line starting with the preface for an unordered list and replace it with $11. . The input is then used to replace the selected text in the document.

    This was a good start but I wanted to be able to easily switch back and forth. I put those three actions inside an if action so that it only fires if it finds that there is a line starting with -. I added a stop action inside the if action to end the workflow once the if statement runs. I then added another if action that is basically the same except looks for lines starting with 1. and replaces them with - .

    Finally, I added an action at the beginning of the workflow that extends the selected text to the beginning and end of the lines to make selecting text a bit easier.

    You can download this workflow here.

    1. The \s accounts for any preceding whitespace (tabs or spaces) and the [-*] looks for either possible syntax for bulleted lists.

  • Copy and paste, and paste, and paste, and paste

    From an actual clinic note I read today:

    “The pain is relieved by The pain is relieved by The pain is relieved by The pain is relieved by The pain is relieved by The pain is relieved by Relafen. Relafen. Relafen and topicals. Relafen and topicals. Relafen and topicals.”

    Got it.


  • From the mouths of babes

    Me: I don’t gamble because I only play games with women’s hearts.
    Boy(age 8): That’s never going to happen.
    Wife: Why not?
    Boy: Because he’s married to a woman who has no heart.

  • A modified Keyboard Maestro macro for MultiMarkdown Footnotes

    Update: This post is long out of date. Zettt and I worked together to come up with a better, faster way to do the same thing with Keyboard Maestro. Find his latest version of his Keyboard Maestro Markdown Library to see it in action.


    If you write in (Multi)Markdown and have Keyboard Maestro, I recommend you check out Andreas’s (@Zettt) Keyboard Maestro Markdown library, which makes it easy to write in Markdown through various schemes such as easily wrapping selected text with various special characters1; creating inline links, reference links, and image tags with fill-in templates; making ordered and unordered lists from selected lines of text; and several others. His videos clearly explain how to use them. He also chose a brilliant hotkey schema that makes it easy to remember all the options once you learn one or two.

    He’s currently working on some updates with the release of KM6, but that got me thinking about a modification I wanted to make.


    As it stands now, after placing the footnote, the cursor is left at the bottom of the document, rather than back in the text where the writing will continue.2

    This slight break in workflow is an unfortunate drawback of creating footnotes3. Some text editors do have the ability to remember cursor position so that it can be returned it to the original position, but one of the reasons I use Keyboard Maestro for these tasks is so they will be editor agnostic since I’m constantly changing my editor.


    Keyboard Maestro 6 added a cursor position token: %|%. Since the original macro involved two paste actions separated by moving the cursor, I was going to need to combine them into one paste action. Instead of using ⌘-↓ to move the cursor to the bottom of the text, I use ⇧-⌘-↓ to select all the text from the cursor position to the bottom of the document. I then cut (⌘-X) this to the clipboard. Finally, I paste a concatenation of the footnote tag, the cursor position token, the clipboard, and the footnote:

    [^%Variable%MMDFootnoteTag%]: %Variable%MMDFootnoteText%

    The extra carriage return is because, in my experience, you need to have a blank line between footnotes, unlike reference links, to get them to display correctly. Fletcher Penney recommends this format with regards to bibliography support in Multimarkdown.

    The final macro looks like this:

    If you’re paying close attention, you might notice that I also added a default value for the footnote tag, which is just the date and time in ICU yyyyMMddHHSS format.

    I think this makes it much easier and natural to write Multimarkdown footnotes, which may turn out to be a bad thing since I’m suddenly adding them all over the place.4

    You can download the macro here.

    1. Asterisk, double asterisk, quotation marks, parentheses, brackets, and backtick quotes.

    2. The macro is written to insert the footnote tag at the current cursor position, ⌘-↓ to move to the bottom of the document, and then paste the footnote.

    3. Unless you make inline footnotes and convert them using Brett Terpstra’s system service. I tried it, but too often it wouldn’t work because I was trying to nest a footnote inside a link inside something else.

    4. Like this one, for no good reason other than I could.

  • Making Passbook useful

    I shop for groceries at Harris Teeter1. If you use their loyalty card, the prices are much cheaper.2 I don’t like to carry a loyalty card on me, either in my wallet or on my keychain.3 I used to leave the loyalty card in my car, but then I’d forget to bring it into the store with me.4 They have an iPhone app5 that includes a scannable loyalty card, but it’s slow and poorly designed. I would have to remember to open it up while I was on the last aisle in order to give it enough time to load and, it seemed, download the card from a server somewhere. This was unacceptably slow. So my work around was to take a screen shot of the loyalty card and just display that. It worked better, but was still not elegant.

    So with help and prompting from some guy I met on the internet6, I made a location-based Passbook card that pulls up the loyalty card’s barcode whenever I’m at the store.

    I used the website Passdock to create the card using one of their templates. I wasn’t able to create the barcode programmatically because Harris Teeter doesn’t use one of the approved barcode styles for Passbook. Instead, I trimmed out the barcode from the screenshot I had taken and put that in the place of the logo. I used the built in DigitalColor Meter app in OS X to make the colors match and put in the GPS coordinates to make sure it would appear whenever I was at the store. It took a little debugging at first, but it works perfectly.

    Now, rather than being annoyed whenever I’m checking out, I get a little flush of satisfaction.

    1. Don’t be creepy™.

    2. Or maybe they’re much more expensive to begin with and only reasonable with the loyalty card.

    3. Minimalism is cool, right?

    4. Remembering things is hard.

    5. And Android too.

    6. What a wonderful day it will be when I hear those words from my daughter’s mouth.

  • Notes while watching the D11 Cook interview

    1. The hosts seem old, slow, and disheveled. I’m left wondering how these can be on the forefront of evaluating bleeding edge technology in an age of speed, simplicity, and beauty.

    2. Their attempts at humor fall flat.

    3. Just as in the senate testimony, Cook refocuses the questions clearly but politely stating that he disagrees with the assumptions underlying the question.

    4. The hosts grill Cook on the stock price. When he points out that this is not a new phenomena and gives a history lesson on the stock, he asks “Do you know what the price was then?” the host replies “We don’t own Apple stock”.

      How does owning Apple stock have anything to do with knowing the price? Are you not a journalist? We’re you not the one who brought up the stock price in the first place? Now we’re supposed to believe you don’t follow it at all? Unbelievable, literally.

    5. Cook: Apple’s focus is on making the best product.

    6. Hosts: undeservedly arrogant.

    7. Cook on Google Glass: Thinks it won’t have broad appeal but will be useful in certain vertical markets.

    8. Cook is wearing Nike Fuelband on stage. Likes it. Seems to imply that items that do one job do well work well so far, but multipurpose ones don’t and this needs to be solved. “Ripe for exploration.”

    9. “Winning has never been about making the most. That has never been the cornerstone of Apple.”

    10. Hosts: not pleasant people.

    11. Cook doesn’t use articles in front of Apple’s products. E.g. “I use iPad”, rather than “I use the/an iPad.”

    12. Cook: We will be rolling out the future of iOS and OS X in two weeks at our developer conference. “Jony has been really key.”

    13. Cook on taxes: Our return is 2 feet high. It’s too complicated. The tax code needs to be gutted and simplified, which is how Apple approaches everything. Our suggestions on how to do this might mean Apple plays more taxes.

    Tim comes across as polished, measured, thoughtful, and confident. I hadn’t seen him before except in the senate testimony and a few keynotes. Am impressed.

    Hosts come across as slow, stubborn, and rude. Good hosts make a great show and interview. These hosts seemed to just get in the way and their little self-referential comments were annoying.

    Update: On Amplified, Myke Hurley called the hosts cringeworthy and said it’s a recurrent problem.

  • No good deed goes unpunished

    A man who saved the life of a little boy who was being attacked by 3 pit bulls is being fined $1000 by the D.C.:

    When the three dogs attacked an 11-year-old boy riding the dirt bike he had gotten for Christmas, neighbor Benjamin Srigley jumped in to help. He retrieved his 9mm Ruger P-90 handgun from his house and fatally shot one the animals. A D.C. police officer shot and killed the other two.

    But the 39-year-old’s actions — deemed heroic by the boy’s relatives — quickly became complicated. Authorities say Srigley had legally bought the handgun and two other firearms in Virginia, but he had failed to register them in the District.

    Police confirmed that Srigley has no criminal record in the District or elsewhere.


  • Two improvements with Keyboard Maestro 6

    I’m a big fan of Keyboard Maestro and use it both daily for my workflow as well as occasionally for projects as they arise.

    Version 6.0 was released today and is a major upgrade over version 5. There are many improvements both major, minor, and cosmetic. It was well worth the $25 upgrade price.

    Macdrifter has a nice write up and I’m sure that Macstories will have a very detailed review within a few weeks.

    Today I’m just going to share two small items made possible with the new version.

    Shorter macros with browser text tokens

    First, some types of macros are more easy to create and are smaller due to the new web browser text tokens. I had previously created a macro that would take an URL that was currently open in Safari and open it in Chrome instead, and vice versa.

    The macro in version 5 is fairly long:

    Switching browsers in KM5 macro

    The same macro in version 6 is much smaller:

    Switching browsers in KM6 macro

    This is all directly or indirectly because there is a text token for the current URL in both web browsers. This gets rid of the AppleScript for getting the URL. It also indirectly allows me to get rid of commands to open the opposite web browser as well as to wait for that browser to be open. In the version 5 macro, I had a command to switch to the new browser since that was necessary in order to enter the URL into the address bar. Since in my situation, I may not want to immediately switch over to the other browser, I was able to leave that off too.

    Seeing how easy it was to change the above macro, I decided to make a quick macro to make a Markdown link using the current Safari URL as the link URL and the current Safari window title as the link text. I also used the new text token %|% to place the cursor in position to quickly change the link text in case the window title isn’t appropriate.

    I’m looking forward to upgrading my old macros and kicking the tires a bit more. I can’t wait for my next project so I have a chance to create something new.

  • Google Glass as a tool

    Google Glass is a new1, wearable technology that incorporates a screen, microphone, and camera into a glasses-like form factor. Most2 of what I’ve read about it so far as been fairly negative with comments ranging from how bad you’ll look wearing them to how much of an invasion of privacy it is when people can take your picture at any time without them noticing. In his typically outrageous manner, Ben Brooks has even suggested outlawing them.

    Unfortunately, these complaints, while at least partially valid, are also myopic.3 Fashion is fickle and their design can change; cellphones, spy cameras, and digital SLRs with telephoto lenses got rid of privacy long ago; and, Ben, taking photos of people without their permission in public is perfectly legal. Yeah, even if it’s of your kid.4 They also seem to overlook or have no image about how useful they could be.

    What interests me about Google Glass is not how it might be used in social situations5, and the accompanying norms it may violate, but how this could be used as a tool, an extension of one’s self.

    • I imagine a rescue worker being able to view and tag dangerous situations in some wreckage, while leaving their hands free or perhaps easily and quickly taking images of an injured survivor that could be uploaded and reviewed at the central medical center so that preparations could be made before the patient even arrives.
    • I imagine a doctor doing a procedure being able to monitor an ultrasound image or telemetry while not taking his eyes off the patient.
    • I imagine being about to keep a menu or manual right in my field of vision while cooking or fixing the car, without awkwardly perching it somewhere not quite easy to see and not quite out of the danger zone.
    • I imagine that every time I looked at a document containing the words of some diagnosis, Glass would automatically search for the ICD-10 code and if I happened to need it, I could quickly glance up at the screen.
    • I imagine seeing a patient and when I start talking about the treatment, Glass connects to my electronic chart to look up their insurance coverage and list in my field of vision which medication is covered so I can continue explaining the treatment uninterrupted.

    My first thought when hearing about Glass was how useful this would be for parents of infants. One mother already wrote about how useful it is6.

    Sure, I can’t imaging people wearing these all the time in every social situation7, but who said you had to?8 I may never wear it while at a restaurant or a party, but who cares if I look dorky while walking around my own house? I don’t wear my pajamas outside either. While most agree that bluetooth headsets are dorky, it’s not the same when wearer is the receptionist sitting at the desk of your local law office or clinic answering phones all day. In that same situation, I can imagine the practice management software being able to identify the person checking in, pull up her chart, take a picture of the patient’s new insurance card and upload it to the billing software, while leaving the receptionist’s hands free for other things.

    Social norms may have to adapt or may have to be more strongly reiterated to put those who would abuse this, or any, technology9, but if we can get past the idea of this being a social device and start to look at it more as a tool, suddenly, this technology seems a lot more interesting.

    I have no prediction as to the business success of Glass and the functionality will greatly depend on how good the software is. Google has already let me down enough times that I’m cautious. But I am curious.

    1. Not even publicly purchasable.

    2. Scoble doesn’t count.

    3. No pun intended.

    4. Not to mention, if someone really wants to get inappropriate photos of people, it’s a lot easier and cheaper to just Google it.

    5. From the technocrati’s reaction to GG, it seems all anyone does in Silicon Valley is go to parties and the bathroom.

    6. Apologies, but I can’t find the link now.

    7. Except for a few, strange outliers, but isn’t this always the case?

    8. At least for now. Who knows how social norms will change in the future. Maybe like bluetooth headsets it will always be gauche, or maybe it will come to be the norm.

    9. Scoble is never invited to my house.

  • Using PACS from a Mac

    The title is a bit misleading, but I figured that’s what people would be searching for if they had the problem I’m intending to solve.

    Technically, this article is about installing virtual Windows machines for free on your Mac so you can use PACS rather than about how to use PACS on a Mac, because, as far as I know, you can’t.

    A colleague uses a Macbook Air at work except the hospitals imaging system uses PACS with some unfortunate software requirements:

    1. Internet Explorer 6.0, 7.0, or 8.0
    2. Windows XP (Service Pack 3) or Windows Vista Home Premium or Windows Vista Business 64 bit or Windows 7 32 and 64 bit
    3. Windows 3.1 Installer
    4. Microsoft .NET Framework 3.5 (Service Pack 1)
    5. Windows Media Player 11.0

    This made him sad because he also had to carry around a crappy Windows machine.

    Thankfully, we were able to easily solve his problem today.1

    The technique we used came from a 2 year old article from OSXDaily. It uses VirtualBox from Oracle to create a virtual machine and then load a free version of Windows XP for the purposes of testing IE.

    The technique is really pretty simple, although you need to not fear the terminal.

    First, download and install Virtual Box.

    Second, go to the terminal2 and paste one of the following depending on the version of Internet Explorer you need:

    • Internet Explorer 7

    curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="7" bash

    • Internet Explorer 8

    curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="8" bash

    • Internet Explorer 9

    curl -s https://raw.github.com/xdissent/ievms/master/ievms.sh | IEVMS_VERSIONS="9" bash

    In everything goes well, this will install the Windows operating system needed and the version of IE as well.

    Finally, run the application VirtualBox and you’ll be able to boot up the Windows virtual machine.

    If you have trouble doing that there are several more resources that can help:

    Let me know if this works for your and allows you to use PACS on your Mac. I’d be interested to know how much this is effecting physicians.

    1. Actually, it took forever to figure it out. While this technique worked perfectly on my Macbook Air 13 inch, for some reason it would immediately fail on his machine. For some reason, the installer couldn’t make the hidden directory .revms in his User folder. Once we figured that out, un-hide the hidden files, and created it manually, it worked fine. Took forever to figure that part out though.

    2. Terminal.app or ⌘-space, terminal.

  • Keyboard Maestro link-blog post creator for Scriptogram

    I created a Keyboard Maestro macro to quickly create a link-blog post to Scriptogram without even needing to open a text editor.

    The workflow is straight forward and assumes that you are reading a website in Safari and have already copied the quote you want to the clipboard:

    1. You are prompted for an attribution (either the author or the website you’re quoting), the title of your post which will also be used as the url of your post and part of the file name, tags (optional), and comments (optional).
    2. The url of the frontmost tab in Safari is saved as a variable.
    3. Text is written to a file.

    Only three steps. The real power is in what text is written to a file and the name of the file.

    The text is just the boilerplate of a Scriptogram blog post with variables to fill in the data.

    Title: %Variable%Post Title%
    Date: %ICUDateTime%yyyy-M-d HH:mm%
    Link: %Variable%currentURL%
    Tags: %Variable%Tags%
    > %CurrentClipboard%

    The text is written to a new file each time as long as the date and post title are unique. I like my file name to consist of the date and the post title as follows:

    /Users/michael/Dropbox/Apps/scriptogram/posts/%ICUDateTime%yyyy-M-d% %Variable%Post Title%.md

    Took me all of 5-10 minutes. I surprised myself getting the whole thing correct on the first try. Typically it takes me half an hour to get the format of the macro set up and another 2 hours debugging it.

  • Google "Me Too"

    John Gruber:

    Google is the company that built Android after the iPhone, Google Plus after Facebook, and now a subscription music service after Spotify. They entered the RSS reader market, wiped it out, and are now just walking away from it.

    It is the “walking away” part I need to remember so I don’t end up relying too heavily on their services or sink too much time and data into their silos.

  • Enable Copy and Paste

    The website Uptodate, a common medical reference site for physicians, appears to disable copying text on the iPhone. This makes it very difficult to copy snippets of text into the notes I’m taking as I read. It also prevents using iOS’s text-to-speech functionality when my eyes get tired.

    Thankfully, it’s not very difficult to restore this functionality.

    1. On your iPhone, create a bookmark of this page.
    2. Copy the following text to your clipboard:
    function allowTextSelection(){
      var styles='*,p,div{user-select:text !important;-moz-user-select:text !important;-webkit-user-select:text !important;}';
      jQuery('head').append(jQuery('<style />').html(styles));
      var allowNormal = function(){
        return true;
      window.console&&console.log('Elements unbound: '+
        jQuery('*[onselectstart], *[ondragstart], *[oncontextmenu], #songLyricsDiv'
    function allowTextSelectionWhenPossible() {
        window.console&&console.log('jQuery has now loaded');
      } else {
        window.console&&console.log('jQuery still not loaded.');
        window.setTimeout(allowTextSelectionWhenPossible, 100);
    if(window.jQuery) {
        window.console&&console.log('jQuery exists; will use');
      window.console&&console.log('jQuery not loaded; will include.');
      var s=document.createElement('script');
    1. Go to the bookmark menu in Safari, find the bookmark you just created, and hit edit.
    2. Replace the URL with the clipboard contents.
    3. Go to Uptodate or any website that blocks copying.
    4. While on that page, hit the bookmark, and functionality should return.

    Credit: I got the JavaScript above from Alan Hogan.

  • The Fanboy's Prayer

    The Mac is my Shepherd; I shall not defrag.
    He maketh me not change my system fonts.
    He leadeth me to easy back ups.
    He installs no bloatware.
    He leadeth me in the paths of a Unix core for stability’s sake.

    Yea, though I walk through the valley of crappy medical forms,
    I will fear no .docx: For PDFpen Pro art with me;
    Thy “create form fields” command, it comforts me.
    Thou preparest a Dropbox folder before me in the presence of all my devices;
    Thou annointest my terminal with bash; My stack doesn’t overflow.

    Surely TextExpander and Keyboard Maestro shall power all the shortcuts of my workflow,
    and I will compute in the House of the Mac forever.

  • Creating a plain text wiki with nvALT


    When I was in medical school, they issued the student’s Sony Cliés.1 It was an awesome little device for the time and I took a lot of notes on it while on rounds. Sadly, a few years later, I was unable to read the files when the Clié finally died and I was unable to read the files with any of the software on my computers.

    Since then, I’ve been an advocate for plain text file. Plain text does not use any strange or proprietary formatting so the files can be read on any platform and in any app. The data is about as future-proof as you can get.

    There are many other benefits to plain text as well.

    Although I use many apps on many devices to read my plain text files, my favorite by far is nvALT. It is fast, responsive, intuitive, and created by a programmer I highly respect. Unfortunately, it is free, but you can donate money like I did to support its continued development.

    Today I found another useful way to use nvALT.

    Creating a plain text wiki

    As I was reading an article on auto-inflammatory syndromes, I was struck with the idea of creating a list of all the rheumatology diseases. I hit my hotkey trigger to bring up nvALT and typed “rheumatology diseases” to see if I might have started such a list before. No results appeared, so I hit enter and the document with the title “rheumatology diseases” was created.

    I copy and pasted the list of auto-inflammatory diseases into the note and went back to reading the article. As is typical, the article started with the first disease and moved down the list. Now I wanted another text document about that disease in which I could write some notes. While it wouldn’t be hard to do, wouldn’t it be nice if the original list of diseases could link to this other document so I could easily browse them in the future?

    It happens that nvALT has an in-app feature2 that allows you to create links to other documents by wrapping the words in [[double brackets]]. Whatever words are in double brackets link to a note with the same words as the title. Example: “I love to eat [[chocolate]].” would link to a document with the name chocolate.txt. In my case, “FMF - [[familial Mediterranean fever]]” linked to a new document “familial Mediterranean fever.txt”.

    As I read my way through the journal article, I created a new text document for each disease that is linked to from the disease list document. I imagine in this way, I could accidentally end up writing a book someday, or maybe just a good wiki for my website. Since I’m writing it all in Markdown anyway, the conversion would be relatively simple.


    It’s simple. It’s elegant.

    1. Model PEG-TJ27

    2. This means it works in the app, but won’t work elsewhere. Because the documents are plain text, this won’t break the document when read in other applications, but the link itself won’t be active.

  • The first US morning sickness pill, again

    My dad told me a story as a kid about a good medicine that used to exist for morning sickness until some greedy nurse had a baby with birth defects and sued the company. They lost and the drug wasn’t profitable enough for them to continue making it in the face of potential future lawsuits and the precedence of that loss. They stopped making the drug. Sometimes, my dad would have the drug (really just a couple of over-the-counter pills) made up specially for certain patients.

    At least that’s how I remember the story.

    From this I learned several lessons:

    1. The legal system is not about justice.
    2. The people closest to the medical system are the ones who abuse it the most.
    3. Sometimes you have to take great risks to do the right thing.
    4. The good guy doesn’t always win.

    Looks like the drug is coming back:

    U.S. doctors have had no officially approved treatment for morning sickness since lawsuits forced Bendectin off the market in 1983. But the drug’s main ingredients are vitamin B6 and an over-the-counter antihistamine, and obstetricians often advised pregnant women how to mix up the right dose themselves.

    From Businessweek.

    U.S. health regulators have approved a drug to treat morning sickness that was withdrawn from the market 30 years ago amid claims, since debunked, that it caused birth defects.

    From Reuters.

  • The Patient Satisfaction Dilemma

    Zac at Agraphia:

    With a click of a button I can easily do all these things, even when I know I shouldn’t. And I’ll get paid more. And I’ll avoid lawsuits. And my patient interactions will be far more pleasant. I suppose in the end, I try to do the right thing instead of the easy thing because I firmly believe that my duty is to take care of my patients.

    There is no way around the fact that there will always be some amount of paternalism in medicine because there will always be a significant knowledge gap between the physician and the patient.

    When “satisfaction” is taken to the extreme as a marker of quality and when “making the customer happy” becomes the primary rule in a clinic, good physicians will suffer great psychological pressure and patients will be at risk.

    I think the ER is the place where we will see the worst consequences of this mandate.

  • The Boy's Dream


    I had a weird dream last night. There were zombies all over the world in the United States and Japan.1 The humans had barriers to protect them and keep the zombies out, but zombie scientists2 made a spray that could bring dead things back to life as zombies. They sprayed it on triceratops3 and the zombie triceratops broke through the barriers so we had to make new defenses. The spray could also turn humans to zombies.

    “Were you scared?”


    1. I love how the whole world consists of two countries.

    2. Say what?!

    3. Zombies and dinosaurs? Excellent crossover.

    4. He acted insulted that I even asked.

  • PDFpen Pro 6

    Smile makes some of my favorite software. In total I own 6 of their products: PDFpen Pro for Mac (two versions), PDFpen for iPad, PDFpen for iPhone, TextExpander for Mac, and TextExpander for iOS. 1

    Today they launched version 6 of their PDFpen and PDFpen Pro application for the Mac.

    PDFpen Pro is $40

    PDFpen Pro is a powerful PDF editor. It has the simple editing functions typical of what you would expect even on an iOS app: highlighting, notes, commenting, shapes, stamps, signatures, deskewing, resampling, cropping, etc..

    The real power comes from its other editing abilities.

    Redacting Information

    You can redact text either by deleting it and replacing it with a black bar, a la spy movies, or delete it completely and leave it blank.

    Example: The ACR has an excellent handout on a certain disease but one line is outdated. Rather than re-creating the whole PDF, just remove the one outdated line.

    Example: Need to send your tax return to some company, but don’t want your social security exposed? You can do a search and replace redaction through the entire document in just a few seconds.

    Make Non-Fillable PDFs Fillable

    It seems to be a bad habit in medical administration to use a scanned copy of an old paper document for application forms rather than creating fresh, fillable PDFs. We both know that we will never change the archaic practices of established medical organizations like state medical boards, but that doesn’t mean we have to be slaves to them.

    Rather than suffering this indignity, open the PDF with PDFpen Pro and choose Edit > Create Form Fields. PDFpen Pro will go through and find all the places that should be fillable and create them. Now you can complete the PDF as easily as is possible and email it back.

    Here’s an example I did with my own consult order form:

    Clearly the second option is more professional and easier for the user to complete.

    If you happen to be one of those “established medical organizations” I mentioned, then you can make your own forms fillable now and save your customers time and yourself the hassle of trying to read doctor handwriting.

    I also used this in my clinic to turn the radiology departments order form into a fillable PDF that automatically inserted the correct days date, my signature, and a pick menu of the common reasons I order imagine studies with the associated ICD-9 codes.

    Create PDF Forms

    Especially if you are a professional (individual or organization), the forms you host on the internet should be clean, fresh PDFs that are fillable, rather than blurry, tilted, off-center scans of old word documents. PDFpen Pro has complete features to create fillable PDFs including check boxes, radio buttons, drop-down pick lists, and fillable text boxes. You can create new PDFs from scratch in PDFpen Pro, or import PDFs created in other applications like Word or Pages and add the fillable areas.

    Turn PDFs Into Word Documents

    An interesting new feature of PDFpen Pro version 6 is the ability to take a PDF document and turn it into an editable Word document. I’m not sure if this is a feature I’d use myself since I can already edit PDFs with PDFpen Pro and I don’t use Word, but other professionals have told me that this is something they’re really excited about.

    David Sparks, lawyer, has an excellent blog post with an 8 minute video including an example of this.


    Want to send out a PDF to others but either make sure that your intellectually property is marked, or that it’s clearly labeled as a draft? PDFpen Pro can easily watermark every page of a document so that your message is clear.


    In addition, I also use PDFpen Pro to OCR documents for me. OCR stands for Optical Character Recognition and is the process by which computers take a flat image and find the words inside that image. For example, you are probably aware that when you type a document you can search inside that document for a specific word, but if you have a picture in that document and there happens to be a word in the picture it will not find the word. When you scan a document or take a picture of the document, the words themselves are not recognized. To make the words machine readable, you need to use OCR.

    PDFpen Pro has a fast and accurate OCR. When I scan bills, contracts, patient records, and any other documents, I always make sure to OCR them so I can later search within the document. If I take a photo of a document with my iPhone, it uploads to a Dropbox folder and PDFpen Pro OCRs the document so it’s searchable later.

    Example: You have 100 pages of outside records on a patient. You want to know if they have previously been on azathioprine. If your document was scanned without being OCR’d, which has been the case in every clinic and hospital I’ve worked at, then you have to flip through every page manually looking for the word. On the other hand, if you OCR’d the document, then you can just search for azathioprine.

    You can open a document in PDFpen Pro and have it OCR the document for you. Better yet, you can get really nerdy and use scripts written by others to watch for any new PDFs added to a specific folder (for example, your patient records folder) and automatically OCR them without bothering you.

    I also use this technique whenever I’m on a webpage with image text that I want to save and manipulate. I take a screenshot that is automatically saved to the desktop, I add “OCR” to the file name, and PDFpen Pro sees that (via a Hazel task) and automatically OCRs it for me.


    PDFpen and PDFpen Pro can be bought either on the Mac App Store or directly from Smile. The MAS version includes iCloud syncing, which is not available with the direct purchase option.

    The MAS versions are on sale today and tomorrow only.

    PDFpen is $30.

    PDFpen Pro is $40 and includes these features that are missing from the non-pro version:

    • Convert websites to multi-page PDFs, complete with hyperlinks
    • Create and edit cross-platform fillable PDF forms
    • Create and edit document Table of Contents
    • Create form fields automatically in a non-interactive form
    • Edit document permissions to restrict saving, printing, copying, etc.

    This compares with Adobe Acrobat XI Standard for $139 and Adobe Acrobat XI Pro for $199.

    I own the Pro version from the MAS.

    So, now you know and if I see you putting non-fillable, scanned PDFs on your website, doctor, I will make fun of you.

    1. It’s only fair if I point out that on iOS, I actually prefer PDF Expert.

  • The best indie developer

    Yesterday, a customer on the Keyboard Maestro forums wrote a thank you to Peter, the owner/developer of KM:

    Peter, I don’t know how you do it–all the work you do on KM, and still answering many questions in the forum. Just a note from one very appreciative customer.

    This was quickly followed by “+1”s.

    I have to agree that this echoes my sentiments too. I love KM as excellent software, but the extra work on answering (sometimes silly or rude questions) is really wonderful.

    Even better was Peter’s deferential reply:

    Thanks Mike (and others!), your thoughts are greatly appreciated!

    It’s easy to say how I do it - I’m supported by all of you. I get to do what I love, work from home so I can walk my kids to school, make something that is useful to lots of people, and all because you folks all support me, both financially and by helping expand Keyboard Maestro to others.

    So by far it is me who needs to thank you all, not the other way around!

    Thanks, Peter.

  • Clone Backups - Why and How


    If you have valuable data on your computer you need to have a back up and more than one. Your data is likely priceless, irreplaceable and/or expensive to recover. If you’re anything like me, your data may consist of some of the following:

    • Photos
      • Military
      • Med school graduation
      • Wedding
      • Children
      • Clinical photos
    • Music - entire collection of CDs long burned to digital and thrown away
    • Movies
      • Home movies
      • Hollywood movie rips from old DVDs long thrown away
      • Training videos
      • Conference talks
    • Documents
      • Tax returns
      • Business receipts
      • Lease agreements
      • Scans of all diplomas, licenses, etc.
      • All utility bills
      • Research papers
    • Etc.

    You should back up the data frequently and redundantly. Hard drives do fail. Natural disasters, both weather and children, do happen. Thieves do take things. Hackers can wipe out everything.

    I can’t emphasize enough how important it is to make multiple continuous backups with at least some of them stored off site. There are many easy and relatively inexpensive ways to do this, but today I just want to talk about one specific type of back up that I think is the most valuable. (You still should do more than one kind.)

    Clone Backups

    A clone backup is an identical copy of your hard drive including the operating system and not just the user data. This is a bootable copy of your computer meaning that if your hard drive wears out, gets stolen, is shot, whatever, you can plug your clone in and run it identically to the machine that just died. To be clear, if my drive dies in the middle of clinic, I pull the clone back up out of my bag, plug it in, reboot, and I’m back in business.

    Most other forms of back up just back up user data, or are primarily designed to recover small amount of data at a time. While this is nice to have in the situation of catastrophic failure, it doesn’t do me much good if my hard drive dies in the middle of rounds or at conference before I have to give a presentation.

    In those situations, I need my machine. I need a clone.


    This is for Macs only. I’m sure Windows and Linux have their own software for doing this but I don’t use those products so I can’t make recommendations.

    There are two excellent and easy to use programs that will make clone back ups for you: SuperDuper! and Carbon Copy Cloner. They are both excellent and are staples of Mac nerds. I happen to use SuperDuper! but not for any particular reason. They are not available in the Mac App Store because they need very low level access to your computer to make the clone, which is not allowed for MAS apps. I’m always happily surprised when I go to upgrade my OS and their software is already upgraded for the new version.


    The hardware is platform agnostic so you can use these on Mac, Windows, or Linux.

    The other thing you’ll need to make a clone back up is a hard drive. At the bare minimum it needs to be big enough to hold your entire primary hard drive. In addition, I recommend that it be small so that you can carry it with you all the time, and have the fastest port possible for your machine so that the back ups are quick to make. The longer it takes to run, the less likely you are to do it. (Think compliance with QID dosing versus QD dosing.)

    • Larger than the drive it is cloning
    • Small so it is portable
    • Fast connection so backups are easier

    When it comes to speed there are two types of drives and two major types of connections: SSD vs HDD, and Thunderbolt vs USB 3.0.

    SSDs (solid state drives) are newer, faster, and have no moving parts. They are the Ferrari of drives. They also cost as much. HDDs (hard disk drive) are the classic spinning disk drives. They are larger, store more, and are cheaper, but are also slower.

    The Thunderbolt connection is an Intel product but so far has really only shown up in Mac computers. It is the fastest consumer external connection, but it is also very expensive. Often drives are sold without the cords, which themselves cost an extra $50. USB 3.0 is very fast compared to the previous generation USB 3.0 and is much cheaper. This is pretty ubiquitous now on new computers from Apple and Windows.

    SSD: fast and furious with a price to match

    If money is no object, I recommend an SSD with either Thunderbolt or USB 3.0 connection, depending on the fastest connection your computer has. The one caveat is that SSDs are typical smaller than HDD and are very expensive a larger sizes. If you have an 500GB+ HDD, then you’ll need to stick with an HDD. However, if like me, you have something like a Macbook Air with a 128 or 256 GB SSD, then this is a great option. For a top-of-the-line, blazingly fast, SSD/Thunderbolt drive, you can get the Elgato 240GB for $480. A really beautiful option, and only a bit slower but much cheaper, is the 240 GB OWC SSD/USB 3.0 Envoy Pro EX for $320. (This is probably what I would get if I had the money. It’s not as fast, but way better looking.)

    A few cheaper options include the U32 Shadow 240GB USB 2.0 SSD for $250 and the Verbatim Store ‘n’ Go 128 GB USB 3.0 SSD for $150.

    HDD: steady and solid

    A mid-range choice, and what I use, is a HDD with Thunderbolt connection. HDDs are significantly slower than SSDs but without the prohibitively high price. I can make two clone back ups on separate devices (one for home and one for work, i.e. off site back up) for the price of an SSD and the drives are still large enough for lots of extra storage space in addition. I have/use two Buffalo MiniStation 1 TB Thunderbolt / USB 3.0 Portable Hard Drive with Thunderbolt Cable. This has both the USB 3.0 and the Thunderbolt connections and comes with both cables. The 1TB model is only $208 on Amazon right now and the 500GB is $143.

    If you drop the Thunderbolt connection for USB 3.0 you can significantly cut the price. A Buffalo drive with only USB 3.0 runs $70 for 500GB, $84 for 1TB, and $200 for 2 TB.

    If you are on a shoe-string budget or only have a USB 2.0 connection then the specific model doesn’t matter as much. You can get a WD My Passport 500GB USB 2.0 but considering you can get a much better drive for $20 more and the speed will be agonizingly slow, I really don’t recommend going this route. The only way I’d do this is if you have hardly any money at all and already own an old USB 2.0 drive.


    The first time you run the cloning software, it will take awhile. Depending on your connection it could be an hour to all night. After that it will much faster as it will only incrementally update changes. My updates typically take around 6 minutes.

    Enjoy your new power and piece of mind. You just earned +10 nerd CME.

  • A Public Occurrence

    I was sitting in a public place, minding my own business. An elderly gentleman sat down next to me and started to have a very loud phone conversation with what apparently was an insurance company. The salient points are:

    1. His fiancé was in a car accident last week.
    2. She was hit from behind.
    3. She reportedly broke her sternum.
    4. She “is quite messed up.”

    He proceeded to slowly spell the name of his fiancé, the name of driver of the other car, and a bunch of personal details such as birth date, phone number, addresses, insurance numbers, etc.. The fiancé walked around, moved both arms with as normal of a range of motion as can be tested by observation alone, and carried a book that weighs 4 lbs.

    After he got off the phone, she sat down and started going through the book, occasionally reading out a passage and the saying that they should get the lawyer to “add that charge.”

    Then they thumbed through the yellow pages writing down numbers for attorneys.

  • Mute commercials on CBS or Hulu with Keyboard Maestro

    In a game of one-upmanship, I’ve improved on my prior macros for muting commercials on CBS and Hulu. What used to be 1-3 non-annoying commercials1 has turned into five, highly-annoying, commercials in a row. The volume is often much louder than the volume of the show and not infrequently, the same commercial is played all 5 times.

    To combat this I made two small changes. First, I combined the two macros into one so I don’t have to remember two hot keys or which site I’m watching. A simple Applescript snippet captures the URL from Chrome and an if/then statement looks for the network name in the url. The second change involves turning the screen off and on in addition to toggling the mute key.

    The macro flows thus:

    - Execute Applescript `tell application "Google Chrome" to get the URL of active tab of first window` and save results to variable `currentURL`
    - If `currentURL` contains CBS then
        - Toggle system sound mute
        - Repeat action 16 times: decrease screen brightness
        - Execute following action until none of the conditions are met
            - none (this is basically just a pause until)
            - Conditions: screen contains image (the image is the "advertisement" graphic that is displayed during a commercial)
        - Toggle system sound mute
        - Repeat action 16 times: increase screen brightness
    - otherwise execute the following
        - If `currentURL` contains hulu then
            - Toggle system sound mute
            - Repeat action 16 times: decrease screen brightness
            - Execute following action until none of the conditions are met
                - none (this is basically just a pause until)
                - Conditions: screen contains image (the image is the "advertisement" graphic that is displayed during a commercial)
            - Toggle system sound mute
            - Repeat action 16 times: increase screen brightness
        - otherwise do nothing

    I haven’t figured out a way to automatically call this macro when the commercials start. I could watch for the “advertisement” graphic but I think that would be way too CPU intensive. I’ll keep thinking about it.

    I encourage you to make your own macro to learn the system, and you might have to in order to get the correct “advertisement” graphic, but you can get mine here. (right click to download)

    1. I assume this had to do with the newness of the medium was not attractive the old school advertisers and in addition the commercials were aimed at a younger, techophilic demographic. Now I just see lots of car commercials.

  • Hospitals and regulations stifle physician adoption of mobile technology

    I repeatedly see articles blaming physicians for the poor adoption of technology in medicine. As a tech nerd and a physician who is frustrated with the lack of good medical software (mostly EMRs), it was nice to see an article putting the blame where it mostly belongs: regulation and hospitals.1

    E.J. Boyer for the Nashville Business Journal (subscription only):

    [A] growing number of physicians are taking a cue from their personal lives and using mobile devices to make their jobs more efficient.

    Just like “normal people”, physicians want their life to be easier and when they see how technology improves one aspect of their life, they want to see similar improvements in other aspects.

    But industry experts predict the road to adoption won’t be easy, as data security, IT integration and looming federal regulations come into play.

    A constant problem in all areas of medicine, regulations continue to choke the life out of medical practice.

    But even as physicians continue to see the benefits of mobile apps in practicing medicine, experts warn the road to full adoption will be long. For starters, health apps and mobile devices present a new privacy and security challenge for hospitals, which operate under tight regulations and strict federal patient privacy laws.

    Physicians are driving the need for it. They want to be able to see the data on the phones and iPads, but the hospitals are not jumping on it as quickly.

    When I got the first iPad, I was told by hospital IT that it “couldn’t connect” to the system. When I figured out how to get it connected, I was told it was “not allowed”. They refused to explain how accessing the system from my laptop at home (fully supported) was different than accessing the system from my iPad as we rounded on patients. Eventually, as more higher level attendings bought the devices for themselves, seeing how useful they were to the residents, the policy changed to “not supported”. I wonder if that’s changed any since I left?2

    Another road block to mobile adoption is integration of apps into a hospitals IT system.

    This is because the EMRs that hospitals use are closed, proprietary systems. They are built on old architectural standards. The database systems are closed and or proprietary. There are no APIs. The EMR companies want to keep the system closed to stifle competition. They want to be the only one that can make an app for their system and they charge astronomical prices for mobile apps for their EMRs, often a large percentage of the original cost all over again.

    I still remain optimistic that one day cooperate medicine will have and use decent technology, although I’m realistic enough to know this may never happen in my lifetime. Until then, I will continue to develop my own private systems for my every day practice.

    As for the truly luddite physicians out there: eventually they’ll die3, and if the technology is good enough to provide substantial benefits to those physicians using it, the luddites won’t be able to compete.

    1. Poor quality software is another driving factor.

    2. I was also told that Macs were not able to be used as the technology wouldn’t work. Within 2 months my fellowship program had switched to Macs, but I had had to do most of the work. At one point I tried to talk to the Mac guy in IT had was repeatedly told “There isn’t one.” It ended up that he was on vacation, and when he got back he responded to the long email chain saying “Hey, I do exist. I’m right here!”

      I think a lot of the resistance is aversion to more work, interestingly, coming from the technology people, not the physicians/users.

    3. “I mean, when I started in this business one of the biggest challenges was that people couldn’t type. And one day we realized that death would eventually take care of this. - Steve Jobs

  • Create side-by-side screen shots on iOS with Pythonista

    First, I have to thank Federico Viticci, whose detailed blog posts on his use of Pythonista inspired me to use it and learn Python as well.

    I don’t use iOS devices as exclusively as he does, but when I am using them I want them to be as powerful and automated as my Mac is. One use case that Federico demonstrated was using Pythonista to take two screen shots (such as of an app before and after an update) and create a new image of both screen shots side by side, such as he might need for an app review blog post. His old script was a bit hacky due to the situation at the time.

    Pythonista was recently updated to include the ability to pick images from the camera roll from inside Pythonista as well as the ability to save generated images to the camera roll.

    I decided to fork his original code to include these features and to remove some options that I don’t need.

    When you run this script you will be prompted to choose an image from the camera roll. This will be the image on the left of the combined final image. Then you will be prompted to choose a second image. Naturally, this image will be on the right. The image will be generated and saved to the camera roll.

    You can get the script from Gist here.

    This code takes two screenshots from the camera roll combines them into one image and saves the new image to the camera roll.
    This is adapted from Federico Viticci's blog post at:
    It removes the option to change which picture is where, automatically assigning the first one chosen as the leftmost image.
    It also removes the necessity to copy the images to the clipboard outside of Pythonista using the new photos library in version 1.3. Finally, it removes the clipboard output.
    import photos
    import Image
    import console
    im1 = photos.pick_image(show_albums=False)
    im2 = photos.pick_image(show_albums=False)
    background = Image.new('RGBA', (746,650), (255, 255, 255, 255))
    print "Generating image..."
    _1 = im1.resize((366,650),Image.ANTIALIAS)
    _2 = im2.resize((366,650),Image.ANTIALIAS)
    print "Image saved to camera roll."

    Here’s an image I created with it for an upcoming comparison of the text-parsing of Pocket vs. Instapaper:

    Next, I need to make a way for this image to be uploaded to my public Dropbox folder and the public link to be placed in the clipboard.

    I can’t wait for more posts by Frederico so I can keep learning.

  • Switching the current viewed webpage between Safari and Chrome

    Update: This macro was made for Keyboard Maestro 5. Although it will work with KM 6, a newer version of the macro is available as is much simpler and faster with less risk of bugs.


    Safari is my typical browser of choice, but sometimes I want to open a webpage I’m already looking at in Safari in Chrome instead1. Sometimes I’m looking at a webpage in Chrome and want to open it in Safari.


    It’s not super elegant, but I made a Keyboard Maestro macro to switch back and forth.

    It consists of two nested if/then statements that check for which browser I’m using, grabs the URL of the front window, opens the other browser, pauses until the browser is running and the front window is open, pastes the URL into the navigation bar, and finally hits enter.

    • If Safari is at the front
      • Execute the Applescript tell application "Safari" to get the URL of the front document and save results to variable currentURL
      • Activate Google Chrome
      • Pause until Google Chrome is at the front and the front window exists
      • Type the keystroke ⌘T
      • Type the keystroke ⌘L
      • Insert the text by pasting: current URL
      • Type the keystroke return
    • otherwise execute the following
      • If Google Chrome is at the front
        • Execute Applescript tell application "Google Chrome" to get the URL of active tab of first window and save results to variable currentURL
        • Activate Safari
        • Pause until Safari is at the front and the front window exists
        • Type the keystroke ⌘T
        • Type the keystroke ⌘L
        • Insert the text by pasting: current URL
        • Type the keystroke return

    I assigned the shortcut Caps lock (which on my computer simultaneously pressed shift-command-control-option) - u.

    Download the macro.

    1. For example, if you’re limiting Flash to Chrome only via the Gruber method.

  • Calculating dates with Siri

    David Sparks is my kind of nerd:

    Maybe it’s a lawyer thing but I quite frequently need to calculate dates. For instance, I need to figure out what day is 30 days after I serve documents on somebody or how many days elapsed between date X and date Y.

    I was thinking this would be really convenient if I could do it with Siri but the Siri documentation doesn’t say anything about calculating dates. After a little experimentation, however, I stumbled upon the necessary syntax:

    Why are you still here? Go.

  • Text-to-speech for OS X and iOS


    I love to read and have to read a lot for my work and hobbies, but sometimes, for various reasons, reading is not ideal. Maybe my eyes are tired. Maybe I need to do something physical that precludes the physical act of reading but not the mental aspect.1 In those situations, I let my software read to me with text-to-speech.

    Text-to-speech on iOS

    Text-to-speech on iOS is already built into the OS. To turn it on go to Settings > General > Accessibility > Speak Selection and turn it on. You can also switch the dialect if you want.2 From now on, when you highlight any text, one of the options on the pop up menu will be “speak”. Hit this and the text will be read to you. There is a major limitation with this: if you lock the device or switch to a different application, the reading stops.

    Another option is a dedicated app. A colleague recommends Voice Dream Reader for 10 USD in the App Store. I have not used it so I can’t comment on it.

    Text-to-speech on OS X

    OS X also has built-in text-to-speech software. As far as I can tell, it is always on, but that may be a left over preference on my machine from years back so to check, go to System Preferences > Dictation & Speech. I also turn on the keyboard shortcut for this. Otherwise, all you need to do is highlight some text, right click, and select Speech > Start Speaking.

    I use this frequently when reading an article and I get tired, or I need to be doing something else like cooking at the same time. I’ve also found that just turning this on when reading something important like a medical journal article lets others know I’m doing something work related rather than just surfing the internet for memes, i.e. don’t interrupt. It is also a great way to proof read your writing. What your eyes often miss, your ears will clearly hear.

    Text-to-speech OS X to iOS

    Sometimes there is a very large article I want to read but don’t want to sit at my machine for an extended period to time. Thankfully, OS X has some built in functions that allow you to turn the text into an audio file using the text-to-speech functions. OS X comes with this ability pre-programmed in the services section. To turn it on, go to System Preferences > Keyboard > Keyboard Shortcuts > Services > Text and make sure Add to iTunes as a Spoken… is checked. From then on, when you have text highlighted, you can right click, go to Services, and click on Add to iTunes as a Spoken…. This will convert the text-to-speech, first as a lossless AIFF (a very large file). It will then re-encode using AAC (to make it a smaller file) and then import into iTunes under a special playlist.

    This works fine in general, but I don’t usually sync my iPhone with iTunes as I keep most things in the cloud. Thankfully, Automator3 makes it very easy to create your own.4

    This creates a service for when text is selected. You run it the same as the prior service: right click, go to Services, and click on The Name of the Service. It changes the text to audio format, saving to the location of your choice, and using the voice of your choice. It then re-encodes the file to a format most compatible with spoken word, thus greatly decreasing the file size, and deletes the original file. I have it save to a folder inside Dropbox so that I can play it later (or sooner) on any device I have.

    1. Cooking, doing dishes, folding laundry.

    2. I prefer Australian English.

    3. A built-in part of OS X.

    4. Or just take mine.

  • Batch converting Pages documents to PDF with Keyboard Maestro

    I had 3000 Pages documents that I wanted to convert PDF. I had previously searched the internet for a way to do this easily but was unsuccessful. I suppose I should have tried searching again, because I would have found Pages2PDF, which works much better than what I did.

    Still, relying on someone to create the exact program you need is not as fun or as useful as being able to fix the problem yourself. So I created a Keyboard Maestro macro.

    Basically, this automates the steps I would have had to do manually:

    1. Open the file in Pages.
    2. Select Export to PDF from the menu.
    3. Fix the file name.1
    4. Move the original file to a new location.

    In Keyboard Maestro parlance the steps were:

    • For Each Item in a the Finder’s selection
      1. Set the file name to a variable fileName
      2. Set the file path to a variable filePath
      3. Open the file at filePath/fileName2 in Pages.
      4. Pause for 1.5 seconds.3
      5. Select the menu item PDF… in the submenu Export in the Menu Title File.
      6. Press the Button labeled “Next…”
      7. Insert the text from variable %WindowName%1% by pasting. (Basically, this names the file being exported the same as the original file name, except for the extension.)
      8. Press the button labeled “Export”.
      9. Type the keystroke ?-W (to close the open file)
      10. Move the file %Variable%filePath%/%Variable%fileName% to whateverLocationYouWant/%Variable%fileName%

    It worked perfectly if somewhat slow. It took several hours to process all the files.

    1. For some reason, Pages kept truncating my filenames.

    2. I don’t know why I had to specifically use the path and name. Sometimes KM works fine without that and sometimes it doesn’t. I haven’t figured out why and when.

    3. I didn’t test this step any. I just assumed KM would need time for the document to fully open in Pages.

  • Legal troubles

    The New York Times:

    The proposals are a result of numerous factors, including a sharp drop in law school applications, the outsourcing of research over the Internet, a glut of underemployed and indebted law school graduates and a high percentage of the legal needs of Americans going unmet.

    “There is almost universal agreement that the current system is broken,” said Thomas W. Lyons III, a Rhode Island lawyer and a member of the American Bar Association’s Task Force on the Future of Legal Education, which gathered here over the weekend for a public hearing at the association’s midyear meeting.

    This sounds eerily similar to the situation in the medical world (minus the part about underemployment).

  • NIH Stroke Scale with Keyboard Maestro and TextExpander

    A colleague of mine wanted a way to easily document the NIH stroke scale score with the added benefits of not having to type the whole thing each time, prompts to remember what to evaluate and what the scores mean, and also have the final score calculated for him. Requirements included that the input had to be in TextExpander due to a preference for that applications input style, and the output would have to be in the middle of a Pages document that was using a single font and no bold or italics.

    He had already created the TextExpander snippet and basically needed me to figure out a way to use KM to calculate the score and put it into the note. Oh, one more thing: He wanted to do this with only one command.

    Challenge accepted!

    The KM macro first types out the shortcut for the TE macro, which calls the TE snippet pop up window, and then pauses until the TE snippet window disappears.

    The TE window has all the steps of the NIH Stroke Scale including prompts to remind the user how to do it correctly.

    NIH Stroke Scale TE Menu

    Once the TE part is complete, the KM macro continues. All it really does it use regular expressions to find the individual numbers in the scale and add them together for the final score. Since the final score is really just simple addition of 15 single digit numbers, the whole exercise is a bit of a Rube Goldberg, but it was fun anyway and any less brain power and time needed at 2 in the morning during a stroke is probably a good thing.

    And the final result:

    The resulting KM macro file is here.

    The original TE snippet:

    NIH STROKE SCALE %1m/%e/%Y %H:%M
    1a. Level of Consciousness:	%fillpopup:name=1a.:default=0 (Keenly responsive.):1 (Arousable with minor stimulation):2 (Requires strong stimulation):3 (Comatose)%
    1b. LOC Questions (month/age):	%fillpopup:name=1b:default=0  (Answers both questions correctly):1  (Answers one question correctly):2  (Answers neither question correctly)%
    1c. LOC Commands (eyes/grip):	%fillpopup:name=1c:default=0  (Performs both tasks correctly):1  (Performs one task correctly):2  (Performs neither task correctly)%
    2.   Best Gaze:			%fillpopup:name=2:default=0  (Normal):1  (Partial gaze palsy):2  (Forced deviation)%
    3.   Visual:			%fillpopup:name=3:default=0  (No visual loss.):1  (Partial hemianopia):2  (Complete hemianopia):3  (Bilateral hemianopia)%
    4.   Facial Palsy:			%fillpopup:name=4:default=0 (Normal):1 (Minor paralysis):2 (Partial/Central paralysis):3 (Complete paralysis)%
    5a. Motor Left Arm:		%fillpopup:name=5a:default=0 (No drift for 10 seconds):1 (Drift without touching):2 (Some effort against gravity):3 (No effort against gravity):4 (No movement):0 (Amputation or fusion)%
    5b. Motor Right Arm:		%fillpopup:name=5b:default=0 (No drift for 10 seconds):1 (Drift without touching):2 (Some effort against gravity):3 (No effort against gravity):4 (No movement):0 (Amputation or fusion)%
    6a. Motor Left Leg:		%fillpopup:name=6a:default=0 (No drift for 10 seconds):1 (Drift without touching):2 (Some effort against gravity):3 (No effort against gravity):4 (No movement):0 (Amputation or fusion)%
    6b. Motor Right Leg:		%fillpopup:name=6b:default=0 (No drift for 10 seconds):1 (Drift without touching):2 (Some effort against gravity):3 (No effort against gravity):4 (No movement):0 (Amputation or fusion)%
    7.   Limb Ataxia:			%fillpopup:name=7:default=0 (Absent):1 (Present in one limb):2 (Present in two limbs):0 (Amputation or fusion)%
    8.   Sensory:			%fillpopup:name=8:default=0 (Normal):1 (Mild to moderate loss):2 (Severe loss)%
    9.   Best Language:		%fillpopup:name=9:default=0 (No Aphasia):1 (Mild to moderate):2 (Severe aphasia):3 (Mute or global aphasia)%
    10. Dysarthria:			%fillpopup:name=10:default=0 (Normal):1 (Mild to moderate):2 (Severe dysarthria):0 (Intubated or other)%
    11. Extinction and Inattention:	%fillpopup:name=11:default=0 (Normal):1 (To one modality):2 (Profound loss)%
  • Stupid EMR UI Example 2

    I love tech and I especially love software, but like most things that we deeply love, when they fall short, it’s very hard to not get angry.

    This is one reason I have such a hatred for the current state of Electronic Medical Records. They’re abysmal. John Gruber even makes fun of them. (Minute 24:28, but the whole talk is worth listening too.)

    Today I share another example of poor design.

    In the EMR I use now, NextGen, I’ve been complaining about the joint injection procedure template for 1.5 years. They still haven’t fixed it.

    I use a standard medication called Synvisc One. Synvisc regular is a 2ml (16mg) injection you give once a week for 3 weeks. Synvisc One is all 6ml (48mg) given at once.

    Just to lay out all the numbers for you. This medication is available as:

    • 2ml
    • 6ml
    • 16mg
    • 48mg

    That’s it. Two strengths. Expressed either in a volume or a mass.

    You can document this in two places in the procedure template. I want to point out, that this is the first mistake, having two places to document one thing.

    And here’s how they look:

    First, there’s no units. Specifically it just says “units”. Is that milliliters? Liters? Milligrams? Grams? Number of injections? Is this for Synvisc or Synvisc One? If I pick one of these, what am I actually documenting or ordering? The closest guess is that this is in milliliters, but then you can’t pick “6”, the size of Synvisc One. There is a “2”, so you could document Synvisc regular. Even then, 1 in 5 available choices will always be wrong. Why even offer a possible wrong choice?!?! I also point out that this is a pop up menu, so you’ve already been removed from the screen you’re working on.

    And here is how the second place to document it looks:

    This one at least has units, but still has all the other problems.

    I would offer the following fixes:

    1. Have only one place to order the drug.
    2. Instead of a pop up window, make it a radial button choice.
    3. Have two options: Synvisc and Synvisc One

    This improve things as follows:

    1. Only one place to document.
    2. No choices that are wrong.
    3. No extra pop up menu.
    4. No need for the user to know the milligrams, milliliters, or any other unit. They just need to be able to read what is on the box.

    I hope that before I die1, a decent EMR exists.

    We have a long way to go.

    1. It wouldn’t hurt if it wasn’t horribly ugly either.

  • Inline Markdown links from Safari tabs

    This post is mostly for me, so I can remember how I did this in the future.

    I was creating show notes for a podcast I do. I needed to make a list of links to scientific papers. Even using Markdown rather than HTML it took me an insanely long amount of time to manually copy over the titles and links. So I decided I’d spend the next hour never doing that again.

    First, I figured out a way to get the links easily. Unfortunately, Papers does not have a way to easily copy out the information directly, but it does have a way to highlight all the papers you want to link and open them all in tabs in your browser.

    Now that I had all the papers open in their own tab, I needed a way to make Markdown links from them. I thought I had read something about doing this before, but I couldn’t find it again1, but I did find a post by Dr. Drang that got me halfway there. The only problem was that his method only gave me the second half of a list of reference links when what I wanted was inline links with the title of the webpage as the text.

    His technique gave me this:

    [1]: website url
    [2]: website url
    [3]: website url
    [4]: website url

    When what I wanted was this:

    [Website Title](website url)
    [Website Title](website url)
    [Website Title](website url)
    [Website Title](website url)

    I like reference links too, but I needed the title of the paper for my purposes and I already have another macro that I use to turn inline links into reference links later.

    My Applescript knowledge is weak, but I quickly found this page, which I can’t read because it’s in Chinese, and by looking at the code, figured out how to get what I needed.

    I changed Dr. Drang’s original code:

    tell application "Safari"
      set i to 1
      set links to ""
      repeat with t in every tab in front window
        set links to links & "[" & i & "]: " & the URL of t & linefeed
        set i to i + 1
      end repeat
      return links
    end tell

    to this:

    tell application "Safari"
      set i to 1
      set links to ""
      repeat with t in every tab in front window
        set links to links & "[" &the name of t& "](" & the URL of t &")"& linefeed
        set i to i + 1
      end repeat
      return links
    end tell

    You can then throw that into a TextExpander snippet or a Keyboard Maestro Macro and you’re prestige.

    Frankly, Papers needs a way to do this in the app itself.

    1. I need a Nerd-blog Search Engine

  • The history of Mr. Stone

    This story is told with permission from Mr. Stone. Written, informed consent and release of information forms are on file.

    I recently saw a kindly, intelligent, organized gentleman as a follow up for RF and CCP positive rheumatoid arthritis with a marked response to 15mg weekly of methotrexate. He also has osteoarthrosis with clear osteophytic changes in his hands and knees on exam. It was unclear to me if his current pain was because of residual inflammatory disease versus mechanical degeneration.

    All in all, a fairly typical case and encounter that I wouldn’t have thought about more–except to remember our conversation about old soda machines–until I happened to glance at my original consult note.


    Mr. Stone had seen me as a third opinion for joint pain. His first rheumatologist, an experience clinician whom I have great respect for with regards to his scientific acumen and testing thoroughness, was suspicious for rheumatoid arthritis in addition to his osteoarthrosis in the setting of high positive RF and CCP, except that he never found any synovitis on exam1. He treated him conservatively with steroids and hydroxychloroquine (Plaquenil) and followed him closely.

    Again: typical presentation, typical problems, and a typical approach to a yet undefined disease.

    Then, the patient’s insurance insisted on a “second opinion” by a company called “Best Doctors”.

    This so-called second opinion was obtained by sending the patients records to a rheumatologist at Harvard. I know this because in his typically organized fashion, Mr. Stone brought the records with him to that first visit. These included the report from Best Doctor’s which was basically a rehash of a rheumatologist’s letter written on Harvard business stationary.

    The salient quotes were:

    “Dr. [redacted] thinks that you should see another rheumatologist for a second opinion. Dr. [redacted] does not think that your symptoms or presentation are consistent with rheumatoid arthritis.”

    “In as much as the diagnosis of ‘rheumatoid arthritis’ has been raised, assays for rheumatoid factor and anti-CCP should be obtained, in the interests of completeness.”

    Moral outrage

    In reading this report and seeing how it had damaged the reputation of the first rheumatologist in the eyes of this patient, I could not fail to feel moral outrage at the unjustified arrogance before me.

    First, the assays had already been tested and were highly positive, which was why there was the concern for rheumatoid arthritis in the first place. This was clearly stated in the first rheumatologist’s clinic notes. It was also why lacking synovitis on exam, I wanted to follow up with him rather than writing him off after the first visit with osteoarthrosis.

    Second, how could any right-thinking rheumatologist think he could make a clinical diagnosis without taking a history and performing an exam? More than most specialities, rheumatology relies on history and exam. If you are going to question the judgment of another rheumatologist, certainly you also have to question their history and exam. Also, any doctor knows that we see and hear far more than we ever document. Thinking you know the story from reading the notes is a potentially fatal mistake.

    At the time I discussed this so-called second opinion with my colleagues decrying the fact that any doctor would be so arrogant to think they could diagnose a clinical disease without taking a history or exam. It seemed even worse in a field where most of our diseases are diagnosed clinically with our tests being lamentably poor.

    We live in a world of fancy tests in which the FBI can recover DNA off of licked envelopes from decades past and civilians can skydive from space. In many areas we can do the impossible, and many except the same magic everywhere. They expect that an MRI or lab or biopsy actually shows the cause of their symptoms, when we all know that these are poor tests at best with limited sensitivity and specificity. We need to be the ones holding the line, reminding everyone else that this is still, for now, a clinical field. It is messy, dirty, and ugly–like me before my morning coffee.

    Present day

    At my initial consult with Mr. Stone, I did not see any synovitis. My opinion was basically the same as his first rheumatologist. The caveat was that he was on steroids, which can mask the exam findings of rheumatoid arthritis. So we agreed to stop these and follow up in three months. 21 days later he was back in my clinic with obvious synovitis and a warm effusion of the left knee. Based on the new ACR classification criteria, and more importantly my clinical judgment, he had RA. We agreed to start him on methotrexate 15mg weekly.

    Today he told me that he is much better. His synovitis has resolved. Most importantly in my opinion, he tells me that he’s out working on roofs, which he wouldn’t have been able to do 6 months ago. He still has some pain and we will be working to determine if this is only due to old mechanical pains or if there is still some inflammatory component in need of suppression.

    Wrap up

    Really, his case isn’t that remarkable to a rheumatologist. If it wasn’t for the “Best Doctors” involvement, I would never even mention a case like this to another rheumatologist. What makes it so remarkable is when the opinion of a doctor who has talked to or examined a patient takes precedence over the clinician who was in the room for that is what we do. We listen to a story. We examine. We might order some labs or other testing. Then we guess, place our bets, and see what happens.

    What “Best Doctors” got wrong is to skip the story and the exam. Maybe one day we will have better labs, better scans, better pathology and we won’t need to do that stuff anymore. Maybe one day doctors will be more technicians than magicians. More likely, we won’t be needed anymore as a computer will be able to perform the task better. But we are here and now. And if your rheumatologists doesn’t touch you, they’re wrong.

    I don’t write this to shame anyone, but to serve as a reminder to myself first, and to other rheumatologists second, that the science of medicine is poor, the art primary, and the history and exam paramount.

    Update 2.18.2013: Prior to ever seeing me, Mr. Stone had been referred to the Mayo clinic for evaluation. With my knowledge and approval, he kept this visit that occurred after the initial publishing of this post. They agreed with the diagnosis of rheumatoid arthritis and suggested that if labs showed any evidence of active inflammation to consider adding a biological. The labs were negative. So, all doctors who actually saw the patient have diagnosed him with RA or thought that was a good possibility. All doctors who didn’t see the patient missed the diagnosis. As we move into the future with telemedicine, we must be very careful.

    1. He was on steroids, which could have been masking the findings.

  • Lack of perspective

    The Verge:

    If you’re an avid Facebook user, getting locked out for any period of time is a big deal.

    Not really.

  • Legally Protected Spam

    I’ve wanted to get rid of my post box because all I get there is junk mail.1 Now, apparently, the self-titled “inventor of email” wants to make my digital life just as bad:

    He proposed that the post office create a new form of e-mail, one that was safe, private, and subject to the same federal regulations that protect the bills and junk mail that are delivered to our mailboxes.

    via Boston Magazine

    1. Amazon packages are delivered to my door and will soon be delivered inside. The post box is in a separate location.

  • Mute commercials on CBS.com with Keyboard Maestro

    I watch TV on my Macbook Air on the weekends when I’m ironing. Sadly, commercials are becoming more popular with CBS airing 4 in a row, often the same exact commercial over and over. There’s no way to skip them, but I made a quick macro with Keyboard Maestro that mutes the sound until the commercials are over and then turns the sound back on.

    You have to toggle the macro manually when the commercial starts, but otherwise, it works great.

    The macro is a very simple three steps.

    1. Toggle System Sound Mute, turning off the sound.
    2. Watch for an image to disappear from the screen. The image is a screen capture of the word advertisement that overlays advertisements when they’re playing.
    3. Toggle System Sound Mute, turning on the sound.

    Now I don’t have to listen to annoying commercials.

    Update: Same macro with a slightly different picture works for Hulu. Also, now I’m occasionally seeing 5 commercials in a row.

  • Podcasting with Squarespace


    If you want to create a podcast, Squarespace is recommended as a complete solution for domain registration, hosting, bandwidth, and syndication. They even have a dedicated instruction manual. Update: The lack of analytics regarding total number of downloads for each episode of a podcast is a weakness, especially if you want to get sponsors.



    I recently decided to make a podcast. This was to be a small hobby, a minor side project, and so the technical aspects of the project couldn’t take up much of my time and energy. As I was preparing the content and looking at the best ways to turn this into a reality, it appeared that Squarespace could possibly be able to handle all the hosting, bandwidth, and even the domain registration. It turns out that this is correct and for the most part was quite easy.

    I’ve used Squarespace before for several sites. Mostly I’ve used version 5 and haven’t quite gotten into version 6 yet. My past experience has been that they are very helpful with tech support the few times I’ve needed it, are very generous with long, free trials to test out the service, and are not pushy sales people. In fact, I’m not sure if they have sales people. They don’t even ask for your credit card number up front! These are decent folk.

    Before I got started, I did have one question related to doing a podcasting site. On their pricing page it stated that the maximum file size is 20mb; however, on another page specifically about podcasting, it stated the maximum size is 120mb. Well, which is it? This is the kind of straight forward question that if I normally ask a support person, they have no idea what I’m talking about, and if they even bother to compare the urls I send them, then never know what I’m talking about. My experience with the Squarespace support was the exact opposite.

    I clicked on the support chat link on their website, was immediately helped by someone pleasant whose name I don’t remember and told simply that the normal limit is 20mb, but specifically for podcasting, it increases to 120mb. Perfect. With that verification, I was ready to go.


    First, at least mentally, I needed a domain. Squarespace gives you a free domain if you sign up for a year. Check.

    Second, I needed a website. Well, that is the basic service of of Squarespace. I picked a template that was close to what I had imagined. It didn’t take me long to have a working prototype and over the next several days was able to turn it into something I was happy with. Honestly, I have no design or artistic sense, so it is a real testament to Squarespace’s platform that I was able to do this.

    Third, I needed an RSS feed for my podcast that I can serve to podcast apps and to iTunes. Simply, Squarespace has already handled that. All you do is create a “blog” page, i.e. a single page that you can add sequential entries to. Then, when you have a podcast episode to publish, you create a blog entry and in that entry add an “audio block” which automagically creates a podcast feed. Squarespace takes care of the syndication and even puts a streaming player into that post. In addition, they have a preference to enable iTunes options so that it can be compatible with and submitted to iTunes.

    Fourth, I needed hosting for the podcast files. You can host them elsewhere such as libsyn or it may be possible depending on the size of your episodes and the number of downloads to get by with their cheaper plan with 500 GB of bandwidth and 2 GB of storage1, but I wanted to splurge so I went for their unlimited place with unlimited bandwidth and storage2. The storage is relatively easy for the most part. You upload your podcast audio file in the previously mentioned “audio block” and save it like you would any normal webpage.

    And just like that, I have a podcast.


    If I had to do it again, I wouldn’t even look for another alternative. It was great. Still, there are some rough edges that could be honed.

    First, the file upload process for non-picture/audio/video files is so well hidden, I didn’t think it existed. If you want to upload a file like a PDF to your site, it is possible, but I doubt you’d ever find it on your own. When you are editing a page, the normal behavior is to click a plus sign button to add a block (widget). There are blocks for text, picture, audio, video, horizontal rules, and even blank space. There is no block for generic files. I clicked around for quite a while trying to figure it out. The answer is you first choose the text block, click on the “link” button as if you were going to make a text link, and in the next dialogue box is a place to upload a file. This seems to me to be a very unintuitive and misleading place to burry the file upload function.

    Second, but related, there is no place to easily manage all your files. While you can access some of them from that same dialogue box, you cannot access them all. For example, after creating a podcast episode, I wanted to create a direct link in that post to the file for some that were having trouble getting it to play (IE 6, seriously?). There was no way that I could find in the interface to get access to this file in order to link it, or even just get its file name. I had to look at the source code of the rendered webpage to grab it.

    These are two small, but significant problems that were so glaringly bad functionally that I have a hard time believing that they came from the same people who made the rest of the site so good.

    Third, when selecting text to be edited in the “edit post” window, if the cursor went outside of the box after selecting text, the window exited the editing mode.

    Fourth, when editing text in the “edit post” window, there are certain keystrokes that will cause the window to suddenly and glaringly jump to the bottom right of the screen for a 1/2 second and then return to the center. This happens, for example, when you type some text and hit the backspace key. This must be a frequent sequence of events unless no one else makes typos like I do. Again, this seems like an obvious bug that I’m surprised it hasn’t been fixed.

    Again, overall, a great experience, I’d do it again, and I’m looking forward to using their platform for my podcast. Also, I think I’m finally ready to upgrade by Squarespace 5 site to version 6…next weekend.

    1. Truthfully, this would probably have been more than enough for me too.

    2. The smartest answer is probably to go with the cheap plan and upgrade if you need to. You can upgrade at anytime and in the past when upgrading or downgrading, the process has been seamless and prorated without any issue automatically.

  • Mobile document scanning


    Scan documents with your smartphone, sync to your home computer with Dropbox, and have them automatically OCR’d so they’re searchable later.


    Yesterday, I mentioned that one of the consistent apps on my home screen is Scanner Pro. It is a simple and elegant app with a straight forward purpose: take pictures of documents, save them as PDFs, and upload them to cloud-based services.

    In the digital age in which many of us are trying to live a Paperless lifestyle, converting paper documents to digital ones is a necessary evil. Scanners of various types are necessary for this task. There is a continuum of power versus portability when it comes to scanners. The more powerful are less portable; the most portable are usually not that powerful.

    At work, where I don’t need to be portable, but need lots of power to scan hundreds of pages of double-sided documents and auto-rotate the occasional upside down page, I use the Fujistu ScanSnap S1500M, and I wouldn’t want to use anything else. At home, where I’m a bit more portable, and typically am only scanning a few pages at once, I go with the Doxie Go, which I can also take with me on trips if needed.

    But then there are all the times when I’m not at work or home but want to scan something and that’s when I turn to the power of the modern smartphone camera and Scanner Pro.

    I have three requirements when I scan documents.

    First, all documents must be in PDF format. PDF is a universal standard that will not be going away anytime soon, and if it does every become obsolete, there are so many people that have depended on it, there will be many options created to convert PDFs to the next standard. Scanner Pro saves all images in this format.

    Next, I need to be able to access to my documents from any of my devices. This means uploading them to Dropbox. If you don’t know what Dropbox is stop everything now and go learn. Seriously. Stop! Don’t read another word. GO. GET. DROPBOX. Scanner Pro can upload to Dropbox (and a bunch of other Cloud services I don’t use) and can be set to upload automatically.

    Finally, all my documents must be OCR’d. Basically, OCR is the process by which software is used to analyze the image of a document and figure out what the characters are. Without OCR you have an unsearchable document that you can’t even copy and paste text out of. With OCR you can search for any words inside the document and copy and paste text from it elsewhere. Scanner Pro does not OCR, and frankly, I’m suspicious of any mobile OCR app at this time. I really want quality text conversion and so I prefer to use the more powerful software and processor on my desktop machine.

    To OCR documents uploaded to Dropbox, I have my home computer watch the folder I upload PDFs to from Scanner Pro, and when a new PDF is added, an Applescript is called that uses PDFpen Pro to OCR the document. All credit goes to David Sparks, AKA MacSparky, author of the aforementioned Paperless ebook, for the technique to do this. He wrote about using something called Folder Actions that he used to do this. In the comments of this post1, there was a link to another site that did a similar thing using Hazel. I use the Hazel method, because I actually have many folders that are watched and OCR’d in a similar way, and having them all together in one application makes them easier to monitor.

    So, when I’m returning the rental car at the end of a business trip, rather than saving the receipt for scanning at home fraught with the perils of trying not to wrinkle it in the carry on bag and also remember to scan it in the first place, I take a quick picture of it with Scanner Pro and forget about it, because it will be uploaded and OCR’d without any more input from me. The next time I need the receipt, I just search for “car rental receipt” in Spotlight and all those kinds of receipts appear.

    1. I know there aren’t any there now, but I swear, there used to be comments there.

  • It's not me, it's you.

    I received a piece of mail today that I found insulting: my employer has hired an outside agency to determine if my son is my son.

    Actually and technically, since my wife and I both work in the same company and the insurance is in her name, the letter was to my wife and was to verify that I am her husband and that our son is ours.

    Riddled with corporate speak, this letter basically says that they don’t trust that everyone listed as a dependent–myself and my son–on my wife’s insurance is actually a dependent and that they want to make sure they aren’t paying for what they don’t have to be. Apparently, this is a company-wide initiative.

    While I have no problem with companies verifying that there is no fraud occurring in their organization, I have multiple reasons to be upset with this letter.

    First, in order to verify our status, this third party organization that I am not associated with in any way is demanding a copy of my marriage license, tax return with both our names on it, and my son’s birth certificate. If I don’t provide it to them in 2 weeks, we’ll lose our health insurance.

    I’m not a low level corporate stooge. My wife and I were professionally recruited to this organization. We were interviewed by CEOs and COOs. The in-house recruiter helped find a school for my son. I have meetings regularly with my office manager, the regional manager, and the COO. The idea that this small family, 2/3’s of whom are salaried employees of the company, cannot be locally verified is ridiculous.

    Also, there’s no reason that every employee shouldn’t be granted the same respect and it would not be difficult to do as I’ll explain later.

    Second, our organization is infested with managers. It would take very little effort to have us present the same documentation to our local managers, who could feed this up the food chain. It’s the same way they verify we all get our yearly flu shots or have maintained our licenses. This way, the private information remains local and within the organization I work for and the money that the organization is paying out would be saved. At a time when the organization is performing mass lay offs and crying about how they are losing money, I cannot believe they are wasting money like this.

    Finally, given the nature of my work, I cannot just quit if I don’t like the policy. I must give 6 months notice of termination. So, if I don’t give them this information, at the best, I would give up my employee health insurance, which is a part of my compensation package. I’m not sure if this would qualify as breach of contract on their part, and I don’t want to be a trouble maker and fight to find out.

    What I do know: my resignation letter will be on my manager’s desk Monday morning.

    Sadly, that will not be because of a sudden, principled stand against this issue. Less dramatically, I’ve been contemplating leaving for some time due to other issues like this.

    I am taking this as a lesson for when I am the boss and hopefully treat my employees with more respect.

  • PDF Expert for iPhone - attention to detail


    PDF Expert for iPhone is a great app, and for today is free. Get it.


    I’m a big fan of the iOS development company Readdle because I use their apps constantly in my personal and work life. Their apps are beautiful, consistently updated, and insanely good. I’ve also bought other company’s competing apps but due to various problems, I stick with Readdle and both PDF Expert and Scanner Pro are have long-standing positions on my home screen.

    I have used PDF Expert on my iPhone and iPad to study for boards, read journal articles, and complete applications for medical licensure, hospital privileges, condo rental, and private school for my son.

    Today, in honor of Black Friday, they’ve dramatically cut the prices on their apps, including making PDF Expert for the iPhone free. Personally, I just bought PDF Converter.1

    There is way too much to talk about with regards to how great some of their apps are, and I have several blog posts planned to discuss how I use some of their apps in my workflow, but I do want to share one small aspect of PDF Expert that demonstrates the attention to detail in these apps.

    I read a lot of science articles that are in 2 column PDF format. On the iPhone, and even the iPad sometimes, the screen is too small to read more than a single column at a time. A lot of PDF readers screw up the scrolling when going from the end of one page to the beginning of the next. Most of the time, when you are zoomed in on the bottom right corner of the page, when you scroll to the next page, you are either looking at the top right corner of the next page (if scrolling to the next page vertically), or the bottom left (if scrolling horizontally). PDF Expert gets it right by going right to the next text you’ll be wanting to read at the top left of the page in either vertical or horizontal scrolling.

    This is better understood with a picture:

    Two other top apps for reading PDFs in my field are Papers and PDFpen both of which have versions for the Mac, iPad, and iPhone.

    Papers scrolls horizontally and goes to the bottom right of the next page–area 6 in the above image. While it is the top app for scientific article management, and I highly recommend using it, I don’t recommend using it for reading PDFs.

    PDFpen’s behavior changes based if you’ve ever been on the page you’re scrolling to before. If you’ve never been there, it actually zooms out to look at the whole page. If you have been to that page before, it goes back to whatever zoom at whatever location you were at before. This inconsistent behavior is annoying. I would like it if it just zoomed to the whole page view and this was a preference you could toggle, but as it is, like most of the implementations of PDFpen, I find it unusable.2

    So, if you need to read PDFs and even edit them, including signing documents and mailing them back, go get PDF Expert today.

    1. I would have bought it before today, but didn’t know it existed. Only a few months ago I was looking for exactly this kind of app and couldn’t find one I liked.

    2. I do actually own over $100 worth of PDFpen software and use both it and other software by Smile every day, but the PDF viewing/editing software has never meshed well for me.

  • Damning with faint praise

    The Brief:

    Huawei Probably Not Spying, Just Crappy Programmers

    A person familiar with the White House’s review said they found equipment that was “riddled” with vulnerabilities caused by poor programming, and other experts familiar with their equipment told Reuters that it’s “five times easier” to find a vulnerability in a Huawei router than it is in a Cisco one.

    Never attribute to malice that which is more likely due to incompetence.

  • Medicine in Ireland

    Irish Times

    In the most commonly repeated complaint by patients, it is related how a person languished for months on a public waiting list for an appointment or procedure, but was seen within a week as a private patient. It is also common in the public system for scores of patients to be called for appointments at the same time, leading to long wait times, whereas in private medicine, individually timed appointments are the norm.

    Sounds familiar.

  • Saving sequential webpages as PDFs with Keyboard Maestro

    I needed to save as PDF a series of 80 webpages on a slow server on a password protected website. I could have sat there for an hour doing it manually, but since I wanted to get dressed and have a cup of coffee, I made a Keyboard Macro shortcut instead.

    In order to use this macro, you need to set up a very useful shortcut for saving files to PDF. In the stock OS, you hit ⌘-P (Command-P) to bring up the print dialogue box and then in the bottom left hand corner of the pop up menu click the down arrow by PDF and choose save as PDF. A much faster way to do this, is to create a system shortcut that allows you to hit ⌘-P twice to initiate the save as PDF action. I learned this from MacSparky and still go to his page every time to remember how to set it up.

    The first two steps are to set up some incrementing variables to allow the files to be named with sequential numbers. If the webpages you’re saving have unique names, this won’t be necessary, but for my case it was.1

    The rest of the code is in a repeat loop. Since I knew it was going to be exactly 80 repeats, it was easier to do it this way than a while, or if loop.

    The first part of the real code is to initiate the save as command with ⌘-P twice.

    Then the file name is entered with the last digit being placed by a variable that will increment by +1 with every new name. Since the saving dialog seemed to take awhile, I added a pause into the mix. Then ⌘-down arrow moves the whole webpage to the very bottom where the “next page” button is. Keyboard Maestro has a powerful function to find images on a webpage and then use that image. In this case, when it sees the image of the next button, it left clicks the mouse in the center of the button.

    The pages are slow to load, so I have a pause in there until the screen contains the image of a circular arrow. This is the refresh button in Safari and only shows up once a page is loaded. It’s an easy hack to make sure the next page is loaded.

    And then this cycle repeats itself until all the pages were saved. It worked perfectly.

    I didn’t even have time to do my hair and finish my coffee.

    1. Setting the constant 1 to the variable i was probably unnecessary, but I was trying to get this done quickly, not elegantly.

  • Google Maps Fail

    Bashing Apple’s maps is the thing to do these days, but I just want to share my own Google Maps story.

    When I was looking to move to Nashville two years ago I started looking for jobs by looking at hospitals I found on Google maps. There was one hospital on the map that I could never find contact information for. I never thought much about it until I moved there and happened to live right next door. It was strange because there was no hospital there.

    For the next year and a half I tried everything I could to get that location unlisted as a hospital. I reported the problem multiple times as a user, I joined their map group and submitted the change manually, and I emailed the Google maps peoples repeatedly. Attempt after attempt was rejected. To this day the location is listed as a hospital with a pink background and a giant H.


    You can see the same problem on the non-mobile version. Update 1.15.2013: This has been fixed.

    Even more amusing, if you look at the location in Google Maps and enable photos, you’ll see a photo I took of the building’s sign. It’s clearly an office building and not a hospital.

    Apple Maps does not list a hospital at this location.

  • Stupid EMR UI

    To better deal with the stress of stupid UI design in EMRs, I’m going to share my pain with you.

    Below is the pop up window that Nextgen shows when you are documenting the length of an office visit for billing purposes.

    1. Notice how the units of time are not labeled.1
    2. Notice how you are given the option of documenting office visits to the fraction of a minute. I don’t think that even lawyers are greedy enough to charge for 0.25 of a minute.
    3. Notice the plus sign and minus sign. I’m still not sure what these are for. They are not for doing simple addition and subtraction. Hitting those changes the number to either positive or negative. Can you bill for negative minutes?
    4. Notice the options for 200-700 minute visits. Does anyone ever really see a patient in an outpatient clinic for 11 straight hours?

    1. Trial and error will show it is in minutes.

  • Procedure note with TextExpander

    I do a lot of joint injections so I created a TextExpander macro to quickly write a short procedure note within my visit note. I used TE 4.0 with the new options for fill ins. I have several optional sections that can expand the note depending on the type of injection I do, but at the same time, for the large majority of injections in which I’m not removing fluid or sending the results for testing1, the note is quickly and easily generated without template cruft.

    1. The pink highlighted text are optional sections that can be added by ticking the preceding checkbox.
    2. The amount of injected medication is pre-populated with my normal dosing but can be edited.
    3. The medication is also pre-populated but can be switched to any of the options available in my clinic.
    4. The lab section already has the two labs I always order, and I can easily add anything else that I need.
    5. There are a few pull-down menus in order to make sure the grammar is correct depending on if I’m injecting one or multiple joints.

    Arthrocentesis are simple and straight forward procedures. I’m sure this technique would be even more useful in complicated procedures and operations.

    The raw code

    Procedure note
    Informed consent and time out was completed. The %fill:area% %fillpopup:name=popup 8:was:were% prepped with betadine and alcohol in standard fashion. The skin was anesthetized with ethyl chloride. %fillpart:name=lidocaine%The subcutaneous tissues were anesthetized with less than 3ml of 2% lidocaine. %fillpartend%%fillpart:name=fluidRemoved%%fill:amount% ml of opaque yellow fluid with a positive string sign was removed. %fillpartend%%filltext:name=milligrams:default=40 mg:width=3% of %fillpopup:name=steroids:default=Depo-Medrol (methylprednisolone acetate):Kenalog (triamcinolone acetonide) :Synvisc One% and 2 ml of 2% lidocaine were injected into %fillpopup:name=grammar 10:the:each% joint. Hemostasis was obtained. Post op instructions were given. %fillpart:name=labTests%Fluid was sent for %fill:tests%cell count and crystal analysis.%fillpartend%
    1. Shame on you if you don’t document what labs you order in the procedure note.

  • Updated - Fixing shortcuts in Messages.app


    Make a new Keyboard Shortcut in the preferences menu so that “Close Conversation…” is ⌘-W. That will restore ⌘-⌫ to the correct “delete whole line functionality.”

    Original (August 6, 2012)

    I like my keyboard shortcuts to be consistent across applications. Two shortcuts I use frequently ⌥-⌫ (option-delete) to erase the last word and ⌘-⌫ (command-delete) to erase the last line1.

    Since upgrading to Mountain Lion, every time I hit ⌘-⌫ in the Messages app, I get a prompt asking if I want to delete the conversation. And every single time it’s mentally jarring as normal, expected behavior elicits an unexpected and incorrect response. That shortcut is being used as a built-in for the app:

    Wrong shortcut

    A few minutes of searching the web led me to the universally accepted answer that “no, there is nothing you can do about it.” Even a well written (I assume–tl;dr) piece by Gruber weren’t promising.

    So I took a chance and tried to change the shortcut by adding another shortcut on top of it in Keyboard Shortcuts in system preferences.

    Changing the shortcut

    I used ⌃⌥↩ because I can’t see myself every using that shortcut. I can’t explain why it seems to get duplicated and also show a new shortcut of ⌥⌘⌫. I did notice that when I went back and re-did this a few times (to take screenshots), I kept getting different duplications. One thing that seemed to be necessary is trying to first make the shortcut ⌃⌥⌫, which would make an error sound and not accept, then doing another one would lead to the desired results.

    Changed shortcut

    Clear as mud, I know.

    1. This is the case for Textedit, Pages, and Safari. I’m willing to bet it’s the case for most native and third-party apps since I’ve never run across this frustration before.

  • Using Keyboard Maestro to log into Nextgen

    It takes me about 45-60 seconds to log into my EMR due to human frailty, distractions and a shit EMR. To speed up the process, allow me to do other things with that time, and keep my anger in check, I set up Keyboard Maestro to login for me:

    The video makes it look easy. In reality, due to vagaries of the Citrix Viewer and variable speed of the network1, I had to make a lot of Until loops to continue to check for the right window being ready and at the front before starting the next phase of the log in.

    1. At 6:30 am, the network is fast, but when everyone starts to log in at 8am, the thing slows to a crawl.

  • We should not suffer bad EMRs

    Dr. Richard Just clearly lays out a few of the problems that physicians are having with EMRs, but his apparent conclusion and the conclusion of the headline of the article are wrong.

    He appears to think that while the current offering of EMRs are poor, we need to “suffer” through them.

    Quite the opposite is true in fact. We should not support companies that make harmful products because of the promise that one day they will be beneficial any more than we would give a patient an experimental drug on the promise that one day the company will figure out a different drug that works.

    False dichotomies are frequently raised in the discussion of EMRs. For example, unreadable handwritten progress notes are compared to legible electronic notes as an example of how EMR notes are better. However, we are all fully aware of the uselessness of many of the legible but copy-and-pasted notes1 in our medical era or the problems with notes “disappearing” as in Dr. Just’s example. The fallacy is that notes have to be either in a certified EMR or handwritten.

    In my hospital, hand-written progress notes are still the norm, but when I round, I type my notes into my laptop, using lots of custom macros and scripts to aide in the process, and put the printed note into the chart. It’s certainly no Hitech, Cchit, MU EMR, but it is fast, reliable, secure, and legible. Even better, no note has ever magically disappeared because the vitals were not already entered.

    As a nerd, programmer, and the one ultimately responsible for the safety of my patients, I declare that the EMRs I have been exposed to are unacceptable and at the same time that there are many electronic, technophilic ways to improve patient care.

    I relish the day that I can purchase a quality EMR that makes my work better and my patient’s healthier. Until that time, I will not waste money supporting shit but will continue to make my own tools.

    Supporting bad products, bad technology companies, and bad med-tech policies, regulations, and laws only delay, and hopefully not destroy, the time when we will one day have something worthy of our profession. Your patients deserve better.

    1. Just yesterday, I saw a patient in consult in which every single physical exam for the last year documented “stippling in the back of the throat, with erythema and purulent exudate”.

  • I had a dream

    Last night I dreamt that Tim Cook hired me to help create an EMR that doesn’t suck.

    I need therapy.

  • Legendary crash reports

    Garrett Murray’s crash reports are the stuff of legend. If you’ve never seen one before, treat yourself.

  • Fixing Shortcuts In Messages

    Click here for an updated version

    I like my keyboard shortcuts to be consistent across applications. Two shortcuts I use frequently ⌥-⌫ (option-delete) to erase the last word and ⌘-⌫ (command-delete) to erase the last line1.

    Since upgrading to Mountain Lion, every time I hit ⌘-⌫ in the Messages app, I get a prompt asking if I want to delete the conversation. And every single time it’s mentally jarring as normal, expected behavior elicits an unexpected and incorrect response. That shortcut is being used as a built-in for the app:

    Wrong shortcut

    A few minutes of searching the web led me to the universally accepted answer that “no, there is nothing you can do about it.” Even a well written (I assume–tl;dr) piece by Gruber weren’t promising.

    So I took a chance and tried to change the shortcut by adding another shortcut on top of it in Keyboard Shortcuts in system preferences.

    Changing the shortcut

    I used ⌃⌥↩ because I can’t see myself every using that shortcut. I can’t explain why it seems to get duplicated and also show a new shortcut of ⌥⌘⌫. I did notice that when I went back and re-did this a few times (to take screenshots), I kept getting different duplications. One thing that seemed to be necessary is trying to first make the shortcut ⌃⌥⌫, which would make an error sound and not accept, then doing another one would lead to the desired results.

    Changed shortcut

    Clear as mud, I know.

    1. This is the case for Textedit, Pages, and Safari. I’m willing to bet it’s the case for most native and third-party apps since I’ve never run across this frustration before.

  • Prednisone Taper prescriptions using Keyboard Maestro

    A short video demonstrating using Keyboard Maestro to write prednisone tapers in a patient friendly format, calculating out the total number of pills needed at the end.

    Update: The first taper doesn’t actually calculate the corrects number of pills in the video. I had made a mistake in the order of a loop. It’s been fixed since this video.

  • Errors when pasting text from a Mac into Epic and Allscripts

    Update 2 (5.23.2013): When my friend updated to Keyboard Maestro 6, this fix stopped working. This may be because the filter line endings had nothing to do with the fix, rather that process had an unexpected side effect of changing rich text to plain text. We are in the process of testing this theory. If you can’t wait, try filtering with “remove styles”.

    Update: @psufka reports that he has seen this with Windows machines, so apparently is not an isolated Mac compatibility issue.

    A colleague and friend was having trouble with the Epic electronic medical record. He writes his notes in Pages on the Mac and when he would try to paste the text into Epic, it would mess up. What he was seeing was his note was losing words and the paragraph formatting was screwed up. It was making his life painful, slow, and frustrating…basically like all EMRs make life.

    Thankfully, there’s a really simple solution

    What was happening (I think) was that he was pasting text from a Mac environment into a Unix environment, which have different (invisible) characters to end a line.1

    Keyboard Maestro has a function to change the line endings of whatever text is in the clipboard. So now, he copies the text to the clipboard using ⌘-C, switches to the EMR, and ⌃⌘-V pastes the correctly formatted text into the EMR without any screw ups.

    Epic pasting KM macro

    The same thing was also happening with another EMR he uses, Allscripts. The same solution worked there too.

    Keyboard Maestro is a very powerful application for the Mac. I can’t begin to say how great it is. It is also not for beginners. If you’re looking to get started with taking more control over your machine, this is not the place I’d recommend starting unless you have a strong familiarity with computers and have someone to help you along the way. Otherwise, it’s very much worth it’s price of $36.

    1. There is probably a little more to it than that since the first string of each new paragraph was disappearing, but I’m not an expert and my fix works.

  • Crazy useful url script from Dr. Drang

    Paste the url from the top tab in Safari into current location of the cursor with one line of Applescript in TextExpander.

    Dr. Drang:

    Boom. Give that a nice abbreviation, like ;furl for “front URL,” and it’ll insert the URL directly where you’re typing. There’s no need to run the script and then paste the URL—that’s an inefficiency that comes from thinking the script has to act like you would.

    Update: I’ve found this works better in Keyboard Maestro because I’m typically tying in urls right after another character, like a “(“. TextExpander won’t expand a macro in such a situation whereas Keyboard Maestro will. Just have the macro run an Applescript and paste the results.

    For Safari: tell application "Safari" to get the URL of the front document

    For Chrome: tell application "Google Chrome" to get the URL of active tab of first window

  • They don't care

    Michael Schechter:

    The problem with us Markdown-loving, Plain Text using, TextExpanding, Keyboard Maestroing, OmniFocusers: we’ve found so many of ourselves that we forget we’re a minority. We care (and care deeply) about things that only a small percentage of overall users care about.

  • AT&T scumbag CEO

    New York Times:

    Randall Stephenson, AT&T’s chief executive said that he wished the company had never offered an unlimited data plan for the device and that he loses sleep over free texting services like Apple’s iMessage.

    “If you’re using iMessage, you’re not using one of our messaging services, right? That’s disruptive to our messaging revenue stream.”

    What a scumbag. There’s not really a carrier I like, but I think Sprint is up next for me. At least their CEO doesn’t seem to be a dick and they still have unlimited data.

    via Shawn King @ The Loop

  • Challenge accepted

    Make it so…

    Ben Brooks Mode

  • How to automatically open files downloaded by Safari

    Manuel Struder:

    First, you have to modify what Safari considers as a “safe” file. Check the option Open “safe” files after downloading in Safari’s Preferences panel.

    The next steps after this are very Geeky requiring editing of a plist file. I did this awhile ago and it worked great for connecting to my EMR via Citrix, saving me the time from always having to download then click on the Citrix File.

    You could do the same thing in a less Geeky way with Hazel.

  • Vaporware


    What would you like to see from Project Glass?

    Something that ships.

    Update 1.15.2015: Yep, vaporware.

  • From the man himself

    Frederick Wolfe:

    Fibromyalgia is a socially constructed illness. It represents a common set of symptoms that all human beings have.

    Very often what people with fibromyalgia need are friends, people who can talk with them. They need somebody to be there for them. What one has to do is approach fibromyalgia patients with wisdom and kindness.…

  • Real life needs this feature

    I just figured out the Tweetbot mute feature. It’s so easy to use yet very granular and powerful.

    Someone you like getting too chatty after having a bit too much to drink? Mute them for 6 hours.

    Don’t want to see every post from the South by Southwest conference? Mute the hashtag #sxsw for the next week.

    Tweetbot mute

  • AT&T Throttling

    Dan Frommer:

    Sure, you can whine about the promise that AT&T made you many years ago when you signed up for unlimited data. But when has a gigantic telecom company actually failed to disappoint you?

    Sure, you can whine about being ass-raped in prison, but since when have people not been getting ass raped in prison?

    What Dan fails to appreciate is that AT&T used its “unlimited data” to get customers and lock them into a contract. Then, when those same customers want the terms of their contract enforced, they balk.

    Even little kids have a strong ingrained sense of fairness, and this clearly isn’t fair. Which leads to strong negative emotions. Which leads to customers leaving.

    I guess that’s one thing Dan gets correct:

    [Y]ou can switch to Sprint

    Coincidentally, a friend of mine got the AT&T throttling warning this morning. He’s decided to leave.

    Update: I’ve switched to Sprint.

  • Does DAS28 remission equal healthy joints?

    Sadly, no. Patient’s in DAS28 remission continue to have ongoing joint damage if they still have swollen joints.

    Other interesting side points:

    • 15% of patients on methotrexate monotherapy achieve DAS28 remission
    • Joint damage is related to acute-phase response and swollen joint counts
    • Joint damage is not related to tender joint counts

    Aletaha D, Smolen JS. Joint damage in rheumatoid arthritis progresses in remission according to the Disease Activity Score in 28 joints and is driven by residual swollen joints. Arthritis Rheum. 2011;63(12):3702–3711.

  • TV Is Broken

    I opted out of cable television a long time ago, primarily for the cost, but you forget about the other benefits until you are suddenly subjected to the barage of loud commercials interupting the plot every 5-10 minutes. While those of us who grew up like this may have trouble recognizing how terrible the situation is, kids in their natural state of mine see the situation much more clearly.

    Patrick Rhone:

    This is just a commercial. I was turning the volume down because it was so loud. Shrek will come back on in a few minutes” I say.

    “Did it break?”, she asks. It does sometimes happen at home that Flash or Silverlight implode, interrupt her show, and I have to fix it.

    “No. It’s just a commercial.”

    “What’s a commercial?”, she asks.

    I then do what I should have simply done in the first place. I hook up the iPad to the free hotel wifi and hand it to her. She fires up the Netflix app, chooses a show, and she is happy.

    This, she gets. This makes sense.

    Via Marco

  • How you do erudite

    Dr. Drang:

    What really bothers me about the Times article is Stewart’s pretense of scholarship with the bit about Jacob Bernoulli. He obviously knows nothing about the subject and is basically just rewriting Wikipedia in an attempt to appear erudite.

    Drang rips this guy apart with knowledge and leaves his entrails laying on the ground.

    RSS: subscribed.

  • Not an EMR

    A drug rep stopped by today and asked about my use of her companies drug. Using my chart system, in less than 30 seconds, I was able to determine that no patient of mine is currently on their drug, one has failed it in the past and one person might be starting it soon.

    This is not possible with any EMR I have previously used to have access to now, but is one of the things always touted as a great benefit of EMRs.

    My system is electronic. My system is secure. My system is fast. My system is electronic.

    But it is not a certified, legacy system that costs tens of thousands of dollars. It costs less than $2000. And that’s mostly for the Macbook Air.

    My system makes me happy and helps me provide quality care. It is not certified for Meaningful Use, but I’ll bet you a month’s pay that I use mine much more meaningfully than any EMR out there.

    It also makes me happy.

    I hope to share my workflow with you someday.

  • Raising Cain

    Is there a name for the psychological phenomena in which people in one culture seem to think that ideas attributed to another culture are magically special, even if those same ideas already exist and are not recognized in the first culture?

    For example, how exactly is this a “French” way of raising kids?

    Jason Kottke:

    One of the keys to this education is the simple act of learning how to wait. It is why the French babies I meet mostly sleep through the night from two or three months old. Their parents don’t pick them up the second they start crying, allowing the babies to learn how to fall back asleep. It is also why French toddlers will sit happily at a restaurant. Rather than snacking all day like American children, they mostly have to wait until mealtime to eat. (French kids consistently have three meals a day and one snack around 4 p.m.)

    We have a French pediatrician who advised us to do almost exactly what is in this article and we’ve had pretty good success with it. It’s not all roses (kids are kids after all) and a lot of work, especially for the first couple of years, because you have to be consistent and steady and firm (but also flexible) and I know I haven’t always done a great job, but the dividends have been totally worth it so far.

    That’s exactly how I raise my kid. And I never read any stupid book or talked to a pediatrician about it. Seems like a pretty standard old-fashioned way of doing things.

  • TextExpander for physicians, Part 2

    In part 1, I tried to explain what TextExpander was and why a physician might want to use it as a force multiplier by showing a few examples of macros that I use daily.

    TextExpander for physicians, Part 1

    In part 2, I will cover special codes, syncing between computers, and iOS apps.

    Special codes

    Time and Date

    Special codes are text you can put into a macro that tells TextExpander to do something other than just type out the characters. The simplest example is their Time/Date codes. Inside the macro that creates my consult note template is some characters that automatically inserts that day’s date into the note. Instead of having to type, and remember, the date every time I start a new note, the macro does it for me. ddate = %B %e, %Y = February 1, 2012 There are numerous permutations of this code so you can create the date however you want.

    Time codes are also helpful at times. There are many codes to document the time exactly as you might need it but the built in macro that comes pre-created is time = %1I:%M %p = 9:04 PM. I have discovered two useful cases for this. The first is documenting how much time I spend on a patient and how much of that time is in counseling and coordination. Keeping track of time is only going to happen if it’s easy. This macro makes it very easy. As I walk into a room, I tap the code “ttime”. When I finish the history and exam, while the patient is getting their clothes back on and I’m finishing up my note, I hit it again, “ttime”. And when I’m done with my counseling I hit it a final time. Now I know how long my visit was and if over 50% of that time was in counseling. This allows me to track my time spent per patient so I can better plan my schedule. If I’m taking 20 minutes per patient, but only scheduling 15 minutes, obviously I need to change my schedule. Also, if over 50% of my time is in counseling, then I can bill by time rather than by the traditional coding levels.

    I’ve also used this lately to keep track of how long it takes to make phone calls to patients. I’ve been surprised how long the typical call lasts and by having this data, I can more accurately plan my schedule, bill and allocate resources.

    TextExpander also comes with some codes for date and time math. Most of my follow ups and planning takes place at regular intervals: every 4 weeks, 6 weeks, 8 weeks and 12 weeks, 12 months or 24 months. This may apply to the next follow up appointment, lab check, infusion time, TB test or DXA scan. While it is easy to say “follow up for labs in 8 weeks”, this abstractness appears to be poorly mentally processed. Being more concrete fixes this problem.

    .8wfu = Follow up in 8 weeks (around March 28, 2012). 

    More complicated structures wouldn’t be that difficult to create.

    .inrchecks = Check INR on 2/4/12, 2/7/12, 2/10/12, and 2/13/12 (Monday).

    All the dates and the day of the week in that last macro are automatically calculated.

    Are you a hospitalist with a patient needs neurochecks every 4 hours?

    .q4nchecks = Neuro checks q4 hours (01:33, 05:33, 09:33, 13:33, 17:33, 21:33). 

    Fill ins

    Another special code is the fill in. %fill:name%. This has the macro prompt you to enter text that will be inserted into the text when the macro is created. For example, you might have a macro that prompts for a follow up time.

    .fut = Return to clinic in %fill:numberofweeks% weeks.

    This creates the following prompt:

    fill in prompt

    Enter the desired time:

    macro filled in

    Hit “enter” and your text appears:

    Macro completes

    I use this all the time for form letters and consult note templates. For each different fill in, you need to change “name” in %fill:name% to a unique identifier. Or, if you leave it the same, whatever you put in one place, will appear in all the others with the same phrase. For example, in my consult note, I don’t have to retype the patient’s name, consulting physician or reason for consult/chief complaint:

    consult note macro

    Copy clipboard

    Another special code is the “clipboard”, %clipboard. This inserts whatever is copied to your clipboard. I use this more for non-medical uses, like writing code or html but the one place I use it regularly in medicine is when saving my notes to file. I use a file name structure that is “Patient Name” and “date of visit.” Using the code %clipboard %1m.%e.%Y and making sure to copy (Command-C) the name from my note to the clipboard before keying the macro, I save a lot of time saving files.

    .nd = James Bond 2.1.2012.pages

    Cursor placement

    The final special code I’ll mention is the cursor placement. %| (That’s percent pipe.) puts your cursor wherever you want with in the text that the macro creates. For short macros, this isn’t needed, but when I use my consult note template, I don’t need the cursor at the end of the document, requiring me to scroll back up to the first page to start typing. Instead, I place it in the History of present illness, so I can start typing what the patient is telling me immediately:

    James Bonds note

    It’s a little thing, but you add up all the little things and the time and convenience are incredible.

    Syncing between computers

    Once you have created a lot of macros, your library is going to become a valuable commodity. You will become dependent on these macros and feel lost without them. You will want to make sure you back up your library as well as have it available on any computer you may use. Thankfully, the developers of TextExpander have enabled backing up and syncing of your library through Dropbox. If you don’t know what Dropbox is1, stop reading immediately and go get it.

    Now that you have Dropbox and have enabled syncing in the preferences of the TextExpander app, your library of macros will auto-magically appear on any computer2 that you’ve also synced using Dropbox. This also works with the iPhone and iPad versions of the applications.

    In fact, I have a friend who writes all his clinic notes in TextExpander Touch on his iPad using a bluetooth keyboard.

    iOS apps

    TextExpander Touch, the version of the app available for the iPhone, iPod Touch and iPad, is quite good as well, but a bit limited due to restrictions of the operating system. The main restriction is that you cannot use the app to expand text just anywhere in iOS. TextExpander Touch will only work in apps that are specifically enabled to use it. Thankfully, there are a lot of those apps. The apps also have a built in text editor, so you can write notes there and then copy and paste them or email them elsewhere. It is slightly limiting but nice to have. I tend to use this more for taking notes in meetings and at dinner meetings, when taking out a laptop—even one as small as a Macbook Air—would be overly distracting to others.

    Well, that’s enough for tonight. In the next, and hopefully final, part, I will finish up by laying out ideas for macros to use in your practice, keys to creating shortcuts you can remember, non-medical uses of macros and advantages of a stand alone applications versus the built-in functionality that some EMRs have.

    1. Shame on you.

    2. If you are unfortunate enough to have to use a Windows computer at work but are a Mac guy at home, the Windows program Breevy has bi-directional sync with TextExpander through Dropbox. You may also want to check out this site.

  • TextExpander for physicians, Part 1

    As a physician I write a lot.1 Most of my writing is the same or similar to things I’ve written before and will write again. Repeatedly typing the same things character by character is a waste of time, energy and cartilage. In order to turn my 70 word per minute2 into hundreds of words per minute without ended up as a patient myself, I engage a force multiplier, TextExpander.

    TextExpander is a text macro program. Simply put, you type a few characters and the program outputs quite a bit more characters. In the last 6 months of use, it’s saved me from typing over 1/2 a million characters, saving an estimated 24 hours of time based on 70 words per minute or at a more typical physician rate of 40 words per minutes, it’s saved me almost 2 solid days of typing.

    But like all beautiful things there’s so much more than that.

    Personal history

    I’ve been using text macros since junior high school. When writing a history day paper, instead of typing “Commodore Matthew Calbraith Perry”, I typed CMCP and the whole name would spring forth. I was able to do with with the built-in functionality of the version of MS Word I was using at the time, but I don’t think it was truly a marco function rather than a hack that I created using the automatic spell corrector.

    In college, it became even more handy. Instead of typing out long chemical names like Co1-xNixCl2·2H2O or Fe[S2CN(C2H5)2]2Cl, I’d type CN2H or FSCCl. Not only did that save a lot of characters but it also saved me all the clicks in getting the subscript on the right characters.

    In medicine, the problem is even more obvious. The combination of redundancy, complexity and speed make a text macro program a powerful ally.

    Medical application

    The first macros I created were for the drugs and diseases I see all the time.

    .ra = rheumatoid arthritis
    .psa = psoriatic arthritis
    .sle = systemic lupus erythematosus 
    .ssc systemic sclerosis
    .oa = osteoarthrosis 
    .pred = prednisone
    .mtx = methotrexate 
    .lef = leflunomide (Arava) 
    .hcq = hydroxychloroquine (Plaquenil)
    .hum = adalimumab (Humira)
    .enb = etanercept (Enbrel)
    .rit = rituximab (Rituxan) 

    Notice how for some of the drugs I’ve included the brand name. This aides in clarity for the patient or non-rheumatologists who may not be as familiar with the generic names of the drugs. e.g. Rheumatologists typically use hydroxychloroquine but most patients know it as Plaquenil. When a patient leaves the office with my note, I don’t want them calling later to leave a message that they aren’t on that medication with the long name like my note says.

    I can also use it to help me remember how to spell the drugs names or even remember some of the generics myself.

    .ken = triamcinolone acetonide (Kenalog)

    Even some non-drug words are just impossible to remember to spell correctly.

    .eyemd = ophthalmology

    Occasionally, there are some weird labs whose abbreviations are non-standard but whose names are too weird to spell out every time.

    .la = lupus anticoagulant 
    .acl = anticardiolipin antibody
    .b2g = beta 2 glycoprotein antibody

    I also don’t like typing out my physical exam findings, but this can be important for other doctors and audits.

    .rom = range of motion
    .nrom = normal range of motion
    .prom = passive range of motion
    .arom = active range of motion
    .rhsj = red, hot and/or swollen joints 

    Now we start to pick up the pace a bit. I am frequently recommending that patients exercise, but they are far more likely to follow my instructions if I give concrete examples instead of vague platitudes.

    .exercise = Exercise by walking 30 minutes every day after dinner. 

    Coders love when I include the diagnostic codes with my assessment, especially for the weird (redundant?) rheumatology stuff.

    .dxra = Rheumatoid arthritis (714.00)
    .dxia = Inflammatory polyarthropathy, unspecified (714.9)
    .dxhrd = High Risk Drug (v58.69)
    .dxea = Enteropathic arthritis (713.1)

    Not infrequently, I want to impart a bit of knowledge to both the patient and the referring doctor. For example, in the case of a patient referred for a positive ANA or positive rheumatoid factor, it’s one thing to say they don’t have lupus or rheumatoid arthritis but it’s even better to explain what that damn tests means.


    A positive ANA does not diagnose an autoimmune disease nor does a negative result exclude it; however, ANA is positive in 99% of patients with Systemic Lupus Erythematosus therefore a negative result strongly argues against such a diagnosis.  ANA can be positive by definition in 5% of the healthy population, typically in titers less than 1:320.  Up to 20% of healthy relatives of patients with rheumatic disease and up to 75% of healthy individuals older than 70 will have a positive ANA (typically less than 1:80 with a speckled or homogenous pattern).  Other conditions associated with a positive ANA are thyroid disease, chronic infections including TB/viral hepatitis, subacute bacterial endocarditis, malignancies, any of the auto-immune or connective tissue disease, multiple sclerosis and patients with silicone breast implants.  In the absence of physical or biochemical evidence of pathology, a positive ANA is not clinically useful.


    Many conditions can lead to a positive Rheumatoid Factor including chronic hepatic and pulmonary diseases, rheumatoid arthritis, Systemic Lupus Erythematosus, systemic sclerosis, mixed connective tissue disease, Sjögren’s, polymyositis, sarcoid, malignancies (especially after therapy), AIDS, mononucleosis, parasitic infections, chronic viral infections, tuberculosis, subacute bacterial endocarditis, cryoglobulinemia, etc. Frequency of positivity of rheumatoid factor in normal individuals also occurs and varies by age from 5% in those younger than 70 to 10-25% in those older than 70. Changes in RF level do not reflect disease activity; however, a high titer does predict increased severity of disease including extra-articular manifestations.

    I can even use this to remind me of recommendations on certain items. For example, I can never remember the exact recommendations from the BMJ on the duration of steroids for PMR.

    Daily prednisone 15 mg for 3 weeks
    Then 12.5mg for 3 weeks
    Then 10mg for 4–6 weeks
    Then reduction by 1 mg every 4–8 weeks

    Can’t remember the criteria for the diagnosis of Takayasu’s arteritis?

    1. Age at disease onset ≤40 years (Development of symptoms or findings related to Takayasu arteritis at age ≤ 40 years)
    2. Claudication of extremities (Development and worsening of fatigue and discomfort in muscles of one or more extremity while in use, especially the upper extremities)
    3. Decreased brachial artery pulse (Decreased pulsation of one or both brachial arteries)
    4. BP difference >10mmHg (Difference of >10mmHg in systolic blood pressure between arms)
    5. Bruit over subclavian arteries or aorta (Bruit audible on auscultation over one or both subclavian arteries or abdominal aorta)
    6. Arteriogram abnormality (Arteriographic narrowing or occlusion of the entire aorta, its primary branches, or large arteries in the proximal upper or lower extremities, not due to arteriosclerosis, fibromuscular dysplasia, or similar causes; changes usually focal or segmental)

    3 of 6 required for diagnosis with a yield to 91% sensitivity and 98% specificity.

    Arend WP, Michel BA, Bloch DA, et al. The American College of Rheumatology 1990 criteria for the classification of Takayasu arteritis. Arthritis Rheum 1990;33:1129–1132

    You look like a gunner on your note while making sure you remember the diagnostic criteria.

    Of course, you can’t forget your note templates.


    Rheumatology Procedure Note

    Procedure: Arthrocentesis Date of Service: %B %e, %Y

    Consent: Verbal consent obtained from patient.
    Time Out: Yes.

    Procedural Medications: 1% lidocaine, *** cc; *** 40mg/1ml, *** mg; *** Gebauer’s Spray

    Description of Procedure: After consent was obtained, the *** was prepped with betadine and alcohol. Gebauer’s spray and plain 1% lidocaine was used as local anesthetic. The joint was entered and *** ml’s of *** colored fluid was withdrawn and sent for ***. Steroid and Lidocaine were then injected and the needle withdrawn. The procedure was well tolerated and hemostasis was obtained. The attending physician was present for the entire procedure.

    The patient was asked to continue to rest the joint for a few more days before resuming regular activities and warned that it may be more painful for the first 1-2 days. He/she was instructed to watch for fever, or increased swelling or persistent pain in the joint. Call or return to clinic prn if such symptoms occur or there is failure to improve as anticipated.

    See those strange characters after “Date of Service”? This is special code in TextExpander that automatically inserts that day’s date when the note is created. TextExpander has a lot more codes like this and others than can really power your macros. More on that in part 2.

    Hopefully, by now, I’ve convinced you that you can save a lot of time and stress by turning your frequently used words, phrases and templates into easy to type macros. In future posts, I will delve into some more advanced, yet easy to pick up, topics including:

    1. Special codes in TextExpander
    2. Syncing your macros across computers
    3. Keys to building and remembering your macros
    4. TextExpander on your iPhone and iPad.
    5. Ideas for macros
    6. Non-medical uses for TextExpander

    I will also answer some potential objections to my method, such as why you might want a text macro program if your EMR comes with templates (CPRS) or has a macro functionality (Epic).

    If you have any specific questions or concerns you’d like addressed in the future posts, let me know.

    Updated: Part 2

    1. Consult notes, progress notes, telephone notes, lab monitoring notes, drug orders, infusion orders, lab orders, school excuses, work excuses, disability letters, consult letters, etc.

    2. On a good day.

  • More data will not fix anything

    Dr. Centor is optimistic about The American Journal of Medicine’s Patient Centered Imaging initiative:

    The secret to slowing down and even reversing the continuing increases in health costs will require many interventions. We must use diagnostic tests more intelligently.

    The premise seems to be that a lack of knowledge of the effectiveness of these tests is what causes them to be ordered when they are low yield. I would argue that be if from literature or experience, the low yield of these tests is well known to the ordering physicians and therefore this educational mission will do nothing to decrease their utilization.

    Rather, I suspect that tests are overused for many reasons with the strongest being to avoid the possibility of a lawsuit. Sure, the likelihood of a CT of the head helping in a low impact cranial injury in a child is minimal, but if anything goes wrong, even if the CT scan wouldn’t have shown anything at the time it’s done, does anyone want to be the poor chap stuck at the defense table across from a parasitical lawyer and sympathetic family? Which do you want on your side, a crying, tragic mother wondering “what if” or a cold, sterile copy of the green journal?

    Our society has no tolerance for the cruelty of random chance. When bad things happen, it must be due to malignant forces or criminal negligence.

    I applaud the effort and look forward to the information, but I wouldn’t hold my breath for it to save any money, as proposed.

  • The value of EMRs

    Politics, money and the money of politics can ruin anything. In my life and work, they’ve ruined technology.

    Clearly, I’m pro-tech. Of course, that’s only for tech that is good, that makes my life easier, that creates value, efficiency and quality. Tech that does not do this is bad and should be thrown away, or better yet, never bought in the first place.

    It is part of the politics of the time that Electronic Medical Records (EMRs) or Electronic Health Records (EHRs) are a panacea for all the problems in modern healthcare. Once everyone is using them, efficiency will increase, errors will decrease, massive amounts of money will be saved, the lion will lay down with the lamb and pink unicorns will have rainbow farts.

    Except, the current EMRs are so horribly designed and beholden to some many asinine governmental requirements that the exact opposite is occurring. (I know, pink zombies with sulfur farts—it’s terrifying.) The the immense amount of pressure from the payers in medicine (that’s the insurance companies and the government, not the patients) to implement them is resulting is massive amounts of wasted money.

    Here’s just one example, from Throckmorton:

    It has decreased the numbers patients that can be see in a clinic by 30%. Even with that reduction, the clinic runs an extra hour and half longer. The actual time of patient contact, defined as listening, examining, and answering questions has been decreased by 50%.. We have had to hire 2 new assistants for every three doctors. We are told that it would improve our coding and because of this it would be cost neutral. As of today, it has decreased productivity and only added to overhead for a cost to the practice of 112k per physician.

    This reminded me of a quote from Steve Jobs in Wired from 1996 regarding education that I think is perfectly applicable to the situation here as many of the same problems in medicine and education are similar:

    I used to think that technology could help education. I’ve probably spearheaded giving away more computer equipment to schools than anybody else on the planet. But I’ve had to come to the inevitable conclusion that the problem is not one that technology can hope to solve. What’s wrong with education cannot be fixed with technology. No amount of technology will make a dent.

    It’s a political problem. The problems are sociopolitical. The problems are unions. You plot the growth of the NEA [National Education Association] and the dropping of SAT scores, and they’re inversely proportional. The problems are unions in the schools. The problem is bureaucracy.

    The problems in medicine are because powerful bureaucracies continue to create mountains of red-tape and mandates purporting to fix problems while only making them worse.

  • Email to my friends

    I want you to learn two things from this email. The first (the fish) is how to combine multiple open Safari windows into one window with multiple tabs. The second (how to fish) is about becoming self-sufficient and making your life better.

    The Fish

    Safari has an option to “Merge All Windows”. On the menu bar go to Window > Merge All Windows. Simple.

    Even better, you can create a shortcut for this.

    Open System Preferences (command-spacebar, type “System”), click on Keyboard, choose Keyboard Shortcuts, choose Application Shortcuts, click the “+” button. Under Application: choose Safari. Under Menu title: Type “Merge All Windows”. Under Keyboard Shortcut: press shift + option + command + m. Click add.

    Now, whenever you have a bunch of Safari windows open, just hit shift + option + command + m. (It’s a lot easier than it sounds.)

    How to fish

    I always end up with a million browser windows open, each with several open tabs in them. Frequently, they have the same mail, calendar, Google reader and log in to my EMR websites pulled up on them. Typically this happens when I click on a link in the first window and it opens the link in a new browser window, then later, with that window on top, I want my email and open a new tab to go to it, even though the same site is open in a different window that’s hidden.

    I thought two things: windows should always open in a new tab and there should be a way to easily merge all these windows together. I wish I could say that I immediately Google’d it and figured it out. Unfortunately, I’ve been thinking about this for months and never bothered to do anything about it. This has happened to me more times than is healthy. I need to just learn that when I have a problem, there’s probably a solution already created.

    For the first step, go to the menu bar: Safari > Preferences > Tabs. Under “Open pages in tabs instead of windows:” choose automatically. For the second step, I explained the second part above.

    Moral: There is almost always an easy way to do something on a Mac. If you want to do something, Google for how to do it.

    Speaking of which, if you’re not using TextExpander for text macros, you deserve to check it out.

  • Testing some CSS

    This is a failed semi-successful test of some CSS.

    Warning. I have no formal training in CSS.

    // This raises the inserted text, rotates it slightly clockwise and moves it over the deleted text.
    ins {
        -webkit-transform: translate(-20px, -5px) rotate(15deg);
        display: inline-block;
        background: transparent;
        color: #0080C3;
        text-decoration: none;
    // This creates the caret indicating the place to insert text.
    del:after {
        -webkit-transform: translate(0px, 1em) rotate(0deg);
        display: inline-block;
        color: #0080C3;

    In my experience, there is no such thing as luck. You’re all clear, kid. Let’s blow this thing and go home! The Force is strong with this one. I have you now. All right. Well, take care of yourself, Han.Error. I guess that’s what you’re best at, ain’t it? I have traced the Rebel spies to her. Now she is my only link to finding their secret base.

  • Forcing Spotlight to re-index

    For some reason today,1 I just couldn’t find the correct instructions for forcing Spotlight to re-index using the Terminal. Therefore, I’m reposting the instructions here so this is easier to find in the future.

    // First copy and paste this at the command prompt
    sudo mdutil -E /
    // Enter your password when prompted, and then paste this
    sudo mdutil -i on /
    1. Listen, Google, Duck Duck Go is starting to look more attractive every day.

  • Epic tail of the Christmas tech warrior

    Mike Lacher:

    But with the dawn of the feast of Christmas did a beacon of hope manifest itself upon the inky horizon. Riding in upon a teal Ford Focus came a great warrior, a suitor of the gentlefolks’ granddaughter. Word had spread through the kingdom that this warrior worked with computers and perhaps even knew the true nature of the Router.

  • Schools vs. education

    Thomas Sowell:

    The semi-literate sloganizing of our own Occupy Wall Street mobs recalls the distinction that Milton Friedman often made between those who are educated and those who have simply been in schools.

  • Not-a-mute switch

    Some guy writes an articles in the New York Times because his iPhone alarm goes off during a concert, causing him significant embarrassment.1 Words used to described the situation in the NYT included shame, jarring, angry, vitriol and devastating. The apparent “culprit” claimed he was so traumatized he hadn’t slept for 2 days.2

    As unimportant as this event was, except as a object lesson that we should be careful to value the opinion of New Yorkers on anything, it did spark off more blog posts in the community on a single issue than I think even occurred with. Even Hivelogic came out of the mothballs.

    It seems that everyone of note has had something to say on the issue.

    Since I now find myself devastated by the whole situation, jarred out of my complacent lifestyle by all the vitriolic writings and overwhelmed with shame that my favorite device, I thought I should gather the courage to add a few points that seem to have been missed.

    For those not wanting to go through all the above posts3, the short version is that the so-called “Mute” switch on the side of the iPhone is actually called the “Ring/Silent switch” and does not actually mute the phone completely, allowing songs, videos, games and alarms to make nose, presumably on the premise that these are items that the user has specifically stated they want to make noise.

    There have been many good points made both for and against this current behavior:

    It’s much better to be upset with yourself for having done something stupid than to be upset with a device that made the wrong decision on its own initiative. - Andy Ihnatko

    The user has issued conflicting commands, and the iPhone can’t obey both. - Marco Arment

    [W]hen I go to bed at night, I want to know that my alarm will wake me, but that my drunk friends won’t. - Ben Brooks

    I see two main arguments here:

    Philosophical argument: Alarms are important and are explicitly set. They should go off no matter what because folks will forget they muted their phone the night before, miss their alarm and get fired for being late. This will occur much more frequently than some dilitante getting socially castrated because of his alarm going off doing the sublime section of Mahler.

    Practical argument: When you activate the mute switch you have the expectation that the phone won’t make any noise, ever, like on every other phone on the market. If you forget to undo it, that’s your own damn fault. Grown a pair.

    I’ve suffered the negative consequences from both of the above, and really can’t say which is worse. I think both sides have made very good points and I don’t see a clear winner here. Each time I read a new post, I start to agree with that one.4

    Missing Factor

    But then Ben Brooks pointed out something this morning that got me thinking. He noted that the image displayed on the screen when you flip the not-a-mute switch looks different than the image when you press the volume buttons. For example, the first image below is using the not-a-mute switch while the second one is using the volume buttons:

    This prompted me to check something I vaguely remembered—you can’t turn off the volume completely using the volume buttons. Here is the same symbol with the volume turned as low as possible using the volume buttons:

    There is still one box of volume remaining. I also remembered that this didn’t seem to always be the case. I know that I’ve turned the volume down all the way before. Was it on a previous iPhone? Or was it on my first generation iPod Touch that I had to use before my wife let me buy I bought a real iPhone?

    I ripped my son’s 4th generation iPod Touch from his death grip5 and put it to the test. The first thing I noticed is that the symbol is not labeled ringer, but sound effects:

    Also, you can turn the volume all the way off:

    So I set an alarm, turned off the volume and waited…


    The alarm triggered, the screen turned on, but no sound or vibration occurred.

    It turns out that the controversial behavior appears to be unique to the iPhone and is not the same on the iPod Touch, aka John Siracusa’s iPhone. The iPod Touch has no mute switch. The volume buttons control the “sound effects”. You can turn the volume off completely, which does silence the alarms.

    Unfortunately, I don’t think that this solves the problem. I would probably like it made so that the mute switch works like on every other phone, completely silencing everything, but that if I turn the volume all the way down using the volume keys, it could go all the way off, silencing only the ringer, but allowing alarms to play. Basically, I would have both the Philosophical and Practical options available to me

    But this seems to be a solution for a tech-savy nerd and not a solution for grandma, and therefore is a fail.

    Many have pointed out that there should be options for the different behavior in the settings and while I generally agree with this, it doesn’t answer the general user issue of what should be the default behavior.

    At least now I am aware of the situation and less likely to make a mistake in the future.

    Update: My wife weighs in and, as all husbands know, is the final authority.

    1. The mute switch should silence everything—no exceptions.
    2. People who have to get up at a certain time should be paranoid enough to verify their alarm’s settings.
    3. There should be many options in the settings to allow you to customize this in detail.
    1. This and a reader question if the NYT should care about truth were the big stories this week. And they wonder why they’re fighting for their businesses life.

    2. Meanwhile, the slaughter of a bunch of unknown kids in an unknown country for unknown reasons received no reaction as it was not covered in the fish wrap. You’ll have to listen to the BBC if you want real news.

    3. Shame on you.

    4. Damn their Jedi mind tricks.


  • Being Evil 2

    Google initiates a plot to steal business by scraping the data of a local African business, cold calling their customers and lying about the initial business.

    via John Gruber

    More and more, Google is losing my trust. More and more, I’m backing my business away from their products.

  • 10,000 to 1

    Japanese giant hornets can massacre a European honey bee hive with 30 hornets completely destroying the 30,000 bees and the hive in a few short hours. The slaughter is brutal. The brave bees fly uselessly to their death.

    Japanese honey bees have a defense. Just as brave, but more effective. Working as a team, they have a way to stop the brutal invaders.

    This is absolutely amazing.

    Moral of the story: The Japanese are deadly.

  • Cost of free

    Tyler Nichols:

    Free customers are higher maintenance than paying customers.

  • A New Hope

    Tonight, my son watched the original Star Wars movie for the first time. I made sure it was the original, unadulterated version. 1

    I’m the best father in the world.

    1. I’m looking at you, George Lucas.

  • Fatherhood

    John Gruber wrote a searingly poignant commentary on fatherhood for Christmas a week ago. His words are only more important at New Years.

    I should re-read this monthly.

  • MMOs are like puppies

    Like getting a puppy, an MMO can be a big responsibility. Ultimately, that responsibility consumes all the oxygen, and these games start to feel less like gleaming starships and more like space-coffins. I intend to outrun that as long as I can.

    Penny Arcade

  • Thieves only want iPhones

    Bonus joke: This gets under my skin because it is a pompous, privileged, insulting, and myopic viewpoint which reeks of class warfare — and it is indicative of a growing sentiment I see amongst people in the thief community.

    John Gruber mocking Josh Topolsky’s claiming that MG Siegler is an elitist because he compared iPhones to Lexus the Androids to Honda.

  • Eliminate blind spots with simple adjustment



    Tennessee drivers are still rude, incompetent pricks but now I have a force multiplier. This has changed my life.

  • FAA approves iPads in the cockpit

    The FAA has granted the approval for Pilots to use iPads in all phases of flight. The first iPad-flights take off on Friday.


    So, this means I can leave my iPad and iPhone on during the flight too, right?

  • Trolling for pageviews

    Philip, from London, told me how he felt when he first became aware of his status (as having been circumcised) as a small child:

    “I wanted it covered up. I felt mutilated. I also felt that my parents had abandoned me; why had they let someone do that to me? I had such a feeling of helplessness and abuse due to my circumcision.”

    via guardian.co.uk

    Clearly, Philip of London’s doctor confused castration with circumcision as the complete lack of testes is the only explanation for an XY human of any age to act so pathetically over something so insignificant. This goes double for the author of this article.

  • Being Evil

    Google is really starting to piss me off. I don’t know if they’re evil or incompetent, but it’s getting ridiculous. Today’s example is prototypical.

    I go to a webpage with a YouTube (Google) video embeded:


    I click the play button and I get treated to this:


    When I click through the link to see the supported browsers, it does claim that what I’m running, stock Safari, is supported. Um, so why is it claiming I can’t see the video when I know it is fully HTML5 compliant?

    So I go into the Safari developer menu and trigger the browser to tell the website that I’m on an iPad rather than my Macbook Air:


    I’m still on the same computer, with the same browser, in the same window even. The window reloads and the video starts to play:


    This is fucking ridiculous.

    Google needs to get its head out of its ass. I used to be an all Google guy but the number of their products I use is rapidly disappearing.

  • Paying my respects

    Finally got around to it.

  • Steve Jobs Succumbs to Alternative Medicine

    Via Skepticblog:

    Eventually it became clear to all involved that his alternative therapy wasn’t working, and from then on, by all accounts, Steve aggressively threw money at the best that medical science could offer. But it was too late.

    If this is true…

  • Steve Jobs' 2005 Stanford Commencement Address

    Remembering that I’ll be dead soon is the most important tool I’ve ever encountered to help me make the big choices in life. Because almost everything — all external expectations, all pride, all fear of embarrassment or failure — these things just fall away in the face of death, leaving only what is truly important. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart.

  • Not Enough

    I first heard about this Apple company from my sophomore roommate Rob Lineweaver in 1998-1999. He had this small, ugly, boxy looking computer that didn’t run Windows 95. I didn’t want to know anything about it but he tried to tell me how great it was. I remember him saying that there were these yearly meetings about Apple and that the stock always went down and the up in some predictable pattern based on these meetings.

    In 2001, my first year of medical school, I bought my first Apple product, the original iPod. I had no idea what it was; I just wanted a portable MP3 player and somehow came home with that one. I loved it and shortly thereafter bought my first Apple computer, a 14 inch iBook. That computer lasted through the most terrible years of my life (a horrible break up, almost dropping out of medical school) and then the best years of my life (meeting my wife, getting married, having a son). The screen finally died and I was so poor with no job, crushing student loan debt and a new family, that I couldn’t afford another.

    I suffered for several years (with an HP laptop), got a job, got my finances in order and bought my second Apple computer, a 13 inch Macbook. The difference was so incredible that I vowed never to let cost be an excuse for quality.

    As my success in business and family has increased so has my collection of iPods, iPod Touches, iPads, iPhones, Macbook Airs and iMacs. But the Apple “lifestyle” has little to do with the products but the approach to the creation and the reason for creation of the products.

    • Simplicity
    • Elegance
    • Accessibility for the novice
    • Power for the expert
    • Attention to detail
    • Strength of conviction

    Owning and using these tools in my social and professional life, and being involved in the Apple developer community, has given me a new way of viewing the world. I’ve learned to avoid the “race to the bottom.” To trust myself to have a vision, to work towards that vision, slowly, surely, without being crushed by the doubts of others. I’ve learned to strive towards perfection, always “innovating at the margins”. I’ve learned to love life and have gotten to share that joy with my family.

    I had planned to and did buy my first share of Apple stock today; I wasn’t planning on it being a memorial.

    Thank you, Steve.

    iGout icon

  • Steve Jobs: 1955–2011


    I didn’t know Steve. I never met him. I never worked for him. I never even got one of his famous one-liner email responses.

    But it feels like someone close to me has died.

    I feel empty inside.

  • 1955-2011

  • EMR Money Trail

    Margalit Gur-Arie:

    Since there is no evidence of physician technophobia in any other areas of medicine (or private life) and since there is no measurable benefit to doctors in keeping their patients in a subservient position, the question then becomes: who is benefiting from EHRs?

    The simplest answer is usually the best.

    Who benefits from the current offering of EMRS?

    1. Those who sell EMRs.
    2. Those who mine the data from these EMRs.

    Why don’t physicians adopt them without being forced?

    1. They are slow.
    2. They don’t improve quality.

    Don’t misunderstand. I would gladly use a quality product. There just isn’t any. As soon as there’s an Apple-quality EMR, I’ll be the first in line to buy it.

    Frankly, the EMR development community has failed us. Perhaps all the good developers are working for Facebook because that’s were the money is.

  • Tap, don't clunk

    There’s something inelegant about physically pushing down on a trackpad until it “clicks” instead of just lightly touching it as with an iOS device but that seems to be the default setting. I always change this so that I can just lightly tap the trackpad. This seems to be faster, less work, and quieter. To enable this you just need to go to the trackpad setting.1

    If the past, I think this was all I needed to do, but since moving to a new MacAir running Lion, although the tap to click works, you can’t double tap and drag to highlight. Instead you still need to double clunk (what I’ll call actually physically pressing the trackpad down from now on) and then drag to highlight.

    • Tap = lightly touch without physically moving the touched object

    • Clunk = heavy press that physically moves the touched object

    I finally figured out how to fix this in settings. You have to go to a completely different menu to turn this on.2 This kind of weird layout is something I’ve run across with Apple before but seems totally opposite of their normally well designed UI. I’m sure there’s a good reason for it and I’m just missing it, such as this is an advanced feature they want to hide from regular users?

    I know that these changes in input function are small things, but they do increase my productivity as well as my enjoying of my work.

    1. Press command-spacebar, type trackpad, hit enter, choose Point and Click and hit the checkbox next to Tap to Click.

    2. Press command-spacebar, type universal access, hit enter, choose Mouse & Trackpad, choose Trackpad options, check the bar next to dragging.

  • My new goals


    1. Get a girlfriend
    2. Kiss her
    3. Rule the world

    I want this guy as a life coach.

  • Doing the Lord's work

    My old partner’s new desk. Makes me happy seeing how I improved her former Blackberry/Windows life.

  • TextExpander

    I’ve been wanting TextExpander for awhile and was going to buy it when I got around to it.

    For the next 15 days it’s being sold in a bundle with 7 other Mac apps for five dollars less than it’s normal price ($30). You also get a bunch of other great productivity and social apps like Keyboard Maestro.

    If you want to be a power user, or you have to because you use computers for a living, i.e. physician, than you need good macro programs.

    Don’t know why? Make all your disease information, frequent prescriptions and operative notes/instructions into macros. It’s a lot easier to type OA and have all my osteoarthritis information pop up than to type it fresh each time or even copy and paste it.

  • Fun Tech

    I love technology. A few new items have come into my life lately I’d like to share.

    • Mobile Google Maps. This is a program that runs on your mobile. It accesses the GPS unit on the mobile and uses that data for location and direction functionality. It also interfaces with google maps, google satellites and other online mapping images.Most mobile phones these days have GPS functionality and a few companies have created interfaces with this information and for a price allow limited access. (This is in the US where the mobile industry is in the freaking dark ages.) This program gives more functionality for free.

    A neat feature about this is the ability to remotely view the mobile’s current location online when the program is active or its last position before the program was turned off.

    I’ve gotten back into Geocaching lately because of this.

    • Next up is Opera Mini 3.0. This is a web browser for mobile phones. I’ve been using version 2.0 for awhile now. The new version has several significant improvements including nesting of long lists (no more long scrolls through people’s bloglists of 100 sites etc.), photo uploads, smaller text and secure sign ins. For the first time, I’m also able to log into the wordpress site and blog through my mobile. My last few post were done that way.
  • Why I Hate Windows

    I love macs. Sadly, I use Windows the most. This is because 1) my mac died, 2) I won an HP laptop in a contest, 3) I’m too poor to buy a computer (or even pay the $500 I’m told it will cost to fix my ibook) and 4) all the hospitals I work at use win boxes. The following is a story of my hell and something that would NEVER happen on a mac.

    About a week ago my laptop became infected with a virus or two hundred when I visited a website. I know this because google warned me it might contain malware and I went there anyway and as soon as I did my practically worthless virus program (Sophos) started screaming about infected files, but was unable to DO anything about it. Meanwhile all sorts of pop ups, adware, and internet explorer toolbars started ravaging my system.

    I installed a few other programs that were able to find and delete most of them, but the pop ups continued, more files continued to be infected, crashes became status quo and I wanted to smash the laptop with a hammer. I had done everything I could to halt the damage, even trying system restore, which kept failing to restore, without success. Finally today, on my day off, I reformatted the HD and reloaded everything. Actually, I’m still reloading everything.

    Thankfully, all my music was on my iPod, so I can port that back over (illegally?) and all of my pictures, documents etc. are also saved on usb drives. I did lose some videos and am wasting hours redownloaded, installing and configuring my software.

    Viruses suck. Virus makers should die. Windows sucks for being so vulnerable or popular. You pick.

  • iBook - RIP

    My iBook first died a few months ago. The screen stopped working and I figured it was DOA. I finally decided to take it into a repair shop today. They can fix it but it will cost $500USD. Thus it is going to remain dead. I could buy a new Gateway laptop with much better specs for $150 more. As much as I love my macs this poor doc can’t afford that kind of expense.

    Excuse me. I need a moment to mourn.

  • Village of the dead

    New York Times:

    This mountain village near the Sea of Japan, withered to eight aging residents, concluded recently that it could no longer go on.

    So, after months of anguish, the villagers settled on a drastic solution: selling all of Ogama to an industrial waste company from Tokyo, which will turn it into a landfill.

    With the proceeds, the villagers, mainly in their 70’s, plan to pack up everything, including their family graves, and move in the next few years to yet uncertain destinations, likely becoming the first community in Japan to voluntarily cease to exist.

  • Pain in the mouth

    A couple weeks ago I developed an abscess in the root of one of my top molars. I had the whole swelling, tenderness and pain thing. I felt like dying or ripping the thing out by the roots, either of which would have treated the problem. Instead I wasted $50 seeing an “emergency dentist” who told me it was infected and needed to be drilled or removed. Well, no shit sherlock. I’m a fucking doctor–I know that. Then he gave me heavy duty narcotic pain meds and an antibiotic, which isn’t exactly recommended by the dental societies.

    The key point is that it is very unlikely for the infection to go away without physically removing it via root canal or tooth removal and I have no money for either. So, I’m trying to hold the bacteria at bay with antibiotics and asprin until my insurance at the new job kicks in.

    Things had actually gotten better for awhile. The swelling, pain, sensitivity and looseness subsided.

    And came back yesterday. I think I’ll end up losing the tooth if I wait on this, but I have no money. So while I see patients who never pay, I myself can’t get the medical care I need for lack of money. Isn’t it ironic, don’t you think?

    At least if I ever get accused of not understanding what it is like to be poor or to go without medical case, I can laugh like the devil by the pale moon light.

  • Samsung A900 Blade

    I have a new phone, the Samsung A900, or Blade.

    Actually, the phone is great. I’ve had her about 5 months. At first she was buggy with sluggish menus and needing to be reset everytime I wanted to use picturemail, but a few firmware updates later and she purrs. Using Opera’s browser (the built-in one sucks), I can browse my favorite sites and check (and reply) to my gmail. The megapixel camera is good for taking printable portraits and still-lifes, but being camphone, don’t hope for anything in motion or wining any contests. She can connect to your computer using USB or bluetooth and you can put (and use) almost any files on her that way, including mp3 and pdf. This also means you can create your own ringtones without paying the companies their extortion fees. She comes with bluetooth that is fully functional, except for A2DP. You can even program her to type text messages as you talk to her: voice-to-text. I use her for flickr, blogging and surfing the internet, especially during long, boring medical lectures.


    • Dimensions: 3.9” x 2.6” x 0.6”
    • Weight: 3.53 oz.
    • Continuous digital CDMA talk time: Up to 3.0 hours.
    • Main Display: 240 x 320 pixel 262K TFT color display
    • External Display 96 x 96 pixel 65K TFT display
    • Mode: CDMA Dual Band (1900/800 MHz).

    To wrap up:

    • sexy
    • megapixel camera
    • bluetooth
    • mp3
    • internet/email
    • voice-to-text
    • USB-harddrive connectability