HNHacker News
TopNewBestAskShowJobs

kaffeinecoma

1,474 karma · joined May 11, 2009

Find me at http://armhold.com, or visit my github: http://github.com/armhold.

To contact me: my email is armhold at gmail com. Please mention HN if you do (too much recruiter spam, but HN contacts always welcome.)

submissionscomments
kaffeinecoma··on Coding Horror: The PHP Singularity
Everyone's jumping on the PHP bashing. I don't think that's what this blog post was really about. Did you read to the end?

  One of the explicit goals of my next project is to do whatever we can to 
  buff up a ... particular ... open source language ecosystem such that it can
  truly compete with PHP in ease of installation and deployment.
Kind of a cliffhanger ending... What are you building, Jeff?
kaffeinecoma··on Sublime Text 2.0 Released
Exactly. I avoided IDEs for years thinking they were for lazy typists. Finally a friend convinced me to try one, and it totally changed the way I work. Just hit CTRL-space and see what you can do with it. Who needs to look up documentation when you can just hit CMD+B and jump into that library's source code? Oh the time I wasted...
kaffeinecoma··on Sublime Text 2.0 Released
I think that if you're using Java you might as well get some benefit out of the static typing- use an IDE that can put it to good use for source navigation.

I'm a long-time Java programmer who's spoiled by tools like Intellij, and I cry every time I want to delve into a Ruby library that my code uses, but can't do so because the editor (even Intellij/RubyMine) can't find it. Oh, you want to jump into the "foo.open()" method? Here are 58 choices- pick the one that looks like it might be the one you want.

