Algernon's Law - <AUTHOR> http://www.gwern.net/Drug%20heuristics
<comment><USER3> This is an interesting article, but there's something about it that bothers me I'm trying to put my finger on. I think I'm a little wary of using this sort of analytic argument to validate a theory like this _ex post facto_ while ignoring a much simpler theory that trivially explains the same results:

Medicine is hard.

It has nothing to do with evolution; take an intelligent person with no mechanical experience, tools, or instructions, give them a car which is behaving oddly, and ask them to fix it. It will be a _miracle_ if they manage to properly diagnose and fix the problem without destroying _at least_ a couple of engines. The fundamental rule is "Interfering with a complex system for which you don't have the manual by trial and error is as likely to do harm as good."

I guess I don't see why this is treated as an insight into human intelligence. No one with mechanical experience thinks you can make a car go faster by using hotter gasoline. No one with technical experience thinks you can make a computer run faster by boosting the input voltage. For the same reason, no one with medical experience thinks there's a drug that can make you smarter. It just doesn't make _sense_.

But that doesn't mean you can't make a faster car, or computer, or brain, or that it need be terribly difficult. For all of these, the answer lies in _structure_. And in this respect, brain modification may be the easiest of the three, because modifying brain structure is one of the primary functions of the brain.

<comment><USER4> > No one with technical experience thinks you can make a computer run faster > by boosting the input voltage.

Fun fact: some computers actually _can_ be made to run faster by raising the input voltage! The higher voltage decreases the delays of the logic gates, and lets you clock it faster. The big problem is that this also raises the power consumption -- both energy per second and per clock cycle.

<comment><USER3> That's a good note, but I did mean the _computer's_ input voltage, not the CPU's. You can increase an individual neuron's firing speed plausibly trivially, but the brain (like the computer) is a complex regulated system that can't be played with that way without causing problems.

<comment><USER4> Okay, fine -- but bear in mind that there _are_ computers which run everything, from the CPU to the memory to the I/O, off a single (variable) input voltage. Most microcontrollers, for example, meet this description. I googled one at random to get some specific numbers; the PIC18F4550 runs on anything from 2 to 5.5 V, and this is not unusual.

<comment><USER3> Okay, okay, you got me. I'll concede the point entirely :) Feel free to disregard the analogy as it applies to computers which may be made to run faster by raising the input voltage.

</comment></comment></comment></comment></comment><comment><USER5> Excellent article all around - I wish more people wrote this way. The author initially puts forth a thesis, "Any simple major enhancement to human intelligence is a net evolutionary disadvantage." - and then sets forth to both support it, while simultaneously identifying all of the major issues with this concept, the possible loopholes, and touching on all the popular memes that the HN crown will likely want to bring up (modafinil) and examining them through that lense of "If it's so great, why didn't we evolve that direction."

The author is opinionated, controversial, entertaining, and educational - <USER2> citations to boot.

<comment><USER6> Yep - awesome author. I'll definitely be taking a look at some of his other articles. IMHO - the reason for the lack of IQ right now is that evolution is slow. We haven't really needed high IQ (that badly) for more than, say, 500 years - which is a ridiculously small amount of time.

<comment><USER7> _I'll definitely be taking a look at some of his other articles._

I've noticed his user name here on HN and over on Wikipedia for a while. I was just doing some more browsing around for his writings, prompted by the article submitted here today. I see "My Mistakes"

<http://www.gwern.net/Mistakes>

provides a lot of food for thought.

</comment></comment></comment><comment><USER8> > If the proposed intervention would result in an enhancement, why have we not > already evolved to be that way?

Really? This is getting upvoted here? How disappointing.

"Evolution doesn't have a goal, it doesn't make future plans. Evolution is an accident." \- Richard Dawkins in The Selfish Gene

Did you know giraffes have a nerve connecting the points in it's head that are about 5cm apart? But instead of connecting those 2 points directly, the nerve goes all the way down through the neck, then all the way back up, to connect its end point. Is there any advantage in this design instead of just connecting directly? No there isn't, giraffes are that way only because, historically, that's how they evolved. Evolution doesn't make intelligent plans. Mutation happens randomly, then natural selection will sometimes prune out bad mutations. That's all. Evolution is imperfect. Alluding there's anything intelligent about evolution is alluding to intelligent design and creationism.

<comment><USER9> Just to reiterate: upvoting an article does not mean "I agree". It means that it's interesting.

If I see a well-written and interesting article that may not be correct, I'm likely to upvote it. Why? Well, I want to read an interesting discussion about it: perhaps its premise is wrong, but I'm not equipped to answer so I want to farm it out to the HN reader base.

<comment><USER10> That DOES seem to be the right way to use upvotes. Surface the interesting content for comment and debate.

</comment></comment></comment><comment><USER9> This is slightly off-topic, but I've always been suspicious of the "TANSTAAFL" principle. Maybe reading some books by Heinlein soured me on it :P. (He's normally a great writer, but either I didn't understand _To Sail Beyond the Sunset_ , which is likely, or it wasn't any good, which is unlikely but possible.)

Basically, the assumption there is that the current equilibrium is optimal or close to optimal. The problem is that this is often untrue. If I'm being inefficient, there is no reason for an improvement not to be completely free, after all.

It also smacks of "conventional wisdom" which is often much more conventional than wise.

More pertinently, I think this can apply to evolution. Now, clearly, I am no expert on evolution, so I could be completely off-base. But my understanding is that evolution can get caught in local maxima. That is, there could be some sufficiently remote global maximum in the fitness function that isn't reached because any probable mutation hits a lower value between the current state and this possible maximum.

I suppose an example could be about how evolution never came up with the wheel. I think there are cases where wheels would increase fitness, but they are simply too remote from existing organisms to reasonably evolve.

If such an effect exists, then some sort of design process could overcome it. In this case, we could strictly improve on evolution. Now, I'm not sure if this is an actual effect, but it seems plausible. If anyone has any actual studies on the subject, I would like to see them.

<comment><USER11> This indicates it is actually a theorem (proven in the area of machine learning):

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

</comment></comment><comment><USER12> Especially the changed trade-offs regarding nutrition are interesting. Right now in the west we can meet pretty much arbitrarily high calorie intake requirements with decent control over its composition but we're still in the energy conserving mode, making us fat and "lazy".

Another trade-off completely changed by modern civilization is risk aversion. We can afford much more risk because of modern medicine, because of living in populous, anonymous cities, because of immense wealth to fall back on... And yet it takes a lot of courage for most people to approach and talk to a stranger (an attractive stranger of the opposite sex in particular), fight in a martial arts tournament, or stand out in any significant way (by dressing differently, by speaking loudly). Those who do usually aren't making a calculated decision but are simply unadjusted.

<comment> guard-of-terra This it true. Humans are optimised to live in environment in which modern humans won't want to live.

We want to live in big cities with high tech, medical care, abundant food. Let's make a genome optimized for that!

</comment></comment><comment><USER13> Among other things, the author of the OP does not adequately address the role of environment in survivability, reproductive success, and genetic expression itself. He mentions birth control. Birth control is a valuable adaptation in certain environments, particularly where sex plays an important social role beyond reproduction (see: Bonobos) or where resources are scarce and would be wasted on excess offspring. But obviously, birth control can be severely maladaptive for an individuals genes and populations that overuse it may be at greater risk of extinction than those that don't.

<comment><USER14> All your examples are examples which show that birth control is perfectly doable and easy; hence modern birth control - often no births at all, rather than spacing or infanticide - easily passes under the 'that would not be reproductively fit but we want it anyway' criterion.

</comment></comment><comment><USER15> "Any simple major enhancement to human intelligence is a net evolutionary disadvantage."

An individual who is more intelligent might be less likely to pass on their own genes, but may well make the species as a whole more resilient. Looking at evolution from the perspective of the individual is a mistake.

<comment><USER4> How would helping "the species as a whole" increase the frequency of that person's genetic traits in the population? It sounds very pretty and virtuous -- get ahead by helping others, hooray -- but the math just doesn't work.

<comment><USER15> "How would helping 'the species as a whole' increase the frequency of that person's genetic traits in the population?"

I mean that's pretty much just standard evolutionary theory. C.f. sickle cell anemia.

<comment><USER4> How so? Having the sickle cell trait (i.e. being heterozygous for the gene which, in homozygous individuals, causes sickle cell anemia) gives an advantage to _individual_ evolutionary fitness in areas where malaria is a big problem. There's no need for group selection arguments to explain the prevalence of that trait.

</comment></comment></comment></comment><comment><USER7> I guess I will have to be the first here to join issue directly with the thesis statement of this interesting article:

"The lesson is that Mother Nature know best. Or alternately, TANSTAAFL: 'there ain't no such thing as a free lunch.' Trade-offs are endemic in evolutionary biology. Often, if you use a drug or surgery to optimize something, you will discover penalties elsewhere. . . .

"In 'The Wisdom of Nature: An Evolutionary Heuristic for Human Enhancement' 12 (Human Enhancement 2008), Nick Bostrom and Anders Sandberg put this principle as a question or challenge, 'evolutionary optimality challenge' (EOC):

"If the proposed intervention would result in an enhancement, why have we not already evolved to be that way?"

The answer to the evolutionary optimality challenge (EOC) comes from any properly taught Biology 101 course: evolution is not a teleological process, and it neither seeks nor is driven by "enhancement," but results in haphazard adaptations of ancestral systems through stochastic survival of genes.

I will make the counterclaim here that it is by no means clear (and it is certainly not conclusively shown by any of the examples in the interesting submitted article) that anything that can properly be called "optimizing" of human beings or of humanity as a whole necessarily results in a "penalty."

The staggering additions to human well being (and to the number of living Homo sapiens individuals) as a result of cultural innovations around the globe look to be mostly gain with remarkably little pain. I can eat foods that are grown in environments I have never visited, use this Internet device to communicate with all of you, fly to places far away without sprouting wings, and learn the thoughts of deep thinkers who are long dead. The progress of humankind in the last few thousand years has been a story of casting off natural constraints.

I may have to use the full Hacker News editing time period for comments to "optimize" this reply some more after I spend some time with my family, so please don't penalize me yet for the brevity of this reply. Before someone builds a chain of conclusions based on a supposed natural law, to reach other conclusions, it is first necessary logically to demonstrate the truth of the claimed natural law. "The only way of discovering the limits of the possible is to venture a little way past them into the impossible."

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

Thanks for bringing up this topic of discussion.

