Crowdfunding Law Will Turn the Start-Up World Upside Down - <AUTHOR> http://allthingsd.com/20120315/the-new-law-that-will-turn-the-start-up-world-upside-down-crowdfunding/

<comment><USER2> This seems like it has a lot of potential to disrupt the current Angel investing landscape, much as Angels disrupted the VC investing landscape over the past 5-10 years.

Unaccredited investors, friends, and family could invest into a pre-angel rounds in the sub-$500k region, with 'more sophisticated' angels investing around $500k to $1m range, and the 'most sophisticated' VCs investing in $1m+ rounds.</comment>


Why I Hate Test Driven Development - <AUTHOR> http://www.robg3d.com/?p=949 <comment><USER2> Reminds me of what Edsger Dijkstra wrote, "Let me start with a well- established fact: by and large the programming community displays a very ambivalent attitude towards the problem of program correctness. A major part of the average programmer's activity is devoted to debugging, and from this observation we may conclude that the correctness of his programs —or should we say: their patent incorrectness?— is for him a matter of considerable concern. I claim that a programmer has only done a decent job when his program is flawless and not when his program is functioning properly only most of the time. But I have had plenty of opportunity to observe that this suggestion is repulsive to many professional programmers: they object to it violently! Apparently, many programmers derive the major part of their intellectual satisfaction and professional excitement from not quite understanding what they are doing. In this streamlined age, one of our most under-nourished psychological needs is the craving for Black Magic, and apparently the automatic computer can satisfy this need for the professional software engineers, who are secretly enthralled by the gigantic risks they take in their daring irresponsibility. They revel in the puzzles posed by the task of debugging. They defend —by appealing to all sorts of supposed Laws of Nature— the right of existence of their program bugs, because they are so attached to them: without the bugs, they feel, programming would no longer be what is used to be! (In the latter feeling I think —if I may say so— that they are quite correct.)" -- From EWD288

<comment><USER3> Next, tell us why goto is bad.

<comment><USER4> It's not necessarily bad, for example, see how it's used on the linux kernel (+/- like an exception handler)

But of course, having a mess is bad and goto makes it really easy

</comment></comment></comment><comment><USER5> I tend not to like TDD for a different and serious reasons. TDD seems to encourage bad trial and error programming practices where developer blindly modifies the code until it passes the tests instead of reasoning about correctness based on algorithms and specifications. TDD does not consider that even a program that work correctly in the current environment for any possible set of input data is still incorrect if it violates contracts defined in APIs and protocols. Remember how the correct update to the memcpy implementation in glibc broke programs that incorrectly used it for overlapping memory regions.

<comment><USER6> My problem is more that I never know what to test. I mean, suppose I have some nontrivial code -- one of my latest random projects contains this:

        def permute(tpl):
            """Gives the set of valid permutations for this tuple."""
            if len(tpl) == 0:
                yield ()
            else:
                for t in permute(tpl[1:]):
                    for n in range(0, len(t) + 1):
                        yield t[0:n] + (tpl[0],) + t[n:]

It's a recursive generator-driven permutation engine. Technically I suppose the order of the permutations doesn't matter, so long as they are all distinct and there are n! of them. Is that what I should be testing? That is, should my test code read:

        permute_test = tuple(permute((1, 2, 3, 4)))
        assert(len(permute_test) == 24)
        for i in range(0, 24):
            assert(len(permute_test[i]) == 4)

        for i in range(0, 23):
            for j in range(i + 1, 24):
                assert(permute_test[i] != permute_test[j])

...? And if so, how does that help me write the original function? Or am I supposed to test a base case and one or two recursion steps, so that it helps me write the function, but "hard-wires" a particular order?

<comment><USER7> You're right to want to avoid duplicating your code inside your test. In this case, I'd work out some simple permutations and test against those values, sorting the results so order doesn't matter.

        assert(sorted(permute((1, 2))) == [(1, 2), (2, 1)])

</comment></comment></comment><comment><USER8> I hate TDD because I have to actually debug them, sometime more so than the actual app themselves. Also, there's the issue of slow TDD suite, which means you have to optimize them or otherwise it will slow down your development pace.

TDD is only good when it provide more benefits than its negative(debugging time, time waiting for it to run, time spent ripping out code).

That being said, it's better than 0 test. Just don't get crazy in writing testcase for every minute scenarios.

<comment><USER9> Unless of course you are writing software that goes into a pacemaker, in which case I would want that tested like crazy for every possible scenario you can imagine including automated fuzz testing. Same goes for databases and quite a few other classes of software.

In short, use common sense.

Personally I love TDD. Not because of the tests, but because the resulting code IS testable, and generally testable code is maintainable and easy to read.

<comment><USER10> If I knew one pacemaker was developed with TDD and one without it I would probably go for the one without it. Most programs are fine on the Happy Path, and TDD seems like it's focused on expanding the Happy Path vs actually writing correct software.

This could just be internal bias, but without TDD programmers more focused on the possible error conditions. I would rather see:

      If ((a/2-1) + (b/2-1)) > (largestInt/2-5))
      ... do something
      vs.
      A large try catch block.

Arguably the second is just as safe, but it's the test's you don't think to run that tend to end up as production bugs and good tests require a level of paranoia which is more important than methodology IMO.

</comment></comment></comment><comment><USER11> You have got to be kidding.

Debugging code (especially others') is one of the most heinous activities on this planet. I have lost years of my life fixing what others have created broken (intentionally and otherwise). Years and special occasions that I can never get back because some moron's mission-critical code decided to break, with the ultimatum that no one could leave for $(Holiday of Choice) until fixed.

It's because of having to debug that I left development and went into a different area of technology. TDD is the only reason I even consider doing ANY development now.

People who enjoy debugging are the ones I hope work themselves into obsolescence.

<comment><USER12> Personal time lost to fixing problems can always be annoying. However, not all debugging situations are like that.

There is something terribly satisfying about digging into a problem on a production system that rears its ugly head once a month (requiring a system to be rebooted), brainstorming, setting up test scenarios, getting the bug reproduced, finding the source of the problem, fixing it, testing it and seeing that it has been nailed! (oh, and equally satisfying is seeing the days of uptime on said machine thereafter measured in 3 digit numbers :-D)

And the problem I have in mind _was_ someone elses code. I still enjoyed every minute of the debugging process.

</comment></comment><comment><USER13> I feel this myself.

However, I have always had the most fun debugging other people's systems. Because under those conditions I'm always billing by the hour, and when I find the problem it's never my mistake.

For my own code, though, I prefer TDD. And these days I still get enough debugging exercise when dealing with third-party systems. Facebook API, I'm looking at you here.

</comment><comment><USER14> Oh look, the "bait and switch" style of linkbait.

</comment><comment><USER15> I can't be the only one who thinks this is meant to be sarcasm?

<comment><USER16> Yeah, it's very subtle. He's essentially saying that the TDD approach has made his code is flawless, and he is incapable of producing bugs.

<comment><USER17> Ahh.. I must lack some sense of humor.

<comment><USER18> Don't worry, you're not alone. I, for one, congenitally lack a sense of humor myself.

</comment></comment></comment></comment><comment><USER19> Some people should debug their irony detector code as this is clearly irony. Great irony :)

</comment><comment><USER20> Great article. Between TDD, dotting constraint checks all around my code and actually knowing what I want before I write it, I rarely have to use any debugger.

With respect to people feeling like TDD is a waste of time, this thought is immediately extinguished the moment you see an accidental regression get flagged instantly, resulting in you NOT having to spend hours finding it.

Debugging is one of those tasks that you don't really want to have to do either. If you're debugging all the time, you are doing things wrong. I don't find debugging fun - I find problem solving fun (not problems I've created!).

</comment><comment><USER17> It is easy, don't TDD every project.

Wasted some time on TDD before, slow, like robot, generate tons of code that never be shipped. Nowadays, I just read through the code like it was written by another idiot, understand it, and you know what, I am actually refactor it more often, and keep improving it even though it doesn't fix a known bug. You have better understanding of your code, and then when something goes wrong, it is pretty easy for you to figure out what could be the cause. However, this approach doesn't fit for thrown-away type of projects.

</comment><comment><USER21> If he's really looking from the satisfaction from debugging as more of a self- morale booster, why not contribute bug fixes to an open-source project? Find a major project, open its issue tracker, and start bug hunting!

