A look into the life of a Technical Evangelist

I, Sublime - A Look at My Favorite Sublime Text Plugins

I have been using Sublime Text 2 since pretty close to the beginning. I purchased it early because I could see the value easily and prefer to support the developers who support my efforts.

One of the aspects of Sublime that I love the most are the plugins. But when you get started with Sublime Text 2, it can be difficult to know which plugins to use. This article will go through the ones I think you need to install first.

  • Sublime Package Control - Will Bond’s Package Control is the first thing everyone needs to install. Installing packages without this is a PITA. Even if you only install one other plugin, this is totally worth it! Install it now using the instructions found here.
  • Advanced New File - Easily create new files from the root of your project rather than from the default directory for the app.
  • Alternative Autocompletion - Install this then press escape to cycle through the various autocomplete possibilities.
  • Bracket Highlighter - Quickly seeing the other side of the set of brackets is very useful
  • Emmet - This used to be called ZenCoding. Not sure why it changed, but Zen was breaking down for me and Emmet makes everything better. If you are writing ANY html, install this and get it done quicker!
  • ERB Insert and Toggle Commands - If you are doing any Rails dev, then you are writing ERB files. If you are writing ERB files, you have to keep typing <% %>. Everytime I do that, my finger searches for the % key. Now I press a simple shortcut and cycle between <% %>, <%= %>. <%- %>
  • ERB Snippets - More ERB goodness. Some overlap with the Insert/Toggle plugin, but thats still easier for me.
  • Find Key Conflicts - As soon as you install a few plugins, there will be key conflicts. This helps you find them and more importantly, fix them.
  • GitGutter - I don’t really use the Git plugin since going from the command line is easier when you get used to it, but seeing what lines changed in the gutter is way cool!
  • LiveReload - Save a file and see your browser auto-refresh. When doing Rails, this seems to work better for me than CodeKit, though I still use that occasionally for regular web dev. Follow the instructions here if it crashes on save every now and then.
  • Sidebar Enhancements - This makes the sidebar infinitely more usable!
  • Synced Sidebar - I am fairly new to Rails so still getting a feel for where files are. I tend to open files pressing Command-P then type the file name. When I do, this plugin shows me where in the sidebar the file came from.

If you are doing anything with Rails, I suggest you also look at MHartl’s SublimeText Setup Instructions for some good pointers. I took the RailsCasts Theme from this online theme editor and made the keywords, constants, and library functions a bit lighter because I couldn’t see that shade of red very well.

Do you have any favorite plugins I should be using? Share them in the comments, or send me a tweet @technovangelist

Graphing With R

I took a few days off for Christmas in San Antonio with my parents and my sister. While there, I had the usual tasks for a geek with non-geek relatives: fix computers, fix wifi, fix printers, explain the Internet, explain how stuff works. But in between time spent doing that, and doing family stuff, I learned a bit about R. R is programming language mostly intended to do statistical programming. I don't know much about that, but I wanted a way to make some graphs that are sometimes difficult to make in Excel.

I think it would be easier to just learn more about Excel, but now I am invested so I am trying to use it as much as possible. Recently at work I added a post to our blog on the impact of JavaScript and concatenating/minifying the code on your website. You can read the about it here At the end of that post, I added an chart describing the final results.

JavaScript tests chart built with R

JavaScript tests chart built with R

Creating a chart like this would probably take me 20-30 minutes in Excel. Building it in R would probably take less time if I knew R like I know Excel. Instead it took me a lot longer. But in getting there I discovered a lot of ways I didn't like the image. I think Excel is great when you know exactly how you want the final image to appear in the post. I thought I did, but this looks vastly different from that initial version. Tweaking and then having a very repeatable chart within seconds for any dataset is one of R's biggest strengths for me.

So how did I get here? Well, R is complicated. Luckily a course on Coursera came up at exactly the right time for me. There is a second course that takes this further that starts next week too.

But assuming that you know the basics of R and just want to see what I did, here is my R Script for this chart (the csv files I am using are the standard ones you can download after running a test on Yottaa):

setwd("~/Downloads/")
library(ggplot2)
library(plyr)
js1 <- read.csv("Lat-JSTest-Jan14-Test1.csv")
js2 <- read.csv("Lat-JSTest-Jan14-Test2.csv")
js3 <- read.csv("Lat-JSTest-Jan14-Test3.csv")
js4 <- read.csv("Lat-JSTest-Jan14-Test4.csv")
js5 <- read.csv("Lat-JSTest-Jan14-Test5.csv")
alljs <- rbind(js1,js2,js3,js4,js5)
regions <- data.frame(Location=c("New York (NYC)", 
                                 "Chicago (ORD)",
                                 "Dallas (DFW)",
                                 "Washington DC (DCA)",
                                 "San Francisco (SFO)", 
                                 "Oregon (PDX)",
                                 "Amsterdam (AMS)",
                                 "Berlin (BER)",
                                 "Dublin (DUB)",
                                 "London (LDN)",
                                 "Tokyo (NRT)",
                                 "Hong Kong (HK)",
                                 "Sydney (SYD)"),
                      Region=c(rep("US",6),rep("Europe",4),rep("AsiaPac",3)))
