HNHacker News
TopNewBestAskShowJobs

jsankey

1,088 karma · joined August 6, 2009

Just another programmer.
submissionscomments
jsankey··on Ask HN: What's the deal with start-ups named ly?
I have a theory of conservation of "ly"s. They seem to be disappearing quick ;) from adverbs in spoken English, so I figure they have to pop up somewhere else.
jsankey··on Apple changes words in order to change the debate
I have indeed installed apps this way. I admit that most apps I've installed are from the market, although that's missing the point. Frequency doesn't matter as much as the actual ability to make the choice independent of Google (or indeed any single corporation).

If you think this doesn't matter in practice, consider Apple vs Google Voice on the iPhone. Apple rejected (or "didn't approve") voice, leaving iPhone users with no way to access it. Users would be better off if Google could have hosted a Google Voice package external to the app market.

jsankey··on Apple changes words in order to change the debate
Although I agree with the general point that Android is not totally open in an absolute sense, I think you too easily ignore the ways in which it is open relative to the iPhone.

First and foremost, I don't have to jailbreak my phone to install apps not "approved" by Google/the carrier/whoever. I can download an APK from anywhere.

Secondly, the code is open. This does matter in practice, because there are people who can and do take advantage of this to create modified versions (e.g. Cyanogen). If Google decides not to take a particular direction, but enough people want it, it can happen.

Thirdly, it's not tied to one hardware manufacturer. Apple may make great hardware, but they attack a certain target market, which not everyone fits into.

Finally, although your argument about carriers has some truth, it misses a couple of points. It's not like iPhone users are exempt from all carrier restrictions - why can I tether via my Android phone yet iPhone-owning friends cannot? And there is nothing about Android that forces you to use a certain carrier (ironically, in the US, it's iPhone users that have no choice of carrier). I purchased my phone on T-Mobile in the UK, now I use it on another carrier in Australia, no problem.

jsankey··on Pythonist's thoughts on Clojure after 3 days of learning and coding
I work in Plain Old Java most of my day, but have side projects in both Clojure and Python. I agree with the consensus here about the error traces in Clojure, but I'd like to point out this is not inherent in the platform. When I'm programming in Java, I find the stack traces to be a massive advantage in diagnosing issues, as they present a lot of detail right down to the location of the problem (Python is similar in this respect). Irrelevant plumbing may bloat the traces a bit, but usually quite separated from the important lines, and having too much information is rarely an issue for me.

I think the problem with Clojure (and perhaps Groovy too), is that the compiler/runtime for the language invades the traces. If you look at the example given in the original post, almost the entire trace is Clojure plumbing. That's the real issue, and it's not the fault of the Java stack.

jsankey··on Ask HN: What are the websites that you rely on but have horrible UI?
Yep. The NetBank project also seems to have involved every second developer in Sydney at some point or another.
jsankey··on Ask HN: What are the websites that you rely on but have horrible UI?
Lucky you don't use my bank: it might just tip you over the edge :). Not only does the back button not work (most of the time), but they've also specifically added back-button detection so they can tell you why:

For security reasons you’re unable to use the Back, Forward and Refresh buttons in your browser.

Uh, ok...

jsankey··on No Java 7, The End Game
Google's Dalvik VM is specifically designed for mobiles. Presumably a lot of the engineering trade-offs made in light of that would make Dalvik relatively weak on servers. So I'm not sure Dalvik would be a great starting point for Google to fork Java.

Having said that, Google are heavily reliant on the Java platform, so they must have at least considered how they can protect the platform if necessary. Could they fork OpenJDK? Or at least support a fork? They certainly have the resources to do it, and Oracle's early moves don't bode well for a cooperative solution, so I wouldn't be surprised. Perhaps they will use the current litigation as a test re: the possible patent issues, although by the time that is resolved it may be too late to make a move...

jsankey··on Rethinking JavaScript for-loops
A neat collection of tricks, but I'm not sure I would ever actually employ any of them (except perhaps storing the length -- although I'd like to check that it makes a difference first). There just doesn't seem to be a major advantage to any of the tricks, and they all come with some cognitive cost to the reader (and in some cases greater costs, e.g. failure on arrays with falsey values).
jsankey··on Some clients are evil and their work is toxic
If communication is solved then it can work well.

That's a big if. For most projects, the work is not that difficult in a technical sense. The hard parts are accurate communication and managing change over time. IMO these factors are much more likely to cause project failure than some pure technical hurdle.

jsankey··on My VC Year - Joel Spolsky @ Business of Software
Good point. The more believable explanation is this transcription misrepresents the situation -- the fact that it was shocking should have made me question it.
jsankey··on My VC Year - Joel Spolsky @ Business of Software
When the investment was made, lots of people had shares in the business. They had not done the paperwork on the shares etc and had not realised that just telling people they would be looked after to avoid paperwork would create big headaches.

Wow, I'm pretty shocked that someone who already owns and runs a business would not take care of something so basic when setting up a new business.

