Walter Bright on C's Biggest Mistake - <AUTHOR> http://dobbscodetalk.com/index.php?option=com_myblog&show=Cs-Biggest-Mistake.html&Itemid=29 <comment><USER3> Lack of array bounds checking is not a problem with C.

It is a problem _with our hardware._

Introducing bounds checking without introducing a penalty on array access time is impossible on our "C machines".

C/C++ are often thought of as "close to the metal" - but they are close to _particular varieties_ of metal - those designed to run C/C++. We arrived at them through historical accident. There are many other ways to build a computer - and it is not entirely obvious that a "C architecture" is necessarily the simplest or most efficient:

<http://www.loper-os.org/?p=46>

That a language which is "close to the metal" is braindead is _solely a consequence of braindead metal._

The "C architecture" is a universal standard, to the extent that it has become the definition of a computer to nearly everyone. This is why you will never find the phrase "C architecture" in a computer architecture textbook. And yet it is a set of specific design choices and obsolete compromises, to which there _are_ alternatives.

</comment><comment><USER4> See also the C FAQ, which patiently devotes 24 questions to the topic. (You can almost tell just _how_ frequently the question came up on the list.)

<http://c-faq.com/aryptr/index.html>

<comment><USER5> Is there another place that buffer overflows occur than in the char* with no bounds checking? If not, this single fact is the one that leads to so many of the software vulnerabilities in the wild.

<comment><USER6> Yes, memcpy overflows are just as common as strcpy overflows, and structure overflows are more common today than strings, if only because most of the trivial string stuff has been flushed out by now.

</comment></comment></comment><comment><USER7> Thank god for this mistake, this mistake makes c what it is good at: at low level programming. It just pass directions between functions. Light and fast,no abstractions.

I love it, a way of making assembler like coding but multiplatform.

If I want high level programming I will program in another language but when you want machine control you have c without all the bloat.

<comment><USER8> _C combines the power and performance of assembly language with the flexibility and ease-of-use of assembly language._

However, I was amazed to find that modern assembly language (since I was last in the game 25 years ago) has many high-level concepts in it (structures, loops, conditions etc), and looks... _suspiciously_... C-like.

But you're quite right about portability. Although C is famously not perfectly portable ( _int_ sizes, all those #defines - just some of the issues Java tackled), it is a _hell_ of a lot more portable than an actual assembling language. :-)

<comment><USER9> > (structures, loops, conditions etc), and looks... suspiciously... C-like.

Which assembly? All the ones I know of - _especially_ the modern ones - <USER2> become even lower level over time, as compilers started liking more regularity over more powerful instructions.

<comment><USER10> The assembly language used by Sharc DSPs has an algebraic syntax rather than using all mnemonics, and loops are pretty easy to create as well (at least compared to x86 or, as my current project uses, PIC).

<comment><USER8> Can you give an example of a loop in an algebraic syntax please?

(All I can think of is CFG style, like "A -> (aA)?" oh, of course, there's also "a*" - still, it would be interesting to see an eg.)

</comment></comment></comment></comment></comment><comment><USER11> I'd say using null-terminated strings rather than pascal style length embedded strings is C's biggest mistake. Responsible for so many inefficiencies (strlen is O(n) instead of O(1) as it should be) and, worse yet, so many incredibly serious security vulnerabilities.

All to avoid having to incur a 1-3 byte per string overhead or figuring out how to efficiently work around a 255 character limit.

<comment><USER10> Other than strlen, string operations can be faster with null-terminated strings. Plus, there are other benefits:

If you want to turn some arbitrary data into a string, just put a 0 byte where you want it to end.

Instead of having to increment and compare both a counter and a pointer (or store a final pointer for comparison) in string-manipulation operations, you just increment the pointer. It makes for very concise loops in strchr, etc.

Tokenizing a string is just a matter of throwing down 0 bytes where the tokens are (as strtok does).

Passing a tailing subset of a string to a function is as easy as adding an integer to the string pointer, rather than requiring a memcpy and length calculation.

<comment><USER12> Null-terminating arbitrary data to turn it into a string is great--if your arbitrary data doesn't have any 0 bytes in it naturally.

Strtok is just as easily handled by handling strings as a 2-item struct: a size_t for length and a pointer (separating the size data from the character array). In fact, that would kick ass: you can non-destructively tokenize, pass around substring arguments, etc.

<comment><USER10> Storing size separately from the character data, rather than as a prefix to the character data, would indeed alleviate some of the potential problems of a size+data string. I could see myself using such an implementation in situations where the minimal overhead of allocating a separate area on the stack or heap for the size+pointer struct is negligible. Expanding strings would certainly be a lot easier, and it would open the posibility (as you mentioned) for complex data sharing among strings, similarly to Qt4.

</comment></comment></comment></comment><comment><USER13> People are permanently trying to "fix" C, but C has nothing to fix.

It is a limited language, both by the constraints at the time of its creation, but also by the problem space where it has been used over the years. And that's how it should be.

C is part of an ecosystem of languages, it doesn't have to be changed to acommodate the latest fads or to fix problems that nevertheless never stopped it from being widely used for decades.

If C doesn't fit a purpose, don't use it. You don't even have to stray too far, since there are a few languages that basically are just C with extras.

<comment><USER14> We have been awash in buffer overflows and other, similar errors (printf strings come to mind) that are actually impossible in a safer language for years. SQL injection can happen in a safer language but you can't take over the web server by doing them. There is nothing fundamental about system languages that requires unsafe array operations. This is a _flaw_ , and it is a flaw of C specifically and a flaw inherited by many C-descended languages. This is not some ivory tower thing that was discovered after C was designed; it was apparent even at the time (although Pascal's fix was pretty bad, variable length arrays fix it neatly). There are compiler articles from the late 70s and early 80s pointing out how even a naïve compiler could easily optimize out bounds checking in most operations!

<comment><USER15> If you design the software correctly then array bounds checking is often a waste of resources. For a stupid example let's assume you have 3 arrays of the same size and you are doing this.

      For (i = 1; i < 10000; i++)
      {
        a[i] = i * i;
        b[i] = a[i] * i;
        c[i] = b[i] * i;
      }

Now that's not a lot of code but with array bounds checking you add 50,000 bounds checks that do nothing useful if the arrays are of the correct size. Clearly there are uses where those bounds checks are useful, but when you care about speed they can become fairly costly.

You might even want to rewrite it as because it really is faster:

      For (i = 1; i < 10000; i++)
      {
        c[i] = i * (b[i] = i * (a[i] = i));
      }

PS: Ugly c code often has a vary good reason for looking the way it does.

<comment><USER14> Those are _precisely_ examples where even the most naive late 70s compiler can optimize out the bounds checking, as is well documented in the literature. (presuming the sizes are >= 10000, of course) All it takes is a validity range, noting that i goes from 1 to 9999 and that at each access i is within the range of the array. To trick out the compiler optimizations you need to at least start doing nontrivial mathematics on the bounds indices, which are also the ones that are the least obvious and thus in need of the bounds indices.

<comment><USER15> I would be impressed if that worked correctly on multithreaded code or if it could survive some of the more esoteric pointer manipulations you can do in C. It's mathematically impossible to make the perfect language for all problems, so while many languages have been built that are a "safe" version of C they lose something for everything they gain.

PS: Even compiler bugs can be useful under the correct circumstances.

</comment></comment></comment></comment></comment><comment><USER16> When I was reading this, I thought "Nooo! Don't make the size of an array part of its type!" That has been rightfully shown as a very bad idea by Brian Kernighan, see <http://www.lysator.liu.se/c/bwk-on-pascal.html> Luckily the proposal is about passing a 'fat pointer', really a pointer and a length. I did that often in my C programs too: int process(char *buf, int buflen);

Maybe this fix to C's Biggest Mistake, a.k.a. the 'fat pointer', is just syntactic sugar.

<comment><USER17> I don't think Walter suggested having the array size part of the type (static array types).

He suggested using "fat pointers" -- pointers along with their extent. This is similar to how many Pascal compilers treat the type "String".

Kernighan mentions Pascal strings in his article but claims the solution does not scale to other types. Walter's solution does work for all array types (but admittedly has other problems).

</comment></comment><comment><AUTHOR> I feel the lack of a module system is the biggest mistake in C. It is tiresome to prefix every single public function: list_append, list_delete, hashmap_insert etc.

</comment><comment><USER18> I think the preprocessor is the biggest mistake. It was introduced to address issues of separate compilation in a simple way, but it generated more trouble than advantages.

<comment><USER19> I understand the issues with the pre-processor, but I still think C is better off with it than without it. I know it can be abused horrifically but it can also be abused in really nice and convenient ways. If you construct you macros right they can be useful or even wonderful. In that sense the pre-processor is very C-like.

The things that makes macros actually nice are some of the gcc extensions, like the ({ }) block expression syntax and typeof().

</comment></comment><comment><USER20> I don't think arrays are "converted" to pointers. Arrays are simply a cleaner way of doing pointer arithmetic and allocating large(r) blocks of the stack. Nothing is lost in this "conversion." The array never knows it's own dimensions beyond the time you declare it. It's up to the developer to keep track of that.

<comment><USER21> Here is an example that caused me a few bugs.

      // define a new type called md5_t
      typedef char md5_t[33];
      md5_t g_md5;
      // here sizeof(g_md5) == sizeof(md5_t)

      void f(md5_t md5)
      {
        // here sizeof(md5) == sizeof(char*)
      }

The type information definitely lost inside functions.

<comment><USER20> This works, sure, but if you do:

            char test[1024][32];
            printf("%i\n", sizeof(test));

You'll get 1024 * 32 (32,768). It didn't know that it's a 2D array. When you pass a stack-allocated array, it passes by pointer. It works this way because C is portable assembler.

<comment><USER22> There is no logical connection between the use of the `sizeof` operator and differentiating between 1D and 2D arrays, so "it didn't know that it's a 2D array" makes no sense.

Secondly, it's not really meaningful to talk about "pass by pointer". Parameters are generally either passed by value, by reference, or by name. C only does pass by value; to emulate pass by reference, you need to pass the address by value, as a pointer - or as an "array". But the only array type you can declare is missing the crucial dimension length aspect.

Finally, saying that C works the way it does because it's portable assembler does not have strong explaining power. Arrays are not usually machine-level concepts; pointers with appropriate declaration syntaxes for static and automatic block allocations could take their place in C. Since C does have a higher-level construct called an array, it's not a big leap to imagine it being better designed.

</comment></comment></comment></comment><comment><USER23> C's biggest mistake would have to be C++.</comment>


Developers are your users too – a defence of 'View Source' - <AUTHOR> https://medium.com/@jasoncartwright/developers-are-your-users-too-73e186dc8fd2 <comment><USER2> View Source is how I taught myself HTML/CSS at 14 in 1996 making a website for my Quake clan. I would not be a software architect now without View Source and pirated photoshop.

EDIT: I can't actually remember if CSS even existed yet back then.

<comment><USER3> CSS technically came out near the end of 1996, but I don't think it was widely used for layouts until the early 2000s when sites like A List Apart and the CSS Zen Garden were advocating against using tables for layout and separating content from presentation. A lot of web sites back then were made by mocking up a design in Photoshop and then splicing it up into a bunch of image files that you meticulously recreated in a grid using tables and spacer GIFs, so transitioning to fluid CSS layouts required rethinking the whole design approach for a lot of people. (I initially only used CSS to add hover color to my links, since that was one thing you could do in CSS that you couldn't do with plain HTML attributes.)

"View Source" was definitely the thing that got me into web development and eventually programming in general. That and reading books at Waldenbooks at the mall while my mom and sister were shopping was pretty much how I learned everything back then (since we didn't nearly the wealth of online resources we do today, and the ones we did have weren't as comprehensive as something like MDN). I remember Microsoft's web sites all used VBScript instead of JavaScript back then. I remember seeing Flash for the first time and thinking it was incredible but then being disappointed that it was a binary file format that I couldn't recreate.

Like the article author, I've oft lamented how byzantine and opaque modern web sites are to tinkerers thanks to things like CSS preprocessors (which can often lead to complex class webs like the excerpt in the article) and JavaScript minimizers (which, even if you "unminimize" it, strips meaningful symbol names and comments). Granted, there are a whole ton of new ways to learn these things, but there's something to be said for just diving in and seeing how somebody else did it.

(Edit: I should note that the CSS inspector and JavaScript debuggers in modern browsers do help bridge this gap.)

<comment><USER4> > _I 've oft lamented how byzantine and opaque modern web sites are to > tinkerers thanks to things like CSS preprocessors_

There was an attempt to get people to release the unprocessed files as .max.css|js (as opposed to min). I don't think it ever gained much popularity.

</comment></comment></comment><comment><USER5> Another issue, is that it is more and more difficult to create a web crawler as you need to render js to be sure to really see all content and you can't know beforehand if the pages needs Javascript rendering. As it cost much more to render js than parsing a html, only Google and a few other big Corps can afford it

<comment><USER6> Is it? we just have multiple instances of puppeteer that makes screenshots and dumps rendered HTML for parsing. Very simple service with autoscaling it is very affordable.

<comment><USER7> Definitely more difficult than a single curl/wget request. You now need to parse the results, run a Turing-complete language, launch other requests based on output from that language, then wait for all results to be compiled into the final HTML, which may not even be possible for a continuously updated page.

<comment><USER6> That's all literally 10-20 lines of code and actually much shorter than downloading html manually.

Puppeteer can wait for final HTML.

<comment><USER7> Solving the halting problem is now 10-20 lines of code? Because that would be needed in order to determine if a page is fully compiled to HTML.

<comment><USER6> This is not a problem, this feature is built in in Chrome and is literally one line: [https://pptr.dev/#?product=Puppeteer&version=v3.3.0&show=api...](https://pptr.dev/#?product=Puppeteer&version=v3.3.0&show=api- pagewaitfornavigationoptions)

</comment></comment></comment></comment></comment></comment><comment><USER7> As another addendum, making it readable also helps in contributing to open source libraries. There was a webcomic that I was reading that had JS to have the left/right arrow keys go to the chronologically previous and next comic. This worked, but had a bug where it disabled the alt-left/alt-right shortcuts to go to the previous/next in the browser history. Since the source was easily visible, I could find the JS library used and submit a pull request to keep the usual behavior of alt-left/alt-right.

</comment><comment><USER8> I think one of the strongest arguments against view source has got to be advertising. For example, I like to hide distracting elements of web pages so I can focus on the text. Here is the (current) uBlock rule to block the sticky clappy hands thing that only logged-in Medium users can use anyway:

> ##.iq.n.ip

Those class names will change next week when they push an update, breaking the rule and making me dig out the eyedropper again. This isn't _that_ effective against ads of course; any page with an obnoxious ad that defeats my filter gets closed, and the community-run filters pick up the new rule changes basically same day. All it really does is harm the usability of the site for those users who need the accessibility tweaks.

<comment><USER9> Amen. I wish more developers realized that without deliberate effort, minification == obfuscation.

I've written small custom scripts to reformat and enhance redfin's data when I was househunting, to declutter (read: adblock) pinterest, etc etc.

Navigating markup is a nightmare when each node has 10 minified classes with no obvious meaning, and such frequent overlap that it's difficult to infer from usage alone. And that's _before_ the weekly rotation.

\---

aside: I wonder if there's appetite for a tool that takes snapshots of markups/css and tries to automatically update old -> new classes.

<comment><USER10> You get around this by shaming them into adding aria tags for the accessibility. The tags have to be meaningful to be useful which you can then use as your selector

</comment></comment></comment><comment><USER11> Once webassembly becomes a thing, we can leave the web to the documents and migrate all the apps to the bytecode. That should bring peace to many HTML designers.

</comment><comment><USER12> Class names should not be semantically relevant. Typically, class names aren't announced by screen reader technology. In this particular case, I think better developer tooling is the solution. An option to hide the class attribute would dramatically simplify that DOM view. It's also possible those class names could be mapped to some pre-minified, human-readable values.

<comment><USER13> That's true, but well-named semantic classes aid with other accessibility purposes. Making elements easy to target means screen scrapers and user themes can be maximally effective in targeting the right elements.

Some user themes are for visual nicety, sure, but they might be essential aids to some. Making it easier to data-grab with BeautifulSoup etc means any data shown is more portable, too. Data scraping is all sorts of useful, and having classes that aren't minified garble makes it a considerable amount easier to target.

<comment><USER12> Even with the best of intentions, DOM structures can change without advanced notice. Instead of scraping via DOM structure, why not screenshot a webpage and use OCR? I think the solution to the scraping problem is being viewed narrowly.

<comment><USER14> This suggestion is a hilarious admission that hypertext as conceived failed. And that makes me rather sad.

<comment><USER12> It didn't fail. People don't want others scraping to protect their businesses. And that's how we've ended up with highly obfuscated HTML. If it failed, it wouldn't work at all. HTML was designed to display documents, not for scraping purposes. You know what is designed to be scraped? An actual application programming interface.</comment></comment></comment></comment></comment>


Ask HN: Should you use a fake landing page to validate your idea? - <AUTHOR> This has come up in HN comments before [1] [2] but I'd like to hear people's thoughts specifically on this topic. Should you use a fake landing page to validate your idea? Specifically landing pages that look like they're for completed products with prices included not "coming soon" pages.
Is it too unethical to study how customers respond to your product without telling them it's not real first?
1. https://news.ycombinator.com/item?id=22110004
2. https://news.ycombinator.com/item?id=22382691 <comment><USER2> It's certainly effective. I once spoke with a guy who founded a relatively large e-commerce biz ($100m+ revenue) and had been exploring a new product. To validate it, he put together an entire webstore complete with an actual checkout - not just a price, but people could actually put in a credit card and pay. He bought a variety of ads for it, collected orders, and then just cancelled all the orders. This essentially allowed him to measure all the numbers he needed to validate whether it would be profitable (ad targeting, conversion rates, etc.) without the cost of having to actually manufacture the product.

The best part of this approach is that you measure actual conversions, and your numbers aren't distorted by people who are only willing to subscribe to a mailing list, or even people who make it all the way to a checkout page before changing their minds. It's purely people who would've actually paid for your product, because they really thought they did.

On the surface it seems sketchy and possibly unethical, but I suppose the inconvenience to the customer is relatively small. They experience a brief disappointment when they see the email telling them the order is cancelled, and that's likely the full extent of your negative impact on them. You could even argue it'd be unethical to yourself / your investors to not validate an idea every way you can before spending lots of time and energy on it.

<comment><AUTHOR> Interesting, that's probably further than I was even considering.

Part of me is thinking "how upset would I really be if I went to pay for something and got an 'under construction' message at the last minute", probably not that upset. However if I thought I had paid for something and later found out the order was cancelled it would be a different story.

</comment></comment><comment><USER3> As long as you're prepared to lose all these customers, and take the risk of whatever bad rep it causes, sure. When you weigh the pros and cons, it's better to get the emotional maths right:

Factoring in just the disappointment of a cancelled purchase is not enough. You have to take into account the risk aversion that was overcome to make the purchase (which, in light of the cancellation, turned out to be a wrong move). You have to take into account that now the service is perceived at best as flaky, and at worst dishonest. And that the odds of getting some negative comments online is in direct proportion to the success of your experiment. So that when you do launch a product, that's the information already out there that you have to overcome.

It still may be worth it to test it that way, if your audience is big enough for all of this not to matter.

Personally, I believe at this stage of the game everyone's a bit jaded with explosive growth stories, and it's likelier to build a business based on your first 1000 fans.

</comment><comment><USER4> Personally, I think it's not ethical. Also, I don't think a fake landing page will actually validate an idea -- true validation takes time and interaction with customers, something that fake landing pages won't offer.

</comment><comment><USER5> If people are disappointed that they can't actually buy your product, it's only because they want it and can't readily get it by any other means (otherwise they never would have bothered with you in the first place). By validating your idea, you move one step closer to satisfying their wants and needs. If you don't validate your idea, or validate by a slower or less effective method, you are delaying, possibly indefinitely, their ability to purchase what they desire. While some people may react negatively to being "misled" like this, that doesn't change the fact it is objectively in their best interest. Your desire to avoid misrepresentation does no good beyond making you feel better about yourself for having followed an arbitrary moral rule without regard for circumstance. Any ethics system that says go against everyone's best interests to make yourself feel good is dumb.

</comment><comment><USER6> You don't necessarily need it to be fake. What we did was put up a store button on our app, and when someone clicks it, it prompts a "Sorry, under construction". And then we'd record clicks on the button.

You'll lose a few customers that way, but it's a lot cheaper to validate there over spending a couple months populating the product.

We considered adding on a meal delivery service, and then added a box where you enter your postcode and it tells whether the area is in delivery range. Of course, we didn't start it yet, and no area is in delivery range, but it was valuable data on what cities wanted it and what numbers we'd get.

I'd say the important part is just _don 't lie to them_.

<comment><AUTHOR> Fair enough, and to clarify that is what I meant by "fake". I guess just fake in the sense that the user clicked through to your page expecting there to be a real product.

</comment></comment><comment><USER7> I think the problem with this approach is that it only validates the product if you get customers. The average case probably goes like: spend xxxx on adwords, get 0-1 sales. At this point you don't know if your sales pitch is wrong, your product is wrong, you didn't reach the right customers, if the problem doesn't exist, etc etc.

</comment><comment><USER8> What does your moral compass say? Do you need ethical validation from strangers on HN, most or some of which you don't know?

<comment><AUTHOR> Personally? I don't know if I'd feel right with it but I also don't work in marketing. I was involved in observing a focus group once for a startup I worked for, but even that felt weird for me.

I'm more interested in what other people here have to say. A lot of HN users have started their own businesses and been involved with startups during product validation. I guess that makes this is as good a place as any to ask strangers what they think.

</comment></comment><comment><USER9> The closer you're to reality, the better your funnel will be.

If you just make 2 landing pages, sure you'll know that A is better than B, but don't expect to convert many of your A's signups months after when you launch.

So if your intent is to test idea A vs B, go for it. If you're pretty clear and want to collect initial users, go a bit further.

</comment><comment><USER10> Everyone's morals are different, but I wouldn't do it. I did it once for a page I got a small traffic and I got one "sale" that I refunded and the whole thing made me not feel good at all. There are better ways!

<comment><AUTHOR> Any resources you can share that worked better for you?

</comment></comment><comment><USER11> Well , it's deception for personal gain ... To that effect it's somewhere on that immorality spectrum.

Personally, I think one trades morality for gain at the risk of a particularly slippery slope.

</comment><comment><USER12> I don't think "fake" is the right word to use because it immediately sounds bad.

Just don't sell the potential user's contact info or use it for a project they were not interested in.

</comment><comment><USER13> Hello Abetlen.

I sort of work in marketing, long story, not the place.

I read the other comments, so my response:

1\. I see no point in messing around and not acknowledging it for what it is. It is fake. Although I prefer to describe it as deception. No point beating around the bush. If you are going to do it, at least call it for what it is. Unless of course you state the product isn't ready.

2\. Where I stand is a bit more complicated, and that is not me weaseling my way out of it. The following is also what I say to startups I work with.

3\. This attempt at market demand validation has a number of factors that will greatly influence if validation will occur or not. The user Rococode touched on some of the points in his reply. The person he is referring to in his example built a large e-commerce business. He was exploring a new product. This guy either built or had personnel to build him a top notch webstore that gave a sizable impression of a fully functioning website. I assume, based on having a successful e-commerce business that this guy knew the recommended best practices when it comes to a webstore: reviews in the right place, high quality images, trust signals, security signals, etc, etc, the works.

This guy then brought a variety of ads. Again based on the successful e-commerce business I don't think it's a stretch to assume he knew which keywords to use, the various factors involved in targeting the right potential buyer (segmentation, buyer intent, etc), had compelling ad copy, decent landing page (and the things needed to make a good landing page), etc, etc.

So, going to the start of this point, market demand validation has a number of factors that will greatly influence if validation will occur or not. And so you have to ask yourself, do you have that skill-set to get those various micro-validations to occur in order for the big main validation to occur?

4\. When it comes to idea validation, what does that mean to you, to me it's too vague. What are the elements of your idea? What exactly are you validating? In order for what I assume is an attempt at market demand validation where there is a button on a website that suggests (in this case) a monetary transaction will take place. It is fair to say you need a decent understanding of the problem, the contributing factors, the root causes, the pain points, motivations, objections and reservations, the solution, the benefits from the solution, the goal and the end-goal.

Now take into account the aforementioned things in point 3, decent landing page, right channel, right segment, right targeting, right keywords (if using ads), etc. How many things, how many micro-validations need to occur in order for the required validation to occur?

5\. That example in point 4, is B2C or B2 Small B where the buyer and user are the same. Now take into account if it is a B2 Mid B or B2Enterprise. If the sales approach is to be a bottom up sales approach, and a PQL funnel, which is where you target the end-user bypassing management, because the end-users have the discretion to use their own products, then let's group that as a B2C or B2 Small B approach as well for arguments sake.

But if this a traditional B2 Mid B or B2Enterprise, then you could be targeting internal champions who may or may not have a small fund of their own. If not, then you have the most complicated, time consuming sales model, multiple stakeholders, etc, etc. So, what exactly is going to be validated here? Market demand? The ones holding the purse strings, very unlikely indeed that you will even be targeting, as for knowing what to say to them? I'll be polite and say next to no chance.

6\. Far too many startups, and far too many people who have experience in these things (and a s __t load that don't) keep proposing these shortcuts to validate, when they have either not taken into account, or chosen not to state, the many other things involved in what they think is a controlled experiment. What type of experiment has so many unknowns in it like this?

7\. I am in favour of shortcuts, but I like to know what I am cutting out.

8\. If what you are proposing is no different from what is already on the market, ie there is nothing unique about your proposition (segment, product, price, positioning, etc, etc, then what's the point in wasting time? The markets validated.

9\. As for your other questions, Any resources one can share that worked better for you? Case by case really. If you want to chat further let me know.

Cheers, Ace.

</comment><comment><USER14> Maybe it's unethical if you're a dog.</comment>


Show HN: Matchimals.fun – an open-source puzzle/matching card game for kids - <AUTHOR> https://www.matchimals.app <comment><AUTHOR> Hey HN–

Matchimals.fun is an animal matching puzzle card game I made for the kids in my family. I initially built a web version using React and boardgame.io– and over the course of the past year I've turned it into a React-Native app.

iOS: [https://itunes.apple.com/app/id1348821168](https://itunes.apple.com/app/id1348821168)

Android: [https://play.google.com/store/apps/details?id=com.matchimals](https://play.google.com/store/apps/details?id=com.matchimals)

All the source code is available for browsing on GitHub: [https://github.com/igravitystudios/matchimals.fun](https://github.com/igravitystudios/matchimals.fun)

While the game is compatible with phones– it definitely plays best on tablets. It's far from perfect and there's still a lot that can be done to improve it– but I'm happy to have the initial version published to the app stores.

Would love any feedback you folks may have.</comment>


The grandmother factor: Why do only humans and whales live long past menopause? - <AUTHOR> http://www.scientificamerican.com/blog/post.cfm?id=the-grandmother-factor-why-do-only-2010-06-30 <comment><USER2> It's an interesting article, but surprisingly light on details, even for Scientific American.

Here's the actual paper: [http://rspb.royalsocietypublishing.org/content/early/2010/06...](http://rspb.royalsocietypublishing.org/content/early/2010/06/24/rspb.2010.0988.full)

And here's a delightful book that hits this topic and more: [http://www.amazon.com/Mothers-Others-Evolutionary-Origins- Un...](http://www.amazon.com/Mothers-Others-Evolutionary-Origins- Understanding/dp/0674032993)

Sarah Hrdy is one of the absolute best popular science writers out there. This and her earlier book "Mother Nature" are two of the best unsung biology books I know of. I've given multiple copies as gifts.

Edit: Having now read more of the referenced paper, my opinion of the Scientific American article drops further. The key detail left out of the SA summary is that the paper describes an interesting mathematical model, rather than yet another 'just so' story. Read the paper, skip the summary.

</comment><comment><USER3> And now we cicumvent all evolutionary purposes, by moving across the country, and having children in our 30's, making it very hard for the elder generation to become involved with our children's lives.

<comment><USER4> Of course, the ease of moving across the country has been facilitated by advancements in transportation and communication, and the trend of people having children in their 30s is likely correlated with the simultaneous increases in average lifespan, so this is really a self-correcting problem.

Evolution is a process that is always at work in all circumstances, not something that we can circumvent.

</comment></comment><comment><USER5> Humans and dolphins. None of the "whales" mentioned (orcas and pilot whales) are actually whales, they're both dolphins.

<comment><USER6> This kind of response is part of why hackers have such a difficult time in social groups. That it is upvoted 7 times really drives the point home. The article isn't at all about whale nomenclature. It's about an observation of the world around us and a discovery that may explain it.

Yet, this comment has nothing to do with that discovery and only "nitpicks" some superficial detail wholey irrelevant to the discussion. It throws everyone off track with something that doesn't matter -- at all.

It's a semantic debate and it detracts from the conversation. It's annoying and it's why "normals" don't like to talk with hackers.

For the record, _some_ people believe dolphins are whales, and some don't:

<http://www.ftexploring.com/askdrg/askdrgalapagos4.html>

<comment><USER7> I agree, but the article didn't contain any actual research figures, just a few suppositions (which made the inaccuracy stand out).

</comment></comment></comment><comment><USER8> How can this be right? I know that elephants society is formed around matriarchs that may be quite old.

<comment><USER9> Based on both the article data and your data I can deduce that old matriarch elephants are still fertile.

</comment></comment><comment><USER10> A couple more reference links on the topic:

[http://www.fightaging.org/archives/2009/02/why-are-humans- lo...](http://www.fightaging.org/archives/2009/02/why-are-humans- longlived.php)

[http://www.fightaging.org/archives/2005/04/evolution- longe-1...](http://www.fightaging.org/archives/2005/04/evolution-longe-1.php)

Evolutionary histories and their effects on life span are still a rich area for research. New and interesting theories are still being developed. For example, see the recent thoughts on crowding as a path to longevity in some species:

[http://www.fightaging.org/archives/2008/01/ouroboros-on- the-...](http://www.fightaging.org/archives/2008/01/ouroboros-on-the- evolution-of-extreme-longevity.php)

</comment><comment><USER11> Because Scientific American forgets about elephants?

</comment><comment><USER12> This is a relatively recent development in human life. Roman women didn't usually live past 30. And it wasn't until the XX century that average life expectancy exceeded 40 years.

EDIT: And 50% of Roman women died giving birth. So there weren't many grandmothers around.

<comment><USER13> This is a common misconception caused by quoting mean life expectancy at birth, when the distribution is highly asymmetrical. High infant death rates cause low life expectancy at birth, but the life expectancy if you live to age 5 can be massively longer.

A 5 year old ancient Roman was expected to live to 48. About 35% of the ancient Roman population was over 30 years old. The highest listed age is 76, which is the life expectancy of a 70 year old, an age that about 1 in 50 ancient Romans achieved. <http://www.utexas.edu/depts/classics/documents/Life.html>

[http://en.wikipedia.org/wiki/Life_expectancy#The_Popular_Mis...](http://en.wikipedia.org/wiki/Life_expectancy#The_Popular_Misconception)

<comment><USER12> Excellent point. But that still doesn't leave many grandmothers around (1 in 3 at best?). And they didn't have many years beyond their reproductive age.

<comment><USER14> Um, think about your numbers a bit more. 1 in 3 what? If 1/3 of the population was over 30 and the average lifespan of people living past infancy was 48, there were probably a _lot_ of grandmothers around. Especially if women were having their first children in their late teens, which is just a guess but seems likely.</comment></comment></comment></comment>


At Particle Lab, a Tantalizing Glimpse Has Physicists Holding Their Breaths - <AUTHOR> http://www.nytimes.com/2011/04/06/science/06particle.html

<comment><USER2> This stood out to me:

"a spectacular last hurrah for Fermilab's Tevatron, once the world's most powerful particle accelerator and now slated to go dark forever in September or earlier, whenever Fermilab runs out of money to operate it."

I don't know the backstory here, so I won't jump to conclusions. Is there a reason besides lack of funds for shutting this place down?

<comment><USER3> How do they decommission a lab like Fermi? Does private industry by the particle accelerator and use it for some other applications?

<comment><USER4> The lab itself will stay there. Only one experiment is being shut down (D0 at the tevatron. Granted when people think Fermilab, they think tevatron, but there are other experiments located there). They have future plans for a new accelerator located at the tevatron location.

I assume that most of the technology will have to be scrapped, and the only thing that would be reused would be the tunnels.

<http://projectx.fnal.gov/index.shtml>

</comment></comment></comment><comment><USER5> Ex particle-physicist here. Extremely unlikely to be a new force of nature, given the energies that the Tevatron operates at we'd have seen some evidence for this before - and nothing has ever suggested there might be something like this in addition to the fundamental 4. And whilst there might be wild speculation in the press as to what this might be, the research group(s) at Tevatron will certainly know. Given that one of the Tevatron's big hopes was to trump the LHC with a signature for the Higgs it could be something along these things, which would be fantastic. Although it's probably likely to be something more mundane.

</comment><comment><USER6> Which is the paper mentioned in the article?

<http://arxiv.org/find/all/1/all:+Punzi/0/1/0/all/0/1>

[http://arxiv.org/find/all/1/all:+AND+punzi+lett/0/1/0/all/0/...](http://arxiv.org/find/all/1/all:+AND+punzi+lett/0/1/0/all/0/1)

<comment><USER7> The New York Times has thankfully started to link to sources and papers and actually does so in this article. Here is the paper: <http://arxiv.org/abs/1104.0699>

Links in the text are always a bit cryptic, it would help if they were to put an info box at the end of articles with all the relevant links — but I don't want to complain, putting the link in there at all is already a pretty masssive improvement.

<comment><USER6> Thanks. The link in the article was edited after my submission. When I posted the link was only to arxiv.org.

</comment></comment></comment><comment><USER8> I hope the new force in nature is not this: "Fermilab's Tevatron [...] now slated to go dark forever in September or earlier, whenever Fermilab runs out of money to operate it"

</comment><comment><USER9> These Particle Accelerators should not be wasted or scrapped! This process could be used to study materials, which could lead to advances in: temperature limits, strength, etc...

<comment><USER10> Operating equipment like a particle accelerator is surely not cheap. If they decide that it would be better to share time on newer equipment rather than face the rising maintenance costs of older, less capable equipment, scrapping it is likely the best option.</comment></comment>


Three.js – JavaScript 3D library - <AUTHOR> http://threejs.org/ <comment><USER2> Sorry, but this is like posting jQuery. Who doesn't know about three.js?

[https://hn.algolia.com/?query=threejs&sort=byPopularity&pref...](https://hn.algolia.com/?query=threejs&sort=byPopularity&prefix&page=0&dateRange=all&type=story) (354 submissions with three.js in the title).

[https://hn.algolia.com/?query=threejs&sort=byPopularity&pref...](https://hn.algolia.com/?query=threejs&sort=byPopularity&prefix&page=0&dateRange=all&type=comment) (2,358 comments mentioning three.js)

<comment><USER3> _Who doesn 't know about three.js?_

People who aren't doing webgl work? People who have better things to do than investigate what the latest "foo.js" is just because it's in a Hacker News headline?

<comment><USER4> _> People who have better things to do than investigate what the latest "foo.js" is just because it's in a Hacker News headline?_

But they won't be looking here either, one would assume...

</comment></comment></comment><comment><USER5> First time I've seen this. Really enjoyed some of the sample applications of it also, so thanks lisper.

</comment><comment><USER6> This post looks like some kind of an experiment on HN.

<comment><USER7> 48 upvotes, apparently the experiment is working

</comment></comment><comment><USER8> Coming soon, an original and addictive JavaScript 3D library: 2048.js

<comment><USER9> You mean this? [https://github.com/gabrielecirulli/2048](https://github.com/gabrielecirulli/2048)

</comment></comment><comment><USER10> Also FYI, a nifty R package that uses threejs [http://bwlewis.github.io/rthreejs/](http://bwlewis.github.io/rthreejs/)

<comment><USER11> have to find a way to add D3 to that stack so that it becomes R3-D3.

</comment></comment><comment><USER12> troll?</comment>


Flight ET702 hijacked – live Twitter feed - <AUTHOR> https://twitter.com/search?q=%23ET702

<comment><USER2> At least it wasn't an ET961 situation this time. [http://en.wikipedia.org/wiki/Ethiopian_Airlines_Flight_961](http://en.wikipedia.org/wiki/Ethiopian_Airlines_Flight_961)

(Hijackers were too dumb to understand fuel loading policies; aircraft ended up ditching into the Indian Ocean. Amazingly, 50 pax survived.)

<comment><USER3> Actually it sounds like today's hijackers were indeed that dumb, they just managed to be circling over an airport by the time they ran out of fuel. (Or perhaps that wasn't a surprise to them and they knew they'd be safe over Geneva?)

<comment><USER2> I still can't imagine anyone obeying hijackers anymore. If someone got up on a plane and said he had a bomb, I'd be running toward him to knock him down and incapacitate (ideally, by killing) before he'd even stopped with his announcement. I'm pretty sure on most US airlines I'd be blocked by a bunch of other passengers doing the same thing.

9/11 really screwed things for hijackers.

(EDIT: appears it was the co-pilot, and the reinforced door installed after 9/11 actually allowed him to keep the real pilot out! So at least it wasn't an EgyptAir 990 situation either...)

<comment><USER3> That's certainly the common thought (that it would be impossible), but does it hold up in practice?

Let's say a repeat of 9/11 happened, then judging by expected outcomes it would definitely be better to all rush the hijackers, even if half the plane died in subduing them it would be better than everyone dying (and more on the ground) if you let them do what they want.

Today's example on the other hand, the best case scenario is what ended up happening (the hijacker/s don't have the goal of killing people, so there's a reasonable chance that everyone can survive), therefore is it worth taking the risk to stop them? In this situation, even one person dying while preventing them from taking control of the plane can actually be a worse outcome than leaving them to their negotiations.

In terms of mathematical outcomes it's hard to say which course of action would be better: firstly because you couldn't give accurate probabilities, and secondly because the expected outcome might not match the best bet. For example, if preventing hijackers gives a 95% chance that at least one person dies, and leaving them to it gives a 1% chance that 50 people die, then played out over 1000s of times you're actually better not doing anything, but over a single time is it worth taking that risk?

And then past that, even if these numbers were easy to analyse, how will people on board react when a.) emotions are running high and b.) rather than typing at my desk at work, I'm confronted with the situation that _I 'm_ the one risking my life to stop them. Even if I knew the odds meant they really needed to be stopped, I'm not sure I'd have the balls to run at men with weapons.

<comment><USER2> It's entirely possible it's not the right course of action, but it's reflex. Now that it's known terrorists view aircraft as weapons, even taking control of the aircraft is a deadly threat.

The weapons usually used to control an aircraft are the threat of bombs. A fake bomb is just as effective as a real bomb, and vastly easier to bring onboard, so it seems rational to presume any bomb threat is fake. To a first approximation, hijacker in a plane aisle is a problem of running at him and tackling, which is about the easiest possible thing to do.

</comment></comment></comment></comment></comment><comment><USER4> Plot twist: it was co-pilot. Source: press conference

 _Edit_ : video here [http://www.20min.ch/schweiz/romandie/story/Das-Flugzeug- wurd...](http://www.20min.ch/schweiz/romandie/story/Das-Flugzeug-wurde-vom- Kopilot-entfuehrt-22505714)

Can someone translate? (French). _Edit'_ : scratch that. (There was a press conference recording (yes, in French))

<comment><USER5> I don't speak French but... [http://www.20min.ch/schweiz/romandie/story/Das- Flugzeug-wurd...](http://www.20min.ch/schweiz/romandie/story/Das-Flugzeug- wurde-vom-Kopilot-entfuehrt-22505714)

Edit: confused if this article was requested to be translated to or from French. Mobile browsing sucks. Here is English. [http://translate.googleusercontent.com/translate_c?depth=1&n...](http://translate.googleusercontent.com/translate_c?depth=1&nv=1&rurl=translate.google.com&sl=auto&tl=en&u=http://www.20min.ch/schweiz/romandie/story/Das- Flugzeug-wurde-vom-Kopilot- entfuehrt-22505714%3Fredirect%3Dmobi%26nocache%3D0.3424269447568804&usg=ALkJrhgVWxhJpUsfS_A1sODXTjkrzV02Fg)

</comment></comment><comment><USER6> Airline has confirmed hijacking. passengers and crew safe

[http://www.ethiopianairlines.com/en/news/default.aspx](http://www.ethiopianairlines.com/en/news/default.aspx)

<comment><USER7> Okay, show's over. Everyone came out save and sound.

via [http://www.rts.ch/info/suisse/5619177-aeroport-de- cointrin-f...](http://www.rts.ch/info/suisse/5619177-aeroport-de-cointrin- ferme-apres-un-detournement-d-avion-a-geneve.html)

</comment></comment><comment><AUTHOR> Details are sketchy. It's believed to be hijacked. Having circled Geneva for some time, it's landed. The airport seems to be closed.

The air traffic control live stream:

[http://www.liveatc.net/search/?icao=gva](http://www.liveatc.net/search/?icao=gva)

Anyone with any actual non-speculation, feel free to post.

</comment><comment><USER8> Apparently the hijacker(s) wanted political asylum in Switzerland:

[http://www.jaunted.com/story/2014/2/17/02325/1000/travel/BRE...](http://www.jaunted.com/story/2014/2/17/02325/1000/travel/BREAKING%3A+Ethiopian+Plane+Hijacked%2C+Flown+to+Switzerland+for+Asylum)

<comment><USER9> Probably not the best way to get political asylum.

</comment></comment><comment><AUTHOR> Collating some information in this globally editable Google Doc [https://docs.google.com/a/yencken.org/document/d/1uxcXrdPVau...](https://docs.google.com/a/yencken.org/document/d/1uxcXrdPVauIJqeDnhzgppzIduiOYu5ZilvS7bYnh5lg/edit#)

</comment><comment><USER10> Hijacker has been arrested according to this:

[http://jpupdates.com/2014/02/17/breaking-hijacked- ethiopian-...](http://jpupdates.com/2014/02/17/breaking-hijacked-ethiopian- airline-landed-in-geneva-airport/)

</comment><comment><USER5> @cnnbrk reported this an hour after it happened [1]. I turned CNN on the television and they were showing an Anthony Bourdain show. Google News showed only 5 results.

Meanwhile, Twitter was streaming with links to flight maps and other updates.

I realize news media might have to do more due diligence before reporting but from the face of it they seemed completely unaware.

[1] [https://twitter.com/cnnbrk/status/435294208824328192](https://twitter.com/cnnbrk/status/435294208824328192)

</comment><comment><USER11> I happened to be at the airport when it happened (still am). We got to hear that the airport closed due to "Operational problems". Plenty vague, but the internets prevails.

</comment><comment><USER12> Its a hijacking: Live reddit thread with updates from /r/Aviation

[http://np.reddit.com/r/aviation/comments/1y46mi/possible_hij...](http://np.reddit.com/r/aviation/comments/1y46mi/possible_hijacking_in_progress_eth_702_squawking/)

</comment><comment><USER13> Local newspaper with details [French]: [http://www.tdg.ch/geneve/actu- genevoise/Un-pirate-de-l-air-d...](http://www.tdg.ch/geneve/actu-genevoise/Un- pirate-de-l-air-detourne-un-avion-vers-laeroport-de-Geneve/story/27179086)

</comment><comment><USER6> Hijacking confirmed:

[http://www.ethiopianairlines.com/en/news/default.aspx](http://www.ethiopianairlines.com/en/news/default.aspx)

all pax and crew safe.

</comment><comment><USER14> It's going in circle atm: [http://www.flightradar24.com/ETH702/2ba40ab](http://www.flightradar24.com/ETH702/2ba40ab)

</comment><comment><USER15> How is his hacker news?</comment>


Free 1-day pass for Intel Developer Forum - <AUTHOR>

The Intel Developer Forum will be next week, September 10-12 at Moscone West in San Francisco. You can get a free 1-day pass with the promo code CDYRTC1 You can register here: https://secure.idfregistration.com/IDF2013/
More info about IDF2013: https://www-ssl.intel.com/content/www/us/en/intel-developer-forum-idf/san-francisco/2013/idf-2013-san-francisco.html?
While supplies last.
Disclaimer: I do not work for Intel. <comment><AUTHOR> CDYCOTS if the code above doesn't work anymore.</comment>


Free AJAX-powered PostgreSQL web frontend - <AUTHOR> http://www.teampostgresql.com?hn

<comment><AUTHOR> Blog post with some details:

[http://blog.webworks.dk/2012/05/teampostgresql-free- postgres...](http://blog.webworks.dk/2012/05/teampostgresql-free-postgresql- web.html)

</comment><comment><USER2> Seems to be running JSP & Struts and includes a standalone Tomcat server. (From looking in the tar)

</comment><comment><USER3> runs on port 8080, that's going to conflict for a _lot_ of java devs.</comment>


Domain name WHOIS anonymity hangs in the balance under ICANN proposal - <AUTHOR> http://arstechnica.com/tech-policy/2015/06/domain-name-whois-anonymity-hangs-in-the-balance-under-icann-proposal/

<comment><AUTHOR> The copyright industry wants "new tools to discover the identities of website owners whom they want to accuse of copyright and trademark infringement, preferably without a court order."</comment>


Scientific breakthrough may eventually allow many blind people to see - <AUTHOR> https://www.cbsnews.com/news/scientific-breakthrough-may-eventually-allow-many-blind-people-to-see/ <comment><USER2> First, it lets the blind see.

Then it gives the sighted a neural interface</comment>


Pitched my idea, positive feedback, then no responds - <AUTHOR>

Hi,
I've pitched my idea to a company that works in the field my idea is aimed at. I was looking for a partnership. They were very positive and asked for my Skype to continue the discussion.
I've replied them 36 hours ago and still don't have a responds. Should I send another email?
Was it stupid of to not have them sign a NDA first?
Regards,
Hans (Netherlands) <comment><USER2> 36 hours is a very short amount of time, certainly if you are dealing with a bigger company. They can need time for internal discussions and probably have other projects to work on too. Too soon to worry I would think!

<comment><AUTHOR> Thanks!

</comment></comment><comment><USER3> Don't over think this-- back away now, ping them in a weeks time. Try once a week for a month, then move on. But don't ever convey that you are needy or desperate.

We've all had prospective partners and clients who gave great tonality in the initial conversations, only to go dark. Stuff happens, people get busy or lose interest.

Here's a good read by Oren Klaff on Pitching > [http://pitchanything.com/book/](http://pitchanything.com/book/)

<comment><AUTHOR> Thanks!

</comment></comment><comment><USER4> Emails get lost, most often in Junk Mail boxes.

When I don't hear back from someone within a reasonable time frame, I follow up with a short email asking if my previous email about this and that was received. If I do not get anything back either within a day or two, I call with exactly the same question: "I sent you an email about <subject> on <date> but have not heard back, so just want to make sure it found its way to your inbox". More often than you would think the person I called would either find my emails in their junk folder, do not find them at all, apologize for overlooking them, or apologize for not replying sooner. (And sometimes they would say they replied and I would find their replies in my junk folder.)

<comment><AUTHOR> Thanks for the great advice. The thing is that I did get a positive responds on my first email saying that they wanted to send me a NDA en my email really got them thinking.

They also suggested a Skype meeting.

After this I send 2 emails without any reply. I'm going to wait for the weekend and then try contacting them again.

</comment></comment><comment><USER5> Sometimes entering discussions with a potential partner trigger an internally required process of due diligence. This means the company is required to go out and find other potential partners to compare against. While they may not find any, they are required to do this search in order to prove they are not giving preferential treatment to one supplier.

Just a maybe.

<comment><AUTHOR> Thanks

</comment></comment><comment><USER6> Joint ventures can take forever to sort out as they are not their current business priority.

<comment><AUTHOR> What would you think is the appropriate time to get in touch again? A week?

</comment></comment><comment><USER7> >Was it stupid of to not have them sign a NDA first?

No don't worry about it.

<comment><AUTHOR> That's what I said to them when they suggested to send me a NDA. I don't really believe in NDA's.

</comment></comment><comment><USER8> Yes you should keep sending emails until you get the next meeting OR a no.

Most likely, they just got busy.

Send another email now. And then send one every 2-4 days.

<comment><AUTHOR> After there positive responds where they asked for my Skype and said that they were willing to send me a NDA, I replied with both my Skype ID and told them to send the NDA over, and this is on Sunday. So on Monday I replied if they got my replay and it's Tuesday now.

I might sound a bit dramatic but I gave them a lot of info and and they might thought why do we need this kid.

<comment><USER9> Or because they can't sign an NDA without their lawyer looking at it and their lawyer doesn't like Mondays, or because your idea sounds like an interesting one for the next strategy meeting which just got postponed until November, or it's Bob's job to deal with that stuff and Bob's on holiday, or it's Bob's job to deal with that stuff and Bob doesn't particularly care for your idea. Or even, in an ideal world, because your idea sounds utterly amazing and they want to spend a lot of time discussing it internally but simply have other things going on right now, or want to research before calling you on Skype.

Trust me, it's often difficult enough to get a reply when the other company has a long term client relationship and is financially incentivised to reply on a particular date...

That doesn't mean they won't care to follow up with you at some point, and it doesn't mean don't chase at the end of the week if you haven't heard from them, but 36 hours is a very short time in business unless you're top of the list of priorities. And if you were their only priority then you should be more worried about where they'd get the money to support the partnership from ;-)

<comment><AUTHOR> Best reply yet ;).</comment></comment></comment></comment>