alljsr <- merge(alljs,regions,by.x="Location")
mt <- ddply(alljsr,
            "Monitor.name", 
            summarise, 
            mt2i=median(time.to.interact),
            sd=sd(time.to.interact),
            se=sd(time.to.interact)/sqrt(length(time.to.interact))
            )

p <- ggplot(mt,aes(x=factor(Monitor.name),y=mt2i,fill=Monitor.name))
p.plot <- geom_bar(stat="identity")
p.error <- geom_errorbar(aes(ymin=mt2i-se,ymax=mt2i+se),width=0.10)
#p.error <- geom_errorbar(width=0.25)
p.coord <- coord_cartesian(ylim=c(1000,6000))
p.labs <- labs(color="black", title="Javascript Tests", y="Time to Interact", y="" )
p.theme <- theme(legend.position="none",
                 panel.grid.major=element_line(color="black",size=.3,linetype="dotted"),
                 #panel.grid.major.x=element_line(size=.6),
                 panel.grid.minor=element_line(color="black",size=.1,linetype="dotted"),
                 panel.grid.major.x=element_blank(),
                 panel.border=element_rect(color="black", fill=NA, size=.2),
                 panel.background=element_rect(fill="white")

)
p.sfill <- scale_x_discrete(name="Tests",
                               breaks=c("Lat-JSTest-Jan14-Test1",
                                        "Lat-JSTest-Jan14-Test2",
                                        "Lat-JSTest-Jan14-Test3",
                                        "Lat-JSTest-Jan14-Test4a",
                                        "Lat-JSTest-Jan14-Test5"),
                               labels=c("1) Initial Test",
                                        "2) Added JS",
                                        "3) Optimized\nexcept JS",
                                        "4) Optimized\nwith Reduce\nJavaScript Requests",
                                        "5) Optimized\nwith Reduce\nJS Requests\n& JS Minify"))
p.text <- geom_text(size=8,aes(x=Monitor.name, y=mt2i-500, label=mt2i), color="white")


p + p.plot + p.labs + p.theme + p.coord + p.sfill+p.error +p.text 

I am having a lot of fun with R so far and I look forward to seeing what I come up with over the next few weeks. I have a series of posts coming up on the Yottaa Blog and plenty of opportunity to post more charts made with R.

Source: http://technovangelist.com/

The Mac and The Watch

I used to wear my watch all the time. It's a Seiko Sportura I picked up on one of my first trips to Dubai. It was the first watch I paid over 50 bucks for and at closer to 400-500 dollars, it was a fairly big investment. It stayed on my wrist all the time. I wore it everywhere for at least 6 years and when it was off, the lack of weight on my wrist just felt wierd. 

But if you look at my arm today, you might notice that the watch isn't there. I don't wear it anymore. It's not that I don't like the watch anymore, leaving it in a drawer for the last year. What changed it for me was the Mac. So at this point you are probably wondering what the Mac offers that caused me to stop wearing the watch. And the answer is nothing. The reason is because Mac made it painful.

The Sportura is a big watch. I have the black titanium wrist band which makes it feel even bigger. Everything was fine until I went to the Macbook Pro and its poorly designed wrist rest area. That hard, razor-sharp 90 degree angle at the front of the laptop would always catch the bottom of the watch wrist band. I would have to lift my arm and then rest it on the laptop. Every movement would then make a scratching sound on the aluminum. 

Compare that with the more beveled front of the Thinkpad I had used before: my wrist could slide on to the laptop without it catching. Rubbing the watch on the Thinkpad caused no scratching sound. And all of that makes sense based on what I have seen about how design is done by Apple vs the Thinkpad group at Lenovo. Apple makes something beautiful regardless of it's users or it's history. While the Thinkpads are an evolution of design with each generation building on the greatness of the earlier models. I can still see some aspects of that original butterfly keyboard in the latest Thinkpads and its incredible. 

I am 100% an Apple guy today but that doesn't mean I think everything they do is perfect. I spend all of my time on a Macbook Pro but that doesn't mean I can't see the genius in the Thinkpad. In my perfect world, the Apple designers would find a way to integrate a more beveled front edge into the Macbook (and a thousand bonus points for implementing the Thinkpad keyboard with the Trackstick). Until then, the watch will stay off, sitting in a drawer somewhere.