kaffeinecoma··on Sublime Text 2.0 Released
I found that, but it cmd+r (I'm on a Mac) seems to only show you hits in the current file. The thing I'm interested in doing is clicking on a call to foo.bar() and have it bring up Foo.rb, right on the "def bar" method.

Also a lot of the time the thing I'm trying to navigate to is library code that's referenced via require, vs something that's actually in my codebase proper.

kaffeinecoma··on Sublime Text 2.0 Released
I don't- but for discoverability purposes, I'm more likely to find success by clicking on a method name than by randomly pawing keyboard shortcuts. Once discovered, I'll happily take the shortcut.
kaffeinecoma··on Sublime Text 2.0 Released
As an Intellij user (and Emacs way before that) I'm trying to give this a chance, but I see no way to click-navigate through source code. Am I missing something? I tried installing SublimeCodeIntel, and that lets me (occasionally) navigate to symbols in the current file. But I don't seem to be able to click through to symbols defined in other files/classes. Am I missing something fundamental, or is this strictly the domain of the IDEs?
kaffeinecoma··on New York to London in an hour - by train
My first reaction to this was that they'd never be able to engineer a sturdy/safe tube across the ocean. Then I thought about the transatlantic telegraph cable (http://en.wikipedia.org/wiki/Transatlantic_telegraph_cable)- it was first built way back in 1858. That blows my mind.
kaffeinecoma··on Study of 49 programmers: static type system had no effect on development time
No, it's not irrelevant. If you're trying to figure out what gets passed up the call stack, you need to trace it through. Being able to plug in your own values into a single method call via the REPL isn't helpful if you're trying to analyze what really happens when it runs. Either you need to run it under a debugger, or manually trace it through. In a static language you just have to read the type signatures.
kaffeinecoma··on Study of 49 programmers: static type system had no effect on development time
> a REPL. Just give it a whirl and see what you get.

In a large system you might have to jump through a lot of hoops to get an accurate result from the REPL. What if the thing you're trying to puzzle out is 20 call levels deep? As a new Ruby dev I struggle with this.

kaffeinecoma··on Study of 49 programmers: static type system had no effect on development time
I wonder whether they are actually measuring the right thing here. I think the real value to static typing is not so much the initial development of small (tiny, in this case) programs, but rather large systems that have long lifetimes and maintenance periods involving multiple developers.

I just started diving into Ruby. I'm about a month into it, after having spent over a decade doing Java and other static languages. The productivity boost for new development in Ruby is very real; I converted a 10K LoC java program to < 1K LoC Ruby in about a week, despite not knowing the language well at all. It almost feels like a "runner's high" to be so incredibly productive. But there are several things that I find frustrating about dynamic typing.

In dynamic languages it's very hard to navigate existing code and libraries. In Java, you can click on a variable and instantly navigate to its declaration and class definition. In a well-configured environment (say Intellij + Maven) you can even click on imported libraries and drill right down into their source, even the JRE. It's totally natural to know exactly what a method takes as arguments, and what it returns.

In Ruby it always feels like a mystery. When you ask the IDE to jump into a library, it pops up a dialog of 20 choices and makes you guess which one to open. It feels like the old days of running find/grep over the source tree. And if you somehow manage to guess correctly and find the code you're looking for, you often have to read the comments (if they exist) to figure out what it expects/returns. I'm sure a lot of this is due to my inexperience, but code navigation is really painful in a dynamic environment. I can only imagine how hard it would be in a non-trivial project after a couple of years with a few different devs.

Of course refactoring is way better in a static environment. Even if you throw out the IDE, you can more or less instantly find where a piece of code is used by simply renaming it and recompiling to see what breaks. In Ruby you have to rely on tests for that kind of thing, instead of getting it for free from the compiler.

Don't get me wrong- I'm excited about Ruby, and I think dynamic languages will play a major role in the rest of my career. I just wish that code navigation could be better.

kaffeinecoma··on LibreOffice 3.5.4 released with up to 100% performance improvements
I've always had a problem with this too. If a product is 80% off, you pay 20% of the original price; 100% off and it's free. If a product is 80% faster, it runs in 20% of the original time. If it's 100% faster, it runs in zero time.
kaffeinecoma··on Why I'm Moving Away from the Play Framework
Re Wicket: have a look at PropertyModel and CompoundPropertyModel. You'll lose a bit of type safety, but it will seriously cut down on boilerplate code. In particular it helps map wicket:ids to your Java bean hierarchies by following simple conventions.

Somehow I managed to use Wicket for well over a year before realizing the benefit to this approach.

kaffeinecoma··on I Wasn't Paid
Interesting approach, but what stops the client from using this to his advantage? "Hmm, if I fail to pay, the code becomes open-source, and then I can use it for free."
kaffeinecoma··on Show HN: I'm tired of corrupt US politicians, so I created this
It was meant to be a parody.
kaffeinecoma··on Search: .lenght - Github
Yes, it was exactly like that- lots of code had grown around the "bug", and it was not immediately obvious what other software had come to depend upon it. "Little hairs", as Joel might say.
kaffeinecoma··on Search: .lenght - Github
The whole software infrastructure was a scary house of cards. They were afraid that there was unknown code that might be depending on it. For example RESTful services in other departments that were not under our immediate control.
kaffeinecoma··on Search: .lenght - Github
Yes, but it would raise the exception at run-time, and only when the particular path is taken.
kaffeinecoma··on Search: .lenght - Github
In a static language this would be flagged as an error. I assume something less than ideal happens in languages such as Ruby.

I once worked at a company where a very early piece of code had a typo "properites" instead of "properties". This misspelling became institutionalized, and was used throughout the codebase because it was deemed too expensive to fix. And this was with a static language (with good IDE refactoring support)!

kaffeinecoma··on Why 37signals Doesn't Hire Programmers Based on Brainteasers
I didn't know what it was either, but I googled it and found a simple explanation on Wikipedia. I'm sure the interviewer would at least give you that basic background information ("Pascal's triangle is a structure in which each number in the triangle is the sum of the two directly above it.")

I don't think the point is that you would be expected to know every historical abstract concept, but rather that given the basics of one, you could write code to implement a data structure around it.

kaffeinecoma··on Google’s Jaw-Dropping Sponsored Post Campaign For Chrome
I switched to Chrome about a year ago for its performance, and now I'm about to go back to Safari for exactly the same reason. What happened to Chrome performance on OSX Lion? Why does it scroll like molasses?
kaffeinecoma··on There's no shame in code that is simply "good enough"
Please forgive this comment which is totally unrelated to the article, but does anyone else have trouble scrolling this page in Chrome on OSX? I often encounter pages that give Chrome fits, but I can't quite figure out what's causing it.
kaffeinecoma··on John Carmack on the importance of Static Code Analysis
Sure I could have found all of the references easily. That's one of the reasons I still prefer Java over a dynamic language- my IDE can tell me instantly (option key + F7) where a particular object is used in the entire codebase. I just wasn't careful enough, because hey, what could possibly go wrong- it's a stupid boolean, right?
kaffeinecoma··on John Carmack on the importance of Static Code Analysis
It was a couple of years ago and I no longer have access to the codebase, but the business logic of that piece of code called for a boolean.

The problem was they they also (ab)used that field for the lock. It either should have been a separate field (of type Object, as you suggested) or use the existing Boolean, but call it "lock" or "monitor" or somesuch.

kaffeinecoma··on John Carmack on the importance of Static Code Analysis
I once caused a serious, halt-the-enterprise production bug by "fixing" a problem found by FindBugs. This was Java code, something along the lines of:

  Boolean b = new Boolean(true);
The static analyzer correctly identified this as an unnecessary new object creation (style guides and good sense recommend you simply use Boolean.TRUE). I "fixed" it, and went on my way.

Little did I realize that this variable was actually a lock, and there was a synchronized(b) block later (and much deeper) in the code, which I effectively eliminated by removing the new.

In my defense I feel that the real bug here was that of documentation- had the variable been named something like "lock" I'd have understood immediately what was going on. But that doesn't make you feel much better when your team's been up all night fixing your bug!

Moral of the story: your codebase (especially if it's an older one) might actually be depending on its "bugs" for proper behavior. Think (and test) hard before applying suggested changes from static analysis.

kaffeinecoma··on The real reason you can't hire developers....
I think 115K for a quality, senior engineer is not unreasonable (even for a remote job). I received an offer for a pure-telecommute job (which I declined) for slightly above that figure a month ago.
kaffeinecoma··on IntelliJ IDEA 11 is Out
Intellij falls squarely into that category of software that I'm always happy to pony up money for, year after year. The product is excellent, and support is just incredible.

A few times a year I'll run into an issue and fire off a support request. "Serge" usually responds within minutes, either with helpful guidance or an offer to create a bug report (that actually gets fixed). This same guy has been answering my support requests for something like 4 years now... incredible.

kaffeinecoma··on IntelliJ IDEA 11 is Out
If you haven't already reported this as a bug I'd encourage you to do so. The Intellij folks are incredibly responsive to bug and problem reports.
kaffeinecoma··on Poll: Do you get spammed by tech recruiters?
I also get about 5 per day, and more than that if I've tweaked my profile on LinkedIn or similar sites recently.

Dear recruiters: adding "Urgent requirement!!!" to the subject line, or a "X-MSMail-Priority: High" header really does not make the offering more interesting to me.

kaffeinecoma··on Poll: Do you get spammed by tech recruiters?
I get this "let's meet in person" come-on by recruiters all the time, and find it really creepy. When I ask why, they say something like "I like to form a personal relationship with all my potential clients" or some BS like that.

What are they really trying to do? Is this some way for them to have "dibs" on you, in case you somehow manage to get an interview with one of their client companies independently?

kaffeinecoma··on Ask HN: Freelancer? Seeking freelancer? (November 2011)
SEEKING WORK - Remote (Cleveland, USA based)

Experienced Webapp dev: Java, Wicket, Lucene/SOLR, Hibernate, Google App Engine, etc.

I built http://appgravity.com, a search engine for Android Apps that currently gets ~65K pageviews/day.

Other work samples & contact info available at http://armhold.com/portfolio.

← PreviousPage 4 of 9Next →