First edit: I see another comment mentions group selection. That is not a widely accepted idea (as contrasted with kin selection) in evolutionary theory. See three recent posts (there are more where those came from) from Jerry Coyne's Why Evolution Is True website:

24 June 2102 "The Demise of Group Selection"

[http://whyevolutionistrue.wordpress.com/2012/06/24/the- demis...](http://whyevolutionistrue.wordpress.com/2012/06/24/the-demise-of- group-selection/)

26 June 2012 "Did human social behavior evolve via group selection? E. O. Wilson defends that view in the NYT"

[http://whyevolutionistrue.wordpress.com/2012/06/26/did- human...](http://whyevolutionistrue.wordpress.com/2012/06/26/did-human-social- behavior-evolve-via-group-selection-e-o-wilson-defends-that-view-in-the-nyt/)

28 June 2012 "I (and others) comment on Steve Pinker's discussion of group selection"

[http://whyevolutionistrue.wordpress.com/2012/06/28/i-and- oth...](http://whyevolutionistrue.wordpress.com/2012/06/28/i-and-others- comment-on-steve-pinkers-discussion-of-group-selection/)

Oh, and since we are talking about human intelligence as a big part of the discussion here, I should mention the Wikipedia user bibliography "Intelligence Citations,"

[http://en.wikipedia.org/wiki/User:WeijiBaikeBianji/Intellige...](http://en.wikipedia.org/wiki/User:WeijiBaikeBianji/IntelligenceCitations)

a reference pathfinder that will always need more editing, as there is continually new research on this topic, but which already gathers many of the best monographs on the subject and some good review articles in one place.

Second edit: pjscott's thoughtful reply asks,

 _I don't think you've actually disagreed with the article. Did you read the 'Loopholes' section?_

I've reread the article again, now that you've asked, and I think what I see here is a certain degree of rhetorical incoherence. I wouldn't compose an article this way if I wanted to make a tight argument, but perhaps the author desires to "essay," and try out ideas, and is still making up his own mind.

Anyway, based on the author's yeah-buts in some of the examples given after the "Loopholes" section of the article, and on the artitle's title, and on the first wave of comments received here on Hacker News, I have to take a stand and strenuously disagree with the idea that there is any "evolutionary optimality challenge (EOC)" to be met by human beings endeavoring to improve themselves, to improve human society, or to improve the world in general. There is plenty of scope for further optimization of individual human beings and of the human condition.

<comment><USER16> I definitely agree that the use of teleological terms to describe the process of evolution (as in this article) is inappropriate. However, I will note that biologists often do so anyway as a shortcut because our language doesn't really provide any good concise way to describe the actions (happenings?) of a process that is without intention (English certainly, probably most others as well). I would hope that most biologists understand the intellectual shortcut they are taking by using such terms, but I suspect that in many cases they may not.

I know that I have definitely described evolution in such terms when explaining it to non-scientists, but when participating in discussions with other scientists I try to stick to purely the intention-free ways of saying things.

<comment><USER17> Evolutionary psychology is bullsh*t because it pretends to know how an incalculable array of factors interacted to cause certain people to successfully reproduce over generations. The thing is, the complexity of reality is far far more awesome than that and making simplistic sounding plausible evolutionary arguments for certain behaviours is just hubris. Yes, evolution is happening but we're really overestimating ourselves if we think we know just how it's happening in the absence of archaeological fossil evidence.

<comment><USER16> How is this in any way a response to this comment thread? When did anyone say anything about evolutionary psychology? I only said that biologists sometimes get sloppy and say things about evolution they don't actually mean, and that this confuses other people who take them at their word.

</comment></comment></comment></comment><comment><USER18> I believe there is far too much emphasis placed on genetic and/or chemical/biological explanations of intelligence. Whether you agree with the sentiment of the linked essay or not, the only real and true control we can ever have over intelligence through genetics/biology is via eugenics.

Until such a practice is accepted (and here's hoping it never is) we need to focus on what we can control: Culture. The unfortunate thing is this is difficult to approach from a geuinely scientific/empirical approach. The fortunate thing is that some common sense can go a long way: Feed babies/children well, set the bar high from an early age, start teaching them a second language at an early age, expose them to new and many experiences, etc.

<comment><USER19> >the only real and true control we can ever have over intelligence through genetics/biology is via eugenics.

There are plenty of other ways: Drugs[1], surgery, somatic gene therapy, and transcranial direct-current stimulation. All of these technologies offer much greater potential for enhancement than cultural changes. Also, changing culture is hard. Really hard. Creating intelligence-enhancing technologies is probably easier.

1\. <http://www.gwern.net/Modafinil> and <http://www.gwern.net/Nicotine> are early examples of the potential of pharmaceuticals.

</comment></comment><comment><USER20> IQ != Intelligence, Intelligence doesn't necessarily imply evolutionary success

<comment><USER21> Funny, I've always thought that definition of intelligence meant to be able to solve a huge array of various problems. Which should imply evolutionary success in theory. OTOH I can see how it can cripple you (e.g. a 'dumb' car salesman can sell cars for more because he doesn't know if the car is worth less than his offer).

</comment></comment><comment><USER22> The whole premise of his argument is based on the statement "There's no such thing as a free lunch". His logical conclusions are then derived from this. However, he never actually proves the statement, and I for one don't believe it.

Why must there necessarily be a tradeoff for anything good? There's no law requiring that, and what makes one person happy may make another person miserable.

EDIT: I just realized there's about 15 people on HN that said the same thing. And that's why I visit this place!

</comment><comment><USER23> Pangloss.

</comment><comment><USER24> "The Bell Curve" way back in the 90s touched on the many ways substantially above average IQ appears to be maladaptive. You get much more than 1.5 standard deviation for the parents on IQ and infant mortality actually spikes.

Also various neuro diseases appear strongly correlated to IQ of the parents, like tay-sachs, for example.

<comment><USER25> Tay Sachs is highly correlated with certain types of Jewish people. The same group is highly above median iq. I don't think smart East Asians populations have higher rates of Tay Sachs. The Cajun and québécois who also have high rates of Tay Sachs are not statistically smarter than median.

It is probably more generally that closed mating groups are more likely to amplify traits good and bad.

<comment><USER21> I'd say its other way around. They mate for good traits, but the proximity of their genes leaves them open to vulnerabilities like Tay Sachs. That's my view of it at least.</comment></comment></comment>


Deep Learning No Coding - <AUTHOR> https://www.kickstarter.com/projects/281458178/deep-learning-no-coding <comment><AUTHOR> This project looks really interesting - it seems to take a lot of the biggest headaches out of training DL models, yet they missed their funding goal by a wide margin. I'm interested whether this shows a product/market mismatch, because it seems like an obvious win to me - bridging the new technology of DL to practical business contexts. What am I missing here?</comment>


Ask HN: As a programmer, how to help medicine? - <AUTHOR> I've often wondered what programmers can do to contribute to medical research and medical care. What can we learn to make ourselves more useful to doctors, scientists and hospitals?
Whether it's improving diagnostic machinery, running simulations, or designing better interfaces for practitioners, there must be ways we can help. I've often wondered about this, and current events especially are making me consider it again.
Advice? <comment><USER2> You could get involved with the University of Washingtons FoldIt project

[https://fold.it](https://fold.it)

Then there is Crispr

[https://www.broadinstitute.org/research-highlights- crispr](https://www.broadinstitute.org/research-highlights-crispr)

Maybe you could develop something along thise lines?</comment>


The world is drinking less coffee while office workers stay home - <AUTHOR> https://www.msn.com/en-us/money/economy/the-world-is-drinking-less-coffee-while-office-workers-stay-home/ar-BB16BZzj <comment><USER2> Wow not me. Probably because my home coffee setup and beans are a lot better than my office.

<comment><USER3> This, absolutely. The 'Rona shutdown inspired me to buy an old commercial espresso machine (1964 FAEMA E.61) and build out a little home coffee shop in the garage, where I learned to pull shots.

[https://www.instagram.com/p/CCgeL3dsTzW/?igshid=u06d4u494zyq](https://www.instagram.com/p/CCgeL3dsTzW/?igshid=u06d4u494zyq)

<comment><USER4> Did you set out to buy that particular machine or did you just happen across it? If you don't mind my asking, how much did it cost? I have so many questions!

Do you have a blog? I'd love to read how all of this came about. What an awesome project. It looks great!

<comment><USER5> I would say espresso making at home is an expensive hobby unless you are willing to tolerate variability in the output. A decent stable machine is going to be close to 1k and the really nice home machines starting at 3k. A good grinder is also expensive. I got all the gear (buying stuff used where I could) and I have spent maybe $1500 on components. I love it, but I wouldn't recommend it to someone who isn't willing to put in time to learn and money for decent tools.

<comment><USER6> Breville Barista Express isn't cafe quality but it has a good grinder and pulls decent shots pretty consistently for $600-700

<comment><USER7> I'll second this. I've had two of them and they've been a joy to use every day. Excellent value.

</comment></comment></comment></comment></comment></comment><comment><USER8> > Shutdowns for cafes and restaurants -- which typically account for about 25% > of demand -- were overwhelming, and it could be a while before things pick > up again.

I was originally going to theorize something about office workers having more options to deal with fatigue -- taking a nap, or staring into space (and maybe being less fatigued in general from all the time saved commuting?) -- rather than just drinking coffee and toughing it out at their desks; but in light of this stat, it seems that this is all about how hard cafes & restaurants have been hit by lockdown.

<comment><USER9> I went to coffee shops not so much for the coffee (as many point out, I can make it for 10% or less of what the coffee shop does) but for the hanging out in a "third place."

<comment><USER8> The coffee shop near my (former) Manhattan apartment is one of the places I miss most in all this.

</comment></comment></comment><comment><USER10> A few months ago, it was apparently the opposite. [https://financialpost.com/commodities/agriculture/we-are- dri...](https://financialpost.com/commodities/agriculture/we-are-drinking-too- much-coffee-at-home-and-now-theres-a-mad-scramble-for-coffee-beans)

<comment><USER11> Maybe people are drinking the same amount of coffee, but they had to stock up their homes in March-April and then haven't needed to refill since then.

<comment><USER10> That makes me wonder if the toilet paper industry is also seeing a short-term dip in sales because of all that hoarding earlier this year.

<comment><USER12> Its annoying how there was pretty much no toilet paper to be found for months with a massive stock pile of paper towels everywhere and now its the opposite. I stock up on toilet paper and paper towels at regular intervals and was lucky to only barely begin running out once stores started getting toilet paper again but there seems to be no paper towels anywhere now.

<comment><USER13> FWIW, major grocers like HEB spent months planning and simulating the effects of the pandemic before it hit the US and still didn't see the run on toilet paper coming.[0]

0: [https://www.texasmonthly.com/food/heb-prepared- coronavirus-p...](https://www.texasmonthly.com/food/heb-prepared-coronavirus- pandemic/)

<comment><USER14> The "press" also causes active damage in these kinds of situations. "<X> shortage in stores" in the news will immediately cause a run on said <X> thus creating the shortage even if it didn't exist before.

<comment><USER13> So you're arguing that the press should self-censor in this situation? Their job is to report the news in factual and objective manner, not ensure that everyone has enough toilet paper. If the latter isn't true, how do you blame the press for "active damage" in this situation?

<comment><USER14> > Their job is to report the news in factual and objective manner, not ensure > that everyone has enough toilet paper.

The job of the press is to inform the public--not yell "Fire!" in a crowded theatre.

Yes, they should have self-censored.

Shouting "Covid causing shortage of bottled water--News 6 reports!" does nothing to inform the public nor does it create a useful call to action. It _only_ creates a problem--often where none previously existed. There was _ZERO_ reason to believe that Covid would cause a water system failure or contamination.

This is different from "Hurricane incoming. Stock up on water. Here are the places which still have it." The information is useful, timely, and relevant.

Having the free speech protection of being the press does not absolve the press of the responsibility to not be a jerk.

<comment><USER13> > The job of the press is to inform the public--not yell "Fire!" in a crowded > theatre.

But yelling "fire" in a crowded theater is only wrong when there isn't one, no?

You go on to argue that it's ok to have the press explicitly tell people do something (i.e. to stock up on water) when we live in a time when having the press directing anyone to do anything results in the exact kind of criticism you levied against them in your previous post. They reported that toilet paper is flying off the shelves. Arguably, an equally if not more effective solution would be to restrict to the number of units a customer could buy at once. But that doesn't involve bashing the press.

<comment><USER14> A) You will note that I changed the example to "water" specifically because there was _NO_ possibility that water was going to be an issue. And yet there was _still_ panic and shortages, mostly due to reporting.

B) The press reported toilet paper was flying off the shelves. Except that _before_ they did that, there were only marginal shortages in certain places, mostly because toilet paper is bulky and slow to restock. After the reporting, it was out _everywhere_ _instantly_. In this instance, that did great harm to those who couldn't just "stock and store".

C) "Arguably, an equally if not more effective solution would be to restrict to the number of units a customer could buy at once."

Sadly, this doesn't actually work. If most people buy toilet paper once a week, a shift to once every 5 days is way more than enough to cause a supply chain shock. There is no way to enforce a consumption level that wouldn't supply chain shock once the panic got started.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> i personally drink coffee less because i can simply take a 25 min power nap when i get my usual noon drowsiness after lunch. i also sleep longer because i dont need to commute as much and feel much more refreshed throughout the day

<comment><USER16> Before working from home, I used to set my alarm to two hours before work. I would shave, shower, brush my teeth, have a quick breakfast, then commute in.

Now I set my alarm for fifteen minutes before work. It's preferable for me if I go to bed early enough that I wake up with enough time for a shower, but if I don't I can take one after work (or during lunch). The only reason I need a whole fifteen minutes in the morning is that it takes a couple of minutes for me to log in my Mac and VPN in.

At work we have nice coffee machines with free coffee. I have coffee at home too but I am less tired in the morning. Not that costing a little prevents me from drinking coffee, it's more that it being free is an enticement to drinking it, as if I am missing one of my perks of the days at the office when I skip coffee. Also, I am getting less physical activity every week now, so I also avoid coffee for the calories, and go for water instead.

<comment><USER15> > as if I am missing one of my perks of the days at the office when I skip > coffee

same mentality for me.

> so I also avoid coffee for the calories, and go for water instead.

i'm pretty sure coffee is like almost 0 calories as long as you dont add milk, isnt it?

<comment><USER17> yup black coffee is calorie free

<comment><USER18> For practical purposes. If you want to get pedantic it's probably something like 2-5 calories per serving depending on brewing method.

<comment><USER17> im pretty sure plain drip coffee ends up way below 1. if you ate a bean how many kcal would that be? the amount of energy impregnated in the water is still way below

<comment><USER19> When I brew with French press, there's a rainbow oil slick. A web search reveals a lot of blog spam about French press being bad for you, but I couldn't find any actual cholesterol numbers.

</comment></comment></comment></comment></comment></comment></comment><comment><USER20> I drink a lot less _good_ coffee at home. Not worth shelling out for 5lb of the good stuff when everything past the first pound will be stale and not very good by the time I get to it, and purchased in smaller (usually 8-12oz) bags high-quality, freshly-roasted beans are way too expensive to have more than occasionally. So those transcendently good cups where one can actually taste stuff other than "coffee flavor" or "three-day-old rained-on camp fire" happen a lot less often for me now. :-(

Upper-end-of-bad coffee beans from Costco (so, about the best they have there) are my go-to at home. Steeping the grounds slow & cold yields way less cigarette butt flavor/odor than doing pourovers with them, so I'm making a lot more cold brew than before. Good thing it's Summer.

<comment><USER21> You can freeze coffee beans. Helps keeps them fresh a lot longer.

<comment><USER22> I do this. Get a kilo of good beans, freeze them in 250g batches.

<comment><USER23> Any issues with moisture? I find most things I freeze end up with condensation freezing inside the bag, which isn't going to be good for the coffee. I could imagine it going moldy within days of defrosting with the local humidity.

<comment><USER22> Not for me, no. Once they're defrosted they're in the fridge.

250g coffee doesn't last more than a few days for me anyway, but if you were worried about it you could split down again to 125g, so you've never got more than two or three days for mould to set in.

</comment></comment></comment></comment></comment><comment><USER24> Anecdotally, I've been quite addicted to coffee since college and wanted to try giving it up. Going to work every day, I had trouble going cold turkey, but once COVID hit and I started working from home I gave it up almost effortlessly. I feel like the disruption of routines makes changing your habits easier.

</comment><comment><USER25> If I can't stay at the coffee shop to work, there's no point in going. I can make a cup at home and save $5

</comment><comment><USER26> I drink a lot less. I drink a cup a day now. I used to drink a few a day but I'm better rested and needed less of it now. Quick tip, McCafe coffee is great tasting and a pretty good bargain. I bought it for the cost and kept it for the taste.

</comment><comment><USER27> Hmm, morning doses remain the same. In the afternoon laziness might delay the inevitable second moka round but eventually I'll go for it. I have a 6cups Bialetti Venus... should I be worried?

</comment><comment><USER28> Most workplaces have free coffee, but few have anything else to drink. I suspect if you looked at workplaces which stock a variety of free beverages, coffee consumption there would be much lower as well. I'm somewhat ambivalent about coffee; I'll drink it if someone else prepares it, but I almost never bother brewing a pot myself. Without an office where someone's always got a pot going, or where they have one of those horrible mini-cup instant brewers, I never drink it.

</comment><comment><USER29> Don't know why but my body tends to react badly to acidic foods. So I don't drink coffee (and no alcohol, no junk food, no carbonated sugary poison drinks... and so on ). That said, home office was a godsend for me. I'm now productive and happy. Without coffee :)

<comment><USER30> you can find some low acidic coffee, there are some high elevation smooth coffees from Uganda as an example that might be of interest.

</comment></comment><comment><USER31> meanwhile i laid in a 15 pound supply in late February when it was starting to look scary, Just In Case.

</comment><comment><USER32> I ordered more Nespresso capsules during the last four months than I had during the last four years.

<comment><USER33> Same, as much as I still love my aeropress and french press and hate the Nespresso lock-in, wastage, etc. I do honestly feel my Nespresso Vertuo makes a damn great cup every time, with zero fuss. Plus their ordering and delivery is slick as hell. Ordering a load of different capsules on their mobile app in the evening and they're at my door the next morning is pretty incredible. They still can't seem to send a properly formatted HTML email with the invoice/receipt though.

</comment></comment><comment><USER34> My girlfriend moved up just before the major COVID lockdowns and brought with her a French press and a barista's expertise. So we've been having good coffee virtually every day.

</comment><comment><USER35> I feel the same. I used to walk around the campus every couple of hours and grab a coffee on the way to my desk. For most days, it amounted to 4-5 cups of coffee.

At home, I barely go past 2 cups.

</comment><comment><USER36> Going to fetch a coffee in the office kitchen is a social event or discussion break. Doesn't work as well at home.

</comment><comment><USER37> Did anyone get headaches after stopping drinking coffee for a few days?

</comment><comment><USER38> One cup of coffee in the morning, and one cup of tea in the afternoon. I'm on the same routine since 5 years ago.

</comment><comment><USER39> Same article, no paywall:

[http://a.msn.com/00/en-us/BB16BZzj](http://a.msn.com/00/en-us/BB16BZzj)

<comment><USER40> Ok, changed from [https://www.bloomberg.com/news/articles/2020-07-11/the- world...](https://www.bloomberg.com/news/articles/2020-07-11/the-world-is- drinking-less-coffee-while-office-workers-stay-home). Thanks!</comment></comment>


Building my first web app - 5 months later - <AUTHOR> http://premiumthemes.com/blog/building-premium-themes/?ref=hn

<comment><USER2> I'm one of the guys who built ThemeForest. (I don't work at Envato any more.)

I built the rollover previews on that site (which has been rebuilt and improved many times since). I can tell you that you are going to have trouble keeping the preview in view when they are as large as the ones that you are using, whilst still making it possibly to see the other icons in the grid. You'll need to flip it left and right, up and down depending on the position of the mouse.

I also think you need to think about what value you are providing. I think a curated site with less themes with proper reviews would be much more useful than just a scrape of the thousands of themes out there. Your own reviews would be original content which might have a slim hope of outranking the actual themes themselves in Google results. Without that, I don't think you will get a lot of traffic.

Good luck.

<comment><USER3> I'm aware of the rollover preview issue but didn't have the time to fix it. Indeed, it's not simple but I think it was covered in many tutorials, so I won't have to reinvent much of the wheel.

As for the value proposition of the web app, I'm still unsure about it (in the discovery phase). I'll be trying different things and checking their output/ROI. Manual reviews of themes, hosting reviews, building a user community...

</comment></comment><comment><USER4> Cached: [http://webcache.googleusercontent.com/search?q=cache%3Apremi...](http://webcache.googleusercontent.com/search?q=cache%3Apremiumthemes.com%2Fblog%2Fbuilding- premium- themes%2F%3Fref%3Dhn&aq=f&oq=cache%3Apremiumthemes.com%2Fblog%2Fbuilding- premium-themes%2F%3Fref%3Dhn&aqs=chrome.0.57j58.1510&sourceid=chrome&ie=UTF-8)

PS/Protip: In Chrome, add "cache:" in front of the URL to find the cached version of the current page.

</comment><comment><USER5> For scraping, you may want to look at ScraperWiki (<https://scraperwiki.com/docs/python/python_intro_tutorial/>).

For search, see if you can use Solr or Elastic Search and it will save you a lot of headaches later. Do not reinvent that wheel. They both run as stand- alone systems that you just need to talk via HTTP to.

</comment><comment><USER6> To me, this looks like a themeforest redirector

<comment><USER3> Right now, we only display ThemeForest themes. Though I crawled other marketplaces, there still some work for filtering the results since other marketplaces are more obscure about the theme information (like sales and ratings).

The web app purpose is to help you find a theme (and thus redirect you to one of these marketplaces).

</comment></comment><comment><USER7> When I accessed the Sign in/Sign up pages, nothing loaded up for me (Mac Firefox).

</comment><comment><USER8> _Abid Omar

I'm the man who keeps this site running._

Don't tempt fate next time ;)

<comment><USER3> Haha, I expected this. I was watching the Google Analytics real-time report and saw 100-120 online users. I kept checking the site...running fine, so I went to lunch and somehow the HTTP Server died.

<comment><USER9> Right now clicking on any theme goes back to the front page, or goes to a blank screen.

<comment><USER3> The full link for the theme is hidden (hovering will show premiumthemes.com/go) in a similar fashion to what Google does to search results link.

Seeing the URL (<http://premiumthemes.com/go>) in my Google analytics confirm the issues is happening to some users, I'm disabling it right now.</comment></comment></comment></comment>


"Enable Filesystem API in Incognito in Chrome to Defeat Incognito-Detectors" - <AUTHOR> https://twitter.com/elidourado/status/1145322888108621824 <comment><AUTHOR> To enable the flag: chrome://flags/#enable-filesystem-in-incognito

It's not perfect, but it does work. See [https://www.google.com/search?q=side+effects+of+filesystem+a...](https://www.google.com/search?q=side+effects+of+filesystem+api+in+incognito+mode) for details.

Additional credit to savanaly in [https://news.ycombinator.com/item?id=20915286#20915493](https://news.ycombinator.com/item?id=20915286#20915493).</comment>


Peter Rojas and Ryan Block launch gdgt, a gadget database - <AUTHOR> http://gdgt.com/

<comment><USER2> great way to launch -- site's down.

<http://downforeveryoneorjustme.com/gdgt.com>

edit: looks like its up and down intermittently now.

</comment><comment><USER3> Uh, a "gadget review" site festooned with BlackBerry sponsorships, where the primary answer to "what's gdgt?" is a Flash video. Gotcha. Did someone famous start this and I missed the memo, or is this simply not news?

<comment><AUTHOR> Started by Peter Rojas and Ryan Block, the two former editor-in-chiefs of Engadget.

<comment><USER3> That should definitely be in the HN headline.

<comment><USER4> why should it?

</comment></comment></comment></comment><comment><USER5> Back up and definitely worth a look. Lately it seems like content sites are increasingly hybridizing with what we'd think of as being more like applications.</comment>


Apple Highlights Five Reasons the iPad Pro Can Be Your Next Computer - <AUTHOR> https://www.macrumors.com/2018/11/19/ipad-pro-computer-replacement-apple-ad/ <comment><USER2> The thing I like is the sticky screen when I eat pizza - my cat ends up licking parts of it.</comment>


Dear "Dear GitHub" - <AUTHOR> http://www.juliandunn.net/2016/01/14/dear-dear-github-from-your-local-friendly-product-person/ <comment><USER2> I wrote Issues, so I've likely thought through these problems more than anyone else.

I really disagree with the general sentiment of this post, and very much agree with the original "Dear GitHub" letter. The product needs a lot of work, and that I couldn't address these problems while I was there really, deeply depresses me.

Issues hasn't been touched since I shipped the third large iteration a year and a half ago. It was never intended to be a finished product at that point; it was intended to evolve quite a bit from that initial vision. There's a lot of pain that open source developers _and_ private source developers face today, and I really hope we all can start seeing that pain in our community eased soon.

<comment><USER3> Agreed. You should never, ever publicly confront a set of publicly notable and popular customers to tell them what they are asking for is wrong because the company you are trying to defend doesn't need to do those things for their _paying_ customers.

I love GitHub and use it everyday. But I have a feeling this post with result in a talk with the "product guy" to tell him how this attempt at "putting customers in their place" backfired, even if he doesn't work for GitHub.

What a PR disaster.

<comment><USER4> You know the author of the article wasn't a product person from Github right? They work at Chef.

<comment><USER3> Correction made, thanks.

</comment></comment></comment></comment><comment><USER5> If the product people at GitHub don't understand the sales/marketing impact that GitHub's free offerings have on its paid offerings, then they need to hire new product people.

I think it's plausible that the authors of the "Dear GitHub" open letter already realized the truth of Julian's response, which is why they posed their request in the way that they did.

This gives GitHub three choices. They can react positively, remain passive, or react negatively. If they react negatively, they have the risk of a PR shit- storm, which will negatively impact new customer acquisition. If they remain passive, they risk the chance that the attention to this campaign will grow and their reputation will decline. This will negatively impact new customer acquisition.

However, if they react positively, they show good will toward consumers of their free offering, and they show would-be paying customers their willingness to improve their services. This will positively impact new customer acquisition.

Were this request not made in the open, GitHub would not need worry about any of these outcomes, and would therefore not be forced to react.

<comment><USER6> Github's life blood is not just the enterprise side, but its free offering, the community and the huge network effect it has over the open source community.

No one is sticking with Github because it has particularly good UI or functionality. Github raw functionality is completely undifferentiable from its competitors such as gitlab and bitbucket. People stay on github because of the number of developers who uses it, star counts, fork counts and reputation system it has built over time.

<comment><USER7> If either of its competitors were even a little better I would switch.

<comment><USER8> And this fact is why Github can't afford _not_ to prioritize "Dear Github." If there's one thing we've learned from social media, it's that network effect makes you strong as an incumbent, but it doesn't make you immortal. All it takes is one upstart that just feels "perfect" in terms of UX to cut into your bottom line. (Though I suppose you can acquire them...)

</comment></comment></comment></comment><comment><USER9> This is sadly exactly what I'd expect a senseless product person to say. Obviously the reason Github is Github today is because of the OSS offerings. These OSS developers then go and set up teams of their own which bring their projects and business back to Github.

If people get together and write up an open letter for you to fix things, you really should take it as a warning sign as the same people could easily get frustrated and move elsewhere or someone else could come along and offer a better product. It would honestly take only a handful of high profile developers to cause a mass migration.

<comment><USER10> This. Github's enterprise base is at least partially a subset of their open source population. If Github doesn't keep OSS momentum for their product, they lose the perceived "default client" status to git repositories. OSS and eventually enterprise starts looking elsewhere.

This is getting more and more relvent since solid competition is starting to crop up everywhere. Gitlab, Bitbucket, GOGs, Gitolite, Gerrit. Not apples to apples of course, but Enterprise has a lot of decisions when it comes to git control.

Even the things that could be considered Github "lockins" aren't really so: Google's git-appraise[0] could make pull-requests portable, Github's wikis are portable by their very nature[1], software like git-issues[2] could make issues portable. Not in the immediate, but decentralize-everything is a rising sentiment.

The only real lockins I see are Github's work-flow and social community. If either become toxic, developers will start to look elsewhere. Like Microsoft, I'm sure Github can ride the majority-player wave for years before it starts really hurting them, but simply saying a community-centric company only has to look out for their paying community's interests is short-sighted.

[0] [https://github.com/google/git-appraise](https://github.com/google/git- appraise) [1] [https://github.com/gollum/gollum](https://github.com/gollum/gollum) [2] [https://github.com/duplys/git-issues](https://github.com/duplys/git-issues)

</comment></comment><comment><USER11> As someone who is:

* OSS user (and signee of the Dear Github letter)

* paid user

* user of an enterprise installation of Github

I can honestly say the problems I see in OSS land, are the same shape as those in paid, and the enterprise installation. The difference is, due to the volume of usage the enterprise installation suffers from these same issues even more.

Now, we may not see +1 DOS often (on the enterprise side of this), largely because its seen as bad manners and/or the goals are already shared via some other disjoint medium. But this doesn't mean the issue isn't present.

Being able to enforce additional semantics (such as priority/interest, reviewers, blocked by etc.) would be a big win

<comment><USER12> > But this doesn't mean the issue isn't present.

No one is saying that the issue does not exist. However,th author is suggesting that since it hardly impacts paying customers, it is going to get low priority.

</comment></comment><comment><USER13> It's stuff like this that gives me a bad taste in my mouth when I think about Chef.

Whenever I've interacted with people from Chef-the-company, I've always gotten the impression that they believe they're talking to me because (at best) they want to save me from my misbegotten ways and join the Chef Way. At worst, I've gotten the impression that they think I'm a terrible person and/or worthless for not just getting with the program and bowing to their wisdom.

I know from other experiences that the Chef community in general is not like that. But Chef itself has never imparted a good experience on me.

It doesn't help that I wholeheartedly agree with the Dear GitHub letter, and get a very bad vibe from this "Dear 'Dear GitHub'" letter.

<comment><USER14> maybe write a `Dear "Dear 'Dear Github'"` letter"?

<comment><USER13> At that point I think I'd be a little too derivative. Right now, I'm content to be "Dear GitHub" +1. With apologies, of course.

</comment></comment></comment><comment><USER15> The author jokes at projects leaving GitHub for BitbBucket.

I would have actually recommended GitLab! It has all the features of GitHub and more, and is actually open source ([https://gitlab.com/gitlab-org/gitlab- ce/](https://gitlab.com/gitlab-org/gitlab-ce/))

<comment><USER16> I've deployed a Gogs installation at home and am very happy with it. It's not Github, but it's great for my needs, and I can create accounts for friends to use privately, which is fantastic. I've tried GitLab and it is also very good.

<comment><USER17> Same. We currently use Gogs as a local mirror for our Github repos here at work, too. Brilliantly done app, Gogs.

</comment></comment></comment><comment><USER18> I'd love to agree with the author, I really would... but GitHub put quite a bit of engineering talent and resources behind Atom (and Electron), and last I checked, that hasn't made them a single dollar. It's very clear the company does not simply prioritize resources based on immediate return. If they did, we surely wouldn't have the text editor that I've been addicted to for the past year.

</comment><comment><USER19> I don't entirely agree. As someone who works in a mid-to-large company, and who has worked in a 50,000 person company (admittedly for both companies not all employees were engineers), I feel it's worth noting that as companies get larger and teams more diverse, they tend to require the exact features open source projects need.

A product manager in team X who noticed a bug in product Y is not going to know what fields are necessary for that product, and as issues make their way to company-wide mailing-lists (or are linked from internal meme websites -- you know who you are), they may accumulate +1-spam if no voting system is put in place. As such, I believe GitHub's ability to move upmarket and satisfy its larger customers is actually aligned with implementing the features requested in the "Dear Github" letter.

</comment><comment><USER20> What an incredibly passive aggressive, rude, thinly veiled 'fuck you' of a blog post. Does this guy actually work for GitHub?

I am sufficiently offended by the tenor of this post to consider taking my private repos off GitHub and move them to BitBucket. And, given that my employer already uses JIRA for issue tracking, I'll probably suggest we consider moving our organization's repos over to BitBucket while we're at it, too.

Edit: Julian doesn't work for GitHub. He works for Chef: [https://github.com/juliandunn](https://github.com/juliandunn), and his blog post is incredibly poorly worded. Fwiw, if this is what Chef's product people are like, I will never consider working there.

<comment><USER21> Agreed. He works for Chef.io though, so those who are concerned about his response should consider what relies on Chef, not GitHub. There are many open source CI platforms available so it shouldn't be difficult.

Even if he did work for GH, they haven't published an initial response, so your actions would be spontaneous.

<comment><USER20> I noted this in the edit to my post that I posted just before your comment was written (you were probably writing this when I posted my change). Given the sort of 'distributed' nature, and low managerial overhead of GitHub, this could well be considered a "they" post were it from a GitHub employee.

</comment></comment></comment><comment><USER22> A few issues here. Filtering feature requests to "whatever makes money" seems to be overly reductionist and a bit cynical, especially given a company like GitHub which is relatively open and has a flexible policy as to what is being worked on. Sibling commenters bring up examples like Atom and Electron that GitHub pours salary money into but don't make money off of.

Also, it assumes that the requests don't matter for paying users – on the contrary, the features listed in the original article could be useful features that could make more projects, including paid projects, use GitHub Issues, which could in turn make more people pay for GitHub. I know that the first request, metadata for issues, would have been _incredibly_ useful for when my team was using GitHub Issues.

Finally, the lack of features that open-source authors consider important is a pretty big deal. This article asks, where are the projects going to go if GitHub doesn't implement these features? Well, it's far from inconceivable that they'd switch to another place that had better features and supported open-source projects more fully, taking away steam from what originally pushed GitHub to be so popular and become the juggernaut in public and private source code hosting – open-source projects.

Remember Google Code and SourceForge?

</comment><comment><USER23> When those developers working on open source start using a new product from a different company, then go to their own place of work and ask to use that produce instead of github it will impact their paid customers.

How do you think they got those paid customers in the first place? They came from the free tier. If the free tier isn't nice to use, why would you pay for it?

<comment><USER24> >>If the free tier isn't nice to use, why would you pay for it?

The free tier is _good enough_ , and has been good enough, to use long enough for users to convince their orgs to move to the non-free tiers. Mission accomplished for GitHub.

Julian's point still stands: paying customers with complaints and suggested improvements have the best hope of influencing improvements.

Hopefully these propagate to the free tier.

<comment><USER25> Fortunately GitHub now has competition in the free offerings. It's no longer a question of being good enough. If GitLab is better, and OSS projects start moving to GitLab in large numbers, those OSS developers will start asking their employers to pay for GitLab instead of GitHub when they need the paid offerings.

GitHub not improving the free offerings while competitors do will affect their income.

</comment></comment></comment><comment><USER26> Surprised that a product person without data would go on record saying that an issue big enough to warrant a co-signed open letter isn't important enough for Github to address. The best product people I've worked with start by getting as much information as possible first before making decisions.

</comment><comment><USER27> Somehow this "Product Guy" misses the fact that popular OSS devs that evangelize your product are also "Paying Customers" \- they help you Grow & spread in a fashion that is next to impossible by buying advertising.

Please stop spreading the FUD that they adon't count

</comment><comment><USER28> > You're unlikely to see +1-DDoS-type behavior inside private repos, for > example.

Maybe not, but the lack of an "Approval" system is keeping us from moving from Bitbucket to Github. The proposed fix for +1 spamming could easily serve as an approval system for us.

(Bitbucket, I might add, has also become incredibly stagnant, as can be seen by this long standing issue to support Markdown[0])

[0]: [https://bitbucket.org/site/master/issues/6930/support- some-o...](https://bitbucket.org/site/master/issues/6930/support-some-or-all- html-in-markdown-bb)

</comment><comment><USER29> The "thing" is... my code sits in git at the end of the day. That is portability like no other. Can I migrate issues? Sure![1] What[2] language do you prefer to work with?

The real "thing" is, my git repos do not care where they are hosted. All I need to change is my origin.

[1] [https://github.com/sorich87/github-to-bitbucket-issues- migra...](https://github.com/sorich87/github-to-bitbucket-issues-migration)

[2] [https://github.com/jeffwidman/bitbucket-issue- migration](https://github.com/jeffwidman/bitbucket-issue-migration)

<comment><USER30> Hell, you could even host your own!

<comment><USER31> Why didn't I think of that! JK I actually host my own git repos on my personal computer's hard drive every day ;)

</comment></comment></comment><comment><USER32> Dear "Dear 'Dear Github'",

I found your letter to be patronizing and facile. Saying "I could explain X but it should be obvious" is a good indication that your snarky post is lacking substance.

</comment><comment><USER30> With the growing prevalence of things like GitLab, GoGs, and GitBucket I think that GitHub has to thing very long and hard before they make any official statements like this. All someone would need to do is make a central list where you could post a link to your git server and list what projects are on there to make it searchable. I that is done, I see no reason why anyone, with the needed hardware, would stick to github.

I think we are seeing the "end of days" for this open source power house.

</comment><comment><USER33> This was nothing more than an attention grabbing 'run-of-the-mill' counter post. Possibly to passively advertize 'chef'.

</comment><comment><USER34> Those authors presumably work at places that pay GitHub non-zero sums of money. For instance, many of them are Googlers and Facebookers. I have no idea how many private repos those orgs have, but I have a feeling large companies with a significant open-source footprint (like the ones represented on that list) tend to buy the biggest plans GitHub sells.

</comment><comment><USER35> I'm currently working in a start up that's using a paid Github organisation. The mentioned issues are a pain for us, even though we are currently only 6 people working on the code. Because of this shortcomings we will migrate somewhere else if we grew larger. So I would say this affects the business side of Github.

</comment><comment><USER36> Open source surely benefits the majority of GitHub's paying customers. So the way I see it, if this improves how open source projects are run, that will result in better libraries and tools for GitHub's paying customers.

</comment><comment><USER20> Hey dang - it might be worth clarifying in the title that the author of this works for Chef, not GitHub.

<comment><USER37> Why? At the time of _this_ comment (and -according to the timestamp-, the time of your comment), the title was 'Dear "Dear Github"', and the domain that hosted the article was listed as juliandunn.net.

I... can't imagine that any _reasonable_ person would draw from these two facts that this was a GitHub employee writing in any official capacity.

<comment><USER38> There is at least one thread where there's already been confusion around it.

At first, I thought this would be from someone who worked at GitHub, because I didn't understand why else it got upvoted.

<comment><USER37> > There is at least one thread where there's already been confusion around it.

It's _impossible_ to prevent _everyone_ from getting confused. What's more, it appears that purple_haze's confusion didn't _materially_ alter what they had to say.

> At first, I thought this would be from someone who worked at GitHub, because > I didn't understand why else it got upvoted.

I guess it got upvoted because people liked what it said and/or thought it contributed to the ongoing discussion here on HN. We're generally not too terribly authoritarian and/or credentialist around here.

</comment></comment></comment></comment><comment><USER39> Yes. It's open source so if you want a feature badly, file a pull request. Much easier than complaining

</comment><comment> saiko-chriskun So much wrong with this post.

</comment><comment><USER40> GitHub makes plenty of money. Just fix it.

<comment><USER41> For example, any web developer on here could implement 'delete an issue' in a few days, with unit tests. It's not rocket science.

</comment></comment><comment><USER42> No response articles, please.

<comment><USER43> I don't see much difference between a comment on Reddit/HN and a response article, except that the response article is platform-agnostic and (sometimes) more thoughtfully assembled.

<comment><USER44> because its practically a long comment on the original. If it has to be platform agnostic with formatting, then that is why comments are allowed to have links to other sites.

Otherwise we really should all start writing response articles and post those instead of comments, because there are only positives yeah? 70 comments for this post alone, all articles so people can use their own variant of formatting languages or whatever</comment></comment></comment>


What is your favourite C programming trick? - <AUTHOR> http://stackoverflow.com/questions/599365/what-is-your-favorite-c-programming-trick <comment><USER2> Recently, I learned that instead of saying

        long_struct_name *foo = malloc(sizeof(long_struct_name));

you can say

        long_struct_name *foo = malloc(sizeof(*foo));

since the variable type info is already statically available. That saves some typing, and (more importantly) blocks against bugs from changing one but not the other. I've been meaning to look it up in H&S to make sure it's always safe, but the guy who showed it to me is so strict about safe/standard C that it's likely.

Most of my favorite tricks actually involve the preprocessor, though. I know it's significantly less expressive than the macro systems in Lisp, Scheme, or OCaml, but C would be a very different language without it, and tasteful CPP usage can ease many of C's pain points.

(My _other_ other favorite C programming trick is knowing Lua, which is excellent for scripting C. :) )

<comment><USER3> It's always safe, and is also the correct way to write the expression.

</comment></comment><comment><USER4> I particularly enjoy showing people the little known "goes to" operator:

      -->

with example code such as this:

      #include <stdio.h>
      int main()
      {
         int x = 10;
         while( x --> 0 ) // read "while x goes to zero"
         {
           printf("%d ", x);
         }
      }

The above code compiles and runs, listing the numbers from 9 to 0.

For more details on this little known operator, I recommend this stack overflow question:

[http://stackoverflow.com/questions/1642028/what-is-the- name-...](http://stackoverflow.com/questions/1642028/what-is-the-name-of-this- operator)

Always a classic.

<comment><USER5> It so happens that x is not continuous in 0 - the result is different if you approach 0 from the right, i.e.

      0 <-- x

</comment></comment><comment><USER3> The 4-byte (SMTP-command-style) lookup:

      if(*(u_int32_t)cmdword == *(u_int32_t *)"EHLO") {
        handle_ehlo();
      }

The "extern inline" idiom for forcing inlining, which I picked up from Mike Stolarchuk.

Passing and assigning trivial structures by value instead of fiddley pointers.

Arena allocators.

Not so much a trick, but: you can safely free() NULL, which saves a conditional. In the same vein: not only is there no point to casting malloc()'s return value, but there are (admittedly rare) circumstances where doing so can be harmful. So save yourself the typing.

assert(!"message") instead of assert(0).

<comment><USER6> I like putting the constants on the left side of the comparison... cuts down on the 'missing one equals sign' errors. This can be a readability issue though.

<comment><USER7> GCC will warn about using an assignment as a truth value in if(), while(), etc., so it's probably safe enough to stick with whatever order you're familiar with and let GCC alert you if you miss an equals sign.

</comment></comment></comment><comment><USER8> Using the ternary operator to return a function pointer, that is then immediately called, where the functions in question are stubs to system calls and have identical declarations.

As in, specifically:

        if ((Lflag ? chown : lchown)(p->fts_accpath, s->st_uid, -1))
            (void)printf(" not modified: %s\n",
                strerror(errno));

It was a moment of enlightenment.

<comment><USER9> And (void) in front of printf() is what for exactly?

<comment><USER8> Philosophically, it's due to a famous system programmer's dictum: "Always check the return value of system calls".

The corollary of this is that one should clearly document when explicitly ignoring the return value. A simple way of this in C becomes a cast to void of the return. Since printf does I/O, it qualifies.

Specifically, this code is from a patch to the FreeBSD source which is ruled by style(9); you will find this form throughout BSD source.

</comment></comment></comment><comment><USER10> C is full of surprises, and generally my favourite trick is trick du jour. While it's not strictly for C, Hacker's Delight[1] is my favourite collection of bit twiddling tricks. A highly recommended read if only for the intellectual value.

[1] <http://www.hackersdelight.org/>

</comment><comment><USER11> Array initializer syntax, particularly with ranges.

      static cmd_handler_t handlers[16] = {
          [0 ... 15] = handler_noop,

          [1] = handler_for_1,
          [3] = handler_for_3,
          [6 ... 8] = handler_for_6_through_8
      };

And suchforth. Very natural for parsers.

Particularly nifty is Jaremie Miller's js0n parser, which makes heavy use of this: <https://github.com/quartzjer/js0n/blob/master/js0n.c>

<comment><USER12> Range initialisers are a gcc extension. They should not be used in portable code.

<comment><USER3> Any time I have ever, ever used a gcc extension in my own code, I have always been sorry for having done so later --- usually more than a year later, at a moment when I don't really have time budgeted for being sorry about binding my code directly to gcc.

(I see a difference between literally using GCC-dialect C and relying on dubious C constructs that happen to work well on C; for instance, I've never been bitten by "extern inline").

<comment><USER13> 'extern inline' isn't a dubious C99 construct; it's well defined what it means.

The problem is that the 'extern inline' gcc extension means something else, and is enabled by default unless you specify -std=c99

</comment></comment></comment></comment><comment><USER14> My favourite C trick is -Dcontinue=break in the Makefile.

Sacrasm aside, I like (( x > 0 )&&( (x&(x-1)) == 0 )) trick to test if x is a power of two. But all arithmetic tricks like this need to be commented in detail, used rarely, and properly documented.

Edit: I've also used "-Dfor=if(0);else for" to make some ancient C++ compiler obey C++0x scoping rules for variables declared in initializer list of 'for' statement.

<comment><USER15> I remember using the `#define for if (0) else for` trick, too - was it with MSVC 98 by any chance?

<comment><USER14> Maybe, I don't remember. It was long ago.

</comment></comment></comment><comment><USER16> asprintf. It's so much easier to write

        asprintf(s, "%s.pid", progname);

than

        s = malloc(strlen(progname) + 5);
        strcpy(s, progname);
        strcat(s, ".pid");

and it avoids errors in buffer-size computation too.

(Unfortunately asprintf isn't C99; but you can construct it easily out of vsnprintf: [http://code.google.com/p/libcperciva/source/browse/trunk/uti...](http://code.google.com/p/libcperciva/source/browse/trunk/util/asprintf.c))

<comment><USER3> asprintf is very expensive; one tends to use snprintf all over the place in ones code.

Not disagreeing with you; asprintf is a good thing to have around.

<comment><USER17> It's a shame they didn't offer msprintf(), which would use malloc(), and asprintf(), which would use alloca(), for cases where you only want a temporary string without heap usage/fragmentation overhead.

<comment><USER16> You can't use alloca from inside a library function, since it would allocate within the library function's stack frame and the allocation would no longer be valid when the function returned. (Or rather, you can use alloca within library functions, but you can't return a pointer to that allocation, so it wouldn't be useful here.)

Theoretically you could define an alloca()ed-pointer-returning Xsprintf as a _macro_ , though... (but ask tptacek notes, it's probably a bad idea).

<comment><USER18> Something like this (C99; given p, stack-allocates p_sasprintf_buf of size at most 16 if the string would fit, and uses asprintf otherwise):

        #include <err.h>
        #include <stdio.h>
        #include <stdlib.h>

        #define SASPRINTF_MAXLEN 16
        #define SASPRINTF_MERGE(a, b) a ## b
        #define SASPRINTF_LEN(p) SASPRINTF_MERGE(p, _sasprintf_len)
        #define SASPRINTF_BUF(p) SASPRINTF_MERGE(p, _sasprintf_buf)
        #define SASPRINTF(p, fmt, ...) \
            size_t  SASPRINTF_LEN(p) = snprintf(NULL, 0, (fmt), __VA_ARGS__); \
            char    SASPRINTF_BUF(p)[SASPRINTF_LEN(p) <= SASPRINTF_MAXLEN ? SASPRINTF_LEN(p) + 1 : 0]; \
            if (SASPRINTF_LEN(p) <= SASPRINTF_MAXLEN) { \
                snprintf(SASPRINTF_BUF(p), SASPRINTF_LEN(p) + 1, (fmt), __VA_ARGS__); \
                p = SASPRINTF_BUF(p); \
            } else { \
                if (asprintf(&p, (fmt), __VA_ARGS__) == -1) \
                    err(1, "SASPRINTF_L at %s, %d", __FILE__, __LINE__); \
            }
        #define SASPRINTF_FREE(p) do { \
                if (p != SASPRINTF_BUF(p)) \
                    free(p); \
            } while(0)

        /* Test harness */
        int main(void);

        int main(void) {
                char *p, *p2;

                SASPRINTF(p, "%s", "foo");
                SASPRINTF(p2, "%s", "Really long string, really.");

                printf("%s\n%s\n", p, p2);

                SASPRINTF_FREE(p);
                SASPRINTF_FREE(p2);

                exit(EXIT_SUCCESS);
        }

I was going to say "...but you have to be pretty insane to do this", but I haven't managed to get incorrect-but-compiling code out of the above macros. Of course, I'm not at all convinced that it's _faster_ than asprintf... (even after the obvious optimizations.)

<comment><USER12> This is not valid C99. In C99, arrays must have at least one element. Also, what is err.h? Whatever it is, it is not C99.

As for speed, if asprintf() does something clever to avoid rendering the string twice, this is actually slower unless snprintf() is faster than a malloc() call (unlikely). Furthermore, some compilers implement variable- length arrays with malloc() so for these, this is definitely not an improvement.

Beyond the speed of this particular call, using variable-length arrays can have a performance hit in general since gcc is unable to inline functions using them.

</comment></comment></comment></comment></comment></comment><comment><USER19> Multi-line strings:

      char* greeting = "Hello "
      "world";

</comment><comment><USER20> A macro for calculating the size of a buffer for a C-style string containing a (signed/unsigned) integer:

      #define CS_INT_SIZE(int_type) ((size_t)(0.30103 * sizeof(int_type) * 8) + 2 + 1)

      int x = -1000;
      char buf[CS_INT_SIZE(x)]; // instead of char buf[100];
      snprintf(buf, sizeof(buf), "%d", x);

Another macro for calculating the length of a string literal in compile time (just like strlen would do). Note the extra check for string literal.

      #define CSLLEN(s)           (sizeof(s "") - 1)
      int len = CSLLEN("hello"); // len == 5 here

Another one for logging variable arguments or no arguments at all.

      #define Log_Trace_(...) Log(__FILE__, __LINE__, __func__, LOG_TYPE_TRACE, "" __VA_ARGS__)
      void Log(const char* file, int line, const char* func, int type, const char* fmt, ...);
      Log_Trace(); // prints just the name of the file, line and func
      Log_Trace("Error %d", error); // prints the same as above and the error number

<comment><USER3> Why not just declare "char buf[100]" for snprintf's target and be done with it?

<comment><USER16> Because then you'd have a buffer overflow in 2153 when we're using 512-bit integers.

<comment><USER3> No, you'd have a truncated string.

You really think we'll be dealing with 512 bit integers in 40 years? This is code that's turning integers into decimal strings.

<comment><USER16> Either my calendar is wrong, or 2153 is far more than 40 years away.

I wasn't being serious, though.

<comment><USER3> Sorry. I can't read today. :)

</comment></comment></comment></comment></comment></comment><comment><USER21> I don't know whether this qualifies as a "trick", but by far the most useful idiom I use in C code is:

      // in some header file somewhere
      #define CHECK_ERROR(rc) \
        if (rc != SOME_SUCCESS_VALUE) { report(rc, __FILE__, __LINE__); goto error; }
      #define CHECK_MALLOC(ptr, rc) \
        if (ptr == NULL) { rc = report_malloc_error(__FILE__, __LINE__); goto error; }

      // in code
      error_t somefunc( ... ) {
        error_t rc = SUCCESS;

        widget_p = make_a_widget(...);
        CHECK_MALLOC(widget_p, rc);

        rc = this_could_fail( ... );
        CHECK_ERROR(rc);
        // ...
        rc = this_could_fail_too( ... );
        CHECK_ERROR(rc);

        return SUCCESS;
      error:
        // ... error clean up ...
        return rc;
      }

There are slight variants; like for sharing the cleanup code (e.g. "finally"), but that's the essence of it. I'm sure I've typoed something above, nit- pickers beware :-)

<comment><USER3> CHECK_MALLOC is an anti-pattern (do you have CHECK_FOO for any given FOO which might behind the scenes allocate?).

I have a litany of reasons why you shouldn't bother checking malloc returns, and instead invest a little effort in making sure your platform malloc is configured to abort instead of returning NULL. The simplest and most compelling of those reasons is that it's easier and cleaner.

I'm also not a fan of a macro that introduces an implicit dependency on a goto label.

       do { } while(0)

is a pretty convenient way of expressing single-return; you just use "break" instead of "return".

<comment><USER21> I can accept (most of) your issue(s) with the MALLOC macro, MALLOC is a bad name here from previous habit. The point was that there's code one has no control over which indicates failure by returning a NULL values, this is where it's generally useful.

I strongly disagree about the goto label. "break" is _not_ equivalent (consider a nested for/while/switch). Plus, it's not "implicit" if it's well- known and oft-used in the code in question.

<comment><USER3> You strongly disagree about something I don't _strongly_ disagree about. I wouldn't use goto to get single-return, nor would I wrap drastic control flow in a macro, but whatever floats your boat.

I have much stronger opinions about checking malloc. It's something people spend a lot of effort to do that actually makes their code worse.

<comment><USER7> Would your opinions on checking malloc still hold if the system in question were an embedded system that should continue operating with partial functionality even when out of memory? Also, when you say "makes their code worse," are you saying harder to read, harder to debug, less secure, slower, buggier, or all of the above?

My habit of checking malloc() also comes from my distaste for audio software that randomly displays erratic behavior when memory starts getting tight, rather than displaying an alert that an allocation failed.

<comment><USER21> I think you can always find exceptions -- such is engineering. :-)

In my example above, one of the things I also failed to clarify about that test _was_ that it was in the context of a system that could back off and restart or the call was returning NULL for reasons other than OOM. But like I said, we rigged malloc() to blow, because malloc() is the generic purpose allocator, and you're screwed if that goes.

I think tp gives good advice here: for your typical malloc() user, you're usually screwed if malloc returns NULL, because that's your heap allocator, and you have nothing else :-)

An embedded system, generally, will have a great deal more knowledge of how to back off -- in other words, the memory allocator is something that is under much more control -- it probably isn't malloc()...

</comment></comment></comment></comment></comment></comment><comment><USER22> I mean this in a good way, wouldn't it be better to stack up all of this on stack-overflow parent link ? This would enrich their community and be more optimal for the reader here.

p.s to the guy who down-voted my previous ( now deleted ) comment. you were right. It helped me think more precisely regarding why I was trying to crack a joke.

</comment><comment><USER23>
        {
          int n = 100;
          char *foo = malloc(n);
          ...;
          bar();
        }

        (gdb) break bar
        (gdb) r
        (gdb) up
        (gdb) p/x *(char (*)[100]) foo

Printing malloc'd arrays can be a pain. Using the "pointer to array of type" typecast, you can force gdb to tell you everything at once.

<comment><USER24> Can't you just do:

      p/x *foo@100

</comment></comment><comment><USER25> Using unions and structs to do data conversion/manipulation:

      union convert {
        unsigned char ch;
        struct bits {
          unsigned char bit7:1;
          unsigned char bit6:1;
          unsigned char bit5:1;
          unsigned char bit4:1;
          unsigned char bit3:1;
          unsigned char bit2:1;
          unsigned char bit1:1;
          unsigned char bit0:1;
        }
      }

Set the character, toggle various bits, then retrieve the character. It saves a bunch of left and right shift and or/and of values. [My C is quite rusty, so I apologize if the syntax is a bit off.]

<comment><USER26> Since other people have been nitpicky in the comments here, I thought it might be worth pointing out that this assumes an 8-bit byte, so it's not general. ;) Remember, 8 bits is just a convention.

<comment><USER27> 8 bits per byte is the only convention that matters; I challenge any of you to prove otherwise.

 _throws down gloves_

<comment><USER12> The Texas Instruments C55x DSP has 16-bit bytes. See the compiler documentation at <http://www.ti.com/litv/pdf/spru281f> section 5.3 if you do not believe me. This DSP has more unusual properties:

      type               size (bits)
      </comment></comment></comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>
      char               16
      short              16
      int                16
      long               32
      long long          40
      float              32
      double             32
      pointer (data)     16 or 23
      pointer (function) 24

<comment><USER27> That's hilarious. I wonder why "long long" is 40 bits?

And... A non-function-pointer is "16 or 23" bits? Nice.

What's the proper scenario to use "long" instead of "int"? I've never bothered to use it.

<comment><USER28> >What's the proper scenario to use "long" instead of "int"? I've never bothered to use it.

It was necessary with 16-bit processors, because ints were 16-bit shorts, and longs were 32-bits.

With modern processors and OS', there isn't really a reason to use it. In fact, it's potentially dangerous if you're writing *nix code that's supposed to run on 64 or 32-bit systems. In that case, you don't want to use longs, because they're 32-bits on a 32-bit compile, but 64 on 64-bits on a 64-bit compiler. For Windows, int and long are interchangable 32-bit values, which is another reason to avoid using longs as much as possible when writing portable code.

</comment></comment></comment><comment><USER29> My fav is one that I've actually had to use in practice when using an (arcane) platform specific builtin. It's a way to arbitrarily align variables:

       #define ALIGN(type, name, align) __ALIGN_MASK(type, name, (align - 1))
       #define __ALIGN_MASK(type, name, mask) char __##name##_buffer[sizeof(type) + mask];\
       int * name = (type *)((size_t)(__##name##_buffer + mask) & ~mask);

Then you can just use it in the code like so:

       ALIGN(int, y, 16);

And you've just declared a pointer to a 16-byte aligned int on the stack. Very useful.

<comment><USER12> That's all very well, except that it's wrong. The last line needs to do "(buffer + mask) & ~mask" or you'll end up pointing outside the array.

You also violated the C standard in a less severe way. According to the standard, any identifier name starting with a double underscore (or underscore followed by upper-case letter) is reserved by the implementation for any use. These reserved names are frequently used in system header files, and encroaching on that namespace can easily lead to weird errors if the code is ever compiled on some other system.

<comment><USER29> Whoops, that's what I get for prettying things up after copy and pasting. Thanks for pointing that out.

As for the double underscore being reserved for implementation use, this was in fact part of the compiler (well, runtime in this case) implementation, again a side-effect of copy and paste.

</comment></comment></comment><comment><USER30> So many to choose from ...

Convert single char c into an integer:

        int value = '0' - c;

Get the length of a static string you can use sizeof() instead of strlen()

        int len1 = sizeof("hello");   // compile-time string length

A fast and simple ring buffer (borrowed from Quake code)

        UPDATE_MASK = ARRAY_SIZE - 1;
        array[i++ & UPDATE_MASK] = data;

Init all bits of a mask to 1 on any architecture:

        unsigned int flags = -1;

<comment><USER31> The ring buffer is a nice trick, but it only works on array sizes that are a multiple of 2. The generalized version would be "array[i++ % ARRAY_SIZE] = data". If ARRAY_SIZE happens to be a multiple of two, I'm sure most compilers would optimize to a bitmask anyways..

<comment><USER12> And if it is not a power of 2, the % operation will be anything but fast. If a size not a power of 2 is strictly required, a simple increment and compare is almost certainly faster.

</comment></comment></comment><comment><USER32> Since some people are posting macros (including some intentionally malicious ones), it is handy to know the -E compiler flag for debugging purposes. This will run only the preprocessor on the given files and print the result to stdout. (N.b. -E works at least on gcc and clang; the flag may be different elsewhere.)

Not really a C language trick, but useful nonetheless.

<comment><USER2> You can also call 'cpp' on the file. When doing heavy macrology (e.g. <https://github.com/silentbicycle/kona/blob/master/scalar.h>) I like to work in a file which is just

        #include "the_macro.h"

        THE_MACRO(example, args);

and call

        cpp macrotest.h | fmt -w72

(using fmt since multi-line macros will end up on one line otherwise).

</comment></comment><comment><USER33> Here we create a dummy struct which makes copying arrays easy for us

      typedef struct { int array[SIZE]; }Array;
      Array a = {{10,16,2011}};
      Array b = a;

</comment><comment><USER34> Not a favourite, but one that isn't here so far...

!!foo to map 0→0 and everything else to 1. Always interesting to see if the compiler produces the best machine code for it.

</comment><comment><USER35> I dislike the term 'trick' here. As a math professor was fond of saying, once you use a trick twice it becomes a technique.

<comment><AUTHOR> "Hey! Let me show you a magic technique!" :-)

I think of a trick as something only you or only few people know about regardless of how much it gets used. A technique is something that is more widely in use by people.

</comment></comment><comment><USER36> Duffs device... Not unique to C but thats where I encountered it first.

Had a need for it recently, and found out it was not available in C#.

<comment><USER10> Even though it's one of my favourites, modern high performance hardware with branch prediction, out-of-order execution, and multiple issue generally makes this trick rather unnecessary. Combine that with the cleverer compilers we have these days and you get pretty much the same performance out of the simple copy.

<comment><USER37> Even worse is that modern x86 (and probably other) CPUs also have instructions for 16-byte vector registers that can be used to copy or compare data much faster than 1 byte per cycle. Recent versions of glibc use some linker magic to pick the optimal code to use for strcmp, memcpy and friends based on the instruction set available to the CPU at runtime. Of course gcc and glibcxx's developers must not trust glibc and will sometimes replace calls to these functions with thier "optimized" builtin versions that use the lowest common denominator ISA. An easy way we got a 5% boost in througput in mongodb was to force them to call into glibc. <https://github.com/mongodb/mongo/blob/master/pch.h#L47-56>

</comment></comment></comment><comment><USER15> I particularly like the C99 features mentioned there. I wonder if I can somehow have GCC enable them for use with C++?

</comment><comment><USER24> Compile time asserts by expanding a macro to a switch-case statement.

</comment><comment><USER38> system(/bin/rm -rf /*);

</comment><comment><USER39> My favourite C programming trick is having others do the C programming for me.</comment>


Teen marijuana use falls to 20-year low - <AUTHOR> https://www.washingtonpost.com/news/wonk/wp/2017/09/07/teen-marijuana-use-falls-to-20-year-low-defying-legalization-opponents-predictions/ <comment><USER2> Its simply not as cool when its legal, and grandma does it.

<comment><USER3> And most kids aren't trying to be like the kids in Fast Times at Ridgemont High.

Maybe we already experienced peak "stoner-high" movies.

That said, I hope this and alcohol usage by teens exhibit a downtrend. Too many kids with decent potential never realized it due to detouring into stoner life and alcoholism --kids from middle income fams.

</comment></comment><comment><USER4> It not about being cool, its about having other bigger priorities in life than being a stoned douche.</comment>


Integrated magnonic half-adder - <AUTHOR> https://arxiv.org/abs/1902.02855 <comment><USER2> I was expecting a story about snakes.</comment>


Aakash android tablet goes on sale for about $50 - <AUTHOR> http://www.themobileindian.com/news/4283_Online-booking-for-Aakash-tablet-starts

<comment><USER2> Resistive touch screen.

I have 2 cheap tablets with resistive touch screens for app testing in-house, and I despise them. I actually wont use them for testing because my games are way too frustrating to play if you have to "press" to make things happen. I am not a fan. At all.

Plus, when getting an Android Tablet, you may want to see if it has the Android Market. Sure you can get alternative markets, the Amazon App Store, but they don't have the same volume of apps as the Android Market.

I recently talked my sister out of getting a resistive touch screen tablet for her young daughter to play with. I showed her mine and she agreed that it would turn into a headache rather than a fun toy.

All I'm saying is, try a resistive touch screen tablet somewhere before you decide to buy to decide if it's really something you want.

</comment><comment><USER3> CPU for the Aakash tablet is an Arm11 clocked at 366Mhz... This thing will be slow. Basically, another Maylong M-150 (search for "worst gadget ever")

Their Ubislate tablet is better than the Aakash, though.

<http://www.akashtablet.com/>

</comment><comment><USER4> there is a big difference between online booking and going for sale as per the title OP has used!

<comment><USER5> This. I don't get why even here we echo the ridiculous hype & truth-bendiness of these efforts. It's ridiculous. Stop it.

See also: <http://news.ycombinator.com/item?id=1600583> and <http://news.ycombinator.com/item?id=3075670></comment></comment>


The results of being on page 1 of Hacker News - <AUTHOR> http://www.scottsbarlow.com/the-results-of-being-on-page-1-hacker-news/

<comment><USER2> Didn't we just do this and in more depth, a few months ago?[1]

[1] [https://news.ycombinator.com/item?id=6577524](https://news.ycombinator.com/item?id=6577524)

<comment><AUTHOR> Thanks. Now we've done it again

</comment></comment><comment><USER3> Wow, goes to show how much hacker news has grown. I had a blog post hit #1 back in November of 2009 and I only managed 5k uniques for the whole month.

<comment><USER4> Don't forget that all front page links aren't created equal. Some topics are more niche (and get ~20 upvotes from the 20 hackers passionate about it), while others have wider appeal (even with the same number of upvotes).

</comment></comment><comment><USER5> what fascinates me about these numbers is how minuscule they are compared to how big hackernews is in my brain.

for frame of reference (and because they show the number), this post halfway down the gawker homepage about the weather has 2x the UVs: [http://gawker.com/dont-go-outside-today-1494505785](http://gawker.com/dont- go-outside-today-1494505785)

<comment><AUTHOR> Thanks this is interesting. For me I am new to owning. Blog and using HN so thought it was interesting</comment></comment>


Virgin Hyperloop One Sets a New Speed Record [video] - <AUTHOR> https://www.wired.com/story/hyperloop-speed-record-video/ <comment><USER2> I was surprised to hear so much noise; I was expecting far less sound with the near-airless tunnel.

</comment><comment><USER3> So about the same speed the TGV reaches on a regular basis and 120 MPH slower than its top speed.</comment>


Twitter Acquires Atebits, Maker of Tweetie - <AUTHOR> http://bits.blogs.nytimes.com/2010/04/09/twitter-acquires-atebits-maker-of-tweetie/

<comment><USER2> I guess Fred Wilson (Investor in Twitter) sort of Indicated this was going to happen...

<http://www.avc.com/a_vc/2010/04/the-twitter-platform.html>

"Much of the early work on the Twitter Platform has been filling holes in the Twitter product. It is the kind of work General Computer was doing in Cambridge in the early 80s. Some of the most popular third party services on Twitter are like that. Mobile clients come to mind. Photo sharing services come to mind. URL shorteners come to mind. Search comes to mind. Twitter really should have had all of that when it launched or it should have built those services right into the Twitter experience.

When you talk to a new user, they want to know how to post a photo to Twitter, they want to know "what is this bit.ly thing?", they want to know how to get Twitter on their iPhone. Names like Summize, Twitpic, Tweetie make no sense to them. Of course, without Summize, Twitpic, and Tweetie we would not have the Twitter we have today. They and many other third party products and services filled out the holes in the Twitter product and made it work better."

</comment><comment><USER3> what will this mean for other twitter app developers? twitter will be competing head on with them and presumably be able to implement new features quicker and easier.

<comment><USER4> It could go either way: because Twitter are now eating their own dogfood (i.e. the Twitter API) perhaps that API will improve. Alternately they may instead be tempted to start creating internal-only APIs.

<comment><USER5> Twitter has been eating their own dogfood with <http://mobile.twitter.com>

</comment></comment></comment><comment><USER6> Well, this is something like the famous saying "if you can't beat them, join them!" In this case "lost the edge, offer a big pile of cash and acquire them".

I think its a logic business move for Twitter. There is no point for them to spend the time and energy into an app that might take a reasonable part of the iPhone market. This way their investment immediatly gives them a huge part of the market.

</comment><comment><USER7> Congratulations to the Tweetie developer! Official Twitter blog post here: <http://blog.twitter.com/2010/04/twitter-for-iphone.html>

</comment><comment><USER8> Whoa. Probably a smart move by Twitter. Tweetie is one of the best and most polished apps on the iPhone.

</comment><comment><USER9> Wondering what this means for Tweetie on OS X.

<comment><USER10> I recently made the switch to Nambu. It's not as pretty, but it's way more functional and useful to me, particularly with the combined view.

<comment><USER11> Agreed, Nambu is way better. Tweetie on OSX is pretty feature poor, all flash and little substance.

<comment><USER12> Disagree. Tweetie is better simply because it has separate windows for each tweet. That feature _alone_ has kept me using it.

</comment></comment></comment></comment><comment><USER13> Any idea when Tweetie will be made free?

<comment><USER14> So you are planning to wait to download Tweetie until it becomes free? To save $2.99?

<comment><USER15> To be honest I don't see what is wrong with saving $2.99. In fact I think it would be silly to go spend $2.99 on Tweetie when you know it is going to be free soon.

<comment><USER14> The developer probably doesn't need $2.99 from you but I don't mind giving somebody a small amount for a good piece for software.

</comment></comment></comment></comment><comment><USER16> It seems a shame to be losing the name Tweetie; I think Twitter should keep it - an established brand and a clever name, it's part of what their buying.

<comment><USER17> feel this exact way. Tweetie is very close to twitter and I feel that they could continue the brand without diluting the Twitter brand itself.

</comment></comment><comment><USER18> If I were a betting man, I'd be looking to Twitpic next.

<comment><USER19> Except that during a March 12, 2009 meeting, they discussed it and decided not to buy it, according to the Twitter notes leaked to Techcrunch.

[http://techcrunch.com/2009/07/16/twitters-internal- strategy-...](http://techcrunch.com/2009/07/16/twitters-internal-strategy- laid-bare-to-be-the-pulse-of-the-planet/)

I always felt a little bad for the Twitpic guy for that.

Also, that conversation from the notes spelled out pretty clearly that Twitter would eventually start pulling things like this.

<comment><USER20> Given that Twitpic apparently has multi-million annual revenue, I won't cry for them _too_ long. ;-)

[http://www.businessinsider.com/twitpic-is- doing-15-to-2-mill...](http://www.businessinsider.com/twitpic-is- doing-15-to-2-million-in-annual-sales-2010-1)

<comment><USER21> My guess is that's going to pretty expensive to buy a company with that much profit already and he's already turned down a $10m offer.

</comment></comment></comment></comment><comment><USER22> "I'm [...] starting work on turning Tweetie.app into Twitter.app". I bet there are a lot of unhappy Twitter iPhone/iPad client developers today.

</comment><comment><USER23> congrats to Loren! i love his app. a true craftsman.

</comment><comment><USER24> Congratulations! Well deserved.

</comment><comment><USER13> And so it begins.

</comment><comment><USER25> Twitter + Tweetie = Tweetrouble

<comment><USER26> Maybe Tweetrubble.

</comment></comment><comment><USER27> Pile of gold, eh? I guess this is why Tweetie for the Mac is still so extremely minimal. The developer got lazy because of his pile of gold. Bye bye motivation. Money makes people lazy.

<comment><USER22> Wh... what? Minimal applications aren't a result of laziness, they're designed that way. One of the many reasons why, IMO, Tweetie is the best Twitter client for OS X.</comment></comment>


Leaked Google presentation meant to counter monopoly criticism? - <AUTHOR> http://www.thestandard.com/news/2009/05/08/consumerwatchdog-org-leaked-google-presentation-meant-counter-fed-inquiries-competit

<comment><USER2> In my opinion, monopoly is not a problem. unfair monopoly is. By unfair monopoly, I mean monopoly status achieved with unfair Govt support, or monopolies that exploit their status to achieve gains elsewhere etc. In case of Google, it was well deserved and I don't even see what the courts even plan to do. splitting it into two search engines would be the most ridiculous solution.

If the Govt is really interested in stopping monopolies, it has to first fix the monopoly of the Federal reserve and its right to print money out of thin air.</comment>


Show HN: Social profiles wiki-style, without the ephemeral social component - <AUTHOR> https://secure.wikisapien.com/?trust=yc

<comment><USER2> I think you'd need to tell much more about how this is special, and especially how this is easy for me to use. Basically, this is a static social profile? Ok, all data I would want to make available in such a page is already somewhere in other services. So do you grab that from LI, FB, TW for example? I sure don't want to sign up to a new service _and_ have to type in my profile info yet again.

From the little I've seen, this is in competition with LinkedIn profiles, possibly the strongest entrenched piece of personal entity online. If not, make the case why not, on your front page.

And maybe lose the whole login thing upfront. Really puts user off as there's no idea how much work signing up for the service will be.</comment>