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.
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.
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.
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.
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.
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.
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.
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.
In the next few weeks, I plan on writing up some notes on how we tuned our JVMs at the Rubicon Project for more lower and predictable latency and lower CPU utilization. The key to successful tuning is instrumentation, and Java provides some sweet tools into seeing the performance of your production VM without incurring performance penalties. You’ll want to make sure your production machine has jmx enabled.
And at some point you’ll want to temporarily turn on GC debugging with
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/foo/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGClogFiles=4 -XX:GCLogFileSize=100M.
I’ll go over exactly how to use tools like jconsole and how to interpret the results of GC logs and how we were able to drastically improve system performance. Stay tuned….
Its hard to find time to write new posts now days. This is just a commentary on another post that I find interesting.
My 2 cents -
* Network problems are hard for us -
I’ve seen hard working, intelligent programmers get tasked to design distributed system. Yet they do not have expertise on networks – They are not aware of the gotchas associated with low level protocols, and what happens to all the bits as they go from one machine to another. Years of working with pretty reliable network frameworks (e.g., http client calls to http://www.google.com) built a false sense of security. Then they spent weeks trying to figure out why their software broke after its deployed to production (a load balancer they’ve never heard of was misconfigured).
* Lots of us do not have good tools to test distributed systems -
I’ve still learning how to incorporate Vagrant and VMs into testing distributed system. Many programmers don’t even do this. Why? Because its hard. So they do they code and have another team test it out on the integration (or maybe production) environment. If you’re testing this late into the game, your chances for failure goes way up.
* Most programmers do not implement “backpressure” -
Because they’ve haven’t had the pleasure of dealing with production issues with distributed system… yet. They’ve never even though of this useful pattern for increasing the reliability of their system.
* Human parts of the system is hard -
The human parts can be the particular VCS and deployment strategy your team uses, or the 210 approvals you need update your system which relies on 2 other teams (and the 2 teams hate each other). Sometimes you don’t have the access to see what’s happening on the potential failing machine because of politics. How do make a distributed system work when you’re not allow to touch it?
When I read parenting advice, I wonder if I accept them because they agree with my beliefs or because of some more legitimate reason. As with anything, I try to be skeptical about what I read. But as I accept parenting advice and apply them to my life, I can’t help be wonder if the advice is legitimate. After all, parenting is a complicated thing and there’s no scientifically “right” way to do things. So how we identify good parenting advice from bad ones? I just don’t have an answer to that.