jsankey··on Good Code Tells the Truth
Agreed. Although the post makes several good points, there isn't really a key insight there. The author fails to convincingly boil it all down to a single concept of "truth". Rather, it feels the term is just stretched this way and that to try and pull together separate ideas:

"That means brevity. As Seneca said, “Truth hates delay.”"

"An unnecessary global variable is not just an invitation to "bugs; if it’s overexposed, it’s lying"

"If it’s a playlist, call it a playlist. Don’t call it a set. Tell the truth."

The connection here is shallow: the author has merely found a way to work truth into each description. Maybe it's better to just accept that there are multiple axes of goodness (which further makes us realise sometimes they are in conflict).

jsankey··on Developers blog post: No, I won’t do it. It would not be professional.
It's not unprofessional to make a compromise in order to meet a short term practical goal. It is highly dependent on the context and the type of short cut taken, but some quick fixes are simply the most pragmatic option.

Great engineers, even in other fields, aim for the best results using constrained resources. Compromise is a key skill.

jsankey··on Developers blog post: No, I won’t do it. It would not be professional.
It would be neat if there were some way to make this "debt" more visible to non-developers. At the moment it could be easily forgotten (by non-developers) after the initial deadline is hit, leaving no time to pay it back before the next "crisis" emerges.

The hardest part would be having some way to quantify the debt. But you could, at least, make a record of the corners cut, and make any accumulation extremely visible to management. Does anyone know of anything like this?

jsankey··on End of the Road for Xmarks
Fair point, but how about this: they've committed to 3 months anyway, so why not try charging for 3 months? Just don't touch the money coming in during that period. If they reach the end of that time, and it's not working, issue refunds and shut down. There is some cost to this (transaction fees etc), but seemingly minimal compared to other running costs they've already committed to (because if it fails, the number of transactions will necessarily be low).

