AdNauseam – clicking ads so you don't have to - <AUTHOR> https://adnauseam.io/ <comment><USER2> I can't believe we've accepted the term "ad fraud" for this, as if we were being any more deceptive than the ad industry is, or as if we had signed a contract that we violated.

As if not truthfully clicking on ads were a crime.

We don't owe advertisers anything, least of all the truth.

<comment><USER3> To some people, nothing is a greater sin than disrupting market capitalism.

<comment><USER4> I think the general public doesn't really shed a tear for the advertising industry. Those who cry over this probably have a financial stake in ads&marketing.

<comment><USER5> They did say some. It is also what is sarcastically referred to as felony interference with a business model but that is a pretty niche term.

<comment><USER6> I had not heard that term, but oh my, wouldn't it be hilarious if some congress critters tried to get that written up as an actual law?

</comment></comment></comment></comment></comment><comment><USER7> Not sure if this is useful or not but this has been discussed on HN a few times before, here are some of the most popular occasions:

"AdNauseam: Fight Back Against Advertising Networks and Privacy Abuse" [https://news.ycombinator.com/item?id=13222733](https://news.ycombinator.com/item?id=13222733)

"AdNauseam – Clicking Ads So You Don't Have To" [https://news.ycombinator.com/item?id=15109251](https://news.ycombinator.com/item?id=15109251)

"AdNauseam Banned from the Google Web Store" [https://news.ycombinator.com/item?id=13327228](https://news.ycombinator.com/item?id=13327228)

"Pale Moon blocks AdNauseam extension" [https://news.ycombinator.com/item?id=15112524](https://news.ycombinator.com/item?id=15112524)

<comment><USER8> You might even say it has been discussed here ad nauseam…

<comment><USER9> What sparked _this_ repost is probably: [https://news.ycombinator.com/item?id=19278643](https://news.ycombinator.com/item?id=19278643)

So every once in a while it get's reposted. Not bad perse.

</comment></comment></comment><comment><USER10> Most of the ad networks already fight with ad fraud and validate clicks and redirects. Their technologies are very sophisticated. So I don't think that it does more harm to ad companies than to plugin users, who marked suspicious and fraud. There are already plenty of bots who scrape ads and click on them. By different estimates around 20-30% of web traffic is already caused by bots. As for me plugin is a kind of way to say how you hate ad market and web in general, nothing more.

<comment><USER11> I worked in adtech a few years ago, and AdNauseam-style click fraud is a relatively trivial to detect and ignore. It does nothing, and adtech companies don't care about your hate of online advertising the least because that's what brings in the cash.

<comment><USER12> Do you mind shedding light on how such click fraud is detected?

<comment><USER13> The most usual technique is to setup click baits/traps, once you click on a trap link you (= IP or UID via cookie) are added to an ignore list, where all your actions are not invoiced to advertisers. Simple and works,

<comment><USER14> This actually sounds ideal for me too. Please ignore me and stop tracking me.

<comment><USER15> They didn't say they stopped tracking you, just that they didn't charge the advertisers.

<comment><USER16> But in that case it still looks like an effective way of fighting that business model.

<comment><USER17> Or to receive more aggressive advertising/you are using ad nauseum overlays.

<comment><USER18> Aggressively advertising to someone you know hates ads is stupid. They'll just boycott you in spite.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> This extension made me switch to Firefox after Chrome banned it from their store.

I have it set to "don't click on non-tracking Ads" and "don't hide non- tracking Ads".

Ads are fine. Tracking is not.

<comment><USER10> I switched to Safari, after Chrome started automatically login you to Chrome account if you login to gmail. They become too aggressive on tracking.

<comment><USER20> I am thankful for Safari. Opinion: Safari is underrated.

</comment></comment></comment><comment><USER21> So worse than just not supporting sites you visit (via blocking or not clicking), you actively harm their conversion rate on ads, making their slots worth less to networks. Super.

<comment><USER22> So maybe that's good if you want to encourage sites to find other business models that don't rely on advertisement.

<comment><USER23> How many sites would you actually pay for?

<comment><USER22> Well, maybe a subscription for every site is _not_ the right business model, we could imagine a lot of different ones. For example, automatic tipping when you spend more than x minutes on a website (something similar to what brave is trying to do), or pay by article (a few cents) on news sites.

Eventually people won't be able to subscribe to every site they want content from obviously. Look at netflix / hulu / amazon videos / youtube red ... It adds up very quickly.

<comment><USER24> Trying to convince me to set up a subscription upon any visit (and especially upon the first visit) isn't gonna be very effective. It requires thought and some calculations.

"Liked it? Pay me $2" is a way more simple decision to make. If I make it to the end of your content and see a PayPal.me (or Ko-fi) link, there's a reasonable chance I'm going to click on it. I can't say the same for links to Patreon.

<comment><USER25> There could actually be a sweet spot for ApplePay (and similar service) there. Quick anonymous and secure tips for website.

</comment></comment></comment></comment></comment></comment><comment><USER23> This doesn't work. Its very easily caught and actually makes you more trackable because of the extra interaction signals.

Stick with the normal ad blockers.

<comment><USER26> Can you elaborate more on how it can be caught and make users more trackable? Even if there are more "signals", individual advertisers won't necessarily be able to know that the same user clicked on all other advertisers' links.

<comment><USER10> As more web pages you visit, as more tracking markers you've get. Yes, your tracking history will be skewed because of random clicking, it's kind of GIGO effect, but such kind of junk data is very easy to filter out. When you clicking on everything you provide too much events, which become suspicious and irrelevant. Also all clicks are made in background, which means that there is no rendering, no view tracking, which is obviously easy to catch. Check how vCPM and viewability work.

<comment><USER27> Note that AdNauseam allows you to configure probabilistic clicking so that it's harder to filter out.

<comment><USER10> Once your IP is detected as fraud it's trivial. There are various ways to do this. For example invisible links that you cannot click unless you're bot.

<comment><USER9> Perfect, mission accomplished ;)

</comment></comment></comment></comment></comment></comment><comment><USER28> I used it for a time, but it gets you blocked by plenty of filters and makes captchas extra suspicious.

<comment><USER4> I have hardened my browser for privacy and now CAPTCHA hates me.

Its an arms race and I think the advertising industry knows that eventually people will give up.

<comment><USER29> I don't believe users will lose this arms race. I don't have hard data, but from what I observe in various circles is that the Zeitgeist is that the user/consumer attention is valuable, content is cheap, so put up barriers and the user will bounce

The sad part is that this commoditization of content ends up affecting the quality content, that will probably end up becoming a niche market. Charge per content and the user will bounce, charge per month and you have to be the biggest because of network effects (try recommending a series from Amazon Prime to someone who subscribes to Netflix)

There is a trend to use ads disguised as content ("People are using this secret trick to earn mad $$ in [oddly specific location, close to you]"), or intertwined with content that is yet immune to ad blocking(like ads in the middle of youtube videos/podcasts), but that has a higher production and negotiation cost, it will probably not be a market as big as ad networks.

EDIT: Just remembered about ads on smartphone apps which are a viable option due to the lack of user control over hardware and software. There are some solutions, but these are much harder than installing a browser extension and thus not as widely adopted.

<comment><USER30> Which is one reason why they are pushing lusers toward phones and away from desktops.

</comment></comment></comment></comment><comment><USER31> Amazing concept. My only problem is the permissions it's asking while I tried to install it on firefox.

\- Access your data for all websites [You could take away my passwords]

\- Download files and read and modify the browser's download history [Why?]

\- Access browser activity during navigation [Why?]

</comment><comment><USER32> Perhaps instead they could build a central store of potential ad clicks and their base rate likelihood of being clicked. Then, instead of clicking everything, they could click ads at the same rates an average user would, across the network.

</comment><comment><USER33> This is not the right way to go about making anything better about the internet.

<comment><USER27> Why isn't it?

</comment></comment><comment><USER34> One kind of fraud that I suspect exist but I hear less talk about here is fraud against advertisers;

Last time I clicked and bought something from an ad was 5 years ago. It costed me about USD 30. Either I'm totally extraordinary (not likely) or this is true for huge parts of the rest of ad viewers as well. I also suspect that there is a connection between disposable income and resistance against ads.

More specifically I suspect ad networks fleece dumb and inexperienced ad buyers buy selling ads they know cannot work.

<comment><USER35> I view online advertising similar to advertising in a print magazine. Brand/product awareness. Occasionally ads are quite relevant to me, such as travel savings.

</comment></comment><comment><USER36> It seems the approach here is to reduce the click-data value to zero, because every ad is clicked. How about just removing clicks all together?

Maybe about a browser extension that loads every ad, but there are no clicks. Preferably the browser makes the ad un-clickable (if it's visible at all).

Now you've got advertisers spending money on creatives, building campaigns, bandwidth, monitoring/management, etc. but there's an almost zero chance of generating revenue. Would that be more effective?

<comment><USER37> There is already adblock and ublock.

This is preventing the ad campaigns from building a database about your personal preferences, building a profile on you. Also this way the advertisers are spending even more money, by paying for those clicks. If the goal is to make advertisement cost more or provide some sort of political statement, then this is surely more effective. (Regardless of whether the goal is really that great.)

<comment><USER36> Increasing cost was the thought, yes. I admit I'm not totally up-to-speed on what adblock and ublock do, but I was under the impression that they don't load the ads. So while you wouldn't see them, there's also no cost to serving them.

Edit: But are the advertisers really paying for those clicks? Reading through the thread, it seems like these get flagged as fraud pretty easily. So while there's still a cost to create/serve the ads, to the point of my question, it would seem they don't pay the websites for the clicks.

</comment></comment></comment><comment><USER38> What is a "visit"? Is it executing JavaScript on the page it visits, and acting completely like a normal browser? If not, trivial to detect?

</comment><comment><USER39> I'm okay with not running an ad blocker but what I really wish somebody would do is block the obnoxious clickbait "<insert your town here> guy in his thirties found this one weird way to make < insert the last thing you bought on Amazon>!!!" and it has a picture of some some heavily photoshopped model.

<comment><USER40> I agree that obnoxious, vile-quality ads deserve to be combated by the recipient as though on a war footing.

</comment></comment><comment><USER41> Next up for anti-ad-block: if user clicks an irrelevant ad, block services.

</comment><comment><USER42> "Install AdNauseam 3.7"

3rd party ads are bad for privacy. But browser extensions are even worse. They can see everything you do on any website. They can change what you see. Redirect you. Send data wherever they want. Without you noticing any of this.

Besides, using this thing result in sending even more data to the advertisers.

I can understand the hate about how user hostile the web is. But this is not a solution. A solution would be to use bloated websites less.

On HN, we could downrank pages that send data to 3rd parties like this: Tell the submitter of a page "The page loads sends data to 75 different servers. Please be aware that we will not show it on the front page until it has at least 75 upvotes".

This would make an impact.

Imagine Reddit or Twitter follwing this practice. The web would become better fast.

<comment><USER28> Except it's way easier to trust a bunch of extensions that the entire community vets, with a code you can inspect, instead of the thousands of ever changing 3rd party code executing in ads every day.

<comment><USER43> > the entire community vets

Pardon my ignorance, but not every extension is open source? Recently been a few stories of popular extension maintainers offered money to either include coffee or hand over all control to shady people.

Personally I wouldn't count thousands getting auto-updated malware installed in their browser before the world notices as vetting.

<comment><USER18> > Pardon my ignorance, but not every extension isnt open source right?

No, but this one is.

<comment><USER43> I realize that and even gave it a try long ago, the comment was meant in general.

Besides ublock origin and noscript I avoid extensions like the plague. Autoupdates mean that any malicious actor could infect many before it gets pulled.

</comment></comment></comment></comment></comment><comment><USER44> This is one of those times I just sit down and think: "Damn... such an obviously good/bad idea".

I am really proud of humanities ability to be creative.

</comment><comment> r-u-serious This is genius! Use people's resources to click on ads without them knowing, brand it as "obfuscation", profit!

</comment><comment><USER45> The trouble is this helps sustain the ad delivery ecosystem. Simply blocking ads does more to effect change.

<comment><USER46> Yeah, unless the extension is used by a significant portion of the users, this a probably pushing numbers up a bit for networks.

</comment></comment><comment><USER47> Amazing idea and clever name.

</comment><comment><USER48> Any traffic you give them is just another datapoint to sell.

<comment><USER18> So they can target you as someone who hates ads?

</comment></comment><comment><USER49> so what if they can mark you as a bot. I'd love to be marked as bot so nobody wants to serve ads to me. that's mission accomplished.

<comment><USER50> welcome to captcha

</comment></comment><comment><USER51> I'm in advertising and I'm not sure I get the hate towards ads.

I mean, anyone here does not have a business? Do you really expect to build a company based on product quality and the ocasional blog post? I guarantee you that 99% of postmorten posts posted in HN are because said startup couldn't figure out their marketing strategy.

Anyways, isn't this click fraud?

<comment><USER22> The problem is that advertising is shifting towards manipulation. Facebook and co can target so well their users, and do brain research to understand how to most effectively make someone want a product, or click on an ad, or buy a service..

Also, we suspect cases of political manipulations through advertisement channels (remember cambridge analytica ?)

Before, advertisement was just sensitization to a brand, making people know it. Today, it's much more, and I find it absolutely horrifying.

Also, ads are very annoying when they prevent you to enjoy the content, and block half of the page, as it is the case in a lot of sites.

(please excuse the language, not native speaker)

<comment><USER52> It was almost always manipulation; recall all the old cigarette ads featuring doctors.

<comment><USER22> This is more a lie than a manipulation (and is punished by law, at least in some country). But you are right that even without targeting, ads could hurt people.

<comment><USER52> That's now illegal in many countries (not that tactic, just advertising for cigarettes). Faking legitimacy by implication of (spurious) association with something seen as trustworthy is unfortunately entirely legal, as far as I know.</comment></comment></comment></comment></comment>


Why freebies are great for business - <AUTHOR> http://www.smarta.com/blog/2012/4/give-your-customers-free-stuff-its-good-for-business

<comment><USER2> I am always shocked that this tactic isnt used more often. Everyone loves a freebie, and as the article explains- doesn't need to cost the earth!</comment>


Working the System at a BigCo - <AUTHOR> http://www.expatsoftware.com/Articles/working-the-system.html <comment><USER3> At a prior employer of mine, you accrued 12 sick days per year, up to a maximum of 120 in your bucket at any given time.

If you were ill, you were permitted to use as many of your accrued sick days as necessary. In any given calendar year you could take five sick days without any documentation, but the rest had to come with a note from a doctor indicating you were too ill to work.

There was also a company policy that stupidly tried to incentivize attendance at work: if you used _no_ sick days in a year, you would receive a "bonus" vacation day to use the following year. Setting aside how this incentivizes people to come into work when they're sick, it also set up an perverse incentive after an employee actually had to call in sick.

Suppose you had to actually take a sick day due to illness. That day off cost you the free extra vacation day next year. Now you may as well just "call in sick" later in the year and exercise your remaining un-validated sick days.

<comment><USER4> _Now you may as well just "call in sick" later in the year and exercise your remaining un-validated sick days._

You gotta love policies like these. What a way to shore up morale.

</comment></comment><comment><USER5> In a past life, I ran a consulting team at a BigCo whose business centered on T&M contracts like OP's. BigCo had 10k employees, mostly associated 1:1 to contracts with the same "bill exactly 40 hrs, but never overhead" constrains.

Our little team had 100 employees, but we matrixed those guys across all our contracts. While the clients disliked the idea of not having "their guy," they really liked having access to the technical depth of 100 guys vs. just the 10 they could afford. Turns out being able to have a Linux kernel guy, OS X kernel guy, Android kernel guy, database expert and hardware hacker on call at all times is incredibly valuable.

Since we matrixed across contracts, we managed to instuitionalize the "overtime hack." The guys were exempt status, so they didn't get time and a half for hours over 40, but they did get paid for every hour they worked. It was a phenomenal hack - guys were routinely making 20-50% more than their base salary. We intentionally understaffed by a bit, to make sure there were always extra hours to burn.

That team is 15 years into existence at a BigCo, and the hack still lives. If you find yourself in a consulting org and think you can make something like this work, don't think for just yourself, but shoot for the moon - set it up so it works for everyone and outlasts you.

<comment><USER6> I don't get it. What did you actually do? Multiplex their time so they worked for two clients during the same hour, or what?

<comment><USER7> I think each contract was for 10 people working for 40 hours each per week. In effect buying 400 hours of expertise. That did not stop one of those 10 people doing 40 hours on one contract and another 10-20 hours on another. As long as both contracts were satisfied all was good.

By under resourcing the operation, employees were guaranteed to earn 'overtime' if they wanted it. However implication is that you would be happy putting in 50-60 hours.

<comment><USER5> > However implication is that you would be happy putting in 50-60 hours

You're taking a too narrow a view of it. We never committed anyone to 50-60 hours, that's unsustainable. But by _allowing_ it and building a system to manage it, you let folks work what they want and still meet the client needs.

Without that flexibility, what happens is what OP describes - folks work more than 40 because you need to / want to, but you don't get compensated for it.

</comment></comment></comment></comment><comment><USER8> I would be interested in reading any advice for developers/engineers on how to "handle" management. Based on some limited reading I've done, the goals of management and what engineers intuitively think management wants are often very different. Basically, what behaviors do I need to adopt to make my relationship with technical or non-technical managers as mutually beneficial as possible?

<comment><USER9> I think it is not enough to be good, you also have to look good. What I mean by that is you have to make sure your contributions are visible and comprehensible to your bosses. This should establish some level of credit with them. Once you have that credit you can build on it to have more informative discussions, perhaps during one-on-ones. Dare to ask.

Unfortunately, I have seen managers, technical and non-technical, who are seriously non-transparent. That is, they have and promote their own hidden agenda, without regard to how that affects others. Sorry for the pessimistic tone, but management tends to entail politics in big companies, which itself attracts those with the non-transparent personality trait.

<comment><USER10> > I think it is not enough to be good, _you also have to look good_.

[emphasis mine]

This rings true in a lot of large places and in some medium places. If your butt is in a chair in the office, you better be working on something. It doesn't matter if you clear your plate, took a few tasks from someone else, finished those as well, and are looking at the Software Engineering or Code Review SE sites or OWASP to help holistically contribute to your project. Your billable time better be used for tangible results that can be demoed or shown on an agile board. Never mind that you crushed estimated 50 hours in 30 - <USER2> don't get to be a warm body.

<comment><USER11> The real advice in this comment is to not finish your work too early, as the only reward you'll get is more work.

<comment> FLUX-YOU Which of course leads to trying to flex the deadlines to give yourself as much time as the other party is willing to tolerate. After all, if they were willing to budge to a new time but no further, you've just found their actual time.

</comment></comment></comment></comment></comment><comment><USER12> I was happiest at a place where I was either paid 70% of the billed hours (client pays $100 per hour, I get $70, company get $30) with the company doing weekly paycheck (withholding the taxes, W-2, and handling the health insurance & 401k payments), or 90/10 split on a 1090 (but paid long before the client paid). I went with the 70% because I was a bit scarred of mucking up.

It is amazing how enthusiastic you can be in hour 50 with that situation. I frankly think its unhealthy but at least there was a pain point for requiring it and that pain ($) also benefited me.

</comment><comment><USER13> Billable hours are the work of the devil. I remember my boss explaining how "I needed to work back all my vacation hours" was a good thing.

</comment><comment><USER14> It makes complete sense (I mean from their point of view kind of sense, not the system is logical and the compensations are well structured kind of sense) but I would not have thought of the bosses point of view unless it was spelled out for me like in the OP.

In the author's case the mismatch in understanding worked out for them. I wonder how many times it works out quite badly for one party or even both. Even between two sympathetic people where both desire to understand the other, sometimes you just don't.

</comment><comment><USER15> Most executives and managers don't know how, or don't want to, solve problems. So they dump those problems onto employees, vendors, even customers. Anyone to avoid having to do their job. Their most valued employee is the one in whom they can see value without having to work at it.

<comment><USER16> You say that like it's a bad thing. I think the management perspective would be that they're good at hiring and/or outsourcing, which are definitely good management skills to have and arguably what doing the job well is all about.

<comment><USER11> It is bad, because the managers take the bulk of the credit and reward, rather than those that actually do stuff.

<comment><USER17> You say that like it's a bad thing. Obviously a manager didn't do everything, and no executive would think they did. What they know though, is the manager hired the team that worked together and delivered the appropriate solution. If you want credit from the executives, you should become a manager and manage expectations and deliverables.

<comment><USER11> "You say that like it's a bad thing."

Because it is a bad thing.

<comment><USER18> Would you please stop posting unsubstantive comments to HN? You've been doing this a lot, e.g. [https://news.ycombinator.com/item?id=14573073](https://news.ycombinator.com/item?id=14573073) and [https://news.ycombinator.com/item?id=14571905](https://news.ycombinator.com/item?id=14571905).

If you have a substantive point to make, please make it thoughtfully; otherwise please don't comment until you do.

</comment></comment></comment></comment></comment></comment><comment><USER19> Why did the employee need to fill out any paperwork to be taken off of the performance plan? Shouldn't that happen at the direction of their manager? Feels a little bit like a deus ex machina.

<comment><USER20> Have you not worked at a big company? This is 100% normal for everything.

For the required training I do because my work touches health care: The company has a record of what training I need. It sends me a list of courses. I then have to register for those courses -- within the same company. They can't register me for it on their own. I take the course, get my passing grade and now the course and my training record know that I have a passing grade for the course. So naturally I have to print that out, upload it to another site and mark it complete. Someone in India (literally) checks this. Not done yet, I fill out a paper copy by hand with course numbers and dates and sign it. Upload that _and_ turn in physical copies to my management. If I want credit on the number of hours training I have for the year, I need to update that manually as well. Expect these forms to be kicked back multiple times on the way because the date is in the wrong format or some other reason. Also expect to take multiple forms of the same training within the same training year because it has been repackaged (not new courses, regrouped same courses).

<comment><USER19> I currently work for a large corporation. This is not 100% normal for everything. This wasn't a training, this was the fundamental employment status of the employee. I don't need to sign any paperwork to accept a raise or promotion, etc. I've never been put on a PP but I'm guessing my company wouldn't require the employee to handle any paperwork if they came off of it either.

Luckily our training system sounds more streamlined than yours. Different strokes for different companies I guess.

</comment></comment></comment><comment><USER21> There's a gray area between "good worker mode" and happily salaried. If they're taking advantage of that, then you need to leave BigCo. There are other SmallToMediumEvenSomeOtherBigCos out there who'll pay what you're worth; even if that coincides with 50 or 60 hour weeks.

<comment><USER22> If the latter are paying you "what you're worth" in return for 50-60 hours a week, aren't you getting paid 50-75% of what you're worth...? I think you've been fooled.

<comment><USER23> ...no? Salaried jobs break the direct correlation between hours worked and hours paid, but it doesn't mean there's no plan there. There are absolutely salaried jobs which openly expect 50+ hours, it's up to you to decide if the salary matches the expectation.

(There are plenty of jobs which _aren 't_ upfront about it, obviously. That's more of a scam.)

</comment></comment></comment><comment><USER24> I had a guy work for me once, I was trying to transition him from hourly to salaried. He had some longer weeks prior to this, and made the assumption that this would always be the case. He said, "I don't want to do this, because I will make more money this way."

Sounds like the article, right?

Except ... this extra time was a very temporary scenario, and he would be getting benefits, an effective hourly raise, etc. Even more to the point, when we didn't need his services ... and he didn't grasp this part, we wouldn't bring him in and pay him, though, as a salaried person, I would expect he would be doing self-education while we had "down" time, so he'd increase his value and utility to the organization.

Basically, I was trying to provide value to both the company and to him. As we were a very small company, I was able to see the value aspect very clearly, and I made the bet (later proven wrong as it turns out) that he would make a stronger contribution to the company if he had a steady source of income, with less worries about billable hours.

The big reason why he was getting more hours was that he was helping us set up our lab space. That project was almost complete ... maybe 2 more weeks of longer weeks, after which ... we'd need him 25%-50% time at best. I did need someone with expanded skills that he didn't have, and thought (mistakenly) that I could grow this particular individual into that role ... he expressed a strong interest in it.

The incentives aren't usually well aligned in BigCo and employee. We are, effectively, cannon fodder, for their plans, up through and including the senior exec ranks. Your incentive alignment with the corporation varies inversely as some power of the distance from the strategic decision making.

In SmallCo and employee, there are typically better alignments, though still not perfect. For someone like me, an entrepreneur CEO/CTO at the time, I was looking to build a culture, an environment, where we took a long view, beyond the next billable event. Where value took time to grow, where we cultivated it, where we grew people into roles that they wanted but might not have been able to do at the time.

The problem is, when you are sufficiently removed from the decision making process, your alignment is entirely economic. When you can't impact outcomes, and gain professional satisfaction and positive reputation from helping to steer a better course, your focus is, correctly, on other matters that benefit you personally.

To a large extent, this is the way things work. What benefits you personally and professionally, and is the compensation, work, and culture, aligned to mutually maximize the value of all of these things. In the case of the OP, no, the compensation was specifically architected to minimize cost to the BigCo, and maximize the benefit to the big co, even at the expense of the employee. Which would, undoubtedly, negatively impact the culture, and the way the employees interact with BigCo.

I am sorry to say this is to be expected ... but it isn't the first time I've heard this type of story.

For me personally, I remember working for some small silicon valley outfit in the 90s, where they treated some of the specialist developers like crap, but paid the contractors something like triple the hourly rate to use their expertise. So, a fairly sizeable cohort of my colleagues resigned, formed small consulting groups, and were hired back at (then) outrageous rates to do effectively the same work.

This misalignment is manifest in many large Cos.

<comment><USER25> Hey... that sounds similar to what happened under the Howard Government in Australia. The then new PM John Howard thought that the bureaucracy was lazy and bloated (and in some ways, it was). So he sacked a good proportion of workers, and set about his legislative and national agenda, only to realise (much like Trump is now!) that you actually need people to make this work.

So not able to increase the numbers he employed, it was decided to bring in contractors to do the same work. Many of them were former workers at the same departments. However, there were less of them, but they still cost a lot more. Then the government started to realise they needed some way of overseeing their work, but they didn't have enough staff to do so, so they employed people to check on the contractors' work. As the workload was still high, they kept employing more contractors, and you guessed it - more supervisors.

By the time Howard left office, he was employing three times the number of people than the previous Labor government.

</comment></comment><comment><USER9> TL;DR It is a case of organizational incentives being poorly aligned with individual incentives.

<comment><USER26> And managers not understanding what their employees were doing. In this case, they understood the technical side, but were not paying attention to the financial side.</comment></comment>


No amount of alcohol is safe, health experts warn - <AUTHOR> https://www.cnbc.com/2018/08/24/health-impacts-of-drinking-no-level-of-alcohol-safe-lancet-study.html <comment><AUTHOR> Here is the study - [https://www.thelancet.com/journals/lancet/article/PIIS0140-6...](https://www.thelancet.com/journals/lancet/article/PIIS0140-6736\(18\)31571-X/fulltext)</comment>


The Programmers' Stone – Neuroscience - <AUTHOR> http://the-programmers-stone.com/about/neuroscience/

<comment><AUTHOR> I wanted to share the parent URL but HN didn't allow me.

In "Why No-One's Noticed This Before"[1] the author makes a distinction of `self-consistents` and `confabulators`. I've found this very similar to Robert Pirsig's `classical thinkers` vs `romantics`[2]. It is unfortunate that ZAMM devolves into rationalizing irrational behaviour and ends with a shrug after having raised the reader's expectations. I haven't read all of the material here yet, but so far it all makes sense.

1: [http://the-programmers-stone.com/about/why-no- one%E2%80%99s-...](http://the-programmers-stone.com/about/why-no- one%E2%80%99s-noticed-this-before/)

2: [http://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_M...](http://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance#Philosophical_content)

</comment><comment><USER2> I haven't read past the first article yet, but already this is strongly reminding me of the "closed" vs. "open" mode idea of creativity—namely, that there is a sort of "mode switch" needed from the creative mode of idea generation (the "open" mode) to the more anxious mode needed when you actually get your hands dirty and do the work to implement the thing (the "closed" mode). This seems like a more neuroscientific explanation of this exact idea.

It's well-explained in this good (and funny!) talk by John Cleese, with some practical tips on how to create an environment to foster creativity: [https://www.youtube.com/watch?v=tmY4-RMB0YY](https://www.youtube.com/watch?v=tmY4-RMB0YY)

I definitely recommend watching it.

<comment><AUTHOR> I love that talk, thanks for associating it with this.

I see the similarities but I think if you read the whole thing (I've finished it now) you will find out some differences as well.

I vaguely remember John Cleese talks about innovation/creativity and says something along the lines; writer's block, you just shut up, sit down and be creative. Not exactly with these words of course. Philosopher's Stone is pretty much all about stress. And actually it says `shut up, sit down and be creative` approach would backfire because it would produce stress which is counter-productive for this mode of thinking.

I like the phrase Rich Hickey uses in relation to software design; hammock time. It is open mode, but it also implies peace of mind and a lack of pressure to be creative.

</comment></comment><comment><USER3> Not to excuse my own incompetence but, in school, I had a tendency to totally go blank when asked a question in front of the whole class. Even if I had just been daydreaming about the very answer I was being asked.</comment>


IBM has found a way to store data on a single atom - <AUTHOR> https://www.cnet.com/news/ibm-storage-atom-breakthrough-quantum-computing-research/ <comment><USER2> > a single atom of the element holmium carefully placed on a surface of > magnesium oxide. A special-purpose microscope uses a tiny amount of > electrical current to flip the atom's orientation one way or the other, > corresponding to writing a 1 or 0. The researchers then read the data by > measuring the atom's electromagnetic properties.

I'm not sure I could have recalled the existence of the element holmium, I've never heard or read much about it. I looked it up, and found the likely reason it was used for this research:

"Holmium has the highest magnetic permeability of any element and therefore is used for the polepieces of the strongest static magnets." [https://en.m.wikipedia.org/wiki/Holmium](https://en.m.wikipedia.org/wiki/Holmium)

I don't know if we'll see practical atomic storage or if more than one bit per atom is physically possible, but in theory there's enough space in an atom to hold millions of bits. But I think you have to get to black hole density... [https://en.m.wikipedia.org/wiki/Bekenstein_bound](https://en.m.wikipedia.org/wiki/Bekenstein_bound)

<comment><USER3> Just note that in practice nobody wants to keep their data storing atoms frozen near absolute zero, but rather prefer to have them at temperature close to 300 K.

However to store 1 bit of information at given temperature the energy difference between state corresponding to 0 and state corresponding to 1 has to be not less than something of order kT ≈ 0.02, otherwise the information would be quickly erased by thermal motion. But if we take maximum energy gap at atom that might be used for storing information to be upper bounded by atom's ionization energy [1], it turns out that it can't be larger than something of order 10 eV. So it doesn't seem to be possible to store more than hundreds or thousands of bits per atom at room temperature.

[1] [https://en.wikipedia.org/wiki/Ionization_energies_of_the_ele...](https://en.wikipedia.org/wiki/Ionization_energies_of_the_elements_\(data_page\))

<comment><USER4> Could you please expand on your kT ~ 0.02 calculation?

<comment><USER3> Sorry, it was of course 0.02 eV, not just 0.02 :)

k = 1.38e-23 J/K = 8.6e-5 eV/K, so kT = 0.025 eV for T = 300 K.

<comment><USER5> of course ;)

</comment></comment></comment></comment></comment><comment><USER6> Things like this were partially why I got interested in electrical engineering & physics. Sadly, 15 years later, my career deviated to financial software, but I still find articles & progressions like these fascinating.

<comment><USER7> It's not too late if you're willing to take a pay cut.

<comment><USER6> Unfortunately, I've lost a lot of my EE knowledge due to mental atrophy.

<comment><USER8> You'd be surprised how quickly it comes back. I recently had to design a simple ~50 node circuit after ~10 years of not doing anything of the sort, and I had it simulated in SPICE and prototyped after maybe 10 hours of work over a few days.

<comment><USER9> We had to learn SPICE in my ECE program. I found that inexplicable- writing a circuit in SPICE is like using a slide rule. I can derive a circuit on paper (just as I can do math), and I can use an _actual_ circuit analyzer (just as I can use a calculator). Knowing the foundations of simulation programs is justifiable, but using and practicing with them is just excessive. As the circuits got more complex, I "cheated" by using a script to generate netlists and eventually I just used LTSPICE because christ, I have better things to do than type until my fingerprints wear smooth.

</comment></comment></comment></comment></comment><comment><USER10> Atom storage has been done before by others. This example at the University of Wisconsin-Madison from 2002 comes to mind:

[http://www.trnmag.com/Stories/2002/080702/Ultimate_memory_de...](http://www.trnmag.com/Stories/2002/080702/Ultimate_memory_demoed_080702.html)

</comment><comment><USER11> Storage medium is just part of the equation. The other important and hard part is the mechanism that is required to read and write data to that medium. Would you use a CD as a storage medium when the CD reader/writer is size of a washing machine?

<comment><USER2> > Would you use a CD as a storage medium when the CD reader/writer is size of > a washing machine?

Yes, according to history, if that's all anyone had. :)

IBM's project might be the ENIAC of molecular storage devices. Only time will tell. Keep in mind your example doesn't go far enough to match past history, we used to actually have _much_ worse than 600MB / washing machine. We used to have 100 words / warehouse.

"By the end of its operation in 1955, ENIAC contained 17,468 vacuum tubes, 7200 crystal diodes, 1500 relays, 70,000 resistors, 10,000 capacitors and approximately 5,000,000 hand-soldered joints. It weighed more than 30 short tons (27 t), was roughly 2.4m × 0.9m × 30m (8 × 3 × 100 feet) in size, occupied 167m2 (1800 ft2) and consumed 150 kW of electricity."

"In 1953, a 100-word magnetic-core memory built by the Burroughs Corporation was added to ENIAC"

[https://en.wikipedia.org/wiki/ENIAC](https://en.wikipedia.org/wiki/ENIAC)

* EDIT: It'd be more fair to use punch cards as ENIAC's storage mechanism to compare against, and punch cards held a lot more than 100 words. Anyway, still, crazy by today's standards, right?

<comment><USER12> To be fair, there's a difference between long-term storage and working memory. The magnetic-core memory you're talking about is RAM, not storage. Though it is looking like the two may converge some time in the future, until now "working memory" (RAM) in computers has always been far lower-density than storage, but far faster, for use in computations (and also volatile, unlike storage which is non-volatile). It's the equivalent of comparing your brain's short-term memory (when thinking about a problem) to your hand-written notes. Punch cards are indeed the appropriate comparison.

But to get back to your original point, a washing-machine-sized storage machine is perfectly acceptable if that's all your technology allows. In fact, it'd even be acceptable now, if it allowed you to replace what currently takes a whole data center's worth of hard drives. I'm sure Google would be ecstatic if they could store all of YouTube on a single machine the size of a washing machine.

</comment></comment></comment><comment><USER13> Can we stop measuring data storage in units of 'song'?

<comment><USER14> I think it's a good unit of comparison. Virtually everyone has listened to a song to completion, and a very large number of people have done so in the past 24 hours, or even hour. It's also much easier to quantify the _length_ of a song. Whereas with books: well, it's been a couple months at least since I've finished a new book. And number of pages in a book is not as meaningful to the human experience as _amount of time_. And the amount of time spent on a book -- i.e. minute per page -- greatly varies per human.

Sure, according to who you ask, a 3-minute Justin Bieber song contains less "data" than a 3-minute Bob Dylan song, but at least the quantifying of time is consistent among different people (um, relatively speaking).

And sure, 26 million songs is still as hard to comprehend as 26 million books. But again, more people can quantify how much of their life a song takes because most people have more recently consumed a song's worth of information.

The variance between data storage for song (e.g. length, kbps) is not meaningfully different enough in terms of order of magnitude.

<comment><USER15> Raw studio-quality audio and highly compressed mp3s are multiple orders of magnitude apart.

<comment><USER14> When the average reader has to store/port songs in bulk, which of those formats are they using?

<comment><USER15> An unknown quantity somewhere in the middle.

<comment><USER16> A "song" is about 4-10MB. Good enough for a colloquial point of reference.

</comment></comment></comment></comment></comment></comment><comment><USER17> I like the idea of storing information by using two stable isotopes of carbon into a diamond. It would last a long time and be extremely compact.

Has anyone looked into that?

<comment><USER18> How would you read that information?

<comment><USER17> I guess that's what they have to work out.

You could do graphene instead and then just read it out row by row?

</comment></comment></comment><comment><USER19> How is the single atom isolated? And how can you make sure there's only one?

<comment><USER20> The atoms are manipulated by a scanning tunneling microscope [1], which allows you to both image and manipulate single atoms, as shown in the movie "A Boy and His Atom" [2], also made by IBM. You can make sure there's only one by just taking an image at a resolution high enough to see single atoms.

This is fundamentally a scanning technique. A very sharp tip, down to a few atoms at the point, sometimes capped with a single carbon nanotube, is scanned across the surface of whatever sample you have, which for a measurement like this, must be almost atomically flat. A bias is applied between the sample and the tip, and quantum tunnelling can allow for electrons to move between the sample and the tip. This current can then be measured, and correlated with sample height or electronic properties of the sample. If you scanning step size is less than that of the size of an atom, you can then image single atoms by detecting the change in current due to a different species of atom, or due to the change in height between your flat surface and tip when an atom is sticking out of the top of the surface.

To manipulate the atoms, the tip is moved close enough to an adatom that it begins to form a weak bond with the tip. The tip then can move and essentially drag the adatom with it to wherever the researchers want. [3]

[1] [https://en.wikipedia.org/wiki/Scanning_tunneling_microscope](https://en.wikipedia.org/wiki/Scanning_tunneling_microscope)

[2] [https://en.wikipedia.org/wiki/A_Boy_and_His_Atom](https://en.wikipedia.org/wiki/A_Boy_and_His_Atom)

[3] [https://www.nist.gov/programs-projects/atom-manipulation- sca...](https://www.nist.gov/programs-projects/atom-manipulation-scanning- tunneling-microscope)

</comment></comment><comment><USER21> If there's an atom there, it's a 1?

<comment><USER22> Magnetic orientation, probably. Elsethread, it was mentioned that they used Holmium, which is the most magnetically reactive element.

</comment></comment><comment><USER23> There's plenty of room at the bottom, after all...

<comment><USER24> Upvote for Feynman, always

</comment></comment><comment><USER25> Maybe a few decades from now, our children will look at photos of 10MB HDD, 8TB HDD, then 8PiB HDD then have a smile how technology evolve.

<comment><USER26> As a child (showing my age here) I remember getting a 20MB HDD for our desktop machine (might have been an Olivetti with a 286 CPU, I don't remember). At the time, that seemed an _incredible_ amount of storage - "how will I ever fill that", I thought!

</comment></comment><comment> awinter-py Couple of years ago a japanese team used an iodine atom to compute a fourier transform. The computation was faster than a computer but the ETL was super slow.

IBM has been pushing stuff around with a tunneling microscope for decades.

It's cool but the press should report the transfer rate.

</comment><comment><USER27> This very much reminds me of [https://www.youtube.com/watch?v=oSCX78-8-q0](https://www.youtube.com/watch?v=oSCX78-8-q0) which they did a couple of year ago

</comment><comment><USER28> Finally we can test the limit of ZFS. /s

<comment><USER29> Only "/s" as this remains a "Boil the oceans" problem ;)

[https://blogs.oracle.com/bonwick/entry/128_bit_storage_are_y...](https://blogs.oracle.com/bonwick/entry/128_bit_storage_are_you)

</comment></comment><comment><USER30> 800 Petabyte Hard Disks for sale?

<comment><USER31> Is that like a theoretical limit or are is it just a big number?

</comment></comment><comment><USER32> the atom was then given 30 days to move to a "core" molecule.

</comment><comment><USER33> This website is a piece of shit. It autostarts a second video off screen even after I swatted the first one that popped on the right, covering the text of the article.

<comment><USER34> Is a piece better or worse than a pile, I'm not familiar with the unit conversions.

</comment></comment><comment><USER35> Yet, can't handle figure out a way to support remote employees.

<comment><USER36> Why do people do this?

News: "A does X."

You: "They don't do Y."

What is the thought process involved in this behavior?

<comment><USER37> The thought process is that someone gets badly burned by Y, so the association with A becomes very strong - stronger than any other association. Now every time someone mentions A, they bring up Y.

</comment></comment></comment><comment><USER38> This is IBM:

[https://ello.co/dredmorbius/post/bshytzp0on1dfvjdfw4-vq](https://ello.co/dredmorbius/post/bshytzp0on1dfvjdfw4-vq)</comment>


Ask HN: Windows 10 C++ development with JetBrains CLion? - <AUTHOR> Hi,
It is possible to Develop Universal Windows Applications with JetBrains CLion IDE? If yes, please point to some getting started URLs or books.
Thank you for your answers.
Regards. <comment><USER2> (a) I don't know what a "Universal Windows Application" is, but clion on windows uses mingw, so if you can build them with mingw you can probably build them with clion. (b) I've always found Jetbrains to be very good about answering questions, just ask them.</comment>


Raspberry Pi: An ARM GNU/Linux box for $25. Take a byte - <AUTHOR> http://www.raspberrypi.org/

<comment><USER2> Just a suggestion for the website: the home page should probably be a nice landing page explaining what the project is about, rather than your blog.

Link to your blog for sure, but the home page should explain quickly what the project is and why I should care.

<comment> eric-hu I wholeheartedly agree. Their page now is at least magnitudes more informative than it was a few months ago--when I first saw a Raspberry Pi reference on HN.

I went to their page looking for an about link. I'm not sure if I found it or not, but either way, I left not knowing what it was actually about.

</comment></comment><comment><USER3> The big FAQ, for your convenience:

\--

When will the device be available to purchase?

We anticipate the device will be available to the general public later in 2011 – we were hoping to hit the end of November, but right now December's looking more likely.

<comment><USER4> Also, they _hope_ to be selling the model A for $25 and the Model B for $35.

<comment><USER5> I really, really hope I am wrong, but the first few batches will be woefully short of the actual demand.

Why?

No pre-orders to indicate real demand (Rasperry forums are more optimistic than an Amway convention).

No clue on what financing they have in place to handle the manufacturing.

I have a hard time believing they will do a run of 10000(need to find someone to front $200k+) boards, when the real demand is probably 100k+(at those $25/$35 price points).

What will happen they will have 1000 boards for sale early January and they will be gone in an instant (remember no pre-orders, means people will overwhelm their servers in a huge rush). Then we will wait another 2-3 months for a slightly bigger batch. Repeat until 2013.

Again, I hope I am wrong and hopefully someone at Broadcom who has experience with supply-chain is backing them.

<comment><USER6> While demand might be very high, the particular scenario you describe is not going to happen. Eben addresses the funding issue in this interview: <http://www.raspberrypi.org/?p=281> The trustees will be putting up the money for the initial run themselves. One of the trustees is Pete Lomas, managing director of Norcott Technologies.

</comment></comment></comment></comment><comment><USER7> There are doubts about how open this project will be. I share that concern. But, I also give the guy credit for making the project at all. Maybe it will be more closed than I would like. If the project is a success and produces a lot of boards, then I expect real open source builds of software for it will follow from someone. As a start, I can't think of anything I would prefer to Linux and Python as a place to start. I sure want to buy a few of these boards to experiment with.

</comment><comment><USER8> can we stop posting this until it actually ships?

</comment><comment><USER9> Previously on HN: [http://www.hnsearch.com/search#request/all&q=raspberry+p...](http://www.hnsearch.com/search#request/all&q=raspberry+pi&sortby=points+desc)

</comment><comment><USER10> What's the point of discussing not-yet-released product (i.e. one can't buy it) without proper schematics (or maybe I just didn't found one?) nearly useless tiny PNG file with a PCB layout and no source code available?

Sure, tiny $25 board is cool. If it can be obtained. No point in discussing it further before they either ship it or release DIY manuals.

</comment><comment><USER11> I'm hoping I just found the next base of a networked media player for home

<comment><USER12> My thoughts exactly. Are you planning on blogging about your Raspberry Pi media player adventures when these things are finally released? I'd definitely be interested - huge potential here.

<comment><USER11> While it would require me setting up a blog, it would probably be worth it.

It could almost be a business venture, given the fact that an off the shelf media product is upwards of $100 here in aus, if you could create a decent linux media center experience for the device, and a nice case, you could flog it for _waves hand about_ $80 per unit and be ahead (provided the mark-up took into consideration all your costs).

Would fly in the face of the educational/not-for-profit Raspberry Inc though.

I'll find somewhere to write about it though.

<comment><USER13> It's not flying in the face of the idea of RaspPi, they are making a profit on each unit sold so want as many people to buy one as possible. The educational aspect of the foundation backed by the hacker community buying them up for their own purposes.

The initial 10k batch may be another matter. They are looking at putting a per buyer limit since demand will be so great.

</comment></comment></comment></comment><comment><USER14> Still waiting for open-source code for the board. (Yes, including the 3D accelerator.)

<comment><USER15> If you don't have a compiler or documentation for the proprietary instruction set the GPU uses, what use is the source code to the binary blob that runs on it?

<comment><USER16> The fewer unknowns there are in a system, the more easily the rest can be reverse engineered.

</comment></comment></comment><comment><USER17> the idea of a credit card sized board, running open sourced code, to connect with peripherals is fantastic. but this project is going to disappoint. the guy works for broadcom which is how he got the smaller than minimum quantity of chips, so don't expect it to be repeated by anyone else. it's aim claims to be education, and people compare this to kit computers many years ago, but this is a far cry from that. this guy wants to steer you to use GNU/Linux and scripting languages like Python. no assembly programming. how can a kid learn about hardware without learning assembly? so much for education.

<comment><USER18> Learning about software is more important than learning about hardware.

I learned (Z80 then 8086) assembly as a kid, and now my mental model of how a processor works is obsolete.

<comment><USER19> You can make that argument both ways - if you'd learned Fortran-77 and nothing newer, your knowledge would be obsolete as well.

Either way, you have the foundation, should you wish, to be able to bring it up to date without _too_ much hassle.

I think you'd be surprised how simple an ARM actually is under the skin. Admittedly, it's not Z80-simple, but it's far, far removed from the x86/AMD64 monstrosities.

</comment></comment></comment><comment><USER20> Real artists ship

</comment><comment><USER21> Shut up and take my money!

<comment><USER22> Please don't do this, it offers nothing to the conversation.

</comment></comment><comment><USER23> When i first heard about the Project i was impressed, good to know they won some award, but it is boring after a while as nothing is being shipped even after so many years, just hype, they should remove the 25$ tag till they ship it

<comment><USER6> The project only went 'public' a few months ago (I think [http://news.bbc.co.uk/1/hi/programmes/click_online/9504208.s...](http://news.bbc.co.uk/1/hi/programmes/click_online/9504208.stm) was the first coverage). The 2006 prototype is simply evidence of the massive amount of commitment to the project shown by Eben and the trustees. It's far from just being hype. Alpha boards are with developers (I'm lucky enough to have one sitting on my desk) and they're hoping to start manufacture in the next few weeks.

I understand your scepticism, but look at the people behind the project. It's going to happen and it's going to be awesome. The launch this December is mainly targeted at the hacker and 'maker' community, with aims to target the educational market next year.

<comment><USER23> I am not the lucky one to have the development board on my desk , nor seen any timeline or product roadmap. But would happy to see a commercial launch soon.</comment></comment></comment>


In praise of Go or "Why I moved from Python and C++ to Go" - <AUTHOR> http://groups.google.com/group/golang-nuts/browse_thread/thread/7a980dfc568a54f2# <comment><USER4> The only thing I could see myself leaving Python for is Haskell.

Go seems to fall into a very small niche. The inclusion of a GC means it is not appropriate for a lot tasks that C/C++ are suited for. Also, it is verbose enough where you can't bang out stuff as fast as in Python/Ruby.

<comment><USER5> Go, today, is a niche language by usage but is not niche by features.

It's designed as a server-oriented (i.e. aimed at a still growing programming category) language that is close in syntax to C/Java (i.e. already familiar to many), almost as easy to write in as Python/Ruby (both very successful, non- niche languages) but order of magnitude faster and much memory efficient that either.

As a bonus it has much better concurrency support.

It's designed for the same "niche" that Python/Ruby/Java serves on the server, with many important improvements over them.

Having written code in Python and Go, Go seems to me an improvement over Python in many important areas (speed, memory efficiency, concurrency) and the parts that are not as good are both not as important and not significantly worse (static vs. dynamic typing is a toss (it's nice not to declare types but it's also nice if compiler tells you about a type mismatch typo that Python will only complain about at runtime), Python still has slightly cleaner syntax etc.).

I didn't experience Go being more verbose than Python to a degree that it mattered. In some aspects the syntax is actually less verbose (Python class require more typing than Go interfaces).

Go is still a young language and young implementation. On one hand it means it's anyone's guess whether it'll become non-niche at some point but at the same time I'm pretty sure at year one both Python and Ruby were much less polished and much less popular than Go is at the same stage.

Personally, I'm bullish on Go and if I were writing server side code, I would use Go (even though at the moment I know Python better).

<comment><USER6> >As a bonus much better aligned with today's multi-core reality than Python or Ruby.

Not substantially. It made the concurrency decisions for you ahead of time, and if you need a different concurrency model, you're up shit creek.

> but order of magnitude faster and much memory efficient that Python or Ruby.

So is my Radio Flyer Wagon. You still can't do systems programming, embedded, high performance, or real-time work with it.

I know too much about C and the constraints it works well in to believe Go is anything but awkwardly crammed between two realms of programming.

A language that forces its own GC upon you (note that you can have GC in C/C++, you merely have to choose one), and its own concurrency model upon you without giving you at least a couple choices is not a well designed language.

Even Clojure gives you a couple ways to approach concurrency, and it doesn't even make the same claims as Go has.

I don't know a single person who's done substantial systems programming who takes Go seriously in terms of their field.

Not a single one.

<comment><USER5> > Not substantially. It made the concurrency decisions for you ahead of time, > and if you need a different concurrency model, you're up shit creek.

It's not true. I'm not sure what concurrency models you feel you need but let's go through the most popular ones. There's event based programming which is essentially single-threaded and predicated on structuring your code around poll/kqueue/whatever loop. You can do that in Go since you can call any OS syscall from Go. It just leads to awkward code.

There's shared memory multithreading with locks to protect data structures. You can do that in Go (except you use goroutines, which are multiplexed into OS threads by Go scheduler, instead of using OS threads directly as in C).

And then there's Go's prefferred (but not exclusive) solution of channels/goroutines and idea of sharing memory by communicating (as opposed to communicating by sharing memory as in threads/locks based model).

What concurrency models are available in C or Python or Java that you can't do in Go?

> So is my Radio Flyer Wagon. You still can't do systems programming, > embedded, high performance, or real-time work with it.

As a rebuttal (?), it doesn't follow. As to your point, your definition of systems programming is different from that used by Go designers, since they are very insistent on calling Go a systems programming language. Please clarify what kind of systems programming you can do in C/Java that you can't do in Go?

As to high-performance: I don't follow. It's fast. What kind of high performance programming you can't do in Go that you can do in C or Java?

As to embedded - sure that niche is owned by C. How is it different from Python or Java and how does that make Go a niche language?

The same goes for real-time where real-time systems are even more niche and are as much a property of the OS as it is of the language. You can't do real- time in any language on stock Linux kernel given that kernel can pre-empt any application at any time for any period of time.

You make a lot of statements but nothing concrete enough to support them.

I've shown that in Go you can use 3 concurrency models, 2 of which are currently most popular in the C/Java worlds.

As to systems programming - you don't provide a definition or examples of what kind of programs do you consider as systems programming so it's hard to argue at that level.

Does a web server qualify? (you can write one Go).

Would a distributed database like HBase qualify? Even though one hasn't been written, HBase is Java and there's nothing that you can write in Java that you can't write in Go, with potentially better performance due to compilation to native code and more efficient memory usage.

<comment><USER7> goroutines sound a lot like private queues in Apple's GCD. In their documentation they are quite clear stating that in performance critical code ... surprise ... they might be a bad fit.

</comment></comment></comment></comment></comment><comment><USER8> I don't see where he got the impression that D is not actively maintained. See <http://www.digitalmars.com/d/2.0/changelog.html>, which is the record of frequent, active and extensive updates.

<comment><USER9> Also traffic in the digitalmars.D forum (the main hangout of D developers and users) is roughly twice the traffic on go's mailing list.

</comment></comment><comment><USER10> "- It is "garbage-collected" (which is uncommon for a compiled language: The only other example is "D") "

wat?

<comment><USER11> Don't let the facts get between you and faint praise!

Also: Common Lisp, Scheme, Erlang, SML, OCaml, Haskell, Lua, Prolog, and Java, and no doubt numerous others.

For all of the above, many (if not most) implementations compile natively.

<comment><USER12> Something which has been neglected, but which has clearly shown its value in VMs is _the information gained by runtime tracing._

We should make this more available to the programmer! It should be possible for a programmer to highlight a section of code in an IDE and choose "Apply Trace," whereupon the IDE will apply static type annotations based from saved runtime trace information. The IDE should be also able to present the same information as profiling data to let the programmer quickly home in on the 15% or so of the app which is most performance critical. Using techniques like this should let us get C-like speeds from many dynamic languages.

(Admittedly, this sort of thing would also be highly dangerous. One couldn't apply such semi-automated annotations in ignorance. This could also break otherwise correct programs.)

<comment><USER11> Directing programmers to hotspots based on programming info is pretty reliable. In your case, it depends on how confident the annotations are. The Self papers have a lot about that - JIT compilers can nonchalantly make riskier optimizations, because they can also easily undo them.

<comment><USER12> My idea is that the programmers can add expert knowledge and human intelligence into the mix. They have the ability to just let the VM know: "Okay, in this part these things are always going to be _this type_ and things go like that, so just go to town and optimize the bejesus out of it!"

In other words, a good programmer should be able to just let the VM know ahead of time what's up in critical sections of stable production code. Even better, we should be able to combine datasets from many different runs of many VM instances! This sort of technique would allow us very high degrees of confidence for things like web apps in server farms, where getting 10's of thousands of runtime tracing datasets would be easy to do.

This is where a dynamic language with optional type annotations would really shine.

<comment><USER13> Sounds like how some people use Cython.

Snippet from [0], which is unfortunately temporarily down (I got to it through Google Cache[1]):

      cpdef double integrate_f(double a, double b, int N):
      	cdef double dx, s
      	cdef int i

      	dx = (b-a)/N
      	s = 0
      	for i in range(N):
      		s += f(a+i*dx)
      	return s * dx

[0]: <http://www.behnel.de/cython200910/talk.html>

[1]: [http://webcache.googleusercontent.com/search?q=cache:7NvoUHh...](http://webcache.googleusercontent.com/search?q=cache:7NvoUHhaxRkJ:www.behnel.de/cython200910/talk.html&hl=en&strip=1)

</comment></comment></comment></comment></comment></comment><comment><USER14> Having picked up python as my first programming language earlier this year I am always really surprised to hear how so many programmers hate the indentation.

I don't ever have indentation errors - or if I do, they aren't ever of a sort that pyscripter can't spot them.

Must be a what-you're-used-to thing...

<comment><USER15> "So the danger to paste stuff at the wrong indent level is far less than in Python. "

I would argue that this is actually a feature of the language. This "danger" actually forces the programmer to read through the code he is pasting by indenting.

Also, how many pairs of source code fragments share the same variable names? This argument is quite shallow.

<comment><USER16> The biggest error I have with pasting is that the pasted code uses spaces where I use tabs. They look like the same indent level but they are not.

A good old ggVG= solves that though in vim

<comment><USER17> :retab is your friend.

<comment><USER18> :set expandtab | retab

</comment></comment></comment></comment></comment><comment><USER19> > "It is only superficially object-oriented (no classes, no inheritance, just > interfaces) so it is more transparent"

What does that even mean?

<comment><AUTHOR> From the FAQ: " Although Go has types and methods and allows an object- oriented style of programming, there is no type hierarchy. The concept of "interface" in Go provides a different approach that we believe is easy to use and in some ways more general. There are also ways to embed types in other types to provide something analogous—but not identical—to subclassing. Moreover, methods in Go are more general than in C++ or Java: they can be defined for any sort of data, not just structs." [http://golang.org/doc/go_faq.html#Is_Go_an_object- oriented_l...](http://golang.org/doc/go_faq.html#Is_Go_an_object- oriented_language)

The lack of type hierarchy makes code easier to understand.

<comment><USER20> Also, an "interface" is more of an enforced duck type annotation than an interface or ABC in Java or C++ terms respectively.

<comment><USER21> IIRC, the duck-type mode uses implicit interface creation but you can force an explicit interface if you want (please correct me if i am wrong.)

<comment><AUTHOR> Interfaces are explicitly defined in Go as they are in Java. The difference is that you do not declare the interfaces implemented by a type. If a type has methods that match an interface, then the type implicitly implements the interface.

<comment><USER21> Oooooh, that makes sense. Thanks for the clarification.

</comment></comment></comment></comment></comment></comment><comment><AUTHOR> Although the library coverage for Go is growing, it's tiny compared to what's available in Python. Otherwise, I much prefer Go to Python for many of the reasons given by the author.

<comment><USER12> I've been toying with the idea of doing massive rewrites of Python libraries to Go using syntax directed translation. Getting to somewhere like 98% fidelity is a very practical goal (I've done it and been paid for it!) and gives a tremendous boost to programmer productivity.

</comment></comment><comment><USER22> "- It is compiled into machine code (no interpreter, unlike Python)."

anyone have any kind of measure on how bytecode compares to machine code these days? (most "interpreted" languages have a hidden compile step these days). I understand that this question is largely subjective to the runtime and the task being executed.

<comment><USER5> Compare on what basis?

Speed? <http://shootout.alioth.debian.org/> is an up-to-date, super detailed answer to that question. A rule of thumb simplification I go by is: current Python and Ruby implementations are at least 10x slower than C doing algorithmic work.

A really good bytecode VM can, of course, get much closer to C performance (as shown by Java, C# or even modern JavaScript implementations) especially if JIT is given enough time to profile the app at runtime and generate highly optimized code based on that profile data.

There are of course other aspect you can compare. Bytecode is, inherently, cross-platform and machine code isn't.

Bytecode is usually more compact than equivalent machine code (but then you need the constant overhead of the runtime to interpret that bytecode).

<comment><USER23> Python is my main language, and I think you underestimate the speed different _for a same implementation_ by an order of magnitude. That is, CPU-boud tasks will most likely be around 100x slower.

The realy argument, of course, is that in a given time frame, with people of similar skills, you will not have the same implementation unless your team contains only vulcans. Several people in the scipy community have reported having gone from C++ to numpy/scipy and went faster at the same time - <USER2> C++ is so hard to use correctly, people whose job is not even programming ended up doing things very fast but one millions times because they don't understand their code.

This point is surprisingly not understood by a majority of programmers. Most of the time, you see benchmarks for some trivial or even non trivial algorithms, well specified, and get "look, this language is N times faster". But in my experience, this almost never happens in real life - <USER3> specification keeps changing, you need to redesign constantly what you're doing.

</comment></comment></comment><comment><USER13> Several of the things he cites are a matter of preference (and using the right tool for the job) - namely dynamic vs. statically typed, compiled vs. interpreted.

> The documentation is very good and can be consulted instantly form the > command line or from a browser, indifferently.

I can't speak for Go, but I've always found Python's documentation to be fantastic. And very few things make me as happy as docstrings.

</comment><comment><USER24> I got rid of the shackles of curly braces, and once tasted freedom, it will be damn hard to put me back in chains.

Over my dead body!

<comment><USER5> It's very poetic sentiment but doesn't really address the issue of trade-offs.

Is writing if a { .. } else {} so much worse than if a then .. else .. end (Ruby requires then/end instead of {}.

Python's indentation based syntax (which I think is great) cleverly solves the problem of requiring explicit statement delimiters but it's also a reason why lambda: is limited to one-liners. There's no free lunch.

To Go's credit they did put a lot of effort and design thought into removing line noise from syntax (compared to C) by e.g. adding an automatic semi-colon insertion rule, eliminating braces around if argument etc.

Overall, while syntax is not as clean as Python's, it comes pretty damn close.

<comment><USER9> I'm not so sure about giving credit. Consider:

      package main
      import "fmt"
      func blah() bool {
         return false
      }
      func main() {
        x := 5
        if(blah()) {
          x++;
        }
        fmt.Printf("%d\n", x)
      }

(which prints 5) and then this:

      package main
      import "fmt"
      func blah() bool {
         return false
      }
      func main() {
        x := 5
        if(blah())
        {
          x++;
        }
        fmt.Printf("%d\n", x)
      }

(which prints 6). Looks like a major problem to me, and at any rate it's a far cry from having made real (or any) progress. Python _did_ get whitespace right.

<comment><USER12> Python's approach has always been highly pragmatic. Go's is as well, but with somewhat different goals. The Go team's goal seems to involve putting together a clean-enough syntax with fast-enough for systems programming performance combined with powerful-enough high-level concurrency model. They don't want to win the gold in any one category. They're going for the decathalon!

In any case, language syntax should always take into account the expectation of programmer communities. If you push syntax too far, you lose too many people.

<comment><USER9> The point of my example was simple - Go's gross mishandling of whitespace is a permanent trap for the unwary and a huge liability for people coming from other languages.

When D was nascent, many people proposed various schemes for making semicolons optional. I think it's great D didn't fall for such.

<comment><USER5> I don't really follow what in your example shows "gross mishandling of whitespace".

The most popular languages are C, C++, Java and C# and Go's syntax is very similar to those. If anything, Python is the weird one in how it treats the whitespace and hence most likely to confuse people coming from other languages.

As to optional semicolon elision - what is the problem with that? They make the code cleaner looking and gofmt will remove them for you even if you forget due to C/Java reflexes. I don't see the downside of making them optional.

<comment><USER8> The problem is that the code looks correct for anyone coming from C, C++, Java, D, Javascript, etc., but produces unexpected results.

<comment><USER25> It's an interesting way to enforce K&R indentation style.

<comment><USER9> That statement takes considerable license with the word "interesting" and practically reverses the meaning of "enforce".</comment></comment></comment></comment></comment></comment></comment></comment></comment>


Ask HN: Getting started with Developer Tools - <AUTHOR> Hi I'm a university CS student but I have never used a debugger before. Most of the work I have done is on Vim with little plugins support.<p>What all developer tools should I be familiar with, and what's the best way of getting started? <comment><USER2> What languages are you learning in? Many languages have their own preferred debugging tools.</comment>


LeapMotion VR Developer Mount - <AUTHOR> https://www.leapmotion.com/product/vr

<comment><AUTHOR> Natural interaction is definitely the next big thing for VR and that mount will elegantly replace the current "duct tape the leap motion to the headset" homegrown solutions :)</comment>