How Australia is stubbing out smoking - happy-go-lucky http://www.bbc.com/news/magazine-38733502 <comment><AUTHOR> Aside from the health and economic benefits, the other major benefit worh noting is environmental.

In Europe I find it really hard to watch people _constantly_ throwing cigarette butts down storm water drains, into canals and doing other disgusting things, like stubbing the butts into the sand on the beach or into the soil of a river bank. I find it highly disturbing how un-aware people are about the damage being done to fragile eco-systems.

I remember walking around Rome not long ago just thinking how disgustingly dirty the city was (I love Rome btw), there was little flower gardens just over flowing with butts, butts accumulating in gutters etc.

I actually felt anxiety about it raining just knowing where it was all headed.

So yeah, it would be cool to see this happen in other places around the world.

<comment><USER2> _I actually felt anxiety about it raining just knowing where it was all headed._

You people scare me. Honestly. I'm not joking. What I can feel anxiety for: thinking that people can start a fight for a butt on the floor.

Making people feel guilt for using the wrong trash container, or leaving the tap open for too long. Life's too short for that crap, IMHO.

It makes me think of Demolition Man. I believed it was over the top comedy when it was released. Now I'm not taking it as a joke anymore.

Edit: I should not need to say this. But... I don't smoke. Also I don't approve people littering if they can avoid it.

<comment><USER3> Honestly, you should feel guilty. Recycling is easy; so is looking for a garbage can.

Our resources are limited. No use squandering them because "yolo".

<comment><USER2> "You"? It seems you didn't understand my previous comment. Fine. I really don't know how to explain the concept much better. It's something about not putting absolute ideas over people, including oneself. That's not to say despising common interest, but just having a little common sense.

Let me share an old story of my hometown. Public water supply pipes are a disaster in the area. I saw an official report that showed that the waste was between 20% and 40%. So, even if this is the spanish province with the most rain, we suffered from restrictions most summers. No current water from 10 PM to 10 AM.

Now two infuriating (for me, at least) cases: one nearby village spent a hefty sum repairing the pipes, so no more leaks, and a family here that installed a reservoir in the roof to have water after 10 PM. Please notice that cutting the supply is not intended to make people consume less (they do _more_ since water is kept in buckets for the night), but to reduce the leaks to half (half time pressurized pipes).

The family was fined because they were not "solidary" with their neighbours. The rest of councils of the area made a big noise and demanded the village that had invested in infrastructure, and thus attacked the root problem, to put restrictions in place.

You might think that these stories have nothing to do with the current conversation. Maybe I should have written about the fines for not recycling while there were not recycling facilities, so everything ended in the same dumpster, or the golf fields that sucked tons of water, I don't know.

My point is what I wrote above: beware of this kind of absolute idea when they stomp over people or common sense. Do what you reasonably can to make the world a little better, but don't put the responsability to save the world on your shoulders, that's not healthy.

</comment></comment></comment></comment><comment><USER4> The cost of smoking in Australia is probably the main thing that has cut smoking rates. At $20+ a pack smoking is so expensive.

It's also worth noting that Nicorette is much cheaper than in the US. The moment you start using that you save money in Australia.

It's curious that the article doesn't mention e-cigarettes. It's funny how harm minimisation is pushed by academic researchers when it comes to most drugs but isn't discussed that much when it comes to tobacco. They have been pretty much banned in Australia.

<comment><USER5> And it's a regressive tax that mostly punishes the poor for smoking. Not to mention the ridiculous prices of alcohol. It's no wonder meth is exploding in popularity.

It's an easy way to evaluate the real priorities of politicians though. If cost of living issues were really their number one priority then these sin taxes would be the first to go.

<comment><USER6> It certainly is a regressive tax, but is it really punishing someone if you make it more expensive to legally purchase something that only damages or kills them, is highly addictive and that only places an overall burden on society? After all, despite its flaws we in Australia have a great, free healthcare system, with an extensive quit smoking program. We tend to find that adequate and free government health services mean that the poorest in our society are looked after far better than in a society that has cheap booze and cigarettes and an incredibly expensive healthcare system.

I guess it depends on the priorities of your wider society. I think ours is pretty right, personally.

<comment><USER5> Depends on how the calculations are done but it can be shown to save money overall. Smokers have a tendency to die much younger and more rapidly which saves the health and welfare budget a tonne, smokers are certainly aren't causing the population aging.

Aside from that there's the general problems you always have with prohibition, people will use other substances on the black market, many of which will be worse.

<comment><USER7> While it's technically true I've always hated this argument. Yes, smokers are without doubt cheaper for the healthcare system because they die earlier and faster. It's completely missing the point though, because the entire reason we have our healthcare system is to provide a long and high quality life for the population. Someone dying earlier may be cheaper, but it's also a failure.

<comment><USER8> The entire reason we have our healthcare system is so that a long and high quality life is an option for the population. It seems pretty apparent to me that most people aren't optimising for either though. No reason to get paternalistic with it.

<comment><USER9> Smoking imposes one person's choice on many others, in terms of length and quality of life, via the negative effects of passive smoking (and also just day-to-day---I personally _hate_ having to suffer through someone's acrid fumes). If people smoked without releasing the byproducts into the air everyone else breathes, this argument would make more sense. But even then, there's massive money and expertise behind advertising (etc.) for getting people hooked, against what may be their "actual" preferences.

<comment><USER5> Everyone releases stuff into the air that effects others, from perfume to car exhaust to barbecues. Why is your car exhaust ok but not my cigarette smoke?

<comment><USER10> If you wanted to run your exhaust next to me in a restaurant I'd complain about that.

If your exhaust pipe was pointed at my face on the sidewalk again I'd complain.

A lot of offices have gone to perfume/cologne free because it is offensive to a lot of people.

Of course you still have to smell the person who just finished a smoke outside which is far worse than even the most liberal applier of perfume.

<comment><USER5> > If you wanted to run your exhaust next to me in a restaurant I'd complain > about that.

That's fine, I'm not a fan of smoke in restaurants or indoors anyway. It's already banned here.

> If your exhaust pipe was pointed at my face on the sidewalk again I'd > complain.

This is exactly what cars are doing on the sidewalk. It's not like the emissions travel in a straight line. No one is blowing smoke directly at you either.

> A lot of offices have gone to perfume/cologne free because it is offensive > to a lot of people.

Never heard of this.

<comment><USER10> >This is exactly what cars are doing on the sidewalk. It's not like the emissions travel in a straight line. No one is blowing smoke directly at you either.

This is wrong go walk on a sidewalk near a smoker and you'll see them blowing clouds which go in peoples faces as they walk by and leaving clouds in the faces of people walking behind them. This isn't an issue of being in the vicinity of the smoke it is having to walk through the cloud of it.

Go outside an office building around 9, 10:30 or lunch time and you'll often have to walk through a large cloud as all the smokers hang out to get in their smokes.

Smokers are in general super inconsiderate about their additions effect on other people in public.

>Never heard of this.

Google scent free office or fragrancy free office it's not uncommon these days.

<comment><USER5> > This is wrong go walk on a sidewalk near a smoker and you'll see them > blowing clouds which go in peoples faces as they walk by and leaving clouds > in the faces of people walking behind them. This isn't an issue of being in > the vicinity of the smoke it is having to walk through the cloud of it.

The only difference is the visibility, just because you can't see car exhaust doesn't mean it's not there.

> Go outside an office building around 9, 10:30 or lunch time and you'll often > have to walk through a large cloud as all the smokers hang out to get in > their smokes.

Yes, because it's about the only area left to go for a smoke. It's an effect of banning it everywhere else, not smokers being inconsiderate. If there was a nice out of the way area where smoking was allowed then people would go there.

<comment><USER10> >The only difference is the visibility, just because you can't see car exhaust doesn't mean it's not there.

The only difference is proximity as I already mentioned.

>If there was a nice out of the way area where smoking was allowed then people would go there.

There are lots of out of the way areas in most cities for people to go smoke. But still you'll find them huddled outside the entrances to buildings or as close as they are allowed to be.

As I said. Smokers are selfish and will try to justify every negative impact of their addiction on others. They aren't being inconsiderate about smoke you're forcing their hand. They don't want to litter but it's your fault for not providing ash trays, etc, etc.

I smoked for 20 years and I've heard countless reasons from smokers for being inconsiderate but they all basically boil down to selfishness.

<comment><USER5> > I smoked for 20 years and I've heard countless reasons from smokers for > being inconsiderate but they all basically boil down to selfishness.

That explains it. Ex smokers always rant about smokers as a way to deal with the cravings they still have. This isn't about the smell of smokers, it's about you wanting a cigarette when you smell them.

<comment><USER10> >Ex smokers always rant about smokers as a way to deal with the cravings they still have.

No cravings here.

>This isn't about the smell of smokers, it's about you wanting a cigarette when you smell them.

Definitely not. The smell is enough to make me gag when I'm stuck around a bunch of smokers. I look back on my years of smoking embarrassed to know how badly I certainly smelled that whole time. It really is a disgusting addiction.

None of that changes anything I've said though. But given that you've switched to deflection now I think we're done here.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> As an Australian who has been living abroad for the better half of a decade, I've noticed ever increasing prices and ever restrictive policies every time I've been back.

Being a _very_ occasional social smoker who should probably quit anyway it hasn't bothered me, but I did find it just a bit ludicrous when I tried to buy a pack at Safeway. The exchange went something like this:

      me: Give me a pack of Peter Stuyvesants, ah, um, I think the light ones in the blue colored pack.
      staff: They don't have colors anymore. We can't show you the packet. You have to tell us which ones.
      me: Really? Ok, fine. Well, just give me the 8mg low tar ones, whatever they're called.
      staff: They don't have mg measures on the packets any more.
      me: So how do I know which ones are the light ones?
      staff: You just have to know.

I eventually picked one of the packs at random. Not what I'd call the best harm minimisation strategy.

<comment><USER12> > Not what I'd call the best harm minimisation strategy

At some point in your life, a tobacco company has marketed something at your in such a way that they've conveyed a mistruth; they lied to you. Shocking, I know.

"Light" cigarettes are not better for you. There is no "harm minimisation".

Tar and nicotine are a "measured" by percentage of puff multiplied by the expected number of puffs in the burn duration. Cigarettes are "lightened" by adding perforations in the filter tip so the smoker inhales air at the same time. This lowers the concentrations of smoke, lowering the measurements above.

