Ask HN: What do you wish you had known before starting up ? - <AUTHOR> I'm thinking about founding a startup and I'm looking for first-hand advice. <comment><USER3> Great question. Off the top of my head...

      1. if (ethics != 100%) return(DontBother);
      2. Regardless of paperwork, you're *married* to your co-founder.
      3. if (CofounderMarriage == wrong) return(StopNow);
      4. Customer first, technology second
      5. Make your customers love you, everything else gets easier.
      6. Evangelize, evangelize, evangelize.  People love passion.
      7. When in doubt, release. If you did #5, they'll understand.
      8. Get constant feedback. You don't know your requirements.
      9. Run out of cash and you're dead.
      10. Have fun!

[EDIT 11. Accept feedback willingly and implement as appropriate. Thanks, idlewords.]

<comment><USER4> Ah, there's your problem right there. You have assignment rather than comparison in line 3. Fix and try starting up again!

</comment></comment><comment><USER5> Make sure someone has a final call in the company. You can even divide it out: person a has final call on product design, person b has final call on scaling issues,etc. Even if you have 50% equity each, designate it through voting shares or just a bylaw.

A two person bureaucracy is a sure fire way to ensure things never get done as fast as they should. Joe Kraus' story in Founders at Work touched on this. I believe Vinod Khosla told him the best thing to do was break the equity up where someone had a final say (They all held equal shares before that).

</comment><comment><USER6> Start selling things as quickly as possible.

<comment><USER7> The idea of "flying under the radar" should be thrown out.

Most importantly, ideas are worthless without action.

<comment><USER8> > The idea of "flying under the radar" should be thrown out.

That depends on the situation. If you're going head-to-head with a large, established company that could squash you in an instant it may pay off to stay below the radar until you're strong enough to handle them.

BigCorp has been known to simply sue small start-ups for the reason that it ties them up and makes them unattractive to investors. If they're not aware of you until you are much stronger that can be a real advantage.

<comment><USER9> for about 99.99% of the startups this is really wishful thinking. Big Co does not care about you.