I'm sure the maintainers of whatever project he picks will love having someone around to fix bugs, and he both gets the enjoyment he "misses", and gets to hone some debugging skills.

</comment><comment><USER22> I can _kinda_ relate to having fun fixing bugs, but I think (i addition to some sarcasm) the author is kinda romanticizing debugging. 90% of the time it's no fun, feels like a waste of time and doesn't really provide much satisfaction. Once in a while, though, you do find a really interesting bug and fix it and it feels pretty great!

<comment><USER23> Creating tests usually feels like a waste of time as well.

<comment><USER24> Execute all these test cases by hands 10 times a day and feel the difference. You will enjoy automating after that.

</comment></comment></comment><comment><USER25> "I have no problem saying that I write good code" - funny, read about <http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect>

</comment><comment><USER26> I can relate to this sentiment. I've always described software development as moments of great frustration followed by great satisfaction. I just love the feeling that comes after you've squashed a nasty bug.

</comment><comment><USER27> These programs I write, I curse them. So clean and faultless, so hideously optimized. My bugs, my passion, so close at hand, yet out of reach, squandered in the face of my boundless talent.

</comment><comment><USER28> Sweet surprise. I jumped in to see the problems and rather found a positive side. @binspace rightly says, "Humor in programming considered hardful" :)

</comment><comment><USER29> Debugging is not fun when your program is leaking memory and you're not sure why, and existing code tools don't tell you why. Especially if you're writing drivers. Sure, stepping through python code might be fun, but not low level c/c++ code where you're in a call stack that's 20 levels deep and half the time you don't have source for the parts the code breaks or asserts on.

<comment><USER30> What about the level of excitement you get when you find a bug in an underlying Fortran library linked in by code building tools because of a random header file someone included without thinking too much?

</comment></comment><comment><USER31> Spend your new found time on creating new projects to solve real world problems !

</comment><comment><USER32> _This is a good thing, isn't it? So why do I hate TDD?

Because debugging is fun. There, I said it. I love debugging. I think lots of clever people like debugging._

I've been doing embedded development for quite some time, so you know, flipping bits like a boss, a shitload of open terminals, lots of cables everywhere all the stuff that makes you look like you know what you're doing but debugging is not fun, it never was, it's a huge waste of my time.

You know what's fun? Having a product that works.

Debugging is code monkey job, you don't do it because you're smart, you're doing it because you were foolish.

To love debugging is to not love to code.

<comment><USER3> I debug because I'm smart, and I enjoy it, and I frequently find bugs that I didn't know existed by seeing inside a frame as it's executing. Debugging is a crucial skill in many fields, _particularly_ embedded work (which is the irony in your comment), and the insight from breakpoints and a couple afternoons of digging is unique among our tools. I hate sweeping generalizations of how programming should be done, regardless of what they are.

Watch this sweeping generalization:

If you don't love debugging, I don't think you're a seasoned or valuable programmer.

<comment><USER32> If you love debugging, I don't think you're a seasoned or valuable programmer.

<comment><USER33> That's quite a generalization. Debugging does not necessarily mean debugging your own code: you might have stumbled upon a compiler bug, or a timing bug with your hardware, or you may be trying to buffer overflow some massive proprietary database so you can take over the world. All of those tasks will involve lots of time looking at memory addresses and hex dumps, but none of them mean the person doing it is a bad programmer.

<comment><USER24> Why you need to look at them manually? Computer will compare all that much faster.

If you are good programmer and bug is non-trivial, you will create code to catch bug much faster than you will catch it manually. Moreover, you will be rewarded next time, because your code will be already written and ready to use.

<comment><USER33> Let's call it "exploratory programming" instead of debugging. Yes, your computer will run unit tests. No, your computer will not notice that memory is being corrupted because of a particular sequence of instructions emitted by the compiler. To solve a problem, you have to understand it. And if you're writing code to solve a problem that's well-understood, you should have just downloaded the library instead.

<comment><USER24> Did you ever saw how program crashes when run, but works fine in debugger (or vice versa)? What you will do in such case? What you will do _after_ few such cases?</comment></comment></comment></comment></comment></comment></comment>


ARM stock rises 25%, Apple bid rumours resurface - <AUTHOR> http://www.google.com/finance?q=LON:ARM

<comment><USER2> I wish google finance had a setting to 0 the y-axis, so you can appreciate the percentage increase by eye. (or is there a setting for that somewhere?)

But you're right: 17% up in 2.5 hours means there must be some news about... (why don't you put 17% in the headline? The current title is too vague to grab the attention it deserves - and someone here probably knows _EDIT_ much better).

 _EDIT_ whoa. It spiked to 31% up, now settling around 25%

Seems to be rumour of apple buy: [http://www.lse.co.uk/FinanceNews.asp?ArticleCode=hu9stjtv6kn...](http://www.lse.co.uk/FinanceNews.asp?ArticleCode=hu9stjtv6knyciy&ArticleHeadline=ARM_Holdings_jumps_bid_talk_from_Apple_supports)

Another report [http://www.marketwatch.com/story/arm-holdings-imagination- te...](http://www.marketwatch.com/story/arm-holdings-imagination-technologies- surge-2010-06-10) which notes a similar surge in Imagination Technologies <http://www.google.com/finance?q=LON:IMG> whose tech is also used in " _tablet computers_ " hmmmm... might not be apple?

 _EDIT_ sigh. now only 10% up. oh well, that was exciting for a while. Might still happen of course.

> a spokeswoman for ARM said it had not received an approach and a takeover > from Apple would not make sense. > <http://www.reuters.com/article/idUSLDE63M18320100610>

<comment><AUTHOR> The Apple bid might be real? A simple rumour typically doesn't merit a 25% rise.

<comment><USER3> > The Apple bid might be real?

Feels weird. What sense would it make precisely? ARM only does basic code design, they already have a fabless constructor or two, what would Apple gain by buying ARM, shutting it down and making designs only for Apple themselves?

<comment><USER4> Control of the chip company that produces the silicon (design) for just about all mobile devices?

And symbolically ARM would be folded into one of the 3 companies that created it originally.

<comment><USER3> Arm does _not_ produce silicon, they produce designs.

And again, what would Apple gain from that control, the right to withhold new ARM generations from e.g. HTC? Unless the Apple execs have gotten _very_ stupid recently, they probably understand that not only would the EU and the US regulatory agency would pay them a visit if they even initiated the move of buying ARM, doing that kind of withholding would land them in scorching hot water.

It's one thing to have strange practices when you're the second or third player on the smartphone market (and basically non-existent in the wider mobile phone market in terms of number of units), it's another one to have anti-competitive practices when you have a monopoly on mobile chips.

And ARM most definitely has that, there are few if any other architecture for mobile/embedded systems at all, and ARM has pretty much all of the market for mid to top-end embedded stuff.

<comment><USER5> Maybe they have some nice IP and few patents that Apple would like to use against the A4 or future chip designs.

<comment><USER3> I'm sure they have nice IP, but the point is that IP is embedded in the designs they produce which anybody can license, and which Apple _already_ licenses, at least in part (the A4 is based on the Cortex A8, which _is_ an ARM-designed core)

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> I think of it this way: Buying ARM for some billion dollars would give Apple the advantage of having unique processors on its devices. Is this enough justification for such an expenditure? I think it is not for a various reasons.

1) No matter how big the Apple is, the market would create new CPU architectures that would eat Apple's initial monopoly advantage over time. Investments are made for long term gains, so in the long run its not a good investment.

2) Apple can already distinguish itself from competition by its engineering, philosophy etc. a cpu architecture is not going to make enough difference. It would be wiser to spend money on innovation than some cpu architecture that already exists and is beneficial to Apple.

You can probably compare this to HP buying Palm for WebOS. HP bought it for having a strong software portfolio for its mobile devices.

The difference though is that ARM has to rely on its ecosystem (e.g. all other partners who bundle their products with ARM cpus) to survive. It needs to be licensed to the market. In case of WebOS, it was only used by Palm itself.

<comment><USER7> What about making the purchase defensively? I.e. to keep it out of Google's hands.

<comment><USER8> Lots of evil has been committed under the guise of defense.

However Apple's potential here is hugely overstated. ARM licensees aren't at the whim of ARM -- they knew to sign generous IP agreements that essentially allow them to fork the technology. You have Apple on one side, with essentially a unchanged A8 created by Samsung, and virtually every other tech company on the other side -- Apple would quickly find themselves in another PowerPC situation if they bought ARM.