They might struggle to get people to sign up when there is doubt about the service surviving. But that cat is already out of the bag, and as I alluded to earlier they could also play this to their advantage (charging now is not a money-grab, it's simply a matter of keeping a valuable service viable).

jsankey··on End of the Road for Xmarks
with the emergence of competent sync features built in to Mozilla Firefox and Google Chrome, it’s hard to see users paying for a service that they can now get for free

After taking so many knocks, it's easy to be disheartened. But why not at least give this a go? It doesn't involve a large engineering investment - just charge for what you already offer! When the alternative is shutting down, where existing users need to move on anyway, you might as well. Those users might appreciate the value of what they have now that it is about to disappear...

jsankey··on Going Freemium: One Year Later
Great to read about success the "hard way" -- over the long term, and without using free as a "hook" to bring in the initial users. And despite taking a slow and patient route overall, they would have failed faster (if the idea crashed) than if they had have gone freemium from the beginning.
jsankey··on I’m done building Facebook apps for clients
You think "rapidly changing apis" is "right from microsoft's playbook"? Microsoft has been known to abandon a platform (VB6 being the prime example), but they have also put tremendous effort into preserving compatibility in their APIs. So while they may have introduced new APIs over time, they've also shouldered the massive burden of keeping the old way working for many years. I would even say they realised this was a vital component in maintaining their dominance: the sheer number of applications that work on Windows.
jsankey··on I’m done building Facebook apps for clients
we actually copy verified bugs from Bugzilla into an internal bug tracking system, and we then use that internal bug tracking system to drive bugs to resolution

What an utter waste of effort! For more time spent doing grunt work, you give slower and less complete feedback to your customers (platform developers in this case). There may be some information they don't want in a public tracker, but I'm betting it's:

- a lot less information than they think; and - much easier to manage in a different way, as opposed to maintaining two bug databases!

jsankey··on Ask HN: Are there any design-led frameworks out there or should I create my own?
Are you thinking of having a library (or even market) of these designs, or is your goal more to allow each site builder to personalise their site in fine detail?

If you are thinking of the latter, or both, maybe you should consider having a couple of layers of customisability. It would be nice to allow simple customisations (colors, logos, even basic layout) without getting into templates. Perhaps with a GUI, but possibly even just something standard like CSS. Even as a technically minded person, I would balk if I had to learn some custom syntax to achieve things like this.

Then underneath you could have a full templating system. If users want full control, they should understand it will come with a learning curve. Even for this, consider starting from a known base (e.g. Django templates), and just building convenient constructs that fit your site (e.g. custom tags for common tasks).

jsankey··on The day that changed the way we see software (1983)
I wonder how many people who read this at the time wrote it off as unrealistic. Although there are several stated goals that have still not been reached, the difference between the goals and reality are small in the scheme of things. (Much like the difference between any original plan and the outcome -- just usually plans are not of this scale!)

You have to hand it to the few that believed, and put in the work to reach critical mass...

jsankey··on JSRs: What Lies Beneath
The example of the complication involved in making Strings in switch statements efficient intrigues me. The point is that implementations are more complicated than they might first seem. But it looks in this case like the additional complication was (in part, at least) a choice.

I don't see why the initial implementation couldn't be simpler. Wouldn't the simple implementation have similar performance to the status quo (i.e. using if statements), with the immediate benefit of cleaner syntax? In fact, why should this level of optimisation be part of the JSR at all? It sounds like something the JVM implementers could optimise without any change to the way the switch works. Tying it to the JSR makes the spec more complicated, delays an initial version and forces this optimisation to be prioritised over others.

jsankey··on Review my mapping startup idea
Not necessarily the best example:

http://www.time.com/time/magazine/article/0,9171,1916286,00....

(Building a Media Empire Around I Can Has Cheezburger)

jsankey··on Show HN: my regular expression example match generator
My CS honours thesis involved deriving regexes (well, DTDs for XML documents, but it is essentially the same problem).

The quality of the results depends a lot on the amount and quality of the input (how well it represents what you are really trying to match). A single example string is unlikely to get you far - you would certainly need multiple matching examples. So I think this approach works best when you already have an example corpus to work from, rather than providing input manually. If you're going to spend effort providing a lot of input, then you'd probably be better off spending at least some of that effort in providing hints or possible regex answers.

Further, there are many possible regexes that would match an input set, so the algorithm also needs some way to evaluate them and choose the better candidates. In my case I used some ideas from information theory (such as MML), which actually worked reasonably well. But this is a computationally hard problem, so even with an objective measure of the optimal regex you won't necessarily be able to find it.

jsankey··on Who are you coding for?
I like what the author has to say about commenting, as a counter-point to those that think comments are a sign of bad code:

... I think by focusing on this communication, the code becomes inhertitly (sic) better, because you think more deeply about the abstractions and layering you are doing ...

Explaining a problem (or solution) definitely helps me understand it better (or even realise that I don't fully understand it). Interestingly, you might find that the act of commenting refines your code to the point where some or all of the commentary becomes unnecessary - it's served its purpose. So sometimes the feedback loop might have a few iterations to get to the most clear and concise form of code + commentary.

jsankey··on Confessions of your worst WTF moment
This reminds me of uni days, when I had a habit of compiling a quick snippet to a binary called "test", and would be left mystified when I ran it and it just exited immediately. I hate to admit how long it took me, on multiple occasions, to realise I was running /usr/bin/test (more familiar to me as "[").

Eventually I wised-up and dropped that habit :).

jsankey··on Cognitive slavery
How does the author propose to start financially rewarding power users in any case? What sort of perverse incentives would this create? It seems to me that such rewards would conflict with providing real value, so I'd be interested to hear how this would be avoided.
jsankey··on Cognitive slavery
Precisely. The author uses the term "slavery" while completely ignoring the fact that the users are choosing to contribute their time and energy. Clearly they believe it is worth it.
jsankey··on What do you do when you get stuck?
Lifted from one of my old blog posts:

- Pros and Cons: when I have too many answers, I try to make it objective by drawing up the pros and cons and seeing where that takes me.

- Simplify: like a lot of developers, I can be prone to over-analyse when I am stuck on an issue for a while. So I remind myself to try simplifying the problem. Often by dropping a layer of flexibility the problem is a lot easier to solve. If I really need the flexibility, I can add it later when I have greater understanding.

- Take a Break: sometimes I’m just trying too hard, and need to step back. I work from home, so a short walk outside is a welcome break. Actually getting away from the computer relaxes the grey matter. The vitamin D doesn’t hurt either.

- Explain the Problem: very often I find that while I’m explaining the problem, I see it in a different way. If not, the input of another person usually throws a different perspective on the issue. If there’s nobody to bother immediately, just writing down an explanation can help.

- Switch Gears: this works when I’m getting frustrated by a lack of progress. By switching to a small, unrelated task, I can Get Something Done and develop some new momentum. This also serves as a break from the original problem.

- Write Some Tests: I don’t practice TDD all the time, but when I’m stuck trying to understand how things work, writing some tests first can be very illuminating. Having tests in place also gives gratifying feedback as I finally start to crack the underlying problem. I find this works best for really tough technical issues, where good test coverage is even more important than normal.

- Write Some Code: if I have a partial solution, even if I know it is ugly or inadequate, sometimes I’ll just plow ahead anyway. Actually working through a throwaway implementation is better than standing still, as it turns up all the little details. I’m happy to throw that code away since I know the alternative was not getting anywhere.

jsankey··on Ask HN: I have users, I have traction, How do I get paid?
I'm in Australia too, although I don't accept recurring payments myself. However, I do make a recurring payment to a New Zealand based company. And by logging into the PayPal Australia website I see an Australian freecall (i.e. 1800) number that I can contact to help set up recurring billing. So it seems things may have changed.

That said, it would be best for people to check more thoroughly first, to avoid any wasted effort!

← PreviousPage 6 of 10Next →