• Scaling Your Documentation

    As good programmers, we all want to create reusable components. We carefully learn techniques like OOP, FP, and patterns to make our code clean and reusable. We use many tools to help create good documentation. The defining character of a good programmer, I believe, is writing good documentation. Recently, however, I started to observe that(…)

  • More Stupid Emacs Tricks

    This time, from the “Getting latest version of tramp working OS X” edition. This is the version of Emacs I use on my mac, from http://emacsformacosx.com/. It comes with tramp 2.2.6. To upgrade to the latest version of tramp, download the tarball from the GNU FTP site. Extract, and use the following configure command: I(…)

  • Farewell XML

    Changes in my emacs config. This Replaced It’s end of an era.

  • Why Should I Use Tarsnap?

    Tarsnap is a popular backup service for hackers (citation needed?). I went ahead and tried it out and archived some of my “very important stuff” there. Currently, I’m using 9.75GB of data and I’m paying 10 cents a day. Google Drive, on the other hand will soon provide 15GB of storage for free and charge $5/month for(…)

  • WordPress Migration

    Migrated my site to BlueHost today as I really don’t want to be a WordPress administrator. I’m hoping it will be faster than running WP on my linode box.

  • Screw G+ (and Facebook and all that)

    I saw an insightful post on G+ the other day. I wanted to comment on it. Then I realized it’s useless to comment on G+ posts. Without a conversation thread, commenting on a post is completely useless and gets drowned out in all the noise. Yeah, G+, Twitter, Facebook, et. al, are great at sharing(…)

  • Interviewing is Hard

    We are doing lots of hiring and interviews at Rubicon. It  is probably one of the hardest things I have to do. There is the peer pressure to ask clever interview questions. Yet, I often find that clever questions do not help me make a decision.  You want to come out of an interview with(…)

Scaling Your Documentation

As good programmers, we all want to create reusable components. We carefully learn techniques like OOP, FP, and patterns to make our code clean and reusable. We use many tools to help create good documentation. The defining character of a good programmer, I believe, is writing good documentation. Recently, however, I started to observe that documenting the code is no longer sufficient, a great programmer must start writing good service documentation.

10 years ago, I’d hear things like “We’re a Java shop/We’re a Ruby shop”. The implication is that in that company, they’d use a specific programming language as the standard, and share reusable libraries within that language. Today, if your company is a __whatever__ shop, you’re doomed. Today, polyglot programmers are the norm and it is now impossible to staff a house full of good programmers if you’re constrained to a single language. One consequence of this evolution is that teams are no longer sharing “libraries” with each other – now we share functionality via web services. This service-centric approach to organization growth also means programmers need to start think bigger when it comes to documentation . Writing great libraries with great documentation is no longer enough – most people in your organization are not going to using your library directly. More and more people are depending on you creating easy to use service APIs and your service level documentation. If you have great code documentation, but your services are not documented, who is going to use your code? What value is it going to provide?

I think it is ironic that as computers have gotten more powerful and programming languages have gotten easier, the programmer’s job has only gotten harder. It makes sense in retrospect – more productivity and more power equates more responsibility. The defining character of a good programmer, maybe, is not so much about writing good documentation, but knowing that documentation what allows your programs to make people’s job easier. And that makes you scalable as a person and a leader in your organization, not just an ordinary programmer.

More Stupid Emacs Tricks

This time, from the “Getting latest version of tramp working OS X” edition.

This is the version of Emacs I use on my mac, from http://emacsformacosx.com/. It comes with tramp 2.2.6. To upgrade to the latest version of tramp, download the tarball from the GNU FTP site. Extract, and use the following configure command:

./configure \
   --with-emacs=/Applications/Emacs.app/Contents/MacOS/Emacs \
   --with-lispdir=/Applications/Emacs.app/Contents/Resources/lisp \
   --with-infodir=/Applications/Emacs.app/Contents/Resources/info

I also add in a sprinkle of this in my .emacs file to customize my ssh control path (do this at your own risk, says the FAQ).

   (require 'tramp)
   (setq tramp-ssh-controlmaster-options
         "-o ControlPath=~/.ssh/connections/%%r_%%h_%%p -o ControlMaster=auto"))

Farewell XML

Changes in my emacs config.

This

;; Executes 'Executes 'js-beautify -i -s4  2>/dev/null' on the current region.
(defun jc-beautify ()
  "Executes 'Executes 'js-beautify -i -s4  2>/dev/null' on the current region."
  (interactive)
  (shell-command-on-region (region-beginning) (region-end)
                           "/usr/local/share/python/js-beautify -i -s4 2>/dev/null"))

Replaced

;; Executes 'tidy -asxml -xml -indent -wrap 2000 2>/dev/null' on the current region.
(defun jc-tidy ()
  "Executes 'tidy -asxml -xml -indent -wrap 2000 2>/dev/null' on the current region."
  (interactive)
  (shell-command-on-region (region-beginning) (region-end)
                           "tidy -asxml -xml -indent -wrap 2000 2>/dev/null"))

It’s end of an era.

Why Should I Use Tarsnap?