The industry standards for "light" and "ultralight" are just boundaries around tar measurements.

The problem is the "burn duration" used to calculate all this is normalised at a static rate and not at real flow. It's basically a made up length of time based on the observation of lighting a cigarette and letting it burn down. There's less airflow through the tobacco in a light cigarette, so it burns a lot slower. Its smoker gets more drags.

The amount of tobacco and nicotine and tar is the same. The amount _delivered_ isn't as appreciably different as a smoker might like.

This is reflected in countless outcome studies. Just as many people die from smoking light cigarettes.

<comment><USER13> > The amount of tobacco and nicotine and tar is the same. The amount delivered > isn't as appreciably different as a smoker might like.

If light cigarettes have any amount less tar, then that's still an improvement.

Anecdotally, I smoked for 8 years and used ultra light cigarettes (1-3mg) as a tool to cut down and eventually quit.

<comment><USER12> Also an ex-smoker. I don't think the psychology or physiological methods of breaking addiction are that clear or consistent for populations. Feeling like you were getting less might have been the progress _you_ needed, irrespective of your actual blood-nicotine levels.

Conversely, I dicked around with various NRTs, various actual doses but nicotine cravings and the _fear_ of even worse cravings kept me returning to cigarettes. To quit, I had to go cold turkey. It was the psychological and physical finality that let me let go.

For me the finality was important. I'd read a fair amount about breaking addiction and people describing it as the most traumatic thing in their life and that's a narrative that's very commonplace in quitting services, NRT products. It makes quitting a very scary prospect. Moreso to an anxious, risk averse guy in his late 20s. In reality, even cold turkey is only horrible for a short amount of time. A couple of weeks... Which is _nothing_ for the lifetime and quality of life you regain.

I reflected on fear-of-quitting a month after my last cigarette. [https://thepcspy.com/read/breaking-the- habit/](https://thepcspy.com/read/breaking-the-habit/)

Anyway, my point above is that in terms of actual damage done, a cigarette is a cigarette. There may be slight variances and you can trick yourself into _thinking_ different things, but physiologically, the same stuff happens.

</comment></comment></comment></comment><comment><USER14> As a German-Australian, and ignoring that this is anecdotal, but I've often noted the big difference in levels of smoking when I visit German cities vs Australian ones.

Smoking just isn't popular in Australia among my age group (late 20's), where it is still way more common in Germany.

Young people just don't seem interested in Australia outside of having a smoke with a beer at a party, it's very much perceived as something poorer people do, and is not considered classy at all.

So yeah, compared with other countries that I've visited, smoking is seen quite differently here and seems like its well on the way out. It'll be interesting to see if it rebounds in future generations though.

<comment><USER15> Did you notice any major price difference compared to Australia vs Germany? Consider buying a pack of cig's is damn expensive, not mentioning alcohol too here in Auz.

<comment><USER14> > Did you notice any major price difference compared to Australia vs Germany? > Consider buying a pack of cig's is damn expensive, not mentioning alcohol > too here in Auz.

Yes, huge difference.

But alcohol also has a huge difference in price, but that doesn't stop Australians from drinking a ton. (Though its not as a big a difference as smoking).

</comment></comment></comment><comment><USER16> These kinds of efforts seem to be having great success not just in Australia but at least in the United States[1] as well.

What I don't understand is -- why isn't a similar education, advertising, and taxation effort being made with alcohol? The negative externalities associated with alcohol are mind-boggling[2].