AutoStitch on iPhone

I have had AutoStitch on the iPhone for quite a while. It's an oldie, but definitely a goodie. Panorama apps are all over the place, but this one continues to be the best I have seen. Read on to see examples of why I like it...

Read More

Learning R With Coursera

Last week I started taking a new course on Coursera.org. It's called Computing for Data Analysis and its all about using the R programming language to get a better understanding of large datasets. I work for Yottaa and large datasets are something we deal a lot with. I want to find an interesting way to work with and understand the data collected from all sorts of sites on the internet and I am hoping R is the perfect solution. Unfortunately, its a bit wierd and not all that well documented, so this training course could be just what I need.

The programming assignment from last week already taught me a few commands I hadn't used before. We are working with a table of numbers describing ozone, temperature and more and we needed to find the mean of the Solar.R value where Ozone was greater than 31 and temperature was greater than 90. At first it took me about 7 lines of code to get this done, but after some searching, managed to get it down to a single beautiful line (which I am sure I would forget if I did not document it here):

mean((subset(x,Ozone>31 & Temp>90))$Solar.R)

Wow, that is cool!

I am looking forward to the second section of the course which starts on Wednesday!

Whats Up With The Cases?

Now that the temperature has dropped to the 20's and 30's I tend not to walk to the office. Its a beautiful walk, but the T (the friendlier name for the underground portion of the MBTA, aka the Boston public transportation system) is just so much warmer. I have a short walk past Berklee University to get to the Hynes Convention Center stop of the Green line, then a few stops to my office. 

One thing I have noticed is that the iPhone, and to a much lesser degree other brand phones, is a major part of everyone's commute. I see everyone zone out and get absorbed by whatever is on their personal screen: a game, a video, a book, or the album cover to the current track. That's ok, I am doing it myself. It's not like I was going to strike up a conversation with one of these folks anyway. What I find interesting are the cases.

Everyone has a case on their phone. I don't get it.

Read More

Bookshelves Are Up!

Yesterday I made a pilgrimage to Ikea to buy the standard Billy bookcases. Feels good to have them assembled and have the books out of the closet where they have been since the move. Now to clean up the excess cardboard and packing strewn across my floor.

Unfortunately, Ikea is not an easy trip for the car-less resident of Boston. Apparently Ikea was going to open a store closer to the city, but then bailed on their plans just a few months ago. I think that decision was insane! With students from Harvard, MIT, BU, BC, and more coming into town each semester, I am sure they could make a killing in the city. But for some reason, they think that Bostonians just like to pay way too much for furniture that isn't much better than the Ikea standard.

Read More

Finally made the switch to Squarespace 6

Not sure what took me so long, but finally made the switchover from Squarespace 5 to 6. Ahhhh....

Downside is that everyone still subscribed to the feed, just got a refresh of the last 20 posts...ugh

Selling in the Netherlands can be hard

In preparation for my move to Boston, I have been trying to get rid of extra stuff in my apartment. This has proven to be a tough process because of some of the whackos out there. Take this one exchange I have been having for the last couple days.

I placed an ad for a Nikon SB600 Flash on Marktplaats.nl. Marktplaats works on a bidding system so I started the bidding at 80 Euros. I saw other SB600s going for 125, so that seemed like a good place to start from. The idea here is that you bid and the highest bid after an undefined amount of time wins.

So rather than bid, I got three emails from Daniel, although sometimes he goes by DF.

 

Read More

My commute

My commute these days is minimal. I wake up, cross the hall, sit down and get to work. I have had this commute for about a year on most days. Up until July 1, I had an office to go to in Hoofddorp, but that wasn't a place I enjoyed going to so I tended to stay away as much as possible. Obviously when I had a class, I would go in but interest in training was dropping. Working from home is something that many people would die for, but I hate it.

Read More

Finding A Job Isn't That Hard, Just Get The System To Work For YOU

A few months ago I decided it was time to switch things up a bit. I was eager to move back to the US and also eager to work for a startup where I had more control over my place in the company. I wanted an office I could walk to and one that I wanted to go to everyday. And I wanted the office to be in a vibrant, exciting city with an active startup scene.

Sure, I dabbled with a few companies over the last year, but it wasn't until mid-March of this year that I started to get a bit more serious about it. Getting cut after the 3rd round of several-hour interviews at Google a year ago was a bit painful, but I was glad I went through that because it forced me to think about what I really wanted to do. It was actually the first time I interviewed for a job that I did not get. There would be a few others after that, but each bad interview taught me more and more about what I wanted.

Read More