Tarsnap is a popular backup service for hackers (citation needed?). I went ahead and tried it out and archived some of my “very important stuff” there. Currently, I’m using 9.75GB of data and I’m paying 10 cents a day. Google Drive, on the other hand will soon provide 15GB of storage for free and charge $5/month for 100GB of storage. Carbonite will charge $59/year for unlimited backup on 1 computer. So out of the 3, tarsnap is the most expensive and the least convenient to use. Why would I use tarsnap at all then? I don’t know. I can see the value if encryption of “my data” is important to me, but it really isn’t. The only argument I can make is that my archived data at Tarsnap will be more secure through more obscurity (it is much easier to delete my stuff by hacking my Google account). At $3 a month, I can stay with Tarsnap, I do wish they have readily available binaries for major OSes though.

 

 

 

 

 

 

Screw G+ (and Facebook and all that)

I saw an insightful post on G+ the other day. I wanted to comment on it. Then I realized it’s useless to comment on G+ posts. Without a conversation thread, commenting on a post is completely useless and gets drowned out in all the noise. Yeah, G+, Twitter, Facebook, et. al, are great at sharing pretty pictures and thoughts and all that, but for having a serious two sided conversation, I think I’ll stay with the blogging format.

Interviewing is Hard

We are doing lots of hiring and interviews at Rubicon. It  is probably one of the hardest things I have to do. There is the peer pressure to ask clever interview questions. Yet, I often find that clever questions do not help me make a decision.  You want to come out of an interview with 2 results. One, a good impression to the candidate that they are interviewing at the right place. Two, you want to know if they will be a good team member.

Some of the best people I’ve worked with are people who are both smart and work hard. More importantly I want to find people who will come into work with a passion. And that is hard to tell in an hour long interview.

On the subject of good interview questions, I’d say you want a few that are non-trivial, and preferably one that allows you to guide the candidate along and work out the problem with him. In other words, the question should be in a way where you can drop hints on how to change their solution, and allow them to change. Good questions should also be open ended. This is because in practice, a question with a clearly optimal solution will become well known and makes it hard to really judge if your candidate is a good problem solver or just knowledgeable.

Death of Google Reader and RSS

I can’t help but think that RSS is dying precisely because of what made it so powerful: It is an open standard for sharing and following people. As I write this, there is a strong temptation to use Twitter/Google+ to replace my blog. They are so convenient, and pretty, and cheap. But they also lock my words and thoughts into controlled, censored,  and proprietary platform. Here, I own the data and I am free to do what I want with it. Here, I am free to share my thoughts with anyone who wants to see it. With RSS, it is easy for me to follow anyone’s thoughts without needing a G+ or Facebook account. But it seems like those days are coming to an end. Just like the end of personal computers designed for personal programming.

How long will I hold out before I stop blogging and migrate to “social media platforms”? I hope, at least, for a few more years.

 

 

 

 

More on “IDEs”

OK, what I really mean is to compare traditional programmer text editors  (vi and emacs) vs things like Coda and Textmate (and Sublime).

Some developers are condescending to people who are not using vi or emacs. “Yet another text editor”, they ask, “Why not just learn vi/emacs?” Yes, some people could and should use them. I know them and I still use a “pretty” text editor.

Vi and emacs are extremely bad at doing coding demonstrations. Whether you are showing screenshots  of your code on a Powerpoint slide, or if you are typing out code during a presentation, the lack of UI beauty in these old editors are extremely obvious. The result is that you are making it more difficult for your audience to enjoy your presentation and you are preventing yourself from getting your point across.

Vi and emacs also adapt to modern changes poorly. Both are bad at handling Javascript/CSS/HTML indentations and syntax highlighting out of the box. Not that they cannot handle them, but because people are not adding these features to these editors. New editors come out all the time to help deal with the particularities of new language fads. For developers working with new languages, new tools are needed to keep their lives simpler.

So before you assume its silly for anyone to use anything other than vi or emacs, just remember that not everyone is dumber than you. They probably have a good reason for being different.

IntelliJ IDEA from a long time Eclipse user

I went to Eclipse when my employer at the time (Edmunds.com) started to push developers to use an IDE called Weblogic Workshop instead of vi/emacs.  I would not use the horror that was Weblogic Workshop. I looked at NetBeans at the time – it sucked, as did all Swing apps. So Eclipse was a no-brainer. I’ve looked at other options form time to time, but I never ditched Eclipse. Recently, I started working with more Java developers who are using IntelliJ IDEA. So this weekend I decided to give it (the Community Edition) a serious go. Just some quick thoughts on IDEA.

  • It seems to take a long time to “warm up” before IDEA runs as smooth as Eclipse.
  • Eclipse is stupid about detecting when you changed a file from outside of Eclipse; IDEA is not. This is very annoying when you use Emacs/vi/OxygenXML as an additional editor.
  • “JetBrains :: IntelliJ IDEA” is a stupid, stupid name.
  • Emacs key bindings in Eclipse is better, alt-w and ctrl-y “just works”.
  • Maven projects is poorly “integrated” into Eclipse’s concept of “projects”. Sarcastically, I’d say this is a plus for folks who detest IDEs.
  • I miss the native “choose file dialog” you’d get with Eclipse.
  • I think the new version has incremental compile  like Eclipse, but it doesn’t seem to work by default.
  • The Maven daemon in IDEA used around 300MB of memory and continually consumed CPU resources.
  • The keyboard stopped working for some reason.