[1] [http://www.vox.com/a/teens](http://www.vox.com/a/teens) [2] [http://www.slate.com/articles/news_and_politics/politics/201...](http://www.slate.com/articles/news_and_politics/politics/2014/05/prohibition_lite_the_war_on_drugs_has_been_a_failure_but_the_war_on_alcohol.html)

<comment><USER17> The most obvious difference is that alcohol isn't _directly_ harmful to other people, whereas smoking is...

This attribute basically makes it very difficult for people to adopt a "well it's their choice, I'll let them dig their own grave" attitude in regard to smoking.

<comment><USER18> Except that second hand smoke isn't really that bad. [http://www.forbes.com/sites/danielfisher/2013/12/12/study- fi...](http://www.forbes.com/sites/danielfisher/2013/12/12/study-finds-no- link-between-secondhand-smoke-and-cancer/#5d03f087623f)

<comment><USER19> That does not match the scientific consensus [1]. You'll have to do better than a single study, summarized in a Forbes article, if you want to make that claim.

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

<comment><USER20> From your link.

>Most of the research has come from studies of nonsmokers who are married to a smoker. Those conclusions are also backed up by further studies of workplace exposure to smoke

I suggest you don't marry a smoker, or work in a bar where they allow smoking. Otherwise, you'll be fine. You'll probably be fine either way. The increased risk is minimal (1-4%?) and requires years and years of constant exposure.

</comment></comment></comment></comment></comment><comment><USER21> I think the laws that only permit outdoor smoking (a certain distance away from entryways/exits), have been so effective because of the social incentives they create. Speaking as an ex-smoker, having to go outside a bar to smoke with the rest of the smoking leper colony, while all your friends are inside having fun without you, is a very powerful social motivator. I honestly feel that this, more than anything else (increased price, graphic health warnings on packets etc.), has been the major contributor to lowered smoking rates.

As an aside, I really don't agree with the popular notion that increasing excise (tax) on cigarettes contributes very much to declining rates of smoking. The demand for cigarettes is highly inelastic (i.e. consumers are not very sensitive to changes in price). Heavy taxation of goods with inelastic demand simply results in higher revenue for the government and, eventually, the formation of black markets. Same goes for fuel excise btw: although the (hilarious) justification given is 'road maintenance/user-pays', it is coincidentally another good with highly inelastic demand (making it a pretty efficient tax-base, up to a point). And fuel is such a poor proxy for 'road damage' anyway.

EDIT: Also the argument that smokers cause the (public) health-care system to incur additional costs is pretty suspect. Although he's an ultra-right wing nut, and was practically booed off the stage when he made this point, I think Nick Minchin (former leader of the opposition in the Senate) was right when he suggested heavy smokers cost the public health-case system less overall: they tend to die quickly from an acute disease (e.g. lung cancer) at a relatively young age. This means they die before they hit that 'old age' when individual health-care costs sky-rocket.

<comment><USER22> Those laws banning smoking indoors at public places (and also in outdoor eating areas at cafes and restaurants in my state) are also wonderful for non- smokers. You sort of take it for granted until you visit somewhere without the laws and remember just how obnoxious cigarette smoke is!

</comment></comment><comment><USER23> This story gives a very one sided view of the situation in Australia.

The decrease in population wide smoking in Australia this century has not been due to an increase in quitting. It's mainly due to reduced rates of initiation in young people.

[http://mike.bailey.net.au/2015/10/smoking-prevention-and- tre...](http://mike.bailey.net.au/2015/10/smoking-prevention-and-treatment/)

People who cannot or do not want to quit are being denied information and access to reduced harm alternatives so as e-cigarettes.

It's currently illegal to sell nicotine e-liquid in Australia, thanks largely to hard campaining by a large cancer charity that receives millions on dollars each year from taxpayers to reduce smoking rates.

Look up 'health facism'. It finds a safe space within the "tobacco control" arm of public health. Not all public health advocates are humanitarians.

[https://www.theatlantic.com/health/archive/2014/07/the- nazis...](https://www.theatlantic.com/health/archive/2014/07/the-nazis- forgotten-anti-smoking-campaign/373766/)

"But according to Proctor, the Nazi ban did manage to do some good for a subset of the population: German women. Proctor estimates that some 20,000 German women avoided lung cancer deaths, thanks to "Nazi paternalism, which discouraged women from smoking, often with police force."

<comment><USER24> While the story was mostly in favor of Australia's current smoking policy, I believe it was much more fair to both sides of the story than a claim that just because the Nazis's didn't like smoking, that means that any other government that doesn't like smoking is a Fascist dictatorship.

<comment><USER23> I agree with your assertion but suggest you misunderstood mine.

Well meaning politicians in liberal democracies would do well to consider carefully before crossing the line between encouragement and coercion when trying to modify individuals behaviour "for their own good".

Health facism can include appealing arguments like "the State pays for your healthcare so we can punish you for risky bahviour".

Australia's TGA today rejected an application to permit smokers to legally purchase a safer source of nicotine (e-liquid for vaping), largely due to pressure from the same groups patting themselves on the back for what a great job they've done making life harder for smokers.

</comment></comment></comment><comment><USER25> Too bad they don't do that with alcohol... There's advertising for alcohol everywhere, often associated with sports club which is especially bad for young people. People drink everywhere even at the beach. There's a real alcohol problem here and it's a shame they don't spend as much energy fighting it because in the grand scheme of things, it's even worse than tobacco.

<comment><USER26> Well it's arguable that alcoholism has way less direct bad effects on public than smoking. There's nothing like passive alcoholism.

<comment><USER27> It may be a nuisance but passive smoking has negligible effects on public health.

[http://www.forbes.com/sites/danielfisher/2013/12/12/study- fi...](http://www.forbes.com/sites/danielfisher/2013/12/12/study-finds-no- link-between-secondhand-smoke-and-cancer/#66b03ef9623f)

</comment></comment></comment><comment><USER28> I'm in Australia and although I'm very happy these laws have come in, I would love to get some actual statistics on how many people have actually been fined for smoking where they are not allowed to.

I have _never_ seen anyone fined for smoking in any of the places where it isn't allowed (sporting fields, bus stops, etc), and I see people smoking at these locations literally _every single day_ \- especially at bus stops. The whole legislation seems to be "smoke and mirrors".

I'm in NSW, and there is a NSW Health website where you are meant to report places to investigate. I have done so about a couple of locations where people smoke where they're not meant to, and nothing has happened. People continue to smoke at those locations regularly. You never get a case number, or any indication whatsoever that anything has been done at all. Police do not enforce smoking bans, and will readily admit that their policy is not to.

Even places as famous as the Manly Beach corso, where smoking is banned, have smokers there every day. Rangers there do nothing, and as I said police do nothing. I have spoken to a ranger on the only occasion I have actually seen one there, and he said that he "usually gives a warning". When pressed, he admitted that he had never actually fined anyone.

Another glaring and infuriating omission to the smoking situation in Australia is in apartment blocks. My neighbour continues to smoke regularly, which comes right into my living room. Apparently I have no right to fresh air in my own living room, and have been told as much by the police.

Smoking is not permitted within 4m of outdoor public eating areas, but my living/dining room is closer than 4m to my neighbor's balcony, yet I have no protection there.

Why are the rights of smokers to smoke taken more seriously than the non- smoking _majority_ 's right to not inhale secondhand smoke?

These laws need to have actual teeth, _and be enforced_.

Addicts cannot be relied upon to do the right thing, or apparently even the _bare minimum required by law_.

<comment><USER29> You take _much_ more damage by car and industrial pollution than secondhand smoke, so there's no need to overreact for neighbor smoking in their property. Don't get me wrong, I don't smoke and hate when somebody does that beside me, but all this "ban smoking 10 meter from anywhere" looks pretentious to me -- there are much bigger health hazards living in a city. I see smoking as a small nuisance, like a cars passing by a window at night and it's a price you pay for living with a bunch of other people around.

<comment><USER30> People are confusing the smell, a signal from the part-per-million sensor on their face, with getting a harmful dose.

Most people have never had a serious addiction, so they don't understand that smokers _NEED_ to smoke.

<comment><USER28> I _don 't care_ how you feel about smoking, I _don 't want to be exposed to it in my living room._ If I can smell it, I'm exposed to it. There is _no safe level_ of secondhand smoke [1].

I trust peer-reviewed studies over your "feeling" about what is harmful, and besides, the smell is disgusting, worse than literally any other smell I have experienced. I don't want that in my living room, plus it gives my partner asthma attacks. I don't think it's fair that someone should get asthma attacks because of someone else's addiction.

Nobody needs to smoke anyway. There are many good options for quitting if you have motivation and willpower.

[1] [https://www.cancer.gov/about-cancer/causes- prevention/risk/t...](https://www.cancer.gov/about-cancer/causes- prevention/risk/tobacco/second-hand-smoke-fact-sheet#q6)

</comment></comment></comment></comment><comment><USER31> This is one of the reasons why people in Australian were explicitly concerned by the now dead Trans-Pacific Partnership.

[http://www.abc.net.au/news/2015-11-05/trans-pacific- partners...](http://www.abc.net.au/news/2015-11-05/trans-pacific-partnership- trade-pact-detail-released/6917292)

<comment><USER32> Their concerns were misplaced and the outcome lawsuits against the Australian government (they won every time) show how ridiculous the scare campaign about ISDS was.

<comment><USER7> I certainly think the concerns were misplaced, but wasn't the Phillip Morris case dismissed because they were found to have a lack of standing, having reincorporated in Hong Kong specifically to make use of the ISDS provision? While I can't see how the tobacco companies could prevail in any case, history has yet to furnish us with a proper example.

<comment><USER32> You are correct about the HK case. However there weren't many observers who though Phillip Morris stood a chance. The lawsuit was much more about signalling to other countries considering plain packaging than actually overturning the laws in Australia. There is still a pending WTO arbitration which is also expected to be decided in Australia's favour.

See also the outcome of Phillip Morris v Uruguay

</comment></comment></comment></comment><comment><USER33> I don't miss any of the "joys" of having to deal with cigarette smokers. The streets of Melbourne are no longer littered with butts. Waste bins no longer catch fire from careless half-stubbed cigarettes falling inside. I can walk along the footpaths here without having to smell the acrid stench. I can go to a pub and not have to wash my clothes when I get home to get the smell out. It's incredible. Every country should do it.

<comment><USER34> > It's incredible. Every country should do it.

Yeah, it sure is wonderful to repress a hated minority. How dare they befoul our pristine public spaces with their benighted culture and their foul customs‽

Of course, the victims of your repression might feel a bit differently than you do.

<comment><USER10> Smokers choose to be smokers. Smokers choose to inflict their smoke on others when they smoke around other people. Smokers make excuses for not dealing with their butts properly(oh they didn't provide an ashtray so it's not my fault).

<comment><USER35> _Smokers choose to be smokers._

Cigarette's are addictive. They choose to smoke as much as an alcoholic chooses to drink or a heroin addict chooses to shoot up.

<comment><USER10> Show me the dangerous side effects when a smoker quits smoking and I'll allow you to include it in the addictive category of alcohol and heroin.

<comment><USER20> What difference does that make? I've read where tobacco is one of, if not the most addictive substances. I think you just have no empathy for people addicted to tobacco because you've been subjected to a relentless barrage of anti-tobacco propaganda over decades.

</comment></comment></comment></comment></comment></comment><comment><USER36> What we have here now is effectively prohibition with all that entails i.e. a huge black market.For people on average incomes, tobacco is now in effect an illegal drug.

The official stats on smoking exclude the black market and greatly understate smoking rates.

<comment><USER37> This - and so much this.

I understand the urge to reduce smoking. I find it weird that prices are so high because I think it encourages a black market. Black markets are somewhat dangerous, as there aren't the quality controls in place. The other option seems to be to switch to nicotine gums most of the time, which carry their own health risks.

I find it even more appalling considering the dismal rates at which people actually succeed dropping the habit, which is something like 6%. For those already smoking, it might seem hopeless. I support _some_ tax on them, even though I smoke, but I wish they'd save the highest price at least until we are better equipped to handle the addiction part of it.

</comment></comment><comment><USER38> One aspect that the article doesn't mention is the racial/immigrant aspect.

White people are quitting in droves for sure, but Asians still seem to smoke a lot.

I have no numbers here (are they even collected?) but anecdotally it's unusual for white people to smoke in their own homes, but common for Asian families here.

Note that this is different from the "poorer end of society" mentioned in TFA - race is not an indicator of affluence or social standing in Australia.

<comment><USER39> I'm going to go out on a limb and say this that I think this is a cultural bias, not a 'racial' one.

Anecdotally, the number of college-aged Asians you walk past in the street that are smoking is much higher than the number of college-aged caucasians. I won't pretend to know which portion of which demographic is immigrant or not, but Melbourne imports absolutely huge numbers of international students, a large portion of whom come from Asian countries and who have grown up in a country where smoking is not the social-taboo it is among millennial Australians.

Among older generations, I don't see the same marked divide. Older Australians smoke much more frequently than their younger counterparts.

As a side note: I don't know a better way to separate out Australian-born "Australians" who may be of any race, including Asian, from "international students from Asia", so if any of my phrasing comes across smelling even slightly offensive please let me know.

<comment><USER38> you're probably right, in that this is probably not a race thing, but a culture thing. My bad

</comment></comment></comment><comment><USER40> I had a conversation with friends who live in LA yesterday about the fact that they thought smoking is more prevalent in Melbourne than in the LA.

Amused by the timing :-)

(If I'd guessed, I would've assumed smoking was less prevalent in Melbourne (because of the reasons mentioned in the article, but mostly the cost), although I've not actually paid enough attention to compare.)

(We all agreed it seemed more common in Europe, very vaguely speaking.)

<comment><USER41> Most smokers in Melbourne CBD are Asian immigrants (anecdotally).

I think it's culturally hard for them to give it up, which is a real shame as I hate walking through clouds of smoke on Little Bourke St.

Not sure what can be done about it though, banning it outright I think is too far as it's an assault on people's personal freedoms but I would like to see a ban on smoking on the street/public places.

I don't want to be secondary smoking the stuff, it smells awful and probably does a decent chunk of damage if you are walking through it every day though that is unsubstantiated, I haven't read any studies on secondary smoking.

Atleast most smokers here seem responsible when disposing the butts. Silver lining I guess.

<comment><USER42> Can confirm truth of that. Chinese neighbours on either side of me smoke, and I only ever see young Asian people smoking at the back of my building here in Melbourne. My annoying neighbour smokes on his balcony every day and the smell drifts into my apartment. Still figuring out what to do about that if anything.

</comment></comment></comment><comment><USER43> Good riddance. What really bugs me is that why is every smoker an idiot throwing the cigarette butts everywhere? I really despise that behavior.

</comment><comment><USER44> A big change I've seen in the US is the "class" aspect of smoking. Smokers (outside of a bar environment) in the US come across as lower class, at least among white folks (can't speak for others). Not sure how this came about, but it's effective and one of the reasons I never picked the habit up from my parents.

</comment><comment><USER45> Seems like increasing the age limit every year would be an easy way to wipe out smoking. Why are there no countries doing this though?

<comment><USER46> The Tasmanian parliament is considering exactly this -- banning smoking for anyone born after 2000.

<comment><USER21> This sounds like an insanely bad idea.

While the goal is admirable (eliminating smoking once and for all), without strong enough social norms in place discouraging smoking, all this will do is create another lucrative black market drug (much like what happened when the US prohibited alcohol from 1920 to 1933).

<comment><USER47> But there are strong social norms discouraging smoking. It's gone from looking like a cool, sociable thing (restaurants, pubs, colleagues at work) to "Look at those people who can't quit."

People aren't smoking in restaurants. At pubs, they are forced into a dodgy little area, often near gambling machines. And outside offices, they often hide around the side near alleys because they are discouraged or embarrassed about smoking out the front.

<comment><USER21> Precisely! If you check some of my other comments in this thread, you'll see me putting forward the idea that these social incentives (created by these laws) are the primary cause of reduced smoking rates over the past decade or so.

My concern here is over timing. I'm not sure that smoking has been sufficiently socially marginalised to the point that a black market _would not_ form if we banned cigarettes. We've seen this already in Australia. The ATO (where I used to work) has had compliance teams in the field for at least a decade now dealing with the 'chop-chop' problem (black market tobacco), which grows larger with every excise increase. In a sense, banning it is the equivalent of setting excise at some rate approaching infinity per cent.

I don't have any control over what the Tasmanian parliament does, but I really hope they understand that they only get about 1 shot at this per decade _at most_. If they pass this law and it turns out smoking is not sufficiently marginalised, and a black market subsequently forms, they'll spend the next 3-5 years fighting the black markets, another 3-5 debating and eventually re- legalising cigarettes and then we'll be back to where we are now.

Although it requires a bit more patience, it might be safer to wait a couple more years as the 'outdoor smoking laws' strengthen social incentives and norms. They might even be able to come up with additional measures to accelerate this process.

I agree that we're close to the point where banning cigarettes is feasible. But whether we've actually past that point...

<comment> k-mcgrady >> "Precisely! If you check some of my other comments in this thread, you'll see me putting forward the idea that these social incentives (created by these laws) are the primary cause of reduced smoking rates over the past decade or so."

I believe it actually works the other way too. If your friend group is primarily made up of smokers who are forced to go outside the pub/restaurant etc. multiple times in an evening you might decide to start joining them. I know a tonne of people who only 'smoke when they drink' for this reason and many others who started like that and now smoke full-time.

</comment></comment></comment></comment></comment></comment><comment><USER42> The thing I hate about the anti-smoking advertising is that it's blanket coverage. The "Shock and awe" is broadcast far and wide for all to see, whether you smoke or not.

From cinema screens to small screens to billboards. I was driving behind a bus and had to stare at a larger than life cancerous growth being operated on. I don't even smoke, so why must my field of view be contaminated by this horrible imagery? Everyone must suffer the offensive ads because a few people smoke. Way to go Australia. Bring back the ladies underwear ads for buses please, I'm trying to concentrate!

</comment><comment><USER48> Aussie living in China, ex-smoker. Every time I went back I used to always take a bunch of cigarettes to sell to people at cut rates, specifically because they are so expensive in Australia. This year I couldn't even find anyone to buy them! Won't be bothering in future.

I strongly support the progressive anti-smoking policies in Australia, but I do think the nanny statism has come a bit far in other areas. For example you can't catch a taxi or go to the (now 100% non-smoking) pub with a child. What the hell? Makes it really hard to stop for a drink when you are carrying a kid and walking to the nearest mass transit facility in the stinking hot summer sun, because you can't catch a taxi. Come on, people take buses without seat belts all the time ... it's off the charts stupid to ban young families from the use of taxis!

<comment><USER49> > _For example you can 't catch a taxi or go to the (now 100% non-smoking) pub > with a child._

I don't understand about the taxi. What do you mean?

Regarding the pubs, I live in Queensland and have never seen a 100% non- smoking pub. They always have a dedicated smoking area.

<comment><USER50> Depending on the age of the child, the child may be required by law to use a child safety seat.

Taxis typically don't come with such seats and so they will refuse to carry you.

<comment><USER30> In most states taxis (but not uber) have an exemption, QLD is just a massive pain in the arse. Logically the market should evolve to allow requesting a car with seats but no.

</comment></comment></comment></comment><comment><USER51> It doesn't work on everybody, though. Friend witnessed someone asking for a "pack o' dyin' Bryans, thanks." [http://imgur.com/HNDvjAJ](http://imgur.com/HNDvjAJ)

</comment><comment><USER52> I fully support people's right to smoke (or to use any drug), but I do find it odd that companies can legally sell such a dangerous and addictive substance. The solution would be to criminalise the sale of tobacco, but make it completely legal to grow your own. Same for pot or any other drug.

</comment><comment><USER34> I honestly think that things like $40 packs of cigarettes are pure bigotry (the only politically-acceptable bigotry at the moment). It's kicking a man when he's down.

But then, I believe that cigars & pipes are an essential part of the good life. Can you imagine a world in which C.S. Lewis & J.R.R. Tolkien didn't head down to the Eagle & Child to enjoy a pot of ale and a few good pipes together?

<comment><USER53> > It's kicking a man when he's down.

My father in law has had problems on his lungs and heart since I know him.

I married my wife 6 years ago. His father was hospitalized at the time (again). He was exceptionally discharged from the hospital to attend the wedding, and went back there the next day. You know what he did while he was there? Distribute cigars. And smoke them.

He recently died of pulmonary and heart-related problems. He was 60, but doctors said that his lungs and heart looked like 90. Months before he died, blood was failing to reach his feet, so they gradually had to cut them down: first the toes of one foot. Then the other's. Then a whole foot. Then the other, and part of the leg. It was at this point when his mind started to crack. He started saying that he wanted to die.

The last 3 years of his life, he spent 90% of his time at hospitals. At the end, he was a shadow of himself, physically and mentally. At least he could meet his only grandchild once, before he passed away.

 _That_ is being down.

You don't want to be there. Before you get there, anything that deviates you from that path, kicks or whatever else, is a good thing in my view.

<comment><USER20> How about prison for people caught smoking cigarettes? Societies do it for drug users. Whatever it takes, right?

/s

<comment><USER53> How about leaving the strawmen in the fields, scaring birds?

</comment></comment></comment></comment><comment><USER54> > How Australia is stubbing out smoking

By massive invasions on basic human rights.

There are also many campaigns that don't, but many do and they are the most effective.

<comment><USER55> How is it a "massive invasion on basic human rights"?

<comment><USER54> It's basically applying the drug war to cigarette smokers.

It's using the police and state to use force to deal with people who are doing no harm to anyone but at best themselves.

I think this breaks basic human rights.

<comment><USER56> As long as I'm paying someones healthcare, I'm not going to allow them to smoke. If they are going to smoke, then the cost of their cigarettes should cover their increased medical costs and other costs to society (such as work years lost, increased sick days).

The fact that I'm directly harmed by cigarette smoke is a minor nuisance compared to the enormous costs to society.

Also: which human right is it you are referring to here?

<comment><USER20> >I'm not going to allow them to smoke.

Same can be said for any dangerous activity. Like bicycling? As long as I pay for health care, I'm not going to allow you to do it. Driving? Hell no! You need to walk, and you can't use roads or sidewalks near roads. Only the rich can use roads, we're putting on a driving tax.

<comment><USER56> > Same can be said for any dangerous activity. Like bicycling? As long as I > pay for health care, I'm not going to allow you to do it.

Exactly like bicycling. However, bicycling has positive benefits - it gets people places (as does driving), it provides excercise etc. So a reasonable compromise might be requiring a helmet while cycling, which lots of countries does. That reduces the costs of injuries to a point where it's likely to be outweighed by the positives.

> Only the rich can use roads, we're putting on a driving tax.

Cars do have very expensive side effects (injuries in car accidents, pollution, lack of excercise, ...). I pay a 25% VAT on a car. Then I pay a yearly car tax of $100 year and around $2/mile in fuel taxes. That still is probably not enough for cars to "pay for themselves".

<comment><USER20> No comparison to the cost of a bicycle helmet and the taxes levied on cigarettes. Depending on where you live, how about $50 a week to rent a government approved bicycle helmet?

It's starts to sound much more unreasonable when you compare the taxes.

<comment><USER56> I'm not sure what the costs to society of bicycle accidents vs lung cancer are, but if the equilibrium was $1000 per pack I wouldn't consider that unreasonable (although at that price black markets would become an issue)

<comment><USER20> >but if the equilibrium was $1000 per pack I wouldn't consider that unreasonable

Ok, so you still haven't solved the problem, you aren't collecting any revenue, and now you have a pretty serious black market and all the crime, policing costs, jail costs and bribes that go with it. At what point do you realize it's bad policy to tax sin and really only succeeds in getting revenue from predominantly poor people?

1\. You will never get all people to stop smoking. 2\. Any effort to squeeze down the last 15% or so is the same folly that got us into the drug war. 3\. The only thing you can reasonably do as a nation is to keep pushing out the commercials and hope for the best.

Quit taxing the crap out of poor people. Quit acting like smoke is mustard gas.

<comment><USER56> As I said - I'd consider it reasonable but I acknowledge the practical problems with it. I think prices a pretty good as they are in e.g Australia and Scandinavia.</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment>


The Device that Runs the World's Biggest Election - <AUTHOR> http://india.blogs.nytimes.com/2014/05/06/the-device-that-runs-the-worlds-biggest-election/ <comment><USER2> But it cause someone can't invalidate his/her vote if he/she intended so. And introducing NOTA at the bottom seems to a good move.</comment>


PfSense 2.2-Release Now Available - <AUTHOR> https://blog.pfsense.org/?p=1546

<comment><USER2> I'm a big fan of pfSense - heavy home remote worker user, it stays up and connects to multiple OpenVPN servers, routing their spaces for my network, runs a remote access server inbound, an IPv6 tunnel via Tunnelbroker, multiple static IPs, including straightforward outbound NAT for my Apple TV to access NBA League Pass games (since the NBA in its wisdom has decided that the Puget Sound should be blacked out for Portland games and that I can just "tune into CSN Portland").

</comment><comment><USER3> Ive previously used PfSense as the main routers in offices on embedded hardware and in the data center on baremetal (for specific use cases). Its great. I recommend anyone to try this if you want low cost performance, without compromising on features.

</comment><comment><USER4> We use it with about 30 offices, all connected via openvpn. 180GB transfer every day. No problem for months.... Hell of a software!

<comment><USER5> Curious why you chose OpenVPN for your site-to-site links. I use it extensively for mobile VPN users, but for an "infrastructure" VPN, I use IPsec, which I find to be a much superior solution for that use case than OpenVPN.

<comment><USER6> Not the OP, but I've found OpenVPN easier to configure, and performance to be adequate. In what ways have you found IPsec to be superior?

<comment><USER5> Well the #1 thing for me is that the majority of IPsec functions are in the kernel and don't require that a userland daemon be running (which OpenVPN requires). Beyond that, I've just found that, while a bit more arduous to configure initially, performance is far superior and stability is better than OpenVPN.

Beyond that, pretty much every router out there supports IPsec, so if you're needing to integrate with other non-pfsense hardware, IPSec is often your only option.

</comment></comment></comment></comment><comment><USER7> Is ARM support on the radar? There is more and more capable ARM hardware by the day, while x86 is not getting any cheaper.

I would be happy to try pfSense on something like BPI-R1 (dual-core 1 GHz Cortex-A7, Wi-Fi, etc., $69 for board)

[http://www.aliexpress.com/store/product/Newest-arrive- BPI-R1...](http://www.aliexpress.com/store/product/Newest-arrive- BPI-R1-Opensource-Router-Original-Banana-pi/302756_2045261784.html)

[http://www.bananapi.com/?layout=edit&id=59](http://www.bananapi.com/?layout=edit&id=59)

<comment><USER8> MIPS is I believe planned first. Check out Netgate (company behind Pfsense), they already have development boards with MIPS.

Bigger upcoming feature is bhyve hypervisor on Pfsense :D

<comment><USER9> Worth noting that the Ubiquiti ERLite runs a MIPS board, but has TCP offload. It runs Debian current MIPS with Vyatta, and the web UI, while not as fully- featured as pfSense, is pretty usable. It still helps to be comfortable with CLI and Vyatta commands (very similar to Cisco IOS) for e.g. setting up L2TP VPN without an external RADIUS server.

I ran pfSense for years, and it does work great, but an x86 box running all the time just to do what a little 2-decks-of-cards box can do with 1/10th the power seems silly these days.

[http://wiki.gentoo.org/wiki/MIPS/ERLite-3](http://wiki.gentoo.org/wiki/MIPS/ERLite-3)

<comment><USER10> Also worth adding that the ERL runs EdgeOS, which is actually a fork of Vyatta 6.3 with some added features and certain hardware accelerations. [1]

Vyatta was acquired by Brocade in 2012, after which the community edition was sidelined and the main product became closed source. Thankfully Vyatta core was forked in 2013 and re-branded as VyOS (free and open source) and is under active development. [2]

I've used pfSense in the past and VyOS currently and found both to be excellent.

[1] [https://community.ubnt.com/t5/EdgeMAX/EdgeOS-vs- Vyatta/td-p/...](https://community.ubnt.com/t5/EdgeMAX/EdgeOS-vs- Vyatta/td-p/411816)

[2] [http://vyos.net/wiki/Main_Page](http://vyos.net/wiki/Main_Page)

</comment></comment></comment></comment><comment><USER11> PfSense is great, I've been using it for a few years. 2.2-RELEASE holds special significance to me, because I contributed a feature to this one :)

</comment><comment><USER6> Great news. I've been running pfSense at home and work for the past few years, and it's been great. Very stable, easy to configure, and quick with security fixes.

A pfSense box with a Ubiquiti UniFi access point is a really good combo. Far more stable than a typical consumer router, and not necessarily much more expensive.

<comment><USER12> I run this exact same setup (pfSense-based Mini-ITX router and several UAP- ACs), and it works outstanding. I had used DD-WRT for several years, but having hack pile up on top of hack to keep things running on DD-WRT. When we moved to a larger house, we could no longer adequately cover the house from a single router/access point combo, so I took the leap and built a pfSense machine. Absolutely don't regret it. After getting it set up, it just works with minimal intervention.

With a little work, you can get the Ubiquiti controller software running on the actual pfSense machine itself. [http://community.ubnt.com/t5/UniFi- Wireless/Tutorial-UniFi-3...](http://community.ubnt.com/t5/UniFi- Wireless/Tutorial-UniFi-3-1-4-running-on-pfSense-2-1-RC/td-p/539534)

<comment><USER6> I tried running the Ubiquiti controller software on the pfSense box for a while, but it was a pain - it took 5-10 minutes to start up, and it was lost whenever I did a pfSense upgrade. I've found it much easier to just point the access points at a general-purpose server (on-site if available, or on a remote VPS that I have already).

<comment><USER12> Weird. Other than the startup thing (which is not a big deal for me because I leave it running), I haven't had any problems upgrading. A few months ago I went to 2.1.5 and pretty much everything just worked.

<comment><USER6> Minor upgrades were fine. It was a major one (2.0 to 2.1) that wiped it out for me. This was on the embedded version of pfSense - the full version might behave differently.

Otherwise, the upgrade was one of the smoothest I've ever had for this sort of thing.

</comment></comment></comment></comment></comment><comment><USER13> I ran PfSense for a year or so... never could get the QoS working completely right and all the tutorials I found weren't the greatest.

Has anything changed with the QoS configuration?

I've since moved to an Untangle VM that has worked great... yes the interface might be "dumbed down", but everything has been working excellent.

</comment><comment><USER4> It's on FreeBSD 10.1 now. Nice.

<comment><USER9> PfSense and FreeNAS have really made me fall in love with FreeBSD all over again. It was my first foray into the ~*nix world, so lots of fond memories.

</comment></comment><comment><USER14> 2.2-RELEASE also has a working 6rd implementation, so now I can finally use ipv6 :-)

<comment><USER15> You could have used it before with a gif tunnel. That's the way I've been doing 6rd on vanilla FreeBSD without any 6rd support.

edit:

Here's what you put in rc.conf

      cloned_interfaces="gif0"
      ipv6_activate_all_interfaces="YES"
      ifconfig_gif0="tunnel $MYIPv4 $THEIRIPv4"
      ifconfig_gif0_ipv6="inet6 alias $MYIPv6 $THEIRIPv6 prefixlen 128"
      ipv6_defaultrouter="$THEIRIPv6 -mtu 1280"

<comment><USER14> Great! Thanks!

<comment><USER15> This does have one limitation -- you cannot reach other IPv6 addresses also using the same 6rd gateway. It just doesn't work without handling the full 6rd protocol. But if you just want IPv6 to the wider internet and don't care about connecting to other users on your ISP over v6 this is a reasonable solution.

</comment></comment></comment></comment><comment><USER16> The tickets graph is impressive.

</comment><comment><USER17> It still ships an oudated port of PF. Horrible. Go run OpenBSD instead.

<comment><USER18> Does OpenBSD/newer PF have better throughput on 10Gbe+ hardware? I've heard that OpenBSD/PF tends to run into issues due to giant lock and SMP issues.

Since you seem knowledgeable, any pointers to information about that?

<comment><USER15> everything I've seen indicates OpenBSD pf wins on slower single cores but on fast multi core hardware FreeBSD pf wins.</comment></comment></comment>


Roasting Toaster Fridges - <AUTHOR> http://www.mondaynote.com/2016/02/08/roasting-toaster-fridges/ <comment><USER2> The title is a little confusing but it's clarified in an article linked in the post. Apparently on the subject of MacBook/iPad lines converging Tim Cook said "You can converge a toaster and a refrigerator, but you know those things are not going to be probably be pleasing to the user"

<comment><USER3> And lovingly mocked in a CAD drawing at Microsoft's Devices event last October: [http://www.winbeta.org/news/microsoft-toaster-fridge- makes-a...](http://www.winbeta.org/news/microsoft-toaster-fridge-makes- appearance-october-6-hardware-event)</comment></comment>


Facebook's $3B offer for Snapchat explained in one image - <AUTHOR> https://medium.com/design-startups/26617f68f215

<comment><USER2> _When a user shares a photo, or video, with several people, Snapchat counts each recipient as an upload._ [http://blogs.wsj.com/digits/2013/11/19/snapchat-users- upload...](http://blogs.wsj.com/digits/2013/11/19/snapchat-users-upload-more- photos-than-facebook-not-so-fast/)

<comment><USER3> Yep, that chart is intentionally misleading. If you counted for Facebook / Instagram every individual viewer of each photo, I would imagine the scale dwarfs that of Snapchat.

<comment><AUTHOR> As noted in the article linked: "...88% of snaps sent to one recipient."

If the KPCB chart were adjusted such that one send = one upload (certainly a better measure) I doubt the delta between Snapchat and Instagram changes much.

<comment><USER3> I disagree. The distribution is likely heavily weighted on the high end. If the last 5% is on average sent to 20-30 people, that would be 1-2x the amount of uploads as the 88% sent to a single recipient.

<comment><AUTHOR> Fair point. Let's say it's 2x, in which case Snapchat still exceeds Instagram. I think we're splitting hairs here, I certainly agree that the chart is misleading in a very real way (primarily due to how Snapchat is reporting uploads/shares), but the point it asserts is still valid re: Facebook's offer.</comment></comment></comment></comment></comment>


Neuron Spikerbox - <AUTHOR> https://backyardbrains.com/products/spikerbox <comment><AUTHOR> You can see a TED talk by one of the founders demonstrating the plant spikerbox here, throughly awesome: [https://www.ted.com/talks/greg_gage_electrical_experiments_w...](https://www.ted.com/talks/greg_gage_electrical_experiments_with_plants_that_count_and_communicate)</comment>


Ask HN: Who launched something in August? - <AUTHOR>

I love the regular, monthly report of new projects from HNers. Here's your chance to show off what you built this month! <comment><USER2> While I did not build the entire project in August, I did launch in August. It's been a long time coming, but my SaaS solution for bankruptcy attorneys (<http://noticekeeper.com>) finally launched last night. I got tired of focusing on item after item and walking down a never-ending march to launch.

So, my business partner and I spent two nights filling in the last "need to have" features and just put it out there as a MVP.

</comment><comment><USER3> I (re)launched AwwApp (<http://awwapp.com>), a collaborative web whiteboard: <http://news.ycombinator.com/item?id=2886353>

(the original launch was this spring, w/o whiteboard sharing and plugin features, this was basically a rewrite).

</comment><comment><USER4> I'm building out a more "serious" startup but got antsy mid way through august and spent a weekend launching an MVP. It's a "1000memories for pets".

<http://www.thepetmemoir.com>

</comment><comment><USER5> <http://www.moderncashprepaid.com> \- launched last week

</comment><comment><USER6> chatnearme.com (mobile webapp same url)</comment>


Getting 4 bytes or a full cache line: same speed or not? - <AUTHOR> https://lemire.me/blog/2018/07/31/getting-4-bytes-or-a-full-cache-line-same-speed-or-not/ <comment> Const-me I don't like the article.

The code is not portable to other compilers/OSes so I can't even run it here on Windows. The code uses inline assembly a lot, i.e. optimizer likely failed to achieve much, and for code like this optimizations are very important.

The reason for inline assembly is also worse mentioning, it's for rdtsc instruction. Mainstream CPUs have dynamic frequency for the last decade. Recent CPUs return rdtsc values unrelated to the count of instruction it executed, it's a counter running at some constant frequency. The code uses AVX, the CPU is therefore at least sandy bridge or AMD equivalent. Now in 2018, __asm rdtsc is no longer a good method for performance measures.

<comment><USER2> _> The code uses inline assembly a lot, i.e. optimizer likely failed to achieve much, and for code like this optimizations are very important._

Yes, optimizations are important, but not for the question the autor tries to ask. To answer his question he need to control optimizations, to have vectorized code and not vectorized one. The simpliest way to control optimizations is to turn them off and to do them by hand.

 _> Recent CPUs return rdtsc values unrelated to the count of instruction it executed, it's a counter running at some constant frequency._

So this counter is the best fit to measure speed of code. What the point to count number of instructions executed when different instructions take different time to execute? But if rdtsc counts clock ticks, than it fits best. It is OS independant way to measure time. It is compiler dependant way, but it works with gcc and clang, the compilers you can get for free. Alternatively it is not so hard to rewrite two non-empty __asm statements into any asm syntax your compiler understands. There are total of 6 instructions.

<comment> Const-me > it works with gcc and clang, the compilers you can get for free

When I'm building for Windows, I usually use Visual C++ 2017 community edition, the compiler I got for free.

> into any asm syntax your compiler understands

When building 64 bit binaries, my compiler doesn't understand any syntax. The portable way to produce that instruction is __rdtsc() intrinsic, it's supported in all major compilers just in different headers, x86intrin.h for gcc/clang, intrin.h for msvc.

> There are total of 6 instructions.

Right, but I'm not sure assembly, inline or not, has good compatibility with advanced optimization techniques implemented by all modern compilers. It's just too low level: harder to inline, impossible to move stuff across registers…

<comment><USER2> _> When I'm building for Windows, I usually use Visual C++ 2017 community edition, the compiler I got for free._

Is it an obstacle to get one more free compiler?

 _> When building 64 bit binaries, my compiler doesn't understand any syntax._

Is it really? I'm surprised.

 _> The portable way to produce that instruction is __rdtsc() intrinsic, it's supported in all major compilers just in different headers, x86intrin.h for gcc/clang, intrin.h for msvc._

I like to learn it. Thank you.

 _> Right, but I'm not sure assembly, inline or not, has good compatibility with advanced optimization techniques implemented by all modern compilers. It's just too low level: harder to inline, impossible to move stuff across registers…_

Its not relevant: this code do not rely on compiler optimizations.

<comment> Const-me > Is it an obstacle to get one more free compiler?

I have both gcc and clang installed but they're for Linux. I'm using Windows as my main OS, and prefer running native binaries, e.g. because tools for debugging & profiling.

> Its not relevant: this code do not rely on compiler optimizations.

Right, and that's GCC's problems — MSVC-produced code is optimized, and is free from the described issue.

You know how I found that? I've made a version portable across compilers, built with VC++ and run on Windows: [https://github.com/Const- me/MemoryAccessCosts](https://github.com/Const-me/MemoryAccessCosts) I don't have Intel compiler but my expectation is it'll work even better.

<comment><USER2> _> Right, and that's GCC's problems — MSVC-produced code is optimized, and is free from the described issue.

> You know how I found that? I've made a version portable across compilers, > built with VC++ and run on Windows: [https://github.com/Const- > me/MemoryAccessCosts](https://github.com/Const-me/MemoryAccessCosts) I don't > have Intel compiler but my expectation is it'll work even better._

Yes! You have found that optimization doesn't allow you to make a comparison. Code is free of the described issue, so you cannot measure effect this issue have on the speed. As I understand from asm listings, you are comparing now not 1 iteration with 16 iteration, but 1 iteration with some vectorized code. In the original article this case is covered, with hand-crafted vectorized code.

Do you see? When optimization is turned on you cannot compare 16 iterations with 1 iteration or with vectorized code. It is the basics of experimental method: you need to control independant variable, and to measure dependant one. When using compiler optimizations it is the way harder, you would need to check generated code.

Turn off vectorization of code in msvc, and hopefully you'll get the same results.

<comment> Const-me > you are comparing now not 1 iteration with 16 iteration

GCC made code with zero iterations, it unrolled the complete inner loop and produced 16 scalar add instructions.

MSVC made code with two iterations, each iteration containing two paddd SSE2 instructions, which stand for _mm_add_epi32.

> Turn off vectorization of code in msvc

I can't. When I try, the compiler says "Command line warning D9002: ignoring unknown option '/arch:IA32'"

SSE2 is a requirement for AMD64 CPUs, that's why the MS compiler doesn't support scalar code anymore. And the data size is too large for 32 bit builds, it's not enough address space for a 8GB vector.

<comment><USER2> _> GCC made code with zero iterations, it unrolled the complete inner loop and produced 16 scalar add instructions._

It doesn't matter really. It is amount of work that needed for experiment.

 _> I can't. When I try, the compiler says "Command line warning D9002: ignoring unknown option '/arch:IA32'"_

I have zero experience with msvc, but I believe you are doing it wrong. You need not to change arch, you need to control over optimizations. For example, gcc has options -ftree-vectorize, -ftree-loop-vectorize, and -fno-tree- vectorize and so on. You need to find docs on compiler optimization techniques and on options that allow to control them.

 _> MS compiler doesn't support scalar code anymore._

Strange, but ok. If we return to the starting question "why the author didn't write the code portably", than we now know the answer. There are no way to write scalar code with MSVC. MSVC doesn't allow make this kind of experiments, so there are no reasons to make such tests portable to msvc.

<comment> Const-me > You need not to change arch

See the pics: [http://const.me/tmp/vc/codegen.png](http://const.me/tmp/vc/codegen.png) [http://const.me/tmp/vc/optimize.png](http://const.me/tmp/vc/optimize.png)

> You need to find docs on compiler optimization techniques

Indeed, #pragma loop(no_vector) in the source code before the inner loop did the trick. The results are very close to GCC.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER3> To me, the takeaway is that there is a ~10x performance difference between the near-worst case memory access pattern (330 cycles) compared to the best using SIMD (41 cycles).

A potential order of magnitude improvement hiding in the memory access patterns of your code makes this worthwhile information for a lot of devs.

<comment><USER4> Additionally, if you do the wait for a byte, you've done 90% of the wait for 63 adjacent bytes. Software becomes memory bound when it peeks at 4 bytes here, 4 bytes there in zillions of unpredictable cache lines. So, instead of waiting 41 cycles to process 64 bytes, it waits 300 cycles to process 4.

It helps to think of the * and -> operators in C++ as "int cache64BytesAndLoad4FromCache(int *p);" That's when you start to really feel "int x = a->b->c->d; a = a->next;" deep in your gut.

</comment></comment><comment><USER5> When 'percache' is higher, there will be more instructions executed between calls to pick_address_of_random_cache_line().

That means as the out-of-order processor "runs ahead" while waiting for the first main-memory request, it will make fewer requests to main memory before it runs out of space in its reorder buffers, and so it won't be able to overlap so many main-memory requests.

I think this is the main effect they're seeing. It would fit in with SIMD code giving better results, and it explains why the effect mostly goes away when they make each load depend on the previous calculation.

<comment> Const-me No it's not that. The CPU runs fine, the OP was screwed up by GCC optimizer. With MSVC, there's very small difference when testing with 8GB vectors, only 8% between 1 and 16.

Here's my portable version, scalar-only, C++, and slightly more optimized: [https://github.com/Const-me/MemoryAccessCosts](https://github.com/Const- me/MemoryAccessCosts)

The results are in result-gcc.txt and result-msvc.txt in that repo. They're from the same PC, I'm using gcc 5.4.0 running in WSL.

<comment><USER5> I think those results just show that if you persuade the autovectoriser to work you'll get the same result as for manual SIMD code, as you'd expect.

<comment> Const-me Initially, I didn't know the reason is automatic vectorization. I've found the reason and wrote the readme after that comment: [https://github.com/Const- me/MemoryAccessCosts/commits/master](https://github.com/Const- me/MemoryAccessCosts/commits/master)</comment></comment></comment></comment>


What's with Google's new mini icon?  - <AUTHOR> http://news.bbc.co.uk/1/hi/magazine/7839744.stm

<comment><USER2> The new google logo is AWFUL. You just can't effectively use negative space in a canvas that small. All I see is four coloured blobs and I have to mentally remind myself that it's Google.

Sure, I'll eventually get used to it, but it's so noncoherent - it shouldn't be a CHORE to get used to it, it should just STICK.

<comment><USER3> The rest of us can see it just fine. But I will say that the previous two favicons were much better.

<comment><USER2> Perhaps you can, but most folk I've spoken with have had to have it explained to them. Best answer so far: "Why would Google use a weird, bumpy, number eight in their logo? ...oh, I guess that's a 'g'."

</comment></comment></comment><comment><USER4> Google blog's notes on the new favicon: [http://googleblog.blogspot.com/2009/01/googles-new- favicon.h...](http://googleblog.blogspot.com/2009/01/googles-new-favicon.html)

</comment><comment><USER5> Difficult to say, but personally, I don't think the logo works that well. The most distinctive logos are usually made up of clearly defined lines with a very clear symmetrical shape, for example the Nazi Party or Mercedes Benz, or even the YCombinator logo.

The new google logo is okay, but it's a bit too mixed up.

<comment><USER6> I am not a designer, but I think the "g" in the new favicon doesn't look good.

</comment></comment><comment><USER7> Google seem to be trying hard not to become seen as a "tired" brand like many of those they supplanted. Mixing it up a bit is probably good for this.

</comment><comment><USER8> Although the lower-case "G" is not easily discernible, the bright colors make it stand out more on my bookmarks toolbar, so I prefer it for that reason alone.

<comment><USER9> Gmail icon makes sense, it looks like mail. Next to that I have a G Docs icon which looks like some sort of painting and while it does stick out, it makes no sense whatsoever.

</comment></comment><comment><USER3> Was there this much fuss the last time they changed the favicon? Sheesh. Get over it already.

<comment><USER10> Yes, there was lots of fuss when they changed from the uppercase G in a box to the lowercase g.

</comment></comment><comment><USER11> i was wondering about the change, too, but i didn't find this article interesting. in fact, talking about the icon at all isn't interesting. i was just startled by the new favicon and it took me a few google pages (maps, gmail, search) to drive home that, yes, these funny tabs were for google and all of google. i don't like it, but by now i'm used to it. i'll probably forget these ever had another icon by the end of today.

<comment><USER12> The interesting bit in the article is this:

"The new favicon is based on a design sent in by André Resende, a computer science undergraduate student at the University of Campinas in Brazil."

<comment><USER11> that's interesting because at first i kept thinking i'd opened tabs to some geographic region and that was their flag.

</comment></comment></comment><comment><USER13> A friend of mine agrees: Awful.

So why did the first capital 'G' favicon work? Simple - it's the first (large) letter on the search page!

</comment><comment><USER14> I find it distracting. The other one was much more discrete, which is better in my opinion.</comment>


Minesweeper in Clojure - <AUTHOR> http://sneakycode.net/minesweeper-in-clojure <comment><USER2> As an alternative design, I'd have gone with a data structure more like:

        #:minesweeper{:size    [w h]
                      :bombs   #{[x y] ...}
                      :flags   #{[x y] ...}
                      :guesses ([x y] ...)}

<comment><USER3> I wrote Snake in 100 lines of ClojureScript for a talk at UCT a few years ago and used that shape of data structure: [http://theronic.github.io/cljs- snake/](http://theronic.github.io/cljs-snake/)

For anything more complex, I immediately reach for DataScript as a client-side Datalog DB.

<comment><USER4> Ha. I made a similar thing trying out p5 for the first time. [https://sneakypeet.github.io/data-snake/](https://sneakypeet.github.io/data- snake/)

</comment></comment></comment><comment><USER5> I did the same exercise a few months ago! Using a little React wrapper I wrote for myself:

[https://github.com/Lokeh/lilac.town/blob/master/src/lilactow...](https://github.com/Lokeh/lilac.town/blob/master/src/lilactown/client/sweeper.cljs)

[https://lilac.town/games/sweeper](https://lilac.town/games/sweeper)

<comment><USER4> the dots between squares are trippy

<comment><USER5> Lol, design is not my forte. I tried!

Btw, really great write up - I think you did a great job explaining the process of solving problems in Clojure.

<comment><USER4> Thank you. I think your design is stellar. I'm keen to go through your code too. Since moving to clojure I have found myself reading much more source code

</comment></comment></comment></comment><comment><USER6> As a next challenge, can you ensure the board is solvable without guessing? You have to delay generating it until the user has done that first click, but there are some other constraints as well.

Also, you probably want to stop clicks on marked squares from exploding the mine.

<comment><USER4> oh yes. I did not think of that. generating on first click should not be to difficult. what are the other constraints?

<comment><USER7> A convinent source of information about this is going to be Simon Tatham's excellent puzzle suite. Most the puzzles are built to ensure a solution without guessing.

[https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/min...](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/mines.html#mines)

[https://www.chiark.greenend.org.uk/~sgtatham/puzzles/](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/)

They're all open source and I believe available on iOS as well as android for free for mobile users too.

</comment></comment></comment><comment><USER8> Long-press to flag would be handy on mobile.

<comment><USER9> I second this, otherwise the approach is really cool!

</comment></comment><comment><USER10> Do you reccomened Clojure over Haskell to learn ?

<comment><USER11> My personal experience is that most programmers either like or don't like type systems. If you don't I would highly recommend Clojure, if you do I would highly recommend Haskell.

<comment><USER12> And then there's this bunch of us that are not as dogmatic and appreciate both.

And there's also Typed Clojure, but that might not be the best experience starting out.</comment></comment></comment>


Show HN: Bond – A Swift binding framework - <AUTHOR> https://github.com/SwiftBond/Bond/tree/v1.0

<comment><USER2> This looks quite cool. Kind of like a lighterweight less invasive ReactiveCocoa. Obviously less powerful but with a lot less complexity and need to make it core to your app.

<comment><AUTHOR> Thank you. My primary goal was to make it simple because when it's simple, it's harder to make a mistake.

</comment></comment><comment><USER3> One thing I've found frustrating with Swift, and that we've had to deal with in libs we've built, is that there is an unavoidable boilerplate of placing an `[unowned self]` at the top of your callbacks (e.g. `map` in the linked framework), or else you introduce a reference cycle.

If you forget this `[unowned self]`, which is very easy to do, everything compiles fine and now you have a subtle memory issue to track down. I wish there was a language construct to allow you to define closures that have every captured variable unowned (or weak) by default.

I would, at the very least, emphasize somewhere in your docs with big bold letters how important it is to add the boilerplate, or users of Bond will definitely get bitten by this.

<comment><AUTHOR> I agree. Thanks, it's a great suggestion.

</comment></comment><comment><USER4> With all the binding frameworks for iOS I wonder why Apple haven't reinstated native Cocoa bindings that exist on OS X.

</comment><comment><USER5> This looks really amazing. Probably the most simple implementation of FRP I've ever seen, nonetheless in Swift.

</comment><comment><USER6> This looks really great - especially the simplicity of all of it - great work!</comment>


"Not Rocket Science": The story of Monotone and Bors - <AUTHOR> http://graydon.livejournal.com/186550.html <comment><USER2> Whoa, _Graydon Hoare_ wrote Monotone? Mind blown!

Huge blast of nostalgia: Back in the summer of 2006 when I was learning git for the first time (and leaving svn in the process), there was all this uncertainty in the community about which VCS was the best... a lot of people weren't even sure that DVCS was a good idea at all! Even so, the Linux kernel had been using git for a year at the time.

At the time there were git, and mercurial, bazaar, bitkeeper and its controversies... and I distinctly remember reading about Monotone! I remember reading how it was the inspiration for git's DAG. I was intrigued but sadly never actually tried Monotone because I was already too blown away by learning git.

It's funny. Git completely changed the way I thought about coding. Made me really, _really_ realize the value of good data structures, and what a waste of effort parsing is. As a direct result, I became obsessed with an idea in late 2006--this idea of a truly next-generation programming environment. This idea of a language+editor+VCS where the ASTs and entire edit history would be stored in git's DAG. [1] So I worked on that for a while, but never really got anywhere...

... and then in late 2012, along comes Rust, which fulfills the language part of this language+editor+VCS trifecta in my mind. And Rust was a personal project by Graydon! So I'm just realizing now that Graydon conceived not only my ideal language, but also my ideal VCS! So that's why my mind's blown.

In short, Graydon is a prolific badass.

[1] It's really a very old idea of course; as old as Smalltalk. I think Steve Yegge attempted it with his Grok Project. See also: Subtext, Lamdu, Projucer. As for the future, Chris Granger and his team may very well pull it off with Aurora.

<comment><USER3> You forgot the Berlin windowing and GUI system, back in the 90s. Rotatable windows, alpha channels, super fast, and unlike X it was actually a GUI that you could style and so on. Yeah, there was a lot about it that was impractical for its time, but so was OS X.

Like you I discovered that Graydon was behind all these cool projects sort of by accident. He seems to keep a low profile.

</comment></comment><comment><USER4> Bors is one of my favourite parts about working on Rust.

Also, their "open source report card" is always hilarious: [https://osrc.dfm.io/bors/](https://osrc.dfm.io/bors/)

</comment><comment><USER5> Coincidence -- I wrote a G+ post not two months ago talking about this same idea (what Graydon calls the "Not Rocket Science" principle). I was surprised to find that (as Graydon says) there doesn't seem to be a lot of tool support for this: [https://plus.google.com/108917965951523281393/posts/6ERd4fha...](https://plus.google.com/108917965951523281393/posts/6ERd4fhaB51)

</comment><comment><USER6> Just general commentary. If something really, truly works and you can prove it, then everyone will adopt it. If this isn't being adopted by everyone then there can only be two reasons: either it doesn't really, truly work -- because of some nasty details that you're soft-pedaling; or it simply needs more proof, which will inevitably come with time.

If it doesn't really, truly work, one reason could be that most corporate developers can barely write working code; writing test code that will hold the whole project up if/when it fails -- that's beyond what you could trust the average developer to write.

It may work well when you have a top-notch developer to write tests, or when the goals of the project are especially amenable to automated testing, but in the common case cause too much friction.

Edit: a more sinister reason that automated testing isn't used more, even if it might deliver better software, is that a lot of companies that are in the software business don't care much about defects. Many seem to care more about shipping features, even if those features are half-assed and buggy, than about shipping code that works. But, even so -- we're talking about no-brainers here. Even shoddy companies eventually adopt really obvious better practices, even if only by following the herd.

<comment><USER7> "Just general commentary. If something really, truly works and you can prove it, then everyone will adopt it."

This is charmingly naive.

<comment><USER5> Maybe so, but you would have a more convincing (counter-)argument if you offered some counterexamples.

<comment><USER8> To start with, anything covered by the [https://en.wikipedia.org/wiki/Principal%E2%80%93agent_proble...](https://en.wikipedia.org/wiki/Principal%E2%80%93agent_problem) .

<comment><USER6> Technophiles have a tendency to fall in love with ideas that no one else cares about and assert that people that dont see what they see are fools. But capitalism enforces a degree of honesty. If you can put a cash value on the productivity gain some idea will provide, and it's a significant sum, then it's not much of a stretch to predict that it will prevail eventually. If the idea has no significant cash value, then it's only a mediocre idea. Sometimes we tech people have to be humble and accept that something we love is mediocre (especially when we try to start a company based on the idea and no one buys it).</comment></comment></comment></comment></comment>


Clojure 1.6 released - <AUTHOR> https://github.com/clojure/clojure/blob/master/changes.md <comment><USER2> I've switched my own back end codebase to Clojure. It's just a joy to work with. Building REST with Liberator is a revelation. It's so easy to _reason_ about what the code is doing, and immutability leads to far fewer bugs. Not missing objects, not at all.

The stock concern for businesses building with Clojure is the lack of talent and industry acceptance. I have a different angle. I figure that when I'm ready to start hiring other developers, I'll only be hiring developers sophisticated enough to see the benefits of using Clojure over Java/Ruby/Python/etc - and then I'll have the draw of letting them work in the best tools, not making them compromise so it's easier for management to hire less serious programmers.

<comment><USER3> Is it still so easy to maintain Clojure code given it's lack of types?

(I know about Typed Clojure; it doesn't seem to have won the hearts of all Clojurians)

(Or, do you just test the bejezus out of the thing?)

<comment><USER4> I add :pre and :post assertions to most of my functions, so I know the type of everything coming in, and also what is returned. An example of a function that saves a document to MongoDB:

(defn persist-this-item [item]

      {:pre [

             (map? item)

             (= (type (:item-name item)) java.lang.String)

             (= (type (:item-type item)) java.lang.String)

             (if (:created-at item)

               (= (type (:created-at item))

org.joda.time.DateTime)

               true)

             ]}

      (let [item (if (nil? (:created-at item))

                   (assoc item :created-at (tyme/current-time-as-datetime))

                   item)

            item (assoc item :updated-at (tyme/current-time-as-datetime))

            item (assoc item :_id (ObjectId.))]

        (mc/insert "tma" item)))

So this function needs to be given some kind of map, and it needs to have 2 keys, :item-name and :item-type, and both of these need to be strings, and if :created-at is already set, then it needs to be a Joda DateTime.

It's not accurate to say that Clojure has no types. It just gives you some flexibility about how strict you want to be.

I find that Clojure strikes a perfect balance: its flexibility with types allows me to easily integrate a lot of 3rd party tools without much work, but when I need to I can be as strict as a I like with types.

Edit to add: wow, the code is ugly on Hacker News. Funny that this site provides no tools for posting code snippets, given the subject.

<comment><USER5> Maybe I'm misunderstanding, but it looks like every time these functions get called, they're type checking their inputs and outputs? That seems like a waste of resources. Why not just write unit tests that ensure that they will always be called with the types you expect (or fail at an earlier step if not)? Identify the places where there might be ambiguity in something's type (e.g. when a JSON blob arrives, it might map a key to a list instead of a dictionary, or if a function might return multiple types, etc), and use unit testing to ensure that the type you expect will emerge from those places, or else a failure will occur.

<comment><USER6> Unit testing cannot prove the absence of bugs and shit happens in spite of their presence. That's why I still value (good) static type systems. But besides a good static type system that can prove certain properties about the code (and I'm not talking about Java's type system here), you can also do _design by contract_ [1], which is precisely what @lkrubner is doing and I find that to be pretty cool.

Well, it would be cooler if the compiler could check those contracts at compile-time and issue some helpful warnings, but at runtime they are still valuable because the code will fail sooner rather than later. Plus you can probably disable them completely, should you experience problems with performance in production.

They also serve as documentation for other developers, documentation that you're forced to keep in sync. This documentation is not about the actual business logic, that ends up being laid out in tests, but rather about interface specifications and invariants.

So there you have it - testing serves a different purpose.

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

<comment><USER5> Nothing about what I was saying precludes the use of design-by-contract; in fact, that's what I was advocating. You say that "at runtime [type assertions] are still valuable because the code will fail sooner rather than later," which is what I meant by identifying places where there is a possibility for the wrong type to be used, and putting your assertions there. Sticking type assertions on the inputs and outputs of every function you write would be unnecessary, inefficient and horrible to read:

        def increment(n):
            assert isinstance(n, int) or isinstance(n, float)
            result = n + 1
            assert isinstance(result, type(n))
            return result

So as long as we can agree on that much, then we can agree that there is a value to being judicious about where you should and shouldn't use type assertions.

By the way I'm a fan of static typing as well, although I see value in dynamic languages too. And I definitely acknowledge the limitations of unit testing, although from a practical point of view, a comprehensive set of unit and functional tests is usually robust enough. And, of course, type systems don't make any guarantees against _logic_ errors. :)

<comment><USER6> Well, I misunderstood your point then.

On your example, you're of course right. I'm also not a fan of checking the actual type in a dynamic language, since it defeats the purpose of it being dynamic. I like assertions that are more useful than that, like:

        def sqrt(x):
            assert x >= 0, "only defined for positive numbers"

            last_guess = x / 2.0
            while True:
                guess = (last_guess + x / last_guess) / 2
                if abs(guess - last_guess) < .000001:
                    return guess
                last_guess = guess

Now clearly this helps, since it aids in readability (this function is defined for positive numbers only) and if you call it with a negative number, it will loop forever.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Been using Clojure in production for our API (core of the system) for close to a year now, it's been a very interesting ride.

Like many others pointed out, I do wish I had types though: refactoring is a giant pain in the ass even at our modest codebase's scale (10-15k lines), requiring endless UTs to make sure everything's still sane. Dynamic typing is fun for the simpler cases, but as soon as you go into trickier computations like crunching analytics data, you continuously run into run-time type mismatches that take forever to correctly pinpoint. Also having to continuously keep in your head just what exactly you're threading through functions is a pain and requires a lot of mental overhead.

The JVM also doesn't seem to bring much of a benefit to the table, considering that we only ever deploy onto 64bit Ubuntu 12.04, so there's not really a big need for portability.

The best part has been how fun it is to work in clojure and the community around #clojure channel with so many of its freakishly smart people. People on there seem to generally be very willing to help explain something if you're being obtuse.

</comment><comment><USER8> We've been using Clojure for our web app at work since day 1. The biggest gain by far is the referential transparency[1] built into the core libraries, which has also been closely adhered to by nearly all third party libraries (with only a few unfortunate outliers). I cannot emphasize enough just how much of a gain this has been.

[1]: [http://en.wikipedia.org/wiki/Referential_transparency_(compu...](http://en.wikipedia.org/wiki/Referential_transparency_\(computer_science\))

<comment><USER3> Any posts which explain how the referential transparency built into the core libraries helps? My understanding is that Clojure is impure, so a "partially referentially transparent" design is interesting to me.

Or are you just referring to the fact that the core data structures are immutable?

<comment><USER9> Clojure strongly encourages referential transparency (e.g. immutable data structures), but doesn't demand it (e.g. STM). The convention is simply to mark any function with side-effects with a !, which almost all external libraries follow.

Without the !, you can have some confidence that a given function is pure, since pure functions are sort of the "default".

<comment><USER3> Ruby follows this convention too, I believe; but probably to a lesser extent because it's core types aren't immutable

</comment></comment></comment></comment><comment> pi-rat Not sure if I like the 'some?' operation. It's short for (not (nil? x)).. And has nothing to do with 'every?' -which checks if every element of a collection matches a predicate - ex (every? odd? [1 3 5])

To check if some elements match you need to use (some odd? [2 3 4]) - note the lack of '?'

Bet it will confuse people.

<comment><USER10> I'd love to hear the reasoning behind that choice if it's Rich Hickey that did it, since it's called some and every in Common Lisp and he's written a great deal in that language.

<comment><USER11> The names were chosen by Rich. Many choices were considered and they all had pros and cons. The new some?/if-some/when-some functions follow the "not nil" notion in "some->" (but break with the meaning in "some"). Naming is hard. :)

</comment></comment></comment><comment><USER12> Absolutely loving Clojure. I typically hang out in java-land. I tested it out on an annoying problem to scratch an itch and wow, I'm actually enjoying programming again. I find myself looking forward to solving problems with Clojure in a way I haven't for a long time.

</comment><comment><USER13> Some of the smartest code I've read lately has come from the Clojure community. It's a great time to live in NYC.

<comment><USER14> I'm in Detroit, and I'm not missing out on Clojure fun. Might miss out on meetups, but everything is still accessible from the Internet, so I don't see your point about NYC. With that said, a lot of different languages have beautiful code, from C, ie Lua source, PHP Symfony, etc. With that said, I love Clojure as well, and it's all because it's Lispy. :)

<comment><USER15> "i.e." means "that is"

"e.g." means "for example"

</comment></comment></comment><comment> dj-wonk Like many people on the mailing list, I've been using the Clojure 1.6 betas and release candidates. Don't expect dazzling new features; rather, 1.6 is a nice solid step forward.

<comment><AUTHOR> As it should be, in my opinion :)

</comment></comment><comment><USER16> A nice pragmatic Lisp, might never use it at work, but it sure is fun to play with.

Congratulations on the work.

<comment><USER17> why wouldn't you ever use it at work?

<comment><USER18> Because it's rare to find companies using it. I'd love to write clojure, but everyone wants me to write ruby or javascript.

<comment><USER19> Really? I've gotten my fair share of recruiter emails looking for Clojure work. I introduced Clojure into my last job quite easily as well. If you're doing anything Java or JavaScript related, I've found it's pretty easy to get Clojure in the door once people see what you can do with it.

<comment><USER20> Interesting - where do you see these recruiter emails coming from, geography- wise? I watch, say indeed.com, and see Clojure mentioned mostly as "nice to have" mainly for what, on the surface, appear to be standard, enterprise Java jobs.

</comment></comment></comment></comment></comment><comment><USER21> Nice upgrade. I have used Clojure for several customer projects and some of my own little projects like cookingspace.com and my-foc.us

Clojure is a very practical language and basically stays out of your way during development.

</comment><comment><USER22> A healthy language ecosystem on the JVM is a good thing, glad to see a new Clojure release.

</comment><comment><USER23> I plan to learn Clojure this year. What online resources and books can you recommend for learning the language and the tooling?

<comment><USER11> Books - any of the intro Clojure books, they're all good. I prefer the OReilly one but I think it's really a matter of preferred style.

Online - Clojure for the Brave and True, Clojure From the Ground Up are great series. Or try the ClojureBridge curriculum [https://github.com/ClojureBridge/curriculum](https://github.com/ClojureBridge/curriculum).

Practice problems - 4clojure, exercism.io, clojure koans

Editors - if you want to focus on Clojure not an editor, I'd suggest Nightcode or Light Table. If you like IDEs I'd recommend IntelliJ w/ Cursive or Eclipse Counterclockwise. If you already use Emacs, use CIDER. If you already use Vim, use Fireplace.

</comment></comment><comment><USER24> Does anyone know where the Clojure roadmap is? I'm wondering what I can expect in the next big release :)

Congrats on the release!

<comment><USER11> Haven't started talking about it yet. :)

</comment></comment><comment><USER25> like the emacs org-mode pprint support. especially the example output claiming the well deserved rock star status.

</comment><comment><USER15> It's always hard get a sense of the actual usage presence of Clojure when I spend so much time on HN, where Clojure is disproportionately represented.

<comment><USER11> There are ~9000 people on the Clojure mailing list and ~8000 members of Clojure meetups on Meetup.com. Hopefully those are useful and concrete numbers.

<comment><USER15> Yet, essentially all the web application examples I've seen have been very basic / boilerplate. Is Clojure not considered a good tool for complex web apps?

<comment><USER26> React was the missing link for sophisticated clojurescript web apps. The Clojure community discovered it in December. Expect substantial web apps this year. The largest open sourced example I'm aware of in this new wave of apps is Omchaya [1] which isn't that large but shows how large apps could be structured.

[1] [https://github.com/sgrove/omchaya/](https://github.com/sgrove/omchaya/)</comment></comment></comment></comment>