Speaking of PowerPC, Intel has been showing off some very impression demos of a smartphone powered by an Atom. Android of course is built from the ground up to be generally processor agnostic, so it wouldn't be a huge migration.

<comment><USER6> "However Apple's potential here is hugely overstated. ARM licensees aren't at the whim of ARM -- they knew to sign generous IP agreements that essentially allow them to fork the technology."

Do you mean companies like Marvell have comprehensive licenses allowing them to design their ARM cpu at their own will?

<comment><AUTHOR> Almost anything you encounter is an "ARM-based" chip. I'm not knowledgeable on hardware stuff but I do know that ARM customers are engineers that build on the platform; it's not a plug-and-play business.

</comment></comment></comment></comment></comment><comment><USER9> The Google finance page now links a story saying that traders think there is "renewed talk of bid interest from Apple".

[http://www.lse.co.uk/FinanceNews.asp?ArticleCode=hu9stjtv6kn...](http://www.lse.co.uk/FinanceNews.asp?ArticleCode=hu9stjtv6knyciy)

</comment><comment><USER10> Eeee... hope apple doesn't buy it; I could imagine them not licensing to other manufacturers and Steve Jobs coming out with some sort of douchie remark to justify it which will be parroted by the hordes.

</comment><comment><USER11> I'd need to look a little closer but if ARM's P/E is lower than Apple's (which is v.high something like 15x trailing earnings, which for a billion dollar company is high) then ARM is actually dilutive and hence value destroying, for Apple shareholders.

I think the more relevant data point is the FTSE and DOW's bad week/month, and traders desperate to find any good news.

Whether or not the deal strategically makes sense, Apple need to consider it's impact on shareholders.

</comment><comment><USER12> Not sure what's the gain for Apple. Looks like a rumor that benefits the speculator.

Or Apple wants ARM to also design desktop chip for its Mac? Unthinkable...

</comment><comment><USER13> So much for the 25% gain. It has dropped considerably and is now at a 5% increase on the day.

</comment><comment><USER14> Too good to be true.</comment>


Richard Feynman and the Connection Machine - <AUTHOR> http://longnow.org/essays/richard-feynman-connection-machine/ <comment><USER2> > _To find out how well this would work in practice, Feynman had to write a > computer program for QCD. Since the only computer language Richard was > really familiar with was Basic, he made up a parallel version of Basic in > which he wrote the program and then simulated it by hand to estimate how > fast it would run on the Connection Machine._

I have most of Feynman's memoirs and a few of his biographies, but I only see scant references to his work in computing, possibly because they seem so trivial to his other accomplishments. That said, it would be interesting to read more about his computational work, given, as the OP says, that he was also very much a pencil and paper guy.

<comment><USER3> > _that he was also very much a pencil and paper guy._

I'm curious about this as well. In particular, I wonder whether Feynman wrote out his code on pencil and paper as that's something I've always fantasized about.

<comment><USER4> You may be interested in the algorithmic notation I designed for writing code with pencil and paper without the usual fuzzy thinking that accompanies pseudocode: [http://canonical.org/~kragen/sw/dev3/paperalgo](http://canonical.org/~kragen/sw/dev3/paperalgo).

<comment><USER5> I'm probably biased by writing a lot of algorithms in the classical way, but I find your way a lot less readable and very unintuitive. Pseudocode is easy to transform to code; your notation, not so much.

I do applaud your determination of not liking the classical notation and coming up with something different. Maybe it's just that I don't like the syntax of math either (if math would be an API, it would be considered poorly designed, poorly documented and incomplete and inconsistent).

<comment><USER4> Yes, as I say on the page, I find it less readable, too. But it's _much_ easier to write. And it isn't that hard to transform to code.

<comment><USER6> I must say i find it more readable than pseudo code; the reason being that all the keywords have been replaced with graphical elements and layout. This means that all the _text_ is essential to the algorithm, which makes it much easier to read for me.

<comment><USER4> I'm glad you like it! Maybe I'll get used to it in time myself.

I do still use things like "argmin", which you could argue is a "keyword"; by argmin_{x ∈ S} f(x), I mean what you would express in Python as min(S, key=f), which ends up translating to something like this in C:

        int min_found = 0;
        T min;
        U min_item;
        for (iter it = first(S); hasNext(it); it = advanced(it)) {
           U item = itemAt(it);
           T val = f(item);

           if (!min_found || val < min) {
              min_found = 1;
              min = val;
              min_item = item;
           }
        }

        do_whatever_with(min_item);

Maybe this is what someone earlier meant when they said this paper algorithm notation was still too hard to translate into code, but I feel like argmin (over a finite set) is a sufficiently familiar concept that there's no need to spell it out in more detail, and indeed it's a standard library function in Python.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Terrific writeup. Thanks for submitting this. Pieces about Feynman are seldom disappointing (it's as if he continues to live through these inspired stories), but this one had lots more to offer as well.

Note that the markup was not quite exported completely, so [links] and $math notation$ are still in a raw syntax, which is confusing at first.

</comment><comment><USER8> TL;DR : Read the (fning) article! The details matter!

</comment><comment><USER9> >The notion of cellular automata goes back to von Neumann and Ulam, whom Feynman had known at Los Alamos. Richard's recent interest in the subject was motivated by his friends Ed Fredkin and Stephen Wolfram, both of whom were fascinated by cellular automata models of physics. Feynman was always quick to point out to them that he considered their specific models "kooky," but like the Connection Machine, he considered the subject sufficiently crazy to put some energy into.

I am currently starting round four in my studies of CAs, and it I thought this quote was interesting in bridging the earlier work by von Neumann and Ulam to Ed Fredkin and Stephen Wolfram with Feynman in the middle spanning them.

The book, "Cellular Automata: A Discrete Universe" by Andrew Ilachinski, has had it critics, but it is an amazing compendium to read.

<comment><USER4> Don't Fredkin and Ulam overlap by about 30 years?

Thanks for the book recommendation!

<comment><USER10> Here's a movie recommendation if you're interested in Fredkin, Wolfram, Computation, etc.: "Digital Physics"

If you watch it on Vimeo, iTunes, or Amazon and leave a comment you can get a free pack of cards (with gum!).

www.DigitalPhysicsMovie.com

</comment></comment></comment><comment><USER11> "Connecting a separate communication wire between each pair of processors was impractical since a million processors would require $10^{12]$ wires."

Isn't it more like sum_(n=1)^999999(1000000-n) = 499999500000 ?

[https://www.wolframalpha.com/input/?i=999999+%2B+999998+%2B+...](https://www.wolframalpha.com/input/?i=999999+%2B+999998+%2B+999997+%2B+...+%2B+1)

Since "one" wire connect in theory two processors?:)

<comment><USER12> Good luck getting all the extra bugs and timing issues out of a half-duplex setup like that.

</comment></comment><comment><USER13> I re-read this text in full every time it comes back up on HN and never stop to love it.

</comment><comment><USER14> It's all about Biomimetic Cognition.

<comment><USER3> Could you elaborate on this statement? I'm intrigued...

<comment><USER14> [http://cymetica.com/biomimetic- cognition/in_silico_cognitive...](http://cymetica.com/biomimetic- cognition/in_silico_cognitive_biomimicry.html)

<comment><USER15> sounds quite similar to [https://en.wikipedia.org/wiki/Vector_space_model](https://en.wikipedia.org/wiki/Vector_space_model) and related ideas</comment></comment></comment></comment>


RESTful thinking considered harmful - <AUTHOR> http://www.shopify.com/technology/5898287-restful-thinking-considered-harmful <comment><USER2> Look, I'm not a REST cheerleader by any stretch of the imagination but in REST terms the OP just doesn't know his ass from his elbow here. Consider:

> POST /orders/42/pay

> POST /orders/42/ship

You don't put verbs in your URLs. This is really REST 101. I highly recommend _Nobody understands REST or HTTP_ [1]. The above is exactly _why_ you don't put verbs in URLs. Consider instead:

        POST /payment { orderId=42, etc }

        POST /shipment { orderId=42, etc }

is a much sounder RESTful API design.

And in case anyone feels the need to suggest SOAP, I highly recommend the satiricial (but disturbingly accurate) _The S stands for Simple_ [2].

[1]: [http://blog.steveklabnik.com/posts/2011-07-03-nobody- underst...](http://blog.steveklabnik.com/posts/2011-07-03-nobody-understands- rest-or-http)

[2]: [http://wanderingbarque.com/nonintersecting/2006/11/15/the-s-...](http://wanderingbarque.com/nonintersecting/2006/11/15/the- s-stands-for-simple/)

<comment><USER3> Maybe you just skimmed the article, or he's changed it since, but he doesn't say that verbs in URLs was RESTful. He said it was better than RESTful, and I'm inclined to agree with him.

Having tried my hand at designing REST APIs for typical business systems a few times, I've noticed that state machines and transactions are everywhere. Making every resource a noun with the four basic REST verbs leads to a complex and extremely chatty design, whereas slipping a few extra verbs in here and there makes the API simpler, easier to understand, and more efficient.

</comment></comment><comment><USER4> My thoughts:

1\. Most people who think that REST is The Best Thing Evar don't really understand what REST is.

2\. Most people who think that REST is terrible don't really understand what REST is.

REST is a tool. It's useful for a lot of things. It can alleviate initial scalability issues. It can make an API easier to use or require fewer calls. It can make it easier or more intuitive for someone to learn an API, and it's very often easier to make changes to a REST API because of the way it is written.

But it's just a tool, and if you can't grok that, you're probably a tool as well.

<comment><USER5> So only true scotsmen aren't tools? I'd argue that if a concept is so badly explained that _both_ its most zealous proponents and antagonists are mistaken, that perhaps it's not such a useful design concept in the first place.

I mean, who could possibly be confused about what the transfer of representational state means?

<comment><USER6> since when does a concept need to be easy to explain for it to be great? Ever heard of general relativity or quantum physics?

<comment><USER5> Those are laws of nature, not design paradigms. They have different (almost opposite) metrics for "great". Relativity (both variants) and QCD are "great" precisely because they were discovered and characterized _in spite of the fact that they are counterintuitive and difficult to visualize_.

Good software design, on the other hand, is all about _human communication_. And a design paradigm that can't be communicated easily has less value than one that does.

</comment></comment></comment></comment><comment><USER7> "The RESTful thinker may design both the payment of an order and the shipping of an order both as updates"

Maybe this thinker got it wrong. How about POST /orders/42/payment to create a payment object?

<comment><USER8> Yup. The author is wrong in his assumption. You can always model the "process" parts using a resource(payment resource as against pay, transaction as against credit/debit etc).

<comment><USER9> My point is not so much that REST is wrong, but that RESTful _thinking_ can be harmful if it comes before thinking about the process you're supporting.

<comment><USER8> Ok, but what is RESTful thinking?

The way i think about REST is this: here is my stateful application, how can i make it available over HTTP/REST. So i start identifying resources. Most of them are easy - they map to your domains models. But some of the operations on some of the resources are quite important to my application (eg: ordering products, making a payment etc), so i consider creating separate resources for them.

It looks like you are referring to modeling your stateful application when you talk about RESTful thinking.

<comment><USER10> That's a very good question, what is RESTful thinking?

I personally think so many of us are misguided in our think when it comes to RESTful APIs. In order to make good design decisions for your API you must understand how the users of your API perceive RESTful APIs. In order for you to understand how the users of your API perceive RESTfuls APIs you must consider how the masses (within your target audience) understand RESTful APIs.

Whether your interpretation of RESTful APIs is right or wrong does not matter. What matters is that people can use it. In order for people to use your API it must be easy to understand. In order for it to be easy understand it must be well documented and consistant.

Therefore RESTful API design must be approached on a case by case basis. You must understand your users, their knowledge base, and how capable they are.

wvanbergen: Interesting article. It was thought provoking at the very least.

</comment></comment></comment></comment></comment><comment><USER11> REST is a great starting point for an API, but generic REST interfaces (in Rails, Django, or any other framework) are relied on too heavily. I'm especially interested in mobile APIs, which have very specific considerations that REST doesn't answer well.

Building a generic data back-end for mobile is very hot right now, with lots of funded startups in the space. Some of them are just offering a REST API, which frankly any Rails or Django developer could produce in about 10 minutes. Mobile APIs need to be different, mostly due to slow or non-existent connections, and require additional thinking. More details here: <http://ow.ly/9YMrM>

Anybody know of any mobile back-end providers that are thinking innovatively about this? I've consulted a few of these startups and they all seem hesitant to make any choices that go beyond REST...but as far as I'm concerned, offering a generic solution for something that mobile devs have to develop every time they create an API would be well worth it. A simple example is to accept a guid for every created object and return that guid in the response. It's something you have to do to know that the object has been sent successfully to the server, so why make the developer code it every time?

<comment><USER12> I do not think your blog examples goes beyond REST. You just need to represent different resources. For example a "title list" or "article set".

<comment><USER13> That, or a nice way of using different mimetypes to indicate which representation you want.

Also, http status codes perfectly solve the problem of needing to know wether an object was sent to the server successfully. No need to reinvent the wheel and mess with guids imo.

</comment></comment></comment><comment><USER14> > POST /orders/42/pay

> POST /orders/42/ship

But "pay" and "ship" are actions, not objects, so it doesn't make a lot of sense for them to be represented as URLs.

<comment><USER15> > POST /orders/42/payment

> POST /orders/42/shipment

Fixed?

<comment><USER16> Pretty close. If you really want to make the process "safe" (idempotent, to avoid double posted payments), you might actually have to do something more complicated such as:

GET /order/42/payment/new (returns "3", for example)

PUT /order/42/payment/3 (supplying content for payment info and amount)

Re-issuing the "PUT" (in case confirmation was lost? user double clicked "submit"?) would simply resend the same value, thus, an "idempotent" action.

Viewing this particular payment is simply:

GET /order/42/payment/3

Without the "3", who knows which payment you would get? (unless you got back the list of all payments on the order so far)

I'm not sure if this an argument for or against REST, but I'd sure hate to see a SOAP example typed into a "comment box" in a discussion forum :-)

<comment><USER17> Good point. I wonder, though-- could you make /order/42/payment the _only_ payment resource related to /order/42, so the ID isn't needed? (PUT /order/42/payment)

If the payment doesn't cover the bill, you could have the PUT respond with a link to /order/42/payment/remaining/1, then (if needed) continue with /remaining/2, and so on.

That would avoid the danger of a gap between your id GET and the payment PUT.

</comment></comment></comment></comment><comment><USER18> Small thing, but when the author attributes REST to Robert Fleming, I believe he actually means Roy Fielding.

<comment><USER9> Thanks, will fix.

<comment><USER19> There's no link for "protecting attribute mass-assignment in the controller vs. in the model".

<comment><USER9> Must have disappeared when I transferred the article. Fixed, and thanks for reporting.

<comment><USER20> transferred the article? you write blog posts in word?

<comment><USER9> Textmate.

</comment></comment></comment></comment></comment></comment><comment><USER21> Can we please kill the "considered harmful" meme?

<comment><USER22> _X considered harmful_ is one of computing's oldest memes, 44 years old this month, and was well sort of co-created by two of its foremost computer scientists. (Dijkstra and Wirth)

As memes go, it has a long history.

<http://en.wikipedia.org/wiki/Considered_harmful>

<comment><USER21> Yep, that's probably the worst thing about the meme. Because the original was so famous, all others piggy back on it, giving their own arguments some amount of weight.

(off-topic, but goto statements being harmful has been debunked several times over).

</comment></comment></comment><comment><USER23> The writer seems not to consider several other models such as

PUT /orders/42/payed or POST /orders/42/paymentprocessor

, which in my eyes would be both restful and true to the business model.

</comment><comment><USER24> _Ship with a state machine implementation by default, and a generator for a state machine-backed process model. Be opinionated!_

I think this is the most compelling take away. I learned how to use the state_machine gem in my current job, and it's an invaluable tool for going beyond CRUD and building real process models.

<comment><USER25> State machines are excellent, but this comes up every so often on HN and I've come to respect the observation that state machines become very difficult to change.

They particularly rock for games, where the universe is unlikely to suddenly add new interactions or change fundamental laws, but in an evolving business application with requirements that perpetually jag, they can be a source of great pain.

EDIT: After thinking about this a bit more, I realize the state machine use is in reference to an API, which probably should be approached with a certain sense of immutability. I still think that in general, using them outside of games should be approached with serious fore-thought to the potential for change in your requirements.

</comment></comment><comment><USER26> Is it just me or are these "considered harmful" articles becoming way too cliche? When I see one, I immediately become suspicious of it's content and distrust it as I've come to associate it with some sort of inflammatory headline or flippant way to dismiss legitimate conversation.

</comment><comment><USER27> tl;dr</comment>


Windows Vista startup process - <AUTHOR> https://en.wikipedia.org/wiki/Windows_Vista_startup_process <comment><USER2> Good description of the process, but...

/rant on

Sigh. Somehow it's still quite easy to screw up, intentionally or not, your boot system. But every X years the boot system is completely overhauled, so over time I learned how to deal with fdisk /mbr, lilo, grub, grub2, ntldr, bootmgr/bcd... That's a lot of info to memorize for something you would really prefer not to know, and that I honestly need somewhat rarely.</comment>


Subdomains + Development = Sucks: A quick tip from Kevin Hale of Wufoo - <AUTHOR> http://particletree.com/notebook/subdomains-development-sucks/ <comment><USER2> For me, even if aiba.wufoo.com and wufoo.com/aiba point to the same IP address and have the same functionality, the former feels more like _my_ site, whereas the latter feels more like my part of someone else's site. If you want to create a service that gives people their own presence on the web, this could make a difference.

Alternatively, maybe most users don't pay attention to URLs or look at the distinction above in the same way we developers do.

Also, the subdomain strategy seems to have worked well for Blogger. They serve users' pages from *.blogspot.com, and their own pages from *.blogger.com.

<comment><USER3> I agree... I think this idea of ownership is growing as "everyday" web users feel a need to own their online identities and data. We already are seeing this with tools like Weebly. Web developers and techies have enjoyed this luxury for quite some time.

One thing I really like about subdomains is that it makes accessing a site very quick... from my address bar I type "new" and news.yc.com pops right up!

</comment></comment><comment><USER4> Not so much suck as have two sides of a coin. Ok, so the article says you may need to buy an SSL certificate for the domain and setup user1.localhost.localdomain in dev machines.

On the positive side, your users will be cleanly sandboxed in separate domains, they get slash-free URIs, and you can have simple IP-based load balancing.

Any good stories about subdomains? Infogami?

</comment><comment><USER5> One benefit of subdomains is that you can set cookies for each subdomain separately. For example, I can be logged in to my user1.example.com and user2.example.com both at the same time without having to logout and then login again.

</comment><comment><USER6> I haven't implemented mass user-generated subdomains in PHP or Python, but it certainly was a snap to do in Rails.

User-created subdomains didn't seem like they really caught on until 37 Signals started having huge success.

</comment><comment><USER2> Question: does the choice to use subdomains or subdirectories affect the stats that appear on traffic measuring sites like Alexa?

<comment><USER4> It affects some of the measuring sites, and web crawler speeds etc. Now Alexa implicitly says it doesn't affect their stats, but it would be nice to know something about their algorithm for distinguishing "recognized personal pages": <http://www.alexa.com/site/help/?index=12> (edit: corrected the link to point to traffic rankings faq)

</comment></comment><comment> kal-el thanks for the note kevin!

</comment><comment><USER7> What I hate is that firefox/IE complain if you don't get one of these paid SSL certificates. The encryption of HTTP traffic should be free and without unneeded burden.

<comment><USER8> Comodo and other SSL providers will give you free certs that don't cause any warnings. But, they only last 3 months instead of 1 year.

<comment><USER7> Hey thanks! Do they cover all subdomains also though?</comment></comment></comment>


Ask HN: Review our startup - www.webnotes.net - <AUTHOR>

After a year of work, WebNotes just launched its freemium product at www.webnotes.net. Would you guys mind reviewing our startup? Several significant changes have been made since our private beta launch six months ago:
* We are no longer in private beta mode. Anyone can sign up.
* We added WebNotes Pro which allows you to upload and annotate PDFs.
* We added WebNotes Group Solutions with allows schools and business to mass register for WebNotes
* We unveiled partnerships with several existing organizations. Our case studies are located here: http://www.webnotes.net/Press/CaseStudies.aspx
I would love to hear feedback.
P.S: We are based in Cambridge, MA. (Shout out to my Cambridge peers.) <comment><USER3> Your site is too crowded. Give me one thing to look at on your main page. Right now, you have 'webnotes pro', 'sign up now', the play button, and your 'faster/more effective' drawing my attention, in that order. Read this:

<http://www.uxbooth.com/blog/good-call-to-action-buttons/>

Remove the red from wnp. You want the first noticeable thing to be the first step, and the first step should probably be 'find out what this does' - <USER2> make the 'faster and more effective web research' text stand out more. You have way too many tabs - give me little next and prev buttons to scroll features. I like playing with those, I hate tabs - I get the impression that I'll have to load a new page, so I avoid them. Preload the images on the other tabs. Your support tab/button doesn't actually link to support, it links to info. Your video seems to focus on many individual features, rather than on the problem that you're solving for me. Why do I want to save these notes? Why do I want to compile a report? (Clicking the blackness outside the modal video should return me to the page - I don't want to click that little black x)

Summary: very crowded main page, lacks obvious next-steps at all stages of interaction, presents individual features rather than a solution to my problems. Looks pretty good otherwise.

<comment><AUTHOR> We are looking into making the next step more obvious, and we do agree that the homepage has a lot on it. Thanks for the feedback.

<comment><USER4> The demo is what sold me. Making that button more prominent would be a good start. I clicked it before I read anything else.

</comment></comment></comment><comment><USER5> As it happens, I am "in the market" for such a product ever since the demise of Google Notebook. Having given it a quick spin, I may consider using your product. The only immediate irritation is that it isn't obvious how to move an annotation from one folder to another in the sidebar; it looks like drag and drop should work but it doesn't. The documentation (ie the FAQ) didn't cover this either. Oh wait. I managed it somehow but bugger if I know how - I can't undo it. Ah. I see. You have to grab exactly the right part of the annotation - the title (Not the URL, Not the Favicon). The design doesn't lead you to this because all three are in the same grey box, making it look like one drag- n-drop unit.

This is my opinion only, but I think the price point for your premium service is too high. There are two reasons I pay for premium service: one, I really _really_ want the extra feature; two, I have a really good feeling about the service and want to keep it alive. Ten bucks _a month_ hits neither of those for me. In comparison, I pay toodledo.com $15 a year for a really important- to-me feature and awesome customer service. Looking at webnotes I would get by with the free features, but if I liked it, I would pay you $15/year even though I am not interested in PDFs. With your price point at $10/month, I'm just not going to. I mostly use this kind of service to collect and organise recipes - that is nowhere as big a deal to me as half my Netflix subscription, which is what $10/month comes to.

The .net address in unfortunate. People do type "webnotes" in their URL bar then get confused when they don't go where they intended. There is no obvious reason why this is a .net kind of site.

I get some overwrite issues on Firefox/Linux in the sidebar. Not a biggie.

Hope this was useful to you.

<comment><AUTHOR> Your critique of the organizer was very useful. We're looking into improvements for the next iteration. Also, we've added this tutorial: <http://www.webnotes.net/tutorial/tutorial.aspx>. We hope you find it useful.

</comment></comment><comment><USER6> Direct links for convenience:

<http://www.webnotes.net>

<http://www.webnotes.net/Press/CaseStudies.aspx>

</comment><comment><USER7> I think it's a great design and really well-laid out site. I understood immediately what it is you're doing. However, I don't have the problem that you're solving so I'm not that interested. I'm not a student though, so maybe that's more your target audience. For me, delicious is enough to organize info on the web.

</comment><comment><USER8> First off, that's a pretty k-rad design. Did you do it in-house or an outside firm?

I have a few questions/thoughts:

\- What happens if the contents of a page change? Do the notes go away or do you try and follow the content as it moves around?

\- Have you thought about public sharing of these notes? I don't know if it's in your business plan, but it could be a fun thing to be able to mark up pages on the web and see others' notes while browsing. Could get noisy and be a UI issue, but it _sounds_ neat :)

\- I might change the "Click to try demo" button to be a little bit more clear what's going to happen when you click it. It's a great demo that shows off your product perfectly, but I was thinking I would be sent off to some other page and might have to go into some registration process. Two ways to handle this: Show the bar dimmed out and a button that says "Activate demo" or something to that effect. Or have the links say something to the effect of "Try the demo live on this page" so we understand it's just something quick. Again, it's really effective, so you should remove any apprehension about clicking that link.

<comment><AUTHOR> Wow, great questions, great feedback.

1\. Design: We start with designs from 99designs.com. Then, we have Ryan (CEO and great with photoshop) heavily refine our selections. Afterwards, we convert the designs to html using psd2html services. Again, heavy refinement is needed before the code is actually usable. Here's a link to our previous design: <http://blog.webnotes.net/image.axd?picture=webnotesnet.jpg>

2\. If the contents of the page change, we first try to relocate your highlights/notes. If your highlighted texts have disappeared, we add a "page changed" notification at the bottom of the screen which contains the text you originally highlighted.

3\. We do think about public sharing of notes, though our primary focus is on improving research. Several other sites have focused upon social annotations without great success, and so we hesitate when considering such options. Also, the UI does seem tricky. If we were to implement more sharing-related features (you can already share annotated pages through email or permalink), UI would be of utmost importance to us. Several of our engineers have taken usability classes (6.831 was awesome!), and we pride ourselves in the simplicity of our product.

4\. We are looking into implementing your suggestions. Thanks for pointing this out.

</comment></comment><comment><USER9> I agree with imp regarding the site design and layout. I am a graduate student and have been looking for a software/service similar to papers for mac (<http://mekentosj.com/papers/>) for windows. This looks like a useful service, not entirely what I want but a decent start. I will definitely try the free version and will post my opinion.

</comment><comment><USER10> So right now I'm a PhD student and doing quite a bit of research for my proposal.

Maybe I'm unique, but if I'm doing reading online, I don't exactly care about highlighting. If I come across something important, I just bookmark it. If it's a PDF, I download it.

So I'm not really sure your solution is that important (to me atleast).

In my opinion, there are much bigger hassles, with doing research online (these may not apply to you, but I'll tell you nonetheless):

\- Where can I go to get FREE PDFs of articles? \- If I make a note of why the PDF is important, can I download that note...so I'm reminded when I actually start writing the report? \- How can I easily keep track of certain authors? \- How can I easily contact the authors in published articles?

So in summary: Not sure if your product is really worth $5/mnth. If you came up with an option that compiled all the contact information for each PDF, then it might make this tool more valuable. -

</comment><comment><USER11> _Webnotes Pro: PDF Annotation - Up to 500 MB (about 2,500 PDFs)_

The typical .pdf I encounter is a lot larger than 200k. What else...ah, the pins on sticky notes caused instant cognitive dissonance. As did the pins on highlighting...maybe just lose the damn pins.

I like it. I don't see myself paying for it. But I would encourage others to use it.

</comment><comment><USER12> It looks like your marketing/PR guy did good work. I'm impressed by the amount of press you've garnered.

<comment><AUTHOR> Shout out to Tracy Wemett and Alex King for the great marketing. Alex has been with WebNotes since September of last year and has helped with the refining our our messaging. Our previous tag line was "Annotate, Organize, Share" and was so generic, it failed to differentiate us within the annotation space. Alex King lead the PR push six months ago for our private launch. Tracy Wemett heads our current public launch.

</comment></comment><comment><USER13> so far i like everything about it. key points (1) found all the info about the service i was looking for real fast, and my patience level is low for the review my site stuff (2) fast and simple registration (3) encouraged me to try it out since i didnt even have to pay (4) the privacy policy was easy to find and understand [first question was if you were watching my browsing beyond what i want to highlight] and you don't -- i'm going to use this app for a bit and see how it goes.

i also like how clear you made the advantages of the app, the testimonials, and just the overall how much information i get easily.

great job.

</comment><comment><USER14> Any plans to support tags? Would be nice to have folder plus tags for organizing info.

<comment><AUTHOR> Several people have requested tags and other related improvements to the notes organizer. These requests are of high priority in the next few iterations. Thanks for the suggestion!

</comment></comment><comment><USER15> I didn't get what the site did, it looked like it was trying to sell me something. Then I saw the button 'Download' and that turned me off. I don't want to install any software. I cannot see how this is supposed to save me time or money as claimed.

The sign up page took 15 seconds to load so I gave up at that point.

Online note taking isn't a problem I have that needs a solution.

Doesn't google do this already and integrated into my goole suite of tools?

</comment><comment><USER16> Why oh why did I not hear about you when I was working on my senior thesis. I have been using Zotero which is pretty good for bibliografies, but keeping track of my research across all my tabs and browsers, plus pdf's I download from JSTOR, Google Scholar, has always been a pain. I will use this when researching for blog posts and sharing with my journalists. Good job!

</comment><comment><USER17> Read the comments here first, went to check it out; typed in "www.webnotes.com" and ended up at some very strange site. Came back here, and couldn't believe that you were trying to do something with a "reasonable- sounding" domain name for which someone else has the .com. I predict this will be a big problem.

</comment><comment><USER18> Koodos on the product. I am curious, what tool/utility did u use to create the demo clip?

Best of Luck ! :)

<comment><AUTHOR> Thanks for the complements. Unfortunately, I don't know what tool/utility we used for the screencast. I do enjoy Jing though.

</comment></comment><comment><USER19> It's extremely simple to use. I could go right in and play with the demo document. I also don't have this need immediately, but your site will stick in my mind in case I need it later...

</comment><comment><USER20> Quite a team you have assembled. Looks like a great product, looks like it will go far. Good luck.

</comment><comment><USER21> very good design

</comment><comment><USER22> Great idea, superb execution.</comment>


Theory, Evidence and Examples of FDA Harm - <AUTHOR> http://www.fdareview.org/harm.shtml

<comment><USER2> The FDA requires that drugs be both safe and effective. It's the "effective" part that bothers some people. Effectiveness has to be established by clinical testing, which is expensive. Many new drugs fail, even after approval. The gold standard for "effective" is "after 10 years, are patients significantly better"?

The "natural"/"herbal"/"homeopathic" drug industry managed to get Congress to exempt them from the "effective" requirement. There was a big right-wing push for this. Rush Limbaugh had a financial stake in Zicam, which sells homeopathic cold remedies, and used to promote it on his radio show.

</comment><comment><USER3> I'll give the FDA a lot of credit for things like blocking thalidomide from the US in the 1950s and 1960s (looks like Richardson-Merrell was pushing hard for US sales after it had already caused a disaster and been banned in Germany) [http://en.wikipedia.org/wiki/Thalidomide](http://en.wikipedia.org/wiki/Thalidomide) . Like all things you have to balance the harm and good.

<comment><USER4> The FDA has a ton of power and resources. I would be highly surprised if they didn't have a large numbers of victories, but in relation to their power and resources it doesn't take much bias to find them lacking.

<comment><USER5> Even though they've stopped bad drugs, they've also stopped good ones. If you look at the net benefit of the FDA it's negative. Not that we shouldn't have any any drug approval process, just that the current one is too conservative.

The reason for the conservatism is simple. Everyone sees when bad drugs get through. It gets media attention, there are lawsuits, laws are proposed to retrospectively fix it, etc. But no one cares or even notices when a life saving drug is delayed or prevented from getting to those who need it.

And so there will always be extreme bias towards conservatism and we need to fight it.

</comment></comment></comment><comment><USER6> Looking at SourceWatch, The Independent Institute looks to be an industry- funded Tea Party Liberal think tank. [http://www.sourcewatch.org/index.php/Independent_Institute](http://www.sourcewatch.org/index.php/Independent_Institute)

They may be right about what they say, but I wouldn't feel comfortable taking their analysis without a grain of salt.

</comment><comment><USER7> Story time: I'm from Germany, co-founder of a company that builds lasers which are marketed toward users in biomedical research. So when selling into the USA we've to deal with the FDA twice: Because the application is medical and because these things are lasers (little known fact: The FDA also oversees laser safety regulations and enforcement).

In February I attended a conference in San Francisco and at the end of the week came down with benign infection; anyway I was headed to a pharmacy looking for some remedy; the first thing that had the label "FDA approved" on it I took. Why? Because I know firsthand how strict the FDA is and that they are a no-bullshit agency, so I knew that this thing surely was safe and be effective.

BTW: Getting a new medical device FDA approved is not a very time consuming process; at least not for diagnostic applications. It can be done in under half a year, if your paperwork is thorough and your testing solid.</comment>


The Convex Geometry of Inverse Problems [video] - <AUTHOR> https://www.youtube.com/watch?v=pcIGP9X9E40 <comment><USER2> Microsoft Research: 'Each year Microsoft Research hosts hundreds of influential speakers from around the world including leading scientists, renowned experts in technology, book authors, and leading academics and makes videos of these lectures freely available.'

It's a pity Microsoft doesn't expend energy in figuring out how to make opening an email attachment or clicking on a URL safe.

<comment><USER3> Microsoft has over 100,000 employees. They're not pulling resources from other teams for Microsoft Research.

</comment></comment><comment><USER4> I think it's important to note that all of these methods have been largely superseded by deep learning techniques. For example, we can now directly learn algorithms such as gradient descent[1] and classical inverse problems like superresolution are solvable with deep networks [2]. While there still may be a role for tools like CVX, I anticipate all future progress will come from end-to-end differentiable systems.

[1] [https://arxiv.org/abs/1606.04474](https://arxiv.org/abs/1606.04474) [2] [https://arxiv.org/abs/1501.00092](https://arxiv.org/abs/1501.00092)

<comment><USER5> Largely superseded? This is a sarcastic comment, right?

In case it isn't: the assertion that these are superseded is categorically false. For any reasonably computationally difficult problem, being able to capture the structure of a problem is hugely powerful, rather than blindly throwing deep learning algorithms at it. Just becuase you _can_ doesn't mean you _should_.

For example, algorithms for convex problems in particular can be orders of magnitude more efficient than naive nonlinear approaches. Also consider the case where the problem has some (possibly sparse) structure, where custom solvers can render trivial otherwise computationally intractable problems.

<comment><USER6> I read about application of neural networks to fluid dynamics. It ended up being faster than usual approaches. At least some matemathical solutions might eventually be superseeded by pretrained nn at least in some contexts.

<comment><USER7> I think the key was that the neural network didn't compute the fluid model accurately so much as a compute a simulation that looked accurate to humans</comment></comment></comment></comment>


Refinement-based approach to reasoning of optimized reactive systems - <AUTHOR> http://www.ccs.neu.edu/home/pete/research/cav-2015-skipping.html <comment><USER2> Nice submission, but it should be just "Refinement-based approach to reasoning of optimized reactive systems" and not start with "Show HN". For some reason, people feel compelled to put "Show HN" at the beginning of ordinary posts.</comment>


ForestDb – A Fast Key-Value Storage Engine Based on Hierarchical B+-Tree Trie - <AUTHOR> https://github.com/couchbaselabs/forestdb

<comment><USER2> If the title said that this is from Couchbase (Labs), it would definitely be a more active discussion with tons more upvotes, too!

<comment><AUTHOR> I think your right. Let's try it out :) [https://news.ycombinator.com/item?id=8412001](https://news.ycombinator.com/item?id=8412001)

<comment><USER2> Sorry, I guess people are too busy with other things during the weekend. This doesn't give much incentive to post on weekends or outside of business hours (looks like most people read HN at work based on my personal observation). :)</comment></comment></comment>


Ask HN: Pricing models, stand-alone software vs. enterprise what works? - <AUTHOR>

My company is currently (or should I say typically) reviewing pricing for our product. We're too small to compete against our largest (and much more successful) competitor directly, but we've historically priced to stay about 20% below them. They gear their offering as an enterprise rollout typically costing in the millions, while we pitch to stand-alone users. Obviously it's hard to compete well in this arena.
We're looking at repositioning ourselves towards the other end of the market, against other stand-alone vendors. But our pricing is about 2x theirs even though we offer about 2x the features. There are many more vendors in this space, and one defacto standard vendor that looks to be on its way out.
We've gained pretty good traction in both areas, but we feel we're getting close to maximizing this "in-between market areas" space and want to expand. It's obvious to us right now, with the way the market is, that competing against our enterprise competitor more directly will just result in us getting squashed like a bug (they don't do very many acquisitions and out technology wouldn't integrate easily into their portfolio anyways). So it looks like we'll be fighting down market.
Since we're priced well over those competitors, we have three choices.
1) Pitch what we have, and hope our feature delta carries the day. We have evidence though that we've lost a few bids to cheaper, but less capable competitors.
2) Lower the price on what we have to directly compete. But we risk cases where we might have made $100 to instead make $50 without guaranteeing at least a 200% increase in sales to make up the difference. Plus the perceived "premium" value for our product potentially goes out the window and we end up head to head against the wrong competitors.
3) Build a new "lite" version of the software (for minimal effort, just turn off some features) and sell that as a new SKU. This helps us directly compete down market, while still being able to offer a flagship to our upmarket folks. This is the option that currently has the most traction. But it risks the same problems as option 2, while also increasing the complexity of our offerings (and all the stuff that goes with that).
Anybody have experience with this kind of thing? How'd it work out? Any tips, ideas?
(sorry I can't talk directly about my company or the space we're in, it might make sense to model us like an MS-Office competitor. Except that the large enterprise competitor is Google Docs, and we are also competing against MS-Office, iWorks, Star Office, Open Office etc. and everybody charges for their software...there's no advertising revenue in our space. The competitive landscape is almost exactly like that.) <comment><USER2> Without knowing your business, or the environment you are in, it is difficult to really make a recommendation here.

I would recommend picking-up the book Crossing the Chasm or Inside the Tornado, both by Geoffrey A. Moore, if you haven't already looked at them.

You mention that you've gained pretty good traction both and you're getting close to mazimizing the 'in-between market'. I suspect you are saying that you aren't finding as many premium stand-alone customers, and aren't finding yourself jumping up to the enterprise purchaser level.

Is that correct?

By the sounds of things, you've got the premium product in the stand-alone purchase, and with the right marketing, maybe you could be the defacto purchase in that market.

At the dollar ranges you are talking about, are businesses really cost sensitive? If your product is truly that much better than competitors, you should be able to up sell the extra $50.

<comment><AUTHOR> Thanks for the reply.

Actually, dollar ranges in our space are more in the $5k-20k per seat range. "Bargains" are in the $5k range and "premium" starts at around $10k per seat (that's for the stand-alone market). It's definitely a high dollar, low volume small market, maybe no more than 20,000 total seats in the entire market space (at the way upper end) in the U.S. and maybe double that globally. For how we are used by our customers, the Office Productivity software space is the closest analogue. But because the market size is so small, lowering our price too much might get us fast market share, but kill us in the long run (plus our sales cycles are hideously long, 6-12 months, and high touch, mostly because of the nature of our customers). We own about 2% of the market right now, which is enough to keep my small shop of about a dozen people fed. We'd like to double our revenue in the next year.

I think that we are certainly starting to hit against the bottom of the barrel in terms of premium standalone customers -- or at least we will maybe in the next year. Most of those I'd say are early adopters who don't mind paying higher dollar for a solution that does what they want. But like any industry, early adopters are a very small part of the pyramid.

What I think is distracting our pricing model is that the enterprise pricing is totally different. The ranges there are $3k-$17k per seat but at seat volumes of 50 or more, but the current industry leader is at the top of that scale while the industry leader for stand-alone sales is in the middle of the range. So we've been targeting that per-seat dollar value and undercutting it as part of our strategy to capture lower volume customers. But like I said, it appears we're starting to run out of room for those customers, we've either captured them, or they went with a cheaper stand-alone competitor.

The book recommendations are great and new to me, I'll definitely look into picking those up.</comment></comment>


Discuss/Remind HN: Apple Live Event On Right Now  - <AUTHOR>

Figured whatever Apple is coming out with today would steal the front page for the next few days - thought this place could be a good start for initial reactions/Live discussion. <comment><USER2> First thing I noticed watching from the iPhone: timeshifting on the stream.

I can pause, go back and catch up live. I can't recall having seen this before (on iOS that is), so I wouldn't be surprised if this is linked to whatever they'll be announcing. (though that might just be wishful thinking :))

<comment><USER3> That has been available since they introduce the live streaming. It really depends on how many segments the live stream tracks. The more it tracks the longer you can pause.

</comment></comment><comment><AUTHOR> Btw, the live event url: <http://events.apple.com.edgesuite.net/1009qpeijrfn/event>

<comment><USER4> for those on iphone... you can go to apple.com to find a link (This is too long to type for me)

</comment></comment><comment><USER5> Uh oh, the live productivity chart of Hacker News readers is plummeting...

</comment><comment><AUTHOR> Netflix + Apple TV seems to be a win! Damn, Apple tv is $99!</comment>


How Millennials Killed Mayonnaise - <AUTHOR> https://www.phillymag.com/articles/2018/08/11/mayonnaise-industry-millennials/ <comment><USER2> This comes across as a slightly cringeful explanation of a phenomenon that I'm not really sure is a problem. The author's constant referencing of trendy ingredients comes across as an attempt to sound up-to-date with trends in cuisine, without actually knowing what those trends are.

Also, the article is factually incorrect - aoli is not mayonnaise, it's an emulsion made of garlic and olive oil; no egg should be involved in its production.

Finally, it appears that the author has it out for millennials in general [1].

[https://www.phillymag.com/news/2016/01/08/boomers- millennial...](https://www.phillymag.com/news/2016/01/08/boomers-millennials- workforce/)</comment>


Google+ members can now email any Gmail user without their email address - <AUTHOR> http://www.theage.com.au/digital-life/digital-life-news/google-members-can-now-email-any-gmail-user-without-their-email-address-20140110-30lpa.html

<comment><USER2> Yet another step away from open-standards by Google.

<comment><USER3> Also another step away from privacy.</comment></comment>


Twitter's Next Project: Location - <AUTHOR> http://www.businessinsider.com/one-of-twitters-next-projects-location-2009-6

<comment><USER2> why don't twitter just open a metadata field and let the user fill in what ever data they like?

e.g.

        This is a tweet
          Datetime: 2009-06-02 21:07 GMT+8
          Client: Ping.fm
          Location: 40.460237,79.101563

another example, for private dynamic metadata fields:

        This is another tweet, check this out http://bit.ly/chromium_win32_zip
          clicks: 213

And twitter just sell the API for 3rd party metadata providers.</comment>


Mozilla announces ban on Firefox extensions containing obfuscated code - <AUTHOR> https://www.zdnet.com/article/mozilla-announces-ban-on-firefox-extensions-containing-obfuscated-code/ <comment><USER2> Pretty hypocritical considering they're fine with obfuscated blobs running DRM (EME).

</comment><comment><USER3> Looks like wasm will start to be the default then.

<comment><USER4> From the article:

> We will continue to allow minified, concatenated, or otherwise machine- > generated code as long as the source code is included.

If I understand correctly, Wasm will be allowed as long as the original source code is provided.

<comment><USER5> Unless Mozilla runs build bots for these extensions, it will be impossible to prove that the compiled code and the uncompiled code match.</comment></comment></comment>


Scala school - <AUTHOR> http://twitter.github.com/scala_school/

<comment><USER2> This is awesome, but I just want to point out one thing: twitter.util and Finagle are traps. Twitter's libraries are awesome, but won't build on scala 1.9 (or even 1.8.2), yet, and it's not clear if they will anytime soon. This rules out Akka >1.0, and 1.0 is pretty old and sometimes just broken. I just spent a couple weeks rewriting a ton of code to get myself out of this hole after starting with the awesome scala-bootstrap, and I can tell you it's no fun. So, if you want to be able to use Akka, or at least keep up with other developments in the Scala world, avoid the temptation of pretty Finagle and com.twitter.util!

Also, the sbt they use in the tutorial is an old version; the community is going through a big shift to sbt 0.10 now, which is a totally different system. Very different, and often outright weird to the uninitiated, but worth learning if you're starting new projects.

This tutorial is for Scala 1.8.1, and 1.9.1 is available now and considered stable. Use it!

<comment><USER3> You mean Scala 2.8.2 and 2.9.1, respectively.

<comment><USER2> Yes, my mistake.

</comment></comment></comment><comment><USER4> Hmmm, lots of REPL input/output, nearly no informative descriptions. Besides that some descriptions are wrong or inaccurate, three randomly picked examples (and I am not a Scala programmer):

* "compose calls the second function and then the first function."

* "Maps - It can hold basic datatypes."

* "foldRight Is the same as foldLeft except it runs in the opposite direction."

I'd recommend friends to buy a good, well-edited book.

<comment><USER5> For the sake of the ignorant, could you expound on why these examples are wrong or inaccurate?

<comment><USER4> 1\. 'compose f g' doesn't call g and then f, but it constructs a new function of the form \x -> f (g x).

2\. Maps store mappings between keys and values.

3\. Left and right folds both process a list recursively from start to end. However, left folds apply the given function first and then recurse. Right folds recurse first and then apply. As a result, in right folds the given function is applied to the last element first.

<comment><USER6> Also, right folds preserve the structure of the datatype folded over. If you fold right over a list with the empty list as the start value and cons (or (_::_) in scala) as the operation, you get the original list back (i.e. same value, not same object). A left fold on the other hand is just some arbitrary looping constuct.

</comment></comment></comment></comment><comment><USER7> Good stuff, really useful to see what Twitter considers to be 'Scala: the Good Parts'.

But no mention of Actors or Akka in the concurrency section? Why not, out of curiosity? Actor model doesn't fit your use cases?

<comment><USER8> Actors had a memory leak when a lot of the formative Twitter Scala stuff happened. This lead to more usage of java concurrency primitives, which snowballed within the culture.

There's some people at Twitter who truly love and grok Scala and Scala idioms inside out, and there's some people who look at Scala as a more functional, less verbose Java.

<comment><USER7> Interesting form of technical debt. I hear Akka is replacing Scala's actors lib in 3.1 or thereabouts. Any talk about adopting it?

 _> There's some people at Twitter who truly love and grok Scala and Scala idioms inside out, and there's some people who look at Scala as a more functional, less verbose Java._

I'm a full card-carrying member of exactly _both_ groups, but if all Scala does is succeed b/c of the latter, it will have served a wonderful purpose in displacing Java.

</comment></comment></comment><comment><USER9> You attempt to explain partial function application and currying on page 1. Using opaque examples.

This makes no sense; people who have experience with FP concepts don't need to know that, and those who don't won't be able to understand what you're talking about. Saying things like "I promise, this will get easier over time" isn't actually helpful.

Also, the text is low-contrast and difficult to read.

<comment><USER7> Fwiw, best explanation I've found of currying and partial functions is in _Learn You a Haskell_ (Chp. 5) by Miran Lipovaca. He's one of those writers that is exceptionally good at explaining technical concepts.

</comment></comment><comment><USER10> for those looking for free reference, this is the best I have found: <http://ofps.oreilly.com/titles/9780596155957/index.html> not a great book but if complemented with blog posts here and there and the exercises from <http://aperiodic.net/phil/scala/s-99/> you can get started.

<comment><USER11> What I really want is a book dedicated to type-level wankery in Scala. That's the part of the language that's not easy and requires a lot of trial and error to figure out on your own.

<comment><USER12> This is EXACTLY how I feel. I don't need a lot of introductory chapters dedicated to first-class functions, closures, and higher order functions like map/fold & friends. So much Scala material is clearly targeted at Java programmers and leads with something like "look no semicolons!" I want something like "Scala for Lispers". (or even "Scala for Ruby programmers")

<comment><USER13> I've found "Scala in Depth" to be really good for learning more about the type system <http://www.manning.com/suereth/>

</comment></comment></comment></comment><comment><USER14> I'm finding the light gray on white text pretty hard to read.

EDIT: Not to mention there are places that could use some copy editing...</comment>


Ray Tracing: The Next Week – free eBook - <AUTHOR> http://www.amazon.com/gp/product/B01CO7PQ8C/ <comment><AUTHOR> Some additional information: [http://in1weekend.blogspot.com/2016/01/ray- tracing-second-we...](http://in1weekend.blogspot.com/2016/01/ray-tracing- second-weekend.html)

This is a sequel to "Ray Tracing in One Weekend". [http://in1weekend.blogspot.com/2016/01/ray-tracing-in-one- we...](http://in1weekend.blogspot.com/2016/01/ray-tracing-in-one-weekend.html)

</comment><comment><USER2> I bought the first book and really enjoyed it. I learned a lot and even emailed the author when I ran into some trouble. I still need to finish that up (been busy with work and school) but I highly recommend the series. Very excited for this sequel.

</comment><comment><USER3> This appears to only be "free" if you subscribe to a 1 month trial of "Kindle Unlimited".

<comment><USER4> The message about unlimited is first, but it is also available for free download.

I hadn't heard of the original; these look like good reads!

<comment><USER3> Missed that -- thanks for the correction.</comment></comment></comment>