</comment></comment></comment></comment><comment><USER10> I was reading this, posted by Snaptalent (YC Winter '08), last night:

<http://snaptalent.com/>

They talk about choices they made and the end result.

It would be great to hear more from YC people about their experiences (a number from the list on Wikipedia have sold or moved on).

</comment><comment><USER11> If you have a partner, make sure you setup a vesting schedule. I didn't, and now wish I did.

</comment><comment><USER12> \- Charging money is a whole new learning curve. Our free product was humming along. We launched a premium product and... "What?! It's not taking off?!" There's a lot to learn about where to put the "pay wall" with a freemium offering, how to get users to upgrade, how to optimize a public/brochureware site for paying conversion, etc. With content sites, I imagine there's a lot to learn about selling ads, remnant ad space, ad networks, etc.

\- Work on your public facing site a LOT. And measure it. In the early days, it's a constant salesperson for you. We all remark on how bad/confusing sites are, but lots of us treat the brochureware part of our business as a red- headed stepchild. After over a year of having a paid offering, we just redesigned our site and there was a 400%+ increase in conversion rate. Thinking about the revenue ramifications if we'd done that a year ago (or even 6 months ago) makes me wince. We were leaving lots of money on the table.

\- Don't pitch big VCs unless you want big money. They take LOTS of meetings to get to a yes/no and make very few investments.

\- Focus on relationships when fundraising. Almost every investor we got was through an introduction (social proof wins).

\- How fast your site/app is is REALLY important.

\- Focus on retention as a metric. The compound interest effect of retention (or return visits if you're a content site) are HUGE. Do the math.

\- Keep your burn low and don't underestimate how long it takes to get to profitability. We raised more than we wanted to and it turns out we needed it.

\- Marketing/sales wins. Almost always. The quality of your product is a multiplier on the success of your business. It's easier to build a great marketing engine on top of a great product than the inverse. VERY VERY few businesses launch a product and ride word of mouth to greatness.

\- PR isn't all that. Great for SEO and social proof, but it's NOT a substitute for a sales/marketing engine.

</comment><comment><USER13> Existing competitors more often mean that the market exists, not that the market is saturated.

</comment><comment><USER14> Stand up for yourself.

Don't make any mistakes big enough to kill the company.

The moment you realize you can't pay a bill talk to the company you owe money to and explain to them exactly why. Then offer to work out a payment plan. You'd be surprised how many companies are just happy your communicating with them and more often than not will work out a payment plan you can handle.

If deep inside you are not 100% about a decision or direction, do something about it. If things don't work out, make sure you won't be able to blame others.

Be very cautions about the impact of hiring full time employees. Once you hire someone who needs healthcare and a 401k your company ceases to be an innocent hobby.

</comment><comment><USER15> If it's your first start-up, have a business model so you can bootstrap - raising any significant money will be difficult without a reputation. [Though being in YC/TechStars will get reputation/connections quickly I guess.]

If you are doing it in your spare time, plan on it taking _all_ of your spare time.

Marketing is difficult, free publicity (from blogs) is surprisingly difficult to get and when you do fewer people than you think sign up / click though.

Go to as many networking events / conferences as possible meet lots of people and be sure to meet key people like press, bloggers and other companies

Spend some time working out what the smallest, least feature rich version of your app is, with only the features in it would make the product unusable without them. I often find frill features only get 5-10% take up from users, so don't put them in the critical path to releasing the first version - <USER2> them in later (or wait for users to demand them).

Do something that is night and day better than the existing solutions currently out there, because if it's only slightly better it's very hard to sell it to people and by the time you've written yours the others will have got better.

Read HN [you got that one already], watch Jason Calacanis's <http://thisweekinstartups.com/> every week [on later today], read all of Paul Graham's essays

All feedback is valuable, don't get offended and reply quickly to encourage more feedback.

<comment><USER16> Thanks for the plug for This Week in Startups. :-)

I also suggest: the "this week in tech" podcast, techcrunch, and thefunded

</comment></comment><comment><USER17> The below may be seem simple but i don't know when i was starting up :( ................

1.Don't go alone atleast partner with one or two similar minded person .

2.Keep run way for atleast 1 to 1/1/2 Year.(nothing auto magically happens)

3.More features will not make your product popular. Implement few set of features which uniquely showcases the core idea.These features has to be done very very very well (remarkable).

4.Atleast one mentors in same area.

etc..........

</comment><comment><USER8> That being a start-up is like being a goldfish in a sharktank.

</comment><comment><USER18> Target businesses, not consumers. It is enticing to build a consumer-oriented service when you have a great idea and a strong team to implement it. The problem is that revenue per customer is low and you will need to attract a lot of users to offset costs and reach profitability. Your runway to success is basically as long as your cash lasts. This is quite a concern if you are an unproven entrepreneur, do not have a large amount of savings, and do not have accesss to a powerful network of people. While you will need to have strong sales skills, businesses are more likely than the average consumer to pay for your product. Your revenue per customer is higher and the burn-rate (servers, bandwidth) is probably going to be much lower.

</comment><comment><USER19> That ideas are expensive, it's implementations that are valuable.

The smaller and narrower the idea, the easier it is to implement. Just keep whittling away more and more out of the idea and just boil it down to its core essence, so that you shed as much of the expense of your idea as possible. This makes it faster to implement, and once you've implemented it funding is easier (plus, you won't have time to work on code once you start looking for investors, they're even more expensive, and the more ideas you have to explain to them the more expensive they get).

So yeah, ideas are expensive. Don't worry, nobody will steal them, so share it with the world, if they tell you it's a bad idea, thank them, they just saved you a lot of time and money.

</comment><comment><USER20> Cash is so important - don't take it lightly. When I first started, this was a side project for me and the tendency was not to be thrifty. Because of some bad decisions spending-wise, it ended up delaying when I was able to go full- time with the business.

</comment><comment><USER21> I really don't see the point of these very vague Ask HN posts. Surely all of this has been said before in longer, better composed blog posts. Just read the stories that show up on HN and you'll find answers to your 10,000ft startup questions.

Ask HN is very useful for specific stuff, like "please give feedback on feature X of my site" or "should I pay for service X" On the flip side, I think it's kind of pointless to ask these kind of "How do I do a startup?" questions.

<comment><USER22> I agree re: "10k ft" questions.

I clicked on this post (hoping) for something slightly different, though: a kind of a "startup lint", a collection of very specific problems that people had, gotchas and things that caught them off guard.

        "File this form, not that form, with the IRS."

        "I thought I had security locked down. I was wrong.
        Always check your ..."

        "A shotgun clause may seem like a good idea -- but
        whatever you do, make sure that your lawyer includes a
        clause to specify ..."

        "If you're trying to decide between a PayPal or
        Authorize.NET solution for processing CC's, make sure
        you factor in the cost of ..."

Collectively wide-ranging, but individually fine-grained. I see lots of 10k ft stuff in the comments, mostly not very valuable, but there are a few fine- grained nuggets.

</comment></comment><comment><USER23> A Known Buyer and <http://www.swaroopch.com/blog/serious-before-startup/>

</comment><comment><USER24> Related question: what's the general feeling about starting a project that you believe will be popular, but that doesn't have a clear revenue path?

<comment><USER8> Troublesome. If you can avoid that sort of project as your 'first' you will have a much higher chance of success.

We got lucky in that respect, we had absolutely no clue on how to do it and then the first big ad brokers came on-line just as we needed them (24x7, doubleclick).

And back then ads were really a way to make income, nothing compared CPM or CPC wise to today. Think $10 CPM and 35 cts / click.

That ad income got us well into the .com crash, by that time we were large enough to pull enough paying users out of our premium program to survive.

But luck is a bad thing to have to base your business on, making something that people really need (and preferably several somethings) is a lot more solid business-wise.

</comment></comment><comment><USER25> Before my first start-up? I wrote it up here:

[http://danieltenner.com/posts/0005-starting-up-with-a- friend...](http://danieltenner.com/posts/0005-starting-up-with-a-friend.html)

Many other things, too, most of which are mentioned in other responses here, but this would have saved me enormous amounts of grief and money if I'd read it and understood it ahead of time.

</comment><comment><USER26> A guy I once met told me to: " _Make something people want._ " The harder they want it, the less hard it will be to survive.

</comment><comment><USER27> Pick partners that are just as enthusiastic about the actual idea and its business potential rather than those who are _only_ really looking to line their pockets. You may miss it at first (especially if it's your first venture), but nobody can keep a facade up forever...

</comment><comment><USER28> How long everything takes.

Also, how to listen to advice (my co-founder and I wrote this up for the SSE blog): <http://blogs.sun.com/startups/entry/how_to_listen_to_advice>

</comment><comment><USER29> learn more about debit/cerdit cards and micro-payments

</comment><comment><USER30> The market. The market. The competition.

</comment><comment><USER31> 100% tangible or 100% worthless.

</comment><comment><USER32> product market fit.

forget users, focus revenue.

AARRR.

</comment><comment><USER33> Sales matter.</comment>


Google proposes standard for making Ajax crawlable - <AUTHOR> http://googlewebmastercentral.blogspot.com/2009/10/proposal-for-making-ajax-crawlable.html

<comment><USER2> Indexing AJAX websites is important, but I don't think much of this proposal.

As far as I can tell, their plan is to create a standard way that AJAX hash links can be translated into real links, which Google will then crawl, expecting that you are running a machine-readable web browser on your server(!) that will render the full page.

Expecting everyone to make a big modification like installing a Java-based browser to their infrastructure is crazy.

A much more sensible solution is the one webmasters should be doing anyway: progressive enhancement. Any AJAX link, when clicked with Javascript disabled, should render the page as it was intended, just more slowly and without animations etc.. Then your site is completely indexable, and as a bonus it's more robust and accessible too.

With a modern MVC framework this is really not that hard to achieve: your AJAX controller should just be spitting out a chunk of HTML, and whether it gets integrated into your template at the server-side or on the client by Javascript should be irrelevant.

<comment><USER3> To be fair, the "standard" part of this proposal doesn't really have anything to do with headless browsers. You could just as easily have a typical server- side app that generates these URLs as appropriate.

For example, a common approach to presenting content in an AJAXy kind of way is to just put a path after the hash. E.g.

        http://www.example.com#/products/bungee-cords

It's probably really easy for the web app to figure out the right content to serve up for #/products/bungee-cords, headless browser or not.

I know you'll be saying, "Of course, but apps should be doing that anyway with progressive enhancement." That's all well and good, but that leads to two separate sets of URLs: one that most users see, and one that search engines see. This fixes that.

<comment><USER2> I don't understand what you're saying. Firstly, web apps can never see anything after a # in a URL: the browser does not send it to them. Javascript can see it, but I don't think that's what you meant.

With progressive enhancement, your URLs should look like <http://www.example.com/products/bungee-cords>. If clicked they should render the page as appropriate. JavaScript, if enabled, will attach a handler to the links and when it sees you trying to click on /products/bungee-cords will halt that click and instead make an AJAX request for the equivalent content. There should be no need to have # links whatsoever.

<comment><USER4> That ignores the fact that people want the URL field to reflect the current state of things, so that URLs can be copied out and pasted elsewhere.

It also ignores the fact that there is no way to set the URL field (through JavaScript or any other mechanism) without actually triggering a page change.

</comment></comment></comment></comment><comment><USER5> That's horrible. Why is everyone so desperate to make everything depend on JavaScript? Especially Google, with GWT and Google Moderator (a great example of a site that could work just fine without any JavaScript at all). I'm all for progressive enhancement and making the user's experience better if they have JavaScript enabled, but hiding everything behind a single GWT script tag and then using grotesque hacks to make the content crawlable is just crazy.

<comment><USER4> There are large classes of web applications which can not work without javascript. Period.

Nobody is saying _everything_ needs to be that way. But some things do. This is an attempt to make those things work better with search engines.

<comment><USER6> Selling web applications that don't work without Javascript is legally dangerous (discriminates against disabled users). There's a lot more to accessibility than making sure your site works without Javascript, but if you're missing this piece its somewhat of a moot point.

There's never been a case that's gone to verdict on the matter, so its still somewhat of a gray area. But the reason they don't go to verdict is because the offending company has always agreed to a large cash settlement. Target's $6MM settlement with the Federation for the Blind is the most recent case.[1]

There's plenty of large websites that drop the ball here (e.g., Reddit), but that doesn't mean its safe to do so. Ignore accessibility at your own risk.

[1][http://www.webstandards.org/2008/08/28/what-the-target- settl...](http://www.webstandards.org/2008/08/28/what-the-target-settlement- should-mean-to-you/)

<comment><USER4> If you honestly believe that people shouldn't make applications that don't work without JavaScript, then you are without question saying that there are applications which _should not be built_ on the web. I respect that opinion, but I don't agree with it.

</comment></comment></comment></comment><comment><USER7> Why is Google telling people to run a headless browser just for their crawler? Sounds way too complicated for any small-scale website. Why doesn't Google run the headless browser themselves? It sounds like they are offloading parsing costs onto websites, but then they have a cheating problem they have to deal with.

Somewhat related: It's not AJAX, but I remember hearing Microsoft Research a couple of years ago talk about parsing CSS. They wanted the page as an image so that they could analyze pictorially what was a menu, what was a header, what was main content, etc. It seemed fairly neat for the time, although I think there are much simpler heuristics for when you are after just the main article type content of a page that will work for most blogs/CMS's out there.

(No, they didn't use IE. I asked. Yes, they tried. They said it was slow and crashed too much.)

</comment><comment><USER8> That's great. Exactly what I'd been thinking about lately.

Avi Bryant: I was just thinking of pinging you about your approach to generating html in Clamato. Are you going to be trying to unify client- side/server-side html generation to solve exactly this problem?

Some thoughts, Google suggests using a headless browser to generate the static version of the dynamic content. This may be the only option for existing code bases. But with server side javascript and by extension Clamato there must be a more elegant solution to generate clean static html as well having a dynamic UI client-side. This seems like something you would have thought a lot about while building The Seaside Framework (<http://seaside.st>) and now Clamato (<http://clamato.net/>).

<comment><USER9> Server-side javascript is only relevant here if it has access to a working DOM, since that's what any HTML generation or templating is going to be based on. At that point you basically do have a headless browser, whether you call it that or not.

I find Google's proposal goofy; I think I agree with the poster who suggested feeding google static HTML (probably via a sitemap) which references canonical URLs that might be ajaxy, rather than having it crawl an ajax site and do this magic token manipulation to get the static HTML equivalent.

</comment></comment><comment><USER10> This is really an important idea. For example part of a website I'm working on displays "customer testimonials".

The right way to do this for user experience is to to allow the user to cycle through the testimonials using AJAX. This allows for some nice looking UI and is faster because less data is exchanged with the server.

The right way to do this for SEO is to have each page with a different testimonial on it with it's own custom title, meta description, and SEO friendly URL.

Which way we go is still undecided.

<comment><USER11> Have you considered parsing the page using javascript, or selectively returning a partial on an ajax request? I use the first method quite a bit. It's a bit slower to send the whole page, but does not require any server side changes.

Once you get the html, libraries like jQuery make the parsing and replacing very easy.

$(html).find('#testimonial').replaceAll('#testimonial');

<comment><USER3> Simpler still:

        $('#testimonial').load('/testimonial-3 #testimonial p');

</comment></comment></comment><comment><USER12> I think they've found a very complicated solution. Wouldn't it be much much easier to:

1\. give the content behind the ajax call a static url, which can be accessed by non-js clients too

2\. add something like <link rel="alternate" media="ajax" type="text/html" href="<http://example.com/doc.html#state> /> to the head of that static version, which the search engines can then use as a pointer to back the js version

</comment><comment><USER13> Perhaps this is infeasible for some reason, but why can't they just use a (higher performance) version of Selenium or something similar?

1\. Use machine learning to identify page elements likely to produce AJAX responses. Not too hard to do this, especially if you actually render the page in (say) Chrome and use the 2D layout in addition to the 1D HTML/CSS as part of your feature set.

2\. Use your (souped up, ultra fast) Selenium replacement to play with all those AJAX features.

[http://www.reasonablyopinionated.com/2009/01/how-to-test- aja...](http://www.reasonablyopinionated.com/2009/01/how-to-test-ajax-apps- with-selenium.html)

...on the third hand, perhaps they're thinking that anyone technically savvy enough to set up an AJAX site (or set up sitemaps or the like) can run this headless browser.

</comment><comment><USER14> I think they are trying to make people do work that they should be doing. The headless browser is something that _Google_ needs to apply to their crawling process.

The work of webmasters should be making the URLs available -- Google has to come up with ways to interpret the content. This is similar to asking web servers to provide an HTML version of PDF documents that they are serving.

</comment><comment><USER15> Hm. If it is content, then it should work in such a way that it can be accessed no matter what tries to get it: webcrawler, javascript incapable browser or user with a "normal" browser but JS switched off. If user agent is ajax-capable, then use ajax. Google for "hijax".

If it is a webapp, then making it crawlable does not make sense anyway.

</comment><comment><USER6> Fundamental problem: the URL fragment after the hash isn't sent to the web server as part of the request. Am I wrong?

<comment><AUTHOR> Google will scan your documents for URLs like "/something.php#!some_ajax_action, and will rewrite those URLs without the fragments (a method they describe in the article, if you read it).

<comment><USER6> Thanks, I missed that on the first time through. Quite an awkward implementation, IMHO.

</comment></comment></comment><comment><USER16> maybe i'm thinking of the wrong kind of content they want to crawl, but isn't it easier to provide special crawlable, plain html pages (possibly hidden to users or provided as an "accessible" version).</comment>


How six people built the #2 mobile analytics tool in just a few months - <AUTHOR> http://waynechang.com/how-six-people-built-the-2-mobile-analytics-tool-in-just-a-few-months-full-article/ <comment><USER2> My only thought as I look at all the energy they put into this product is that I hope they negotiated an earn-out agreement as part of their acquisition by Twitter.</comment>


Lombok Saved My Ass - <AUTHOR> https://devolution.tech/how-lombok-saved-my-ass/ <comment><USER2> While I can understand why somebody would want to use Lombok, this is actually very misguided.

If you want to program in better language, just go and use better language.

The most important strength of Java and basically the only reason it is being used is that the code is simple to understand (simplistic!), everything is easily trace-able and debuggable and that you get fantastic tools that know everything about code and can provide you safe operations on huge code bases (refactoring, finding usages, tracing and understanding code paths, etc.)

Lombok and new Java features decrease reliability of tools removing Java's biggest strength.

<comment><USER3> I have the complete opposite point of view. I never used @Cleanup but at least the @Data annotation makes it much more readable IMO.

There is tons of boilerplate in a simple Java bean, so when you have 3 pages of getters/setters, equals, hashcode, toString etc... and someone introduces something hacky it doesn't jump out at you.

To be fair, it doesn't have to be a hack, but it's doing something weird that's unexpected.

Then if I use @Data and I still see a Getter/Setter defined it calls it to my attention since odds are i'm doing something different.

ie. Oh, you're parsing a string get a numeric value and then setting it with a fallback value/exception. Okay good to know. If it screws up at least I know there is a special behavior here.

Lombok makes these patterns much easier to read though I prefer to only use it for repeat code. Saving one line so you can have @Cleanup doesn't seem worth it to me. It hides too much as you said above, but it varies on the use case.

<comment><USER4> > but at least the @Data annotation makes it much more readable IMO.

Record types for Java are being worked on, and we should be getting them hopefully at some point in the (near) future.

<comment><USER5> Records are strange feature. They are immutable, they can't be abstract, they can't extend, they have implementations of some methods. I don't need anything of that. I just need short syntax to declare property with trivial getter/setter and that's about it. This is strange proposal.

<comment><USER4> The concept of records already exists in other languages, including JVM languages (like Scala and Kotlin). The fact that they're immutable and final is important. If they weren't, there would be subtle bugs caused by that. Scala actively recommends that case classes not be extended precisely due to this fact. Overriding methods for equality and hash code make it such that these classes can be used as keys in maps or entries in sets.

</comment></comment></comment></comment></comment><comment><USER6> While I tried to use Lombok in Java 8, it never felt safe. Even if I enabled the integration with the IDE, it magically patches my code under the hood so it wasn't easy for me to catch the bugs introduced by Lombok.

> There is little gotcha when using Java's try-with-resource syntax. The > resource has to implement AutoCloseable interface, so the compiler can use > void close() method for closing a resource. Lombok's @Cleanup, it doesn't > have to implement this interface. The resource just needs to have some > closing method which by default is void close() (but you can specify your > own method name responsible for closing resource).

Specifically, I don't agree with this approach in a compiled language like Java. We need to have a standard writing code in Java and AutoCloseable is the way to go. If the library doesn't support it, just create a proxy class and implement the interface there. It may be a bit verbose (we switched to Kotlin later on) but it will be much easier to catch the bugs. I don't want to spend 4 hours trying to find the root cause of a strange bug in favor of writing less code.

<comment><USER7> I used Lombok back in the day (never by choice). It's somewhat useful but I never really liked code generation and always felt it's a bit of a kludge and it indeed confused the hell out of intellij regularly (which is not that hard, it gets confused all the time). It's syntactic sugar. A bit of a stop gap to make Java look a bit more like several other decent languages out there.

Kotlin is indeed far superior and an extremely easy drop in solution on pretty much any Java project. A lot of what Lombok tries to achieve via code generation triggered by annotations is just built-in to Kotlin. E.g. a large part of what Lombok does is making java beans less painful by generating setters/getters and lots of other stuff. That's useful. However, Kotlin's data classes are way better.

For things that are Closable/Autoclosable, Kotlin injects a use extension function that takes a block where you use the resource and it cleans up after you. You just do a stream.use {...} and it does the right things. Kotlin adds tons of useful stuff like this to existing Java APIs.

Whether you use Java or Kotlin, any half decent static code analysis tool should be able to help you spot shoddy resource handling. Same for Kotlin; it has a lot of this built into the compiler. For Java, use spotbugs or similar. IMHO that's not optional.

<comment><USER8> Agreed - lombok is a kludge for language features, but back when it was big there weren't a lot of alternatives beyond switching to an entirely new language and stack (a tough thing to sell in large enterprise).

Regarding IDE support - I was once on a project using Lombok where some developers used Eclipse and others used IntelliJ. The Eclipse devs wanted to use this new @Builder annotation, which didn't work on IntelliJ but worked fine on Eclipse - for interesting reasons.

I attempted to patch the IntelliJ Lombok plugin to support @Builder - but gave up on it for reasons of time, priority and the fact that I wasn't certain it would work as Lombok continued to change. Also this was an experimental feature at the time that wasn't even certain to become mainline. I learnt a bit in the process.

Lombok works by passing certain switches as arguments to javac, which alters the class files that it writes out based on the annotations. It "confused the hell out of IntelliJ", because IntelliJ's intellisense/auto-complete plugin ecosystem works as so: IntelliJ exposes AST _from source_ to plugins, like the Lombok plugin, which hook in and let IntelliJ know, for instance, there's another method here due to this annotation. So it's constant effort to ensure the plugin's injections line up with what the compiler is actually spitting out.

Eclipse on the other hand is always aligned. I can only infer that it generates its autocompletion etc from the _compiler's output_. So whatever version of Lombok you're using, the autocompletion features will always be aligned.

<comment><USER9> I've used a few pojo-gen libraries, but they've never had good integrations or workflows with IDEs, and they usually led to a flakier build. Editing the definition file was never as good as editing a real class.

</comment></comment></comment></comment><comment><USER10> Relative to toponym: a few years ago I got bitten by an unidentified creature on the beach in Lombok and nearly died of asphyxiation due to a severe histamine reaction and the length of time it took to get to a hospital. Really severe .. said my goodbyes to my wife. Never had anything similar in life before or since. Luckily we did reach hospital with a couple of minutes to spare and the local hospital sorted it pronto (oxygen and loads of antihistimines). The cost was minimal. Life really has its ups and downs... too many to care about Java libraries :)

</comment><comment><USER11> So I've my self used Lombok but I've been using Kotlin lately. IMHO Kotlin if far far superior in terms of how it provides appropriate constructs that are patches to a stale language (hopefully new release cycle fixes it).

So far I've observed with libraries like Lombok there is a smaller community (compared to language community) that vets the idea; and the features are opinionated to that particular community. Which results into fragmentation; just as example [https://immutables.github.io/](https://immutables.github.io/) and [https://github.com/google/auto](https://github.com/google/auto) are two libraries providing features like factories and immutable value classes. Then you get articles like [https://codeburst.io/lombok-autovalue-and-immutables- or-how-...](https://codeburst.io/lombok-autovalue-and-immutables-or-how-to- write-less-and-better-code-returns-2b2e9273f877) for improving your code.

This in my opinion doesn't hurt as long as you are a small company. But when your code is going to be used across teams with different opinions, and language doesn't enforce a single way to define construct these kind of byte- code mangling ideas fall apart. I've personally people complain about Lombok and they hate it every bit. Doing these constructs at language level removes debate, and unifies how people in larger community. I hope newer versions of Java move fast enough to make something simple like `@Cleanup` a thing of past. I will highly encourage everyone to try Kotlin too; it's almost transparent drop-in with better syntax.

</comment><comment><USER12> The irony of people telling me that they don't appreciate Spring or Hibernate for the magic behind the annotations that they don't understand, to then turn around and drag in Lombok. Also, if you are telling me you don't like to write getters and setters, does that mean you are not using an IDE? _Sure_, it's a little cumbersome to write them, but not a lot?

<comment><USER5> It's easy to write them. It's hard to read them. Say I have a class with 20 properties, it means 40 methods. Now one of those methods not trivial and rest are trivial. How can I quickly find out? I can't. Getter is 4 lines, Setter is 5 lines, 20 pairs is 180 lines of nothing.

</comment></comment><comment><USER13> Lombok certainly saved my wrists and hands from repetitive stress injury over the years. Manually typing "effective java chapter 1" immutable object implementations can be truly excruciating.

</comment><comment><USER14> So you introduce a new library that does "magic" instead of using one more line? To me this is the opposite of good code. Let alone that the given example would probably live in some library code anyway.

<comment><USER15> Lombok is a compile time library that doesn't do any magic but replacing an annotation with fragments of code. It feels more like using macros which exist in many languages. And it helps in keeping the code readable and DRY.

<comment><USER14> So the code is inflated because the machine does the code repetition for you. The structure of your program is not getting better I think. I do not argue against annotations but in this case, if there is such a simple thing as try with resources, just use it. If your code is sprinkled over with annotations like this it is hardly getting more understandable. From my experience, a single annotation comes often in packs.

</comment></comment></comment><comment><USER16> There is a problem with JaCoCo, a Java code coverage utility, and try-with- resources. It looks like the try-with-resources creates byte code branches that are unreachable. In the JaCoCo report the try-with-resources line shows up with 4 or 8 branches (I forget which) and most of them are not reachable. That is to say, no matter what kind of unit tests you create (essentially there are two, a test where the code throws and a test where the code does not throw) you can not hit all the possible branches that JaCoCo detects.

This caused a problem for me because we would write very lean code with low cyclomatic complexity and having these missed branches would screw up our code coverage numbers, causing us to miss our standards. I would just do it the old way, with the finally. I wish I knew about this @CleanUp. For some reason a lot of code i am writing nowadays does not have me messing with streams directly, but when it comes up again I will use this annotation.

<comment><USER17> _> This caused a problem for me because we would write very lean code with low cyclomatic complexity and having these missed branches would screw up our code coverage numbers, causing us to miss our standards._

This seems like a perverse criticism. Fix your code coverage analysis?

</comment></comment><comment><USER18>
        OutputStream out = new BarOutputStream();
        in.transferTo(out);
        if (out != null) ...

Can someone explain how `out` could possibly be null here?

<comment><USER19> In the article, the _if_ check occurs in a _finally_ clause. So the code would execute even if the constructor threw an exception. Hence the need to null- check it first.

<comment><USER18> But that just isn't true. Neither finally-block appends a try-block that initializes the stream that it null-checks.

If the `in` stream init throws, the entire try-block isn't run at all. If `out` stream init throws, the following try/finally block isn't run either.

Lombok's docs get this wrong too. Unless I'm going crazy.

</comment></comment></comment><comment><USER9> I've had better luck with patterns that take lambdas (and internally do the try-close) because they're impossible for users to screw up.

</comment><comment><USER20> I was really hoping this was about the Indonesian island

<comment><USER21> Lombok is named after the Indonesian island, because Java is as well. ([https://en.wikipedia.org/wiki/Java](https://en.wikipedia.org/wiki/Java))

</comment></comment><comment><USER22> I used Lombok many years ago, but stopped. Modern Lompoc, with tools like delomboc to generate plain Java source code, and better tooling support beyond Eclipse makes Lompoc look pretty good now (if I still used Java). Cool project.

<comment><USER23> What is "lompoc" coz google does not help me find it??

<comment><USER24> It's a typo for lombok, I believe.</comment></comment></comment>


Apply HN: Diversity Velocity – Grow Diversity in Your Organization - <AUTHOR> Problem: Organizations want to increase their diversity. Currently, finding underrepresented people is a hunt-and-peck process fraught with legal risks. There is no way to efficiently reach large numbers of diverse individuals. Thus it takes significant cost and time for large organizations to do diversity initiatives such as hiring.
Solution: Student clubs self-identify by gender or ethnicity. Our solution leverages this fact allowing companies to promote opportunities to these groups. We developed a platform for student clubs that we aim to be their public profile (think in contrast with Facebook Groups). Having profile information enables companies to promote opportunities to specific groups or subsets of people within them matching the company's interest.
Why we are applying: We have clubs at hundreds of schools on our platform from national organizations such as The Society of Hispanic Professional Engineers, Society of Women Engineers, and The National Society of Black Engineers, etc. We want all these organizations' clubs and eventually all groups in the world to be part of our network. YC has considerable experience growing market share. We also have several well-known companies paying to use our solution. To increase the amount we can charge and to be more valuable to new customers, we need to have a bigger community. We believe YC is the best partner to help us grow our community.
About us: We are former student club leaders (marketing, rowing, design, bioengineering) who come from diverse backgrounds (Morocco/Paris, Nepal, Indiana, and NY/Boston). Our interests are pretty simple — writing code and talking to customers. <comment><USER2> The organizations mentioned don't appear to have missions to serve as marketing conduits to their members. What is the value proposition to those organizations as customers of your company?</comment>


Zadie Smith: dance lessons for writers - <AUTHOR> https://www.theguardian.com/books/2016/oct/29/zadie-smith-what-beyonce-taught-me <comment><USER2> "Sure, [Fred Astaire] was great, but don't forget that Ginger Rogers did everything _he_ did, ...backwards and in high heels."

[http://www.reelclassics.com/Actresses/Ginger/images9/ginger_...](http://www.reelclassics.com/Actresses/Ginger/images9/ginger_frankernesttoon.jpg)

<comment><USER3> I know the famous quote. But I also know many professional ballroom dancers, and how good a couple looks is mostly determined by the man. The man drives the dance. It's his job to make his partner look good, and that means adjusting things to the skill level of his partner. A very good woman will have a much harder time making her man look good if he isn't, because she cannot backlead.

Ginger Rogers was a very good dancer. But she just isn't as good as Astaire. If you watch closely, for example, he is always perfectly positioned, Ginger, not so.

Astaire also developed the dances in parternship with Hermes Pan, who would play the female. They'd work it all out to perfection, and then bring Ginger in to teach it to her.

Also, stepping backwards is not a problem for professional dancers, and women ballroom dancers spend thousands of hours dancing in heels, so those present no special difficulty, either.

</comment></comment><comment><USER3> > People will be dancing like Michael Jackson until the end of time.

There's a curious quality to MJ's dance. His moves look simple, and are endlessly copied, by amateurs and pros alike. But none of them come off looking like MJ. All I can say is it's that last 2% of the move that makes it work, and nobody has been able to copy that. I know his poses and moves are all very carefully laid out and practiced, but they look so natural on him, they look like they are him.

</comment><comment><USER4> Didn't Beyonce give dance lessons to Gaddafi too? How do these people turn into feminist icons while at the same time cozying up to monsters with grotesque harems. What a strange world to live in.

<comment><USER5> Don't know how much that applies here, but there is no inherent moral or egalitarian negative to a "harem" (or "unicorn" arrangements if I remember my polyamory lingo correctly) if everyone involved is actively and consciously consenting. But Gandhi is probably not in that camp

<comment><USER6> Gaddafi != Gandhi

</comment></comment></comment><comment><USER7> man ... how is this on hacker news?</comment>


PageRank = ThoughtCancer - <AUTHOR> http://techcrunch.com/2010/07/07/startups-linking-to-your-competition-will-help-you-no-really/

<comment><AUTHOR> hi, i'm resubmitting this old but still valid article as i just got an email from a linkbuilding firm which promised me 90$ for a link from a stupid old site of mine to one of their big company, big brand name webproperties. it's 2012 and SEO hasn't advanced a bit. SEO is still rotten to the bone, and it's not getting any better.

i will soon start a kickstarter project to change this, in the meantime please read the article (if you like).</comment>


The truth about poo: We're doing it wrong - <AUTHOR> http://www.theguardian.com/lifeandstyle/2015/may/18/truth-about-poo-doing-it-wrong-giulia-enders-squatting

<comment><USER2> So poo is clearly a taboo topic, which is sad, because it is the best diagnostic data a lay person can get from their body. I understand that my country [USA] is puritanical to the max, but HN of all places should be a place where good data is worth discussing.</comment>


Coding - the new Latin - <AUTHOR> http://www.bbc.co.uk/news/technology-15916677 <comment><USER2> It is important, but I prefer Eben Moglen's analogy:

"Software is what the 21st century is made of. What steel was to the economy of the 20th century, what steel was to the power of the 20th century, what steel was to the politics of the 20th century, software is now. It is the crucial building block, the component out of which everything else is made, and, when I speak of everything else, I mean of course freedom, as well as tyranny, as well as business as usual, as well as spying on everybody for free all the time."

[http://www.softwarefreedom.org/events/2011/fosdem/moglen- fos...](http://www.softwarefreedom.org/events/2011/fosdem/moglen-fosdem- keynote.html)

<comment><USER3> Check the total number of steel workers as percentage of the work force in the year 1900 to a hundred years later. Very much less.

My personal lesson from this, is that computer software jobs in general might soon have the hourly pay of PHP coders on elance. (Then the cycle of few people studying computer science will repeat... like ten years ago.)

<comment> guard-of-terra What makes you think "soon"?

It's obvious that in some distant point of future programming will cease to be The hot thing to do, but what makes you think it might be soon enough for us to see it?

<comment><USER4> I'm not sure that steelworkers were ever "the hot thing to do." The downfall of the steel industry in the US is multifaceted, but mainly boils down to the fact that importing steel from outside US is cheaper than producing it in the US and technological improvements in building with steel has greatly reduced the number of people needed to construct things with steel.

Take from that what you will about the software industry, but just remember that everyone either gets replaced by someone cheaper or technology takes their job away.

</comment></comment></comment></comment><comment><USER5> Who here studied Latin?

Well I did Latin for 6 years in High School (Sydney Boys fyi). I find this title "Coding - the new Latin" as a bizarre way of inducing people to learn to code.

Latin is dead. Very dead. Back in my day Latin was billed as "The Fastest Growing Language", but that never transpired.

Now if you want to read Caesar, Virgil, Catulus et al, then fine learn Latin. But Latin is no longer the ticket to an elite private members club that it once was.

Latin - is also a language that you exclusively read. There is so little creative element to it. One furthers oneself in Latin by re/interpreting existing works.

Coding - is a creative craft where you take instructions and make something that never existed before.

It would be better to strap coding onto something intensely creative:

      Technical Drawing
      Metal Work
      Fine Art, Sculpture

<comment><USER6> I believe you're missing the point. Here are some historical uses of Latin:

\- Obviously it was the language of the Roman Empire;

\- It is the basis for many European languages;

\- It was the language of Christianity, the Papacy for thousands of years (tying in somewhat historically with the conversion of Constantine). This went so far as Roman Catholic services being held in Latin until IIRC the 1960s;

\- Prior to the printing press, books were the province of monks and the like so being educated (in Western Europe) involved speaking Latin;

\- In England, Latin was the language of court and the law for centuries. There are many Latin terms--even in American law--for a reason;

\- Latin was the language of science. Element names in chemistry, species names in biology and so on have Latin roots;

\- For centuries, Latin was the _lingua franca_ of the ruling class of Europe.

The short of it is that being able to speak, read and write Latin in medieval and Renaissance Europe was _power_. More to the point, if you didn't know Latin, you were essentially excluded from many things (as many people were). Knowing Latin had as much power and influence as literacy in general.

So what the author is saying is the ability "speak" the language of computers, the ability to communicate with them and make them do things, is the 21st century version of the thrall once held by Latin.

Many have spoken about how expensive it was to launch a dot-com company in the 90s and how that cost has essentially decreased by _two_ orders of magnitude in a decade. One might have thought this would make engineers less valuable as our skills would've been commoditized to some degree.

The converse has happened. While other costs have largely vanished, more businesses became possible that never were before. There seems to be an insatiable demand for engineering talent, at least for the short to medium term.

Last century the dream was the 21st century would be about space exploration and an otherwise "Star Trek" like future. Instead I believe the story about the 21st century will be what incredible things we do with computers. Genetic engineering, curing diseases, artificial intelligence, you name it.

This may go so far as to essentially stratify society. It's hard to overstate just how importance computers will be in the next century (IMHO).

<comment><USER5> It is a little harsh on me to say that I "missed the point". I was not short of understanding of the historical significance of Latin. I led with the fact that I studied Latin for 6 years. During this time all your reasons were expounded _ad nauseam_.

I want to avoid getting into any flamewar with someone whose StackOverflow karma is measured in exponents. (I made no point on the importance of training people to program computers, the second theme of your comment.)

What I was saying is that I believe Latin for one hundred years has involved nearly ZERO _speaking_.

There are some very scholarly latin speakers with an English/Vatican pronunciation divide. But they are the exceptions.

Yes there is Vatican City, but I think we can both agree that it would be best if there are more people who can program computers than the population of the Vatican (832).

<comment><USER7> I don't think the OP is comparing programming to Latin today, but to Latin during the Renaissance.

Yes Latin isn't spoken, and nothing is created in it today, but that wasn't true hundreds of years ago.

Programming is like Latin 400 years ago.

</comment></comment></comment></comment><comment><USER8> When I think about all of the problems with the education system I am not sure that "teaching coding" would top that list. The bottom line is that coding is a profession which is not suited to everyone. I remember being a TA at university in the late 90s when IT was booming. Everyone wanted to learn to program. Once they learned enough to realize it meant sitting in front of a computer alone all day - most moved on to something else. Few people have the concentration / (lack of :-) social aptitude. I believe most people have the intelligence.

Basic computer skills need to be taught. Coding? It should possibly be a required semester in university for all majors. ...beyond that? Does everyone really need to know about recursion?

<comment><USER9> > Does everyone really need to know about recursion?

Recursion is taught in gym class through the game of dodgeball. Consider the following C-like pseudocode:

        void throw(int *ball, int hits)
        {
            if (hits < NUMBER_OF_PLAYERS)
                throw(ball + angle(), hits + *ball);
            else
                return;
        }

The question then becomes, do people need to learn specific computer languages, or is teaching the underlying concepts in abstract ways enough?

<comment><USER10> Edit: I began writing this before a different post appeared with the same point. Alas!

I'm sorry to be a jerk, but I found your code pretty tough to decipher. Here's my thought process:

      NUMBER_OF_PLAYERS could be, say, 6.
      the caller calls: throw(ball, 0);
      0 < 6, so throw(ball+angle(), 0+dereference(ball));

So, what is ball? It's either an integer and you're just passing its address around for no particular reason, or it's an integer array and you're using angle() to move around inside the array somehow? Then what exactly is stored in that array, the positions of people? Let's imagine it's 1s and 0s to denote a person or not.

After making that leap of logic, your code starts to make sense. You're adding "some amount" to the address, and then whatever is at that address (1 for hit, 0 for nothing) to hits, and passing them into the next invocation, as long as it's less than the necessary number of hits. Could easily be a while loop, but I'll get to that in a minute. I have some other points:

      - Ball isn't a great name for the list of the positions of the players.
      - It isn't clear that ball is an array.
      - There's a pointless 'else return'.
      - You never address the "I don't have a ball" situation!

This code requires explanations of arrays, pointers, and addresses before you can talk about recursion. I'd express how to play dodgeball to a new programmer as follows:

      throw(angle, enemy_positions):
        # This function takes an angle and a list of
        # the spots where other people are, removing
        # them from their spot if it registers a hit.
        # Returns true if it's a hit, false if a miss.

      find_ball():
        # Tries to find a ball; returns the number
        # which you found -- 0, 1, or 2.

      load_enemy_team():
        # Returns a list of the spots where other players are

      enemy_positions = load_enemy_team()
      players_on_other_team = enemy_positions.length()
      ball_count = 0 # all balls start in the middle!

      while players_on_other_team > 0:
        if ball_count > 0:
          angle = get_throw_angle() # user inputs this
          hit = throw(angle, team_positions)

          if hit:
            shout("Yahoo!")
            players_on_other_team -= 1 # they're down a guy!
        else:
          ball_count += find_ball() # reload

That should cover it - though I'm sure there's problems with my code too. :)

The biggest point I want to make is that this example is trivially easy to represent without recursion. While recursion can be used in place of any loop, a non-programmer's mind will likely arrive at iteration first for tail- recursive examples. And once someone understands how to solve a problem one way, teaching them a totally different way can be tough.

I personally think people do pretty well at understanding how recursion applies with respect to exploring a maze, which is almost as universal an experience as dodgeball.

<comment><USER9> > Ball is a terrible name for the list of the positions of the players.

From a code maintainability point of view, yes. I would never write code like this for a real application. However, for analogizing the game in code, I have to strongly disagree.

Ball is _not_ a list of players. It is, just as in the game, a pointer to a location in space. Players may or may not occupy that space. If the player does, a hit occurs. The hit test is based on the intersection of the location in space and the occupation of that space.

I chose to represent my code in a C-like manner because it makes that spacial representation easy to write. People are not thinking about the game in terms of lists and objects, that I am sure.

</comment></comment></comment></comment><comment><USER11> I think that's a horrible phrase. The first thing that comes to mind is: "Coding isn't dead!", then: "But coding has direct benefits, not hand-waving indirect benefits like 'you will get better at English!'" I get that it's meant to convey that if you can't code even a little, you're an uneducated person, much like in older times people who didn't know Latin (and Greek) were uneducated. That's a fine sentiment to have, I agree coding is more or less a fundamental skill these days that many are ignoring, but using Latin as the metaphor isn't the way to go. It needs to be as important as learning to write.

<comment><USER12> Apparently Latin is a very popular subject in schools. IF that popularity is genuine, it refutes the idea that children are always looking out for the easiest option, which bodes well for CS in schools because (if it's done correctly) it will be challenging. Personally I have my misgivings about the phrase "The New Latin" but I have strong objections to the "Hey kids! Everything is fun, fun, fun!" approach which is so often the alternative.

<comment><USER11> I actually think Latin's popularity is, at least in part, due to its easiness, and at least in my former high school. I'm inferring to other schools since the AP test doesn't require speaking it. I mentioned in a cousin-comment that I took Latin for three years, I also took French for five. French was a lot harder. Merely speaking it and understanding when it's spoken back with different accents and different speeds is _a lot_ harder than just reading or writing it, which is all I had to do for Latin. (We learned the simple pronunciation rules and read some things aloud but that's it.) Yet for the universities around the area requiring two foreign language credits from high school, Latin was good enough.

Latin was funner for me in some ways though since it has a pattern-matching or puzzle-solving feel to it at times with all the word endings and no reliance on word order. I don't think it's as neat as Arabic but it's a somewhat similar feeling. I agree that overselling things as fun is a great way to kill any fun that might have existed.

</comment></comment></comment><comment><USER13> I think it's a great analogy--there is little like programming for opening your mind up in certain ways. Big ideas from computer science--more than those from any other single subject--have changed they way I see the world.

Of course, I am highly involved in computer science, so its effect on me is disproportionate. However, I think that _everyone_ would benefit from at least a cursory understanding of the big ideas behind CS, particularly abstraction. If I had to choose one, single concept that has affected me more than any other it would be abstraction. Apart from this, the highly logical programming mindset is also healthy. Some of the discipline that comes from writing your ideas in a form even a computer can understand is invaluable.

Additionally, programming is a creative endeavor with a very low barrier to entry: this is imperative for certain types of people. In my arrogance, I view myself as a relatively creative individual; however, I am also fairly lazy. I do not think I would have pursued engineering or art nearly to the extent I did programming (I was exposed to all three at relatively early ages) simply because they required so much more. To build something, I would need materials, tools and space; the same is naturally true of drawing a picture. To program all I needed was a computer, and since they were common by the time I was in elementary school, this was not an issue. This allowed me to make cool stuff without going out of my way.

Computer science really is something that opens the mind. I fervently believe it should stand with subjects like math and literature, not just for practical reasons but because it is immensely valuable for personal development.

<comment><USER14> This. I often get stuck in communication with people because I tend toward abstraction and they toward being more concrete-bound. I often get annoyed with people when they get hung up on stuff which is just irrelevant detail to me. "No, disregard that, it's not important to the general principle here, you see..."

But lately, I _am_ gaining some appreciation for the detail-focused mindset. It's just two ways to look at things.

</comment></comment><comment><USER14> Why is it that coding is such a rare (relatively speaking) skill?

Sure, there are some hard concepts in coding, but for loops and conditional statements are hardly more difficult to understand than a lot of the math which gets taught in junior high.

Speaking of that, why is it essential for young people to learn algebra but not to learn for and if?

<comment><USER15> The simplest way would be to shove computing under the maths curriculum. Teach if with guard statements, and skip for, teach recursion. by the time the kids get to sixth form, have a mathmatical computation course where you teach them to apply their knowledge to a language like haskell that mirrors mathmatical notation quite well.

<comment><USER14> I would probably create a whole new class called "thinking 101" or something. It should teach:

-numeracy: how much is 1 million/1 billion/1 trillion, etc.

-common cognitive biases.

-logical fallacies.

-basic science.

-basic coding.

-De Bono's 6 thinking hats.

-how the brain works.

-meditation (ie _not_ thinking).

-how to learn stuff faster and better.

-how to remember stuff: memory palace and the like.

-etc

I could think up a HUGE list of stuff in this genre that would be very helpful.

<comment><USER16> During sixth form college (ages 16-18, in the UK) one of the philosophy lecturers started a course with the same sort of goals. It covered critical thinking, written communication, logic, a bit of psychology etc.

The 12 or so hours I spent in those lectures were among the most valuable hours I invested in anything, ever.

<comment><USER14> Yeah, it's an obvious patch to society with tremendous potential for trickle down benefit. Why isn't it being done?

<comment><USER17> Honestly? It would likely be too much fun.

There is still, to this day, a large number of people who think education needs to be repetitive rote drill in order to be... real, or legitimate, or even 'useful' by some warped definition of that concept.

It's tied into the notion of hazing, or "If I had to waste my years in school tied to a desk memorizing stuff I don't use, so should you! Builds character!"

And, finally, the idea that if the next generation does it, too, maybe your time doing it wasn't simply wasted.

</comment></comment></comment></comment></comment></comment><comment><USER18> My experience with IT education in the UK is genuinely atrocious. During secondary school we made a spreadsheet in Excel and a couple of Word documents. The closest thing to programming was a picture of traffic lights we had to "programmatically" operate. For a single hour lesson. And that is it. We were lucky if our computers even turned on.

<comment><USER19> The problem is that teachers are often completely computer-illiterate. This is a chicken-and-egg problem; you won't teach proper, interesting computing activities without competent teachers.

<comment><USER20> Although true in general, some subset of students will figure out interesting things, and then show them to others, if you at least put them in an environment where that's possible. My middle-school computing class was not particularly well taught, but the curriculum included a few simple things in Hypercard, and Hypercard was the kind of environment where students who finished the official assignments early could find all sorts of other cool things to do in it.

That does also require having free time. There's a trend lately towards assuming that any free time students have is wasted time in which they could be learning instead of goofing off, which I'm not sure is the right way to look at it.

</comment></comment></comment><comment><USER21> I've spoken to both of my principals and my ICT teacher about introducing a solid computer science course and scraping "ICT". As a student and a avid programmer, I find it horrible that we don't get a chance to truly leverage the power of computers.

The reason I don't think CS is being widely adopted is because many students have been conditioned to accept ICT as a good computer course and have no clue as to what you can achieve with proper training and a computer. My classmates aren't interested in CS because they think it's way to difficult and has no tangible effect on society. On top of that, both of my previous ICT teachers had no clue how to program: those days were spent editing movies and making animations in Flash.

Glad to see the powers that be finally take some initiative to solve this problem...

</comment><comment><USER22> _And it looks like they've found what could be a great slogan for their campaign. "Coding is the new Latin," says Alex Hope..._

To echo number of the other comments here (and try and respond to some of the criticisms of those comments):

I think that's a _terrible_ slogan.

The point of a slogan is to be immediate - something appealing that gets the point across in a catchy and unambiguous fashion.

I think that the _associations_ (and slogans are about associations) Latin has for most people is a language that is presently irrelevant and of no practical purpose.

It may have once been really significant, and it may have played an important role in the world becoming what it is today, but such details are not the things that the term "Latin" immediately invokes for most people, and what it immediately invokes is what matters for a slogan.

Being a great analogy does not make it a great slogan.

</comment><comment><USER23> Ewnay atinlay? ixnay!</comment>


Evan Doorbell's Classic Phreaking Tapes - <AUTHOR> http://www.evan-doorbell.com/production/ <comment><USER2> On the topic of phreaking, does anyone know if modern condo entryphone systems are vulnerable? The fact that pressing a button on my phone unlocks the front door to the building makes me wonder how it could possibly _not_ be vulnerable to having the right pitches played, but I would hope that the dangers of in- band signalling have been widely understood for long enough that systems would be protected...

<comment><USER3> I assume this is one of those systems where a potential entrant types a code, and the systems calls a pre-provided number for the occupant of the unit who provided the code to the entrant?

The common denominator on the PSTN is listening for inband DTMF within a G.711 "encoded" stream.

The "security" in this system is the condo entry phone device dialing out to the PSTN (via some mechanism) to the destination number, which is routed via SS7 to the proper owner.

This security mechanism is somewhat similar to those used by two-factor systems that send SMS via SS7 to destination numbers. It's not without fault, there have been many demonstrated attacks against the SS7 network.

<comment><USER2> Sorry, I should have specified more. This is a "potential entrant selects the person they're trying to visit; system phones the pre-programmed number for that occupant; occupant talks to the visitor and presses a button to let them in". In my building, I have to press 6 to make the door unlock.

Could a vistor play a very loud "touchtone phone 6" into the microphone and make the system think that the occupant pressed that number?

<comment><USER4> That would require the audio signal to be a single channel right? That or the residents phone would have to be very loud. I'm not sure but I think phones operate on a dual channel (tx/rx) setup which is what allows all participants to talk simultaneously.

<comment><USER2> I was thinking echoing. I don't know how loud a button tone needs to be for the entryphone system to accept it as an instruction to unlock the door.

</comment></comment></comment></comment></comment><comment><USER5> This sounds interesting but he's using so much phone jargon it's hard for me to follow. Is there some good intro to this stuff somewhere?

<comment><USER6> Sure, one is 'Exploding the Phone', 2013, by Phil Lapsley. [http://explodingthephone.com](http://explodingthephone.com)

Great book.

</comment></comment><comment><USER7> I very much enjoy the "Dom Tuffy" series (though I highly recommend all of Mr. Doorbell's recordings-- his voice is pleasing and hearing how it has changed over his life is amusing, if nothing else).

The August, 2001 tapes in Nantes, Quebec are especially poignant to me. I grew up in a rural small town that had the analog phone switch replaced with a digital switch (a DMS-10) in the late 1980's. A couple of other little towns around still had analog switches into the early 90's. I "played around" with them a little bit but really didn't understand the technology. Now I wish I'd had more time with them.

</comment><comment><USER8> This is awesome:

[http://www.evan-doorbell.com/production/PanPulsLovers.mp3](http://www.evan- doorbell.com/production/PanPulsLovers.mp3)

It covers the exchanges talking to each other.

</comment><comment><AUTHOR> In particular, the "How Evan Doorbell became a Phone Phreak" series is excellent storytelling with plenty of detail to keep hackers entertained.

<comment><USER9> Link the Soundcloud version, which might be easier for mobile listeners - [https://soundcloud.com/evan- doorbell/sets/group-1](https://soundcloud.com/evan-doorbell/sets/group-1)

<comment><USER10> This is really well produced, and he's a great narrator! Loving both the hacker spirit and the contemporary music with DTMF mashups.

NPR or someone should pick this up and give it a broader audience.

<comment><USER11> Radiolab did a piece on Joybubbles - [http://www.radiolab.org/story/187724-long- distance/](http://www.radiolab.org/story/187724-long-distance/)

</comment></comment></comment></comment><comment><USER12> What exactly is this about?

<comment><USER13> Phreakers were/are telephone system hackers. Back in the day it was possible to hack telephone systems using simple electronics and some technical knowledge. The page being linked to seems to go into some of the history of phone phreaking.

Incidentally, the following clip contains the most impressive demonstration of phreaking I've ever seen, showing a blind phreaker with perfect pitch called Joe Engressia who was able to hack the phone system just by whistling:

[https://www.youtube.com/watch?v=vVZm7I1CTBs](https://www.youtube.com/watch?v=vVZm7I1CTBs)

A fair amount of the hacker culture of the 80s and early 90s (hacker in terms of what the common perception of a hacker is) seems to owe its debt to the trail blazed by phreakers.

</comment></comment><comment><USER14> The "Sounds of Long Distance" series does a pretty good job of explaining how the phone network was laid out in the waning years of the Bell System.</comment>


Resolving disputes through computer evidence: lessons from the Post Office Trial - <AUTHOR> https://www.benthamsgaze.org/2019/12/19/resolving-disputes-through-computer-evidence-lessons-from-the-post-office-trial/ <comment><AUTHOR> The claimants successfully argued that software in question was buggy, and these bugs caused them financial problems:

> _This situation, however unsatisfactory, is still far better than the > payment disputes I see in practice. In the Post Office trial, a large > proportion of the eye-watering costs were spent on forcing Post Office > Limited to disclose documentation on Horizon's bugs, which technical experts > could then summarise to the judge. Every payment system dispute I've seen > has made do with bland assertions that the computer system is working > properly, which is the presumption in English law.[1] The Post Office trial > demonstrates how wrong the presumption can be, that overturning it in > litigation is so expensive that little compensation is left, and even then > the resulting situation gives nobody much satisfaction._

[1] states:

> _In 1997, the [UK] Law Commission decided that writers of software code > wrote perfect code, because it introduced the presumption, that included > computers by implication (or more accurately, digital data), that, 'In the > absence of evidence to the contrary, the courts will presume that mechanical > instruments were in order at the material time'. Politicians decided to > replicate the presumption for criminal proceedings by passing section 129(2) > of the Criminal Justice Act 2003._

> _No evidence was put forward by the Law Commission to substantiate the > assertion that computers were 'reliable' (this is the word that is often > used), and proposals for reform have not been take up._

[1] [https://ials.blogs.sas.ac.uk/2019/06/25/the-use-of-the- word-...](https://ials.blogs.sas.ac.uk/2019/06/25/the-use-of-the-word-robust- to-describe-software-code/)</comment>


Year in review: Quotables - <AUTHOR> http://blogs.siliconvalley.com/gmsv/2010/12/year-in-review-quotables.html

<comment><AUTHOR> This is my favorite

• "The Internet's completely over. I don't see why I should give my new music to iTunes or anyone else. … Anyway, all these computers and digital gadgets are no good. They just fill your head with numbers and that can't be good for you."

That's Prince, formerly known as The Artist Formerly Known as Prince, in a May interview with the U.K.'s Mirror.</comment>


Audius is building a decentralized Soundcloud to help musicians get paid faster - <AUTHOR> https://techcrunch.com/2018/08/08/audius/ <comment><USER2> As long as it doesn't have autoplay which _plays other people 's random stuff right after your track_, I'm game.

I used to be a fan of Soundcloud until I realized that someone I send a link to my track (or album) to would end up listening to a lot of other stuff unless they pay attention to what's written in small font in the corner of the screen.

Ditto for listening to other people's albums. I catch myself thinking "The album has been great, but this track feels odd, actually, it kind of sucks, a lot", only to see that Soundcloud has happily jumped to some random auto-play item from a different artist.

I get it, they want to be Youtube of audio (instead of being Dropbox for audio with social features, which is what the users actually want). But even Youtube is far less obnoxious with its agrresive auto-play and other crap.

The most consistent audio community for me over the past 10 years turned out to be Newgrounds, out of all things.

<comment><USER3> I actually usually find that the random things it skips too fit pretty well with the previous song. It's nice to be able to pick a song and get a bunch of songs similar to it.

Of course, I understand why mabye that shouldn't be the default...

<comment><USER3> *to

past the edit timer >:(

<comment><USER2> I'm appreciating the fact that you still came back to fix the typo :)</comment></comment></comment></comment>


Is a Google Operating System Built on Android, Gears in the Cards? - <AUTHOR> http://googlewatch.eweek.com/content/google_operating_system/is_a_google_operating_system_built_on_android_gears_in_the_cards.html <comment><USER2> Yeah - as it says in the "headline" its called Android and it is intended to run on phones, PDAs, netbooks so erm laptops, desktops well anything really...</comment>


BPF Portability and CO-Re (Compile Once Run Everywhere) - <AUTHOR> https://facebookmicrosites.github.io/bpf/blog/2020/02/19/bpf-portability-and-co-re.html <comment><USER2> This looks great. The lack of portability was a huge negative when I was considering BPF a few months ago.

<comment><USER3> It's still a huge problem. Only dTrace runs everywhere: BSD, Solaris, Mac, windows, Linux. BPF only runs on Linux.

In userspace everybody has dTrace probes, nobody has bpf/stap probes.

Additionally dTrace is secure, BPF is insecure.

It really looks bad, but these Linux jokers still think they rule the world.</comment></comment>


What Arrested Development and Successful products have in common? - <AUTHOR> http://baydin.com/blog/2011/10/when-software-jumps-the-shark/ As startup people working on new products, do you know how close your product is to jumping the shark? Love to hear what HN thinks about it. <comment><USER2> There was something in this article that really resonated with me.

I was talking with someone the other day about how confusing I find Facebook as a recent addition to the network and couldn't believe that it was so popular, given the fact that users are usually so overwhelmed by complexity.

In the same conversation, we discussed that, whilst someone can look at my relatively trivial application interface and be completely paralysed by it, the same people might have built up incredible complex patterns of behaviour on their own cobbling together functionality in Excel to achieve a goal that eclipses any complexity I could have built into an interface.

I realised in reading this article that not only do users understand complexity that they themselves create from non-complex components (or over time in reaction to very specific problems), but they also collectively understand complexity if they're on the journey of an application from the very beginning because the early adopters are there to _teach_ everyone else.

If you release a complex product, even one less complex than Facebook is currently, but perhaps more complex than it was on day one, you're releasing into a world with no resources to handle that complexity. There are no blogs, no experts, no neighbours, friends or well wishers, no adult education courses on your product.

By the time Facebook got complex, there was so much community around it that people were able to cope.

I think this is an important part of the "customer development cycle" that I've never really heard explicitly discussed: not only is releasing early important to help you find the right customers, but it's also important to help you increase the complexity of your product over time without alienating your audience.

If you go too long without releasing a product, you get used to it and you're unable to adequately discern the complexity anymore, reducing your ability to explain it and help early adopters along on the journey.

The longer you take to release your first version and get your first customers, the bigger the barrier to entry and steeper the learning curve will be for those early adopters, so they're less likely to take up the cause of advocating and documenting your product's features, blogging about it with helpful hints, tutorials and recipes for using it, than they would if they had been on the journey with you since development began.

</comment><comment><USER3> Not sure I agree with any of this. Futurama was canceled and brought back and it's just as good now as it was before.

</comment><comment><USER4> I'm not sure the author of the article is familiar enough with Arrested Development to draw the analogy. Most agree that AD's problem was marketing, not product. If you're familiar with the series, you know the story wasn't overtold. If anything, it was left hanging.

We didn't know about the show when it aired. Like many others, we caught up on Netflix much later, loved it, and were surprised they killed it off so early. Be careful not to assume a product problem when you're actually suffering from a marketing problem.

Fun fact that the author should have included: AD actually makes fun of "jumping the shark", using Henry Winkler's character no less.

<comment><USER5> Agree that it wasn't the product. The product had a very vocal, loyal following.

But it wasn't just 'marketing'. They'd touched a massive audience. Many just didn't 'get it'. The show wasn't meant to have universal appeal. Certainly not the generic sitcom audience. Especially not on a large network.

This brings up a vital question lots of companies often have to face. What happens when growth declines, but you still have a powerful following?

Stir up a little controversy. (2.5 men) Re-brand for expansion. (syfy, cougar town), Give up on the current business model, perhaps try a new one & cut down costs. (dvd sales, movie -- arrested dev. as an example) etc.

</comment></comment><comment><USER6> If MS Office was distributed on a recurring billing basis (subscription or SaaS, for example), I wonder if there would be such a complete set of barely- used features. We've certainly found that it's beguiling to want to add all the feature requests in, but sticking to our guns and making our core features work even better has proven a good method for us. One of our rules is: can it be hacked together? (the request). If there exists a way to do it at all, we don't focus on it, rather we invent what isn't possible to do at all (or is currently very expensive to do). It keeps us sane and interested in our work.

<comment><USER7> >One of our rules is: can it be hacked together? (the request). If there exists a way to do it at all, we don't focus on it, rather we invent what isn't possible to do at all (or is currently very expensive to do).

that's an excellent way of prioritizing possible features, especially if you sell something that is typically automated.

</comment></comment><comment><USER8> Wow, this is a really weird analogy to make. I don't agree that software can jump the shark by over-telling a story. I think software is either focused and serves a well defined feature set, or it is chaotic and has several 1/2 defined features that are there only to check-off a bullet point in some marketing spec sheet.

For example: People can argue that any one release of Adobe Photoshop has told its story, but yet Adobe continually adds new features to an application that's over 2 decades old.

Yes software does carry a lot of weight when it comes to visual design/art, but at the end of the day, it's a tool. Each successive revision should continue to evaluate meeting the needs of its users and adopt changes to meet the demand.

Microsoft Office includes tons of new features, but they refined the UI to the point that it upset users who took time learning the new UI. I think it was a step Microsoft needed to take and it worked out for them.

Apple's Final Cut Pro on the other hand, removed features to refine their app and upset their core audience. It was too complex for your pro-sumer, but too basic for the professional. That's what I call losing focus.

So my point is, software will be successful if it has the resources and focus to make it happen. It may take a long time to reach critical mass, but that's the beauty of a tool set, a nice long growth curve.

Entertainment on the other hand is a one-shot deal, either you like the performance and elements all work together, or you don't.

</comment><comment><USER9> This article fails to make the distinction between technical product development (where one needs to invent/build new technologies in order to make the product come alive), and just general product development where your not actually overcoming major technical challenges.</comment>


The end of the "Comics Code Authority" - <AUTHOR> http://www.comicsbeat.com/2011/01/21/archie-drops-the-code-wertham-dead-forever/

<comment><AUTHOR> There's a lot more (damaging) information on the "Comics Code Authority" in its wikipedia entry:

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

They're responsible for not just censorship but also fear mongering, racism, sexism, and the list of abuses goes on and on.

<comment><USER2> It also kept comics on rather juvenile themes for a very long period by banning depictions of drug addiction/use and many other real life themes.

</comment></comment><comment><USER3> > _"the paranoid days of the commie scare — a period much shorter in its reign > than the current post 9/11 world"_

In the US "red scares" started just after the Bolshevik Revolution and the cable networks are still ranting about socialists nearly 100 years later. Long after Mcarthyism passed, public high schools still had mandatory "comparative economics" courses as a requirement for graduation.</comment>


Green Goose sensors monitor your life, you earn experience points - <AUTHOR> http://www.engadget.com/2011/02/23/green-goose-sensors-monitor-your-life-you-earn-experience-point/

<comment><USER2> This was predicted: [http://www.ted.com/talks/jesse_schell_when_games_invade_real...](http://www.ted.com/talks/jesse_schell_when_games_invade_real_life.html)</comment>


Multicore-enabling the N-Queens Problem Using Cilk++ - <AUTHOR> http://www.cilk.com/multicore-blog/bid/6381/Multicore-enabling-the-N-Queens-Problem-Using-Cilk

<comment><USER2> He left out the most efficient solution. Using bits to store the positions instead of an array then you can check if the queens conflict with a couple bitwise &&'s instead of looping.

<comment><AUTHOR> interesting point - worth a comment in the blog post

</comment></comment><comment><USER3> Nice N-Queens is one of my favorite problems to play around with. I often solve it when learning a new language.

</comment><comment><USER4> Intel's TBB adopts + translates much, from Cilk to C++.

<comment><AUTHOR> TBB borrows the scheduling portion, but requires substantial code restructuring, and doesn't have a solution for the global variable problem analogous to Cilk's hyperobjects.</comment></comment>


A critical analysis of Laravel - <AUTHOR> https://carnage.github.io/2017/02/laravel <comment><USER2> Nice read on Laravel which I left for the same reasons and seeking many frameworks that could fit in short-term and long-term projects. I found perfect web framework could solve my needs, performance, safety and scalability.

[http://perfect.org](http://perfect.org) Cool demo: [https://github.com/PerfectExamples/](https://github.com/PerfectExamples/)</comment>


How to Generate Random Colors Programmatically - <AUTHOR> http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. For a little project at work I needed to automatically generate multiple background colors with the following properties: <comment><USER2> This is a nice article, but the central lesson is that you almost never want _actual_ randomness - you want variation within useful limits.

</comment><comment><USER3> I wrote a short method that when given a background color it will tell you whether or not white or black text will be the most readable. Using this you can still generate saturated colors but still have the text be readable.

You can find it here:

<http://blog.nitriq.com/BlackVsWhiteText.aspx></comment>


The great nutrient collapse - <AUTHOR> http://www.politico.com/agenda/story/2017/09/13/food-nutrients-carbon-dioxide-000511 <comment><USER2> This was a fascinating read, and obviously makes some concerning points. I don't think I ever thought about how rising C02 levels would affect plants, but it's interesting to see where this will go, as far as public knowledge and politically.</comment>


Ask HN: Sysadmin online hangouts? - <AUTHOR>

I am working on a marketing plan for a service that is aimed squarely at professional IT crowd, and to an extent at a higher-tier tech support people.<p>There's reddit/r/sysadmin and there's ServerFault. Any other good places to announce the product / purchase ads / try and solicit a reference / get a mention ? <comment><USER2> <http://www.spiceworks.com/home/community/>

They have an advertising program (see footer)

</comment><comment><USER3> webhostingtalk.com Is where all the hosting companies hang out.</comment>


Smell Ya Later, Nerds - <AUTHOR> http://betabeat.com/2013/09/smell-ya-later-nerds/

<comment><USER2> I considered her opinion on tech to be invalid when she claimed that tech isn't merit based. All of the people I've met and worked with have taken lots of effort and [informal & formal] education to get where they are today.

Then I saw the last bit of it: "[...] I will miss terribly, like writing about poop and that time my editor tried to get me to go on a date with a sex robot and What Will Elon Musk Think of Next and that one month where John McAfee went completely insane; "

That rather explains her position. She doesn't get into the low lying details of tech.

The minor irritants I can relate with her and agree with her on.

<comment><AUTHOR> "I considered her opinion on tech to be invalid when she claimed that tech isn't merit based."

How is tech merit based? Truthfully, most vocational jobs are more merit-based than technology. We see technology companies filtering on a long list of items (school attended, age, etc.) that have very little to do with merit. If you have had opportunity, technology is a wonderful career, but it just isn't merit-based. It does suffer from the same problems as every other professional career.

The merit-based utopia meme needs to leave so we can actually look at the trends and decide if some things need correcting.

<comment><USER3> Plebs are never assessed on merit because they don't have any. So you get better treatment for one pleb or another pleb because of what school they went to or their gender, but in the end it's all just interchangeable plebs anyway. If you have real talent ("tech bloggers" need not apply) and a bit of a spine then that is going to be the dominant factor in your success. But we see so many stories these days about how various little plebs aren't getting some perceived due that it's becoming a degenerate force.

<comment><USER4> You are literally calling most people in the world 'plebs'. What is wrong with you?

</comment></comment></comment></comment><comment><USER5> The tech industry lately seems to be mired in this either-or thinking about meritocracy. How about we admit it's a bit of both?

Being connected and having the same hobbies and coming from the same IIT as the hiring manager will help, not hurt you. Is anyone denying this? That's why all the career advice boards remind merit-focused new college grads that "it matters who you know, _then_ it matters what you know".

On the other hand, there isn't a lot of room in organizations for people who don't get it done at all. Merit - or at least the appearance of merit - matters a great deal. Maybe in larger, more mature organizations and industries people can hide out and network with the right people to stay in their no-show jobs.

However, bootstrapped startups don't really have a lot of sinecures for random "VP, Business Development" slots to go around.

<comment><USER6> It is true that no system in the world has or could ever have a perfectly accurate merit assessment system... but has any one noticed that improvements in merit assignment and lower barriers to entry lead to less representation of women at the top, not more? In highly structured environments with statistical ranking systems, the portion of women at the top is miniscule. For example, women make up about about 55% of registered players in the American Scrabble Associations raking system, but on some occasions there are no women in the top 50 ranked (the most there has ever been was just a few) [1]. The only places where women are highly represented at the top are places with strong diversity programs. For example, Rwanda leads the world in terms of women's representation in parliament, but that is because a very large number of seats are reserved exclusive for female candidates, while the rest are open to anyone [2].

1\. [http://rcm-papers.net/scrabble-ratings-gender.html](http://rcm- papers.net/scrabble-ratings-gender.html)

2\. [http://news.bbc.co.uk/2/hi/7620816.stm](http://news.bbc.co.uk/2/hi/7620816.stm)

<comment><USER5> Interesting point. That Rwanda situation is interesting because it enforces a baseline of 30%. I am sure it's easier to get from 30% -> 50+% than it is from a much smaller number to 30%.

Chess, Go, Math Olympiads, and other such pursuits are other examples of situations where female representation is miniscule.

However, we can't assume this is anything biological because that would be sexist, so we need to assume that there is extreme misogyny at play, which increases as the level of competition gets higher and higher.

Philip Greenspun explores this in his article from a few years ago, in the arena of academic science:

[http://philip.greenspun.com/careers/women-in- science](http://philip.greenspun.com/careers/women-in-science)

</comment></comment></comment><comment><USER7> Dear Jessica,

We won't miss you either.

All the best,

The Tech Industry

</comment><comment><USER8> What an angry person.</comment>