Final Steps - <AUTHOR> https://blog.ethereum.org/2015/07/27/final-steps/ <comment><USER2> Just to chime in with the obligatory: sounds-interesting-but-for-the-love-of- turing-it's-infuriatingly-hard-to-find-a-basic-description-of-what-it- actually-is.

<comment><USER3> Ditto, after reading several of the about pages, I'm still not sure what Ether is, or how it's used, or who the target audience is.

Something in there about a decentralized platform for running apps, but I don't want to guess too deeply about what this means.

Is it a cloud hosting platform that runs on Ether? Is the platform going to be used primarily for mining Ether? I'm not even sure, if anyone has a short description that will explain what this is, I'd love to read it!

<comment><USER4> Ether is a "computational currency." You earn it by running computations on your computer. You spend it by purchasing processing power on other people's computers. The computation is software defined, so that customized "distributed apps" are possible.

This is my outsiders understanding. I think there are potentially a lot of things that could be gotten wrong here - from the specific implementation and security measures to the economic plan. But it's one of several such experiments with using the blockchain, so I'm looking forward to see what they can do - that said I have no expectations for financial gain.

<comment><USER5> Some important properties of ethereum:

1\. A program written in ethereum can execute code at a predetermined point in the future, and there is as close to 100% certainty as possible that the code will execute as written (i.e. as long as a single ethereum user remains in the world at that date everybody's code is guaranteed to run exactly as written, even if it involves moving money between accounts.)

2\. All computer programs are "open source" not just before a program is launched but also WHILE THE PROGRAM IS RUNNING- Nobody can run any code without having full transparency.

3\. Users accounts are provably always in a state of complete anonymity (unless of course they do something to purposely reveal their identity) and can use all programs on the platform in this fully anonymous state.

4\. Program authors are forced to explicitly document ahead of time all situations in which their program code might be modified in the future, making it much harder to have the "screw your user after they've committed to your platform" business model that's so popular among startups these days.

Those are just some of the properties of ethereum that come to mind.

<comment><USER6> >4\. Program authors are forced to explicitly document ahead of time all situations in which their program code might be modified in the future

Can you point me to a resource that explains this in more detail? I think I've gotten the gist of how Ethereum works, and have gone through a tutorial of Solidity, but I'm unclear how versioning will work in Ethereum (even though I do have some guesses for how it could be implemented).

How would I deploy a new version of my contract? Would I have to implement a mechanism for basically hot loading new code?

<comment><USER7> If you want your contract to be updateable, you can have the contract store an address of a contract which is the part you might want to change. Then, to update the contract, you upload the new version of the contract ( or contract component) , and make the address that the first contract stores point to the new one.

Uh...

Users interact directly with contract A.

Contract A stores a address which currently points to contract B, and uses whatever contract it currently points to to accomplish whatever it needs to do for users.

To update the part of Contract A, upload an updated contract C, and send A a message to tell it to change the address it stores to point to contract C instead.

Contract A only changes where the address points if whatever conditions it was designed to use for that are met.

And, of course, you don't have to use this "point to another contract" thing.

That's just if you need part of the contract to be updateable under some conditions, which you might not need.

</comment></comment></comment></comment></comment></comment><comment><USER8> Blockchain tech is finally getting interesting.

Of the part of the population that is reasonable well informed about the workings of bitcoin, there is a huge sub population that, for one reason or another, regards it as less than a full viable implementation to accomplish the goals set forth in the whitepaper. I am among these.

Although the bitcoin whitepaper represents a compelling call to action and a mathematical head opener, the state of bitcoin today makes it clear that, like many first tries, this one didn't succeed.

However, announcements like this one provide a very powerful reminder that, taken generally, blockchain technology, as a movement, may yet have the evolutionary gravity that we imagined.

<comment><USER9> How do you say Bitcoin didn't succeed?

The currency currently has a market cap of about $4,300,000,000 USD, processes transactions equivalent to $300,000,000 USD daily and can be used globally by anyone.

It's been running completely decentralized for 6 years without compromise.

It has probably succeeded far beyond most expectations for it.

<comment><USER10> If only we could harness the computational power wasted on Bitcoin mining as heat, for useful distributed computing.

<comment><USER11> I don't understand this recurrent point: computer power is "wasted" almost everywhere. At least Bitcoin use this power to build a decentralized currency.

<comment><USER12> > computer power is "wasted" almost everywhere. At least Bitcoin use this > power to build a decentralized currency.

Pinning a GPU or ASIC at 100% undeniably draws more power than an everyday user idling around Facebook on their Macbook Air (~21W MAXED, so likely 7W)

Whether it's _worth_ it is the question.

A back-of-the-envelope calculation gives me _$12Mn USD per day_ as the approximate global cost of electricity given the current global hashrate of 375Mn GH/s, for 0.05¢/kWh, assuming everyone is using reasonably modern, efficient (?) ASICs like a Spondoolies SP35 Yukon at 5.5TH/s for 3850W.

If that's for a $300Mn USD daily market, that's not particularly efficient. Nor particularly inefficient either, admittedly. Democratic, for sure ;)

EDIT: initially forgot to include some time units, thanks jsprogrammer!

<comment><USER13> > A back-of-the-envelope calculation gives me $12Mn USD per day

3600.00 BTC or $1m is paid as subsidy per day.

Are you saying that people are spending 12x that on power?

I dont think so.

<comment><USER12> Do your own calculation and see what you _find_ , instead of _think_. This is HN after all. :)

You have all the relevant numbers in my post after all: maybe I made a mistake? That certainly possible :P, since you seem to be right about the rewards paid per day.

Or maybe people willingly factor in power costs as a price of speculating on a volatile, trending currency? Or maybe most power costs are actually carried in low-cost areas rather than North America and Europe, so my $0.05/kWh is an overestimate?

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> So, it seems to be "computational currency". Is it too much to ask that something that'd like to be a currency manages to have proper SSL certs?

(Both Chrome and FF reject the issuer certificate)

<comment><USER15> Looks OK from here, Archlinux+Chrome.

Either you need to update your OS, or there's a MITM in your connection (can't rule that out, can you? That's what SSL has been designed for.)

</comment></comment><comment><USER16> Hey, just a heads up. On your landing page the text in your Hero didn't render properly. I'm using Firefox version 39.0 on Windows 7

</comment><comment><USER17> Why must these Bitcoin alternatives be so hard to install? Why do I have to manually generate my own Genesis Block? Even for testing.

<comment><USER5> The whole point of ethereum is to keep trust in a third party to an absolute minimum. Wait a month or two and much easier options will appear (created by startups happy to act as the trusted third party)

</comment></comment><comment><USER18> How does the company behind it make money? Do they have 20% of ether supply or something?

<comment><USER5> They earned some money from people in a presale, they hold some modest ether, and everyone at the company can expect lucrative consulting contracts.

</comment></comment><comment><USER19> Good luck guys! I'm incredibly excited. This feels like a modern day Apollo launch.

<comment><USER20> I'm sorry, but no.

<comment><USER21> I think Ethereum (or something like it) will have a greater effect on many more lives than the Apollo missions did. If successful, it will reshape society by giving every individual reduced economic transaction costs that once required the economies of scale of a megacorporation to achieve.

Take the humble grocery store. The grocery store is a byproduct of economies of scale. Producers sell to grocery stores because it's easier to sell to them in bulk than to find each individual end customer to sell to. Customers buy from grocery stores because it's easier to get everything they want in one store than trying to find each producer to buy from.

Ethereum makes it trivial to connect producers and consumers. It could make the grocery store obsolete. Using an Instacart-style interface, customers could shop from every producer on the planet and have their purchases appear on their doorstep. No intermediary is necessary for this: consumers will pay producers directly, and pay the delivery people and storage centers along the paths from their goods to their homes. Software will do this for them.

Competing in this market is as easy as putting your goods up for sale and building up your reputation—not with a brand marketing campaign, but by selling your goods and services for lower prices until enough people rate them highly enough for you to demand higher prices. More competition and fewer middlemen will lead to lower prices and better products. Trade will be so easy that more trade will happen, and since every trade makes both sides more wealthy, mankind will be more wealthy.

This is why I'm excited about Ethereum. It's easy to dismiss if you don't understand what can be built with it. I encourage you to learn more about what it is and imagine new things that can be built with it.

<comment><USER22> Anyone can order stuff from Amazon or Alibaba or wherever and have it delivered, and build reputation, and so on - how does Ethereum improve on that?

<comment><USER21> To clarify, Ethereum isn't a marketplace or a reputation system. It's just a good platform for building those things.

Ordering from Amazon or Alibaba means paying them for the privilege. Systems that connect producers directly to consumers will have lower costs because there's no middleman that needs to skim profits. If such systems become popular, it will be a transfer of wealth from the Amazons of the world to everyone else. I find that desirable.

In general, Ethereum gives us powerful tools to coordinate human interactions. That means there will be more human interactions, and you'll be able to interact with people you don't have much personal history with. You will buy your USB drives directly from the factory in Shenzhen with a good reputation score and low prices. You'll get your loan directly from the person who wants to earn returns on their savings.

<comment><USER22> >>Systems that connect producers directly to consumers will have lower costs because there's no middleman that needs to skim profits.

Will it? Amazon and the likes operate on notoriously slim margins whilst buying at wholesale prices, and getting shipments in bulk. Whereas me buying 1 widget from Shenzhen, that will be retail price, plus shipment for 1 single item overseas, that will cost way more than Amazon is paying per bulk-shiped item. I don't see how all that could add up being cheaper than buying it at Amazon or Walmart or whatever.

<comment><USER21> Wholesale prices exist because it's hard to find customers. Selling in bulk to a single customer is a good deal. However, when it's effortless to connect producers with customers, everyone will get wholesale prices.

You won't pay to ship one single item. The entire batch from the factory that's heading for your country will go out together on one boat with lots of other stuff. Instead of going to an Amazon warehouse when it gets here, it'll just go to you, along with all the other goods from the port headed to your area. Decentralizing shipping will make it more efficient, too.

Another option is that a manufacturer who expects overseas customers can ship the goods to convenient locations for their customers to get faster shipping times. Amazon uses part of their markup to pay for that today. Customers will pay for it directly in the future. Customers will pay for _everything_ directly.

Anyone with a warehouse will be able to make money by participating in the decentralized retail system, but today, it's impossible for those people to compete with Amazon and Walmart. Competition will drive down profit margins.

</comment></comment></comment></comment></comment></comment></comment><comment><USER23> The Genesis block could very well mark a turning point in human history. The beginning of the complete decentralization of the global human society.

The global insurance industry replaced with autonomous smart contracts able to provide 10x value, at 10x cheaper cost than any current provider. Escrow services instantly replaced in the same fashion. Global marketplaces more nimble, efficient and cheaper than Uber, Airbnb, eBay and KickStarter (to the point where they will be forced to decentralize themselves to remain competitive). Distributed, autonomous hosting, DNS and CDN services that vastly outperform giants like AWS, ICANN and Cloudflare.

And that's just the low hanging fruit.

It will be many years before it reaches critical mass and invisibly seeps into mainstream ubiquity. But just as Bitcoin and the Internet cannot be shutdown, the Ethereum Genesis block will be an irreversible Singularity.</comment>


The Lost Art of Reading Aloud - <AUTHOR> http://www.nytimes.com/2009/05/16/opinion/16sat4.html?em <comment><USER2> I often read essays aloud as one of the filters before publishing them. It helps me find awkward sentences. I discovered this trick when practicing talks, but now I do it even for essays that aren't talks.

<comment><USER3> In Roy Blount Jr.'s _Alphabet Juice_ (under "mnemonic"), he mentions that the ancient Greeks and Romans generally read aloud, even to themselves. (We know this because Julius Ceaser _didn't_ , and his biographers considered his reading silently, and thus more quickly, to be novel. )

<comment><USER2> I'd heard that the first known silent reader was Augustine, though apparently it was his patron, Ambrose.

[http://muse.jhu.edu/login?uri=/journals/classical_world/v100...](http://muse.jhu.edu/login?uri=/journals/classical_world/v100/100.1benediktson.html)

</comment></comment></comment><comment><USER4> Reading aloud is another art form in itself, just as writing is.

Why are people so cynical about audio books? I think they contain two art forms (spoken word reading and literature writing) and can be far more satisfying than the dead tree version alone.

Yes there are some audio books that are read very badly, but they are fortunately in the minority.

<comment><USER5> I agree. Audiobooks are often recorded by fine actors and speakers. Listening to them improves one's sense of the rhythm of language, emotional nuance, pronunciation of new words, etc. They make it more real.

One's own diction and language is then improved during subsequent conversations.

There's a masochistic streak amongst educationalists. Something like: if you aren't working hard you can't be learning. Hence reading is better than audiobooks; novels are always to be preferred to movies.

<comment><USER6> I think you hit close about many educators practices, however I think the problem is they assume concentration with hard work and lack of concentration with easy work. While this can generally be true, it doesn't mean you are learning _just_ because something's hard or that you aren't learning _just_ because something's easy.

If you have a problem with reading books for whatever reason, I believe listening to an audiobook will have at least the same effect on an educational level. It obviously won't help with your reading skills, but it might help you with listening skills (which incidentally a _lot_ of people seem to frequently lack). However, listening to an audiobook won't mean jack if you can't concentrate on it, just like with reading a book.

I'd say, just like some people used to have reading rooms, why not have a listening room for audiobooks?

</comment></comment></comment><comment><USER7> I read aloud to my daughters and enjoy every minute of it. I'm sure it helps my writing/speaking as does talking to myself (tech subjects) when alone in the car.

I highly recommend it (the kids part not the talking to yourself, that can get a little weird)

<comment><USER8> Seconded - it's great fun.

I find that I need to be absorbing the text one or two sentences ahead of the words I am speaking, so as to plan the emphasis and timing.

Once I am familiar with the text, though, I can have a completely unrelated train of thought going whilst reading.

</comment></comment><comment><USER9> Although I agree with the main point of this opinion piece ("Reading Aloud" is a Good Thing), the author comes across as a bit pretentious when he tries to capture the magical "je ne sais quoi" about reading aloud, and how young people (students) can't seem to do it right.

(1) "If the work is their own, they are usually trying to read the intention of the writer."

ummm, if it is their own work, then they _are_ the writer. The words express their intention, so reading "the words" and reading "the intention of the writer" are the same thing.

(2) "It's as though they're reading what the words represent rather than the words themselves."

ummm, actually, when I read a story to my niece or nephew I don't just "read the words" (if that is all we wanted, we could have a text-to-speech program do it for us). Instead, I often read what the words represent.

"Who goes there?!" shouted the witch, angrily.

"No, no, you're doing it all wrong", whispered the grey-haired professor, almost inaudibly as he shook his head. "No young man", his deep voice admonished loudly, "Just read the words! Read the damn words."

</comment><comment><USER10> _"I read aloud to my writing students, and when students read aloud to me I notice something odd. They are smart and literate, and most of them had parents who read to them as children. But when students read aloud at first, I notice that they are trying to read the meaning of the words."_

I suspect this had to do with the students' expectation of what their teacher wants. I bet if the same student was given a copy of "Room on the Broom" and a willing toddler, they would read just fine.

I wonder whether some rephrasing from the teacher (such as "would you perform this text" instead of "read") would make a difference.

But there is a big difference between the music example and reading. Aside from the level of required skill, playing a piano sonata takes the same time as listening to the CD; however reading aloud a book takes significantly longer than reading. Which is why it makes sense for short forms, but not for whole novels - unless you can't read at all (eg. while driving).

</comment><comment><USER11> If you haven't listened to quality reading in a while, check out Escape Pod's reading of Asimov's short story, Nightfall:

<http://escapepod.org/2007/04/05/ep100-nightfall/>

</comment><comment><USER12> I read that aloud. It was awesome.</comment>


This 2009 article about Google's UK tax avoidance cannot be found on Google. - <AUTHOR> http://m.guardian.co.uk/technology/2009/apr/20/google-uk-tax-avoidance?cat=technology&type=article

<comment><USER2> Flagged for false title. Googling for "google uk tax avoidance" had this article half-way down the first page.

</comment><comment><USER3> I found through Google right away by searching for the title--first hit.

<comment><AUTHOR> Thanks for checking. I did exactly the same thing and couldn't see it on the first page. Then I tried searching for quotes in the article and they only appeared on what looked like scraped sites.

</comment></comment><comment><USER4> We are entering the era of corporate fascism.</comment>


Self-driving vehicles could struggle to eliminate most crashes - <AUTHOR> https://www.iihs.org/news/detail/self-driving-vehicles-could-struggle-to-eliminate-most-crashes <comment><USER2> "Our analysis shows that it will be crucial for designers to prioritize safety over rider preferences if autonomous vehicles are to live up to their promise to be safer than human drivers," Mueller says.

uh-oh. So it begins.</comment>


The cranky user: Curbing JavaScript dependency (2001) - <AUTHOR> http://www.ibm.com/developerworks/web/library/us-cranky2/index.html

<comment><AUTHOR> I realised while reading this article how little my opinion of javascript has changed since ~2001 (when this article was written) despite the fantastic leaps and bounds JS has made in recent years. Even now, when you can compile Clojure to JS, I'll still only ever use it for enhancement on a public facing site. There are just so few benefits in my opinion.

I browse with JS off these days, enabled only for a very few select sites, and it's incredible how little of the web actually works.

</comment><comment><USER2> Please add the year of publication (2001) in parens to the end of the title.

<comment><AUTHOR> done.</comment></comment>


Mathmatical Reading List - <AUTHOR> http://www.maths.cam.ac.uk/undergrad/admissions/readinglist.pdf

<comment><USER2> Here's another good one:

<http://olympiads.win.tue.nl/imo/books.html>

After edit: It would be a kindness for a curator here to correct the spelling error in the submission title, for ease of searching HN.</comment>


Google Claims a Quantum Breakthrough That Could Change Computing - <AUTHOR> https://www.nytimes.com/2019/10/23/technology/quantum-computing-google.html <comment><USER2> Previous discussion: [https://news.ycombinator.com/item?id=21043659](https://news.ycombinator.com/item?id=21043659)

Is there anything new in this article, or is it just a repeat of what we already learned last month?

</comment><comment><USER3> It would be great if they could start to publish benchmark results for Shor's algorithm if the conputer is able to run it, even if the results are not exact at this point.

<comment><USER4> They absolutely can't publish benchmark results for Shor; their architecture can't run it at all. This is Google and IBM's marketing departments duking it out for ... reasons. IBM has physics on their side.

<comment><USER5> >IBM has physics on their side.

What do you mean by this?

</comment></comment></comment><comment><USER6> Damn really hate those "subscribe to read", maybe there's a link to this article without the need to subscribe?

<comment><USER7> You can read NYT articles in a private browser window.

<comment><USER4> Not any more.

<comment><USER8> Actually, you can again. At least in Safari with Wipr installed. They're doing an overlay at the bottom of the window instead of just blocking the whole thing.

<comment><USER6> Thanks, will try that

</comment></comment></comment></comment></comment><comment><USER9> Amazing feat ! Kudos to all involved.</comment>


Exclusive video: Steve Ballmer's intense, tearful goodbye to Microsoft - <AUTHOR> http://www.theverge.com/2013/9/27/4779036/exclusive-video-steve-ballmers-intense-tearful-goodbye-to-microsoft

<comment><USER2> I like this guy.

P.S. I wanted to write a more elaborate comment, but it all boils down to the sentence above.

</comment><comment><USER3> Despite focusing too much on profits and not enough on products/experiences, during the early 2000s, Ballmer was one of the good guys. His passion and heart is so old school and very much unique to him compared to the rest of the industry.

He'll be a tough one to replace.

</comment><comment><USER4> I wonder why exactly he's leaving.</comment>


A Kickstarter Platform for Training AI Models? - <AUTHOR> https://medium.com/@btahir/kicktrain-a-kickstarter-for-training-ai-models-1c1e10807226 <comment><USER2> I like the idea but data collection seems like a big chunk of the costs. And if you going to go that far why not create an api to host it and charge for usage and pay back initial "investors".

<comment><AUTHOR> API to host the data? Data storage isn't a huge cost really (GPT-2 was trained on only 40 gigs of data which they got from just crawling reddit). It's the compute to train the model that's the costly part.</comment></comment>


GitHub Recommended Repos Contest - <AUTHOR> http://contest.github.com

<comment><USER2> "GitHub must be allowed to use the code commercially without restriction, regardless of the license choosen."

I'm not too crazy about this. Contests can be good and bad at the same time. "Here guys, solve this very hard problem for us for free and we'll take it off your hands and we'll completely ignore your licensing wishes and use it without any restrictions whatsoever."

I envision a lot of "Well if you don't want to participate, DON'T!", but the point of the matter is, I see GitHub as taking advantage of a warm and supportive open-source community. The license of the submitted code should apply to everyone, including GitHub!

<comment><USER3> Free? If you win, you get a lifetime GitHub account and a tasty bottle of bourbon.

We're trading you the prizes for a commercial license.

<comment><USER4> i'd recommend you try rittenhouse's 23-year-old and black maple hill's 21-year-old

<comment><USER3> I'm a big Black Maple Hill fan. Will have to try Rittenhouse - thanks!

</comment></comment></comment></comment><comment><USER5> Part of the callenge of the netflix contest was the dataset. At 101 million rows of data you couldn't toss your simple agorithm at the problem. But with githubs data at only 440,237... I am tempted to toss it into my netflix code just to see how fast the recommendations are generated!

<comment><USER5> Some other info on the data

      user id 1-56554 (i.e. 16bits) <- yah
      repo_id 1-123344 (i.e. 17bits)

</comment></comment><comment><USER6> It'd be nice if there was a leaderboard (as Netflix had) so we could see other's progress (to see if our implementations stand a chance, or if we're wasting time).

Edit: Scratch that. It was hiding up top (<http://contest.github.com/leaderboard>)

<comment><USER7> I see that you didn't read the whole page carefully: <http://contest.github.com/leaderboard>

</comment></comment><comment><USER8> I wonder if one can brute-force the results.txt file. To the github folks: do like netflix and publish the comparison with one data set (validation set) and, after the contest is over, publish the comparisons with a test set that is only used once. That way nobody can brute-force anything.

<comment><USER9> figuring out the answers is actually not that hard - we're using data that is publicly available through our API. in the rules we state that your entry will be disqualified if you do this sort of thing, though.

</comment></comment><comment><USER8> Github folks: the repos numbered

59337 95472 80221 73599 24616

have no descriptions in the repos.txt files but have had their languages computed. Is it because they are private? Anyway, you maybe should remove that.</comment>


Websites of SOPA-supporting congressmen redirect to Protest SOPA - <AUTHOR> http://onepagerapp.com/tm72

<comment><USER2> I don't think this is a good idea it's almost certainly passing off [1] which is illegal.

Not to mention confusing.

[1] <http://en.m.wikipedia.org/wiki/Passing_off>

<comment><USER3> As a political protest, this would likely be protected speech. Free speech is after all supposed to be the rule, not the exception. I am surprised though that a professional politician and his staff could be so out of touch with the web that they never registered their names as domain names.

</comment></comment><comment><USER4> Couldn't this confuse people into thinking that those congresspeople don't support SOPA?

<comment><USER5> This was my first reaction. People visiting the web and seeing all kinds of SOPA/PIPA hate, now will automatically assume these same guys support SOPA.

Better would be to redirect them to a page that says, THIS GUY SUPPORTS SOPA/PIPA.

Best would probably be to not squat on the domains.

</comment></comment><comment><USER6> This is:

(a) unimpressive, because it's obvious that you went and registered a bunch of domains with a version of their name that they don't use (christopher, benjamin, melvin, middle initial, etc), and

(b) a bad idea, because at best it's lulz for geeks in the know, but at worst it's "SOPA opponents have gone too far: they hacked web sites of the U.S. government!"

Lose it.

<comment><AUTHOR> ftr, I didn't do it. But I do think it's smirk-worthy. To each his own.

</comment></comment><comment><USER7> This page has been taken down. edit- at least that is what I am seeing when I try.</comment>


Trends in modern programming language syntax - <AUTHOR> http://rdallasgray.github.io/blog/2013/05/11/mod-lang/ <comment><USER2> > CoffeeScript makes parentheses optional in many cases (as does Ruby)

This is one thing that really annoys me with Coffeescript. I personally find the lack of parentheses makes the code harder to read (since it's sometimes ambiguous where the parentheses should be) but faster to write.

> An important consequence of this is implicit returns: because every > construct must return a value, all functions must return a value, whether > return is called explicitly or not.

Same concern here. When working with someone else's code, it is sometimes unclear if the author intended the last expression to be the return value or it just happened to be the last line of code and it is safe to return something else.

The lack of parentheses and implicit returns also makes it hard to maintain a consistent code style guide as there are too many ways of writing the same thing.

<comment><USER3> I'm really not a fan of these optional syntactic elements -- I don't find that they aid comprehension. It's like optional braces in C; I get the idea -- reduce conceptual overhead, make the intent of the code clear -- but in practice, it's just nasty.

I wonder if this is why I like scheme, or if scheme is why I like simple syntax.

</comment></comment><comment><USER4> Does "return unless x is 5" really do what I read?

return unless x is 5

"reads" like

if( x !== 5 ) return;

but I guess it's more like

return (x !== 5);

<comment><USER5> The way it reads is the way it works, which is why it is a nice syntax. Although,it is actually: if (!(x==5)) return;

</comment></comment><comment><USER6> I wish someone would write a CoffeeScript for C++.

<comment><USER7> C++ is a beast of a language that has semantics which are pretty much too big to keep in your head - I think the best potential for this is some of the new languages targeting some of the same ends (Rust is closer to the capabilities of C++, but Go is more mature and has better tooling).

<comment><USER8> Alas, "Go" was forced to look sorta like C, even though it really acts more like Modula with closures and garbage collection. (ignoring that C & Modula are both just redressed Algol)

Go is more of a C-like counter example of the things the author is talking about, with its authoritarian use of K&R curly brace formatting, and not making statements into expressions.</comment></comment></comment>


Encryption: "Australian law would prevail over the laws of mathematics." - <AUTHOR> https://www.google.co.uk/amp/www.bbc.co.uk/news/amp/40606493 <comment><USER2> Here's the direct link instead of the googlified version, which ironically enough failed to load on my phone:

[http://www.bbc.com/news/technology-40606493](http://www.bbc.com/news/technology-40606493)</comment>


Don't Make The Same Mistakes As Bit.ly and Tr.im (running a URL shortener) - <AUTHOR> http://www.davidnaylor.co.uk/dont-make-the-same-mistakes-as-bit-ly-and-tr-im.html

<comment><USER2> The headline is a little misleading. This seems to be more about making sure you're aware of the problems that occur when you allow users to have vanity URLs.

</comment><comment><USER3> Running a url shortener: please don't make one we do not need any more.</comment>


A plan to turn the atmosphere into an enormous sensor - noir-york https://www.economist.com/science-and-technology/2020/06/11/a-plan-to-turn-the-atmosphere-into-one-enormous-sensor <comment><USER2> From the article:

 _The first 27 months of the programme will be dedicated to understanding the science behind ripples in both the ionosphere and the electrically neutral atmosphere below it, and then building computer simulations of what is going on. These will be tested to see if they can replicate accurately effects seen in the past._

 _Once the team have a better understanding of the basic science, they will proceed to the second stage: field trials. This will involve three tests at three-month intervals in which researchers attempt to locate pertinent events, such as storm cells, mining operations and earthquakes. If that works, the project will then move on to matters of military interest by spying on missile launches, tracking aircraft and even watching underground bunkers being dug. The result, if all goes well, may be the world's first true panopticon._

Hopefully they spend more time on the atmospheric stuff than the military stuff. Exciting news, if the former.

<comment><USER3> Any sufficiently advanced technology will be purposed for military use. This will be purposed for Intelligence and Reconnaissance use if it fills a niche they need filled.

<comment><USER4> Having worked in remote sensing[1] in the distant past, every now and then I still glance at the Wassenaar Agreement[2] to find out what today's fun stuff may be.

[1] interplanetary on my part, but I have no illusions that our funders didn't have further intraplanetary applications in mind. I was young and needed the money.

[2] [https://www.wassenaar.org/app/uploads/2019/12/WA- DOC-19-PUB-...](https://www.wassenaar.org/app/uploads/2019/12/WA- DOC-19-PUB-002-Public-Docs-Vol-II-2019-List-of-DU-Goods-and-Technologies-and- Munitions-List-Dec-19.pdf)

(as far as watching bunkers being dug, I'm pretty sure LIDAR already gives a much cleaner signal)

<comment><USER3> Hey, that's perfectly reasonable. No, the problem we have as a society is we live in this kind of reality which is governed by this thing called physics, and as our understanding of physics progresses, our ability to abuse the shit out of it also progresses. Some things aren't a matter of if, but when.

That PDF is a gold mine by the way.

> as far as watching bunkers being dug, I'm pretty sure LIDAR already gives a > much cleaner signal

The proposed applications are probably nothing more than something to get the ball rolling but can already be done very effectively today. I hesitate to be overly skeptical because an atmospheric panopticon would probably have more applications than they would imagine or dare to propose themselves.

</comment></comment></comment></comment><comment><USER5> The atmosphere is also used as a detection medium for Imaging Atmospheric Cherenkov Telescopes (IACTs) [1]. Very high energy (>tens GeV) photons, electrons or nuclons hit atoms in the atmosphere and produce a cascade of secondary particles, which move faster than the speed of light in the air emitting Cherenkov light [2]. Flashes of this light are lasting for few nanoseconds, so the cameras have nanosecond sampling time and are based on photo multipliers.

There are many such telescopes around the world: MAGIC (2 telescopes), FACT (1), HESS (5), Veritas (4). The biggest assembly of such telescopes is currently under construction - Cherenkov Telescole Array [3] with hundred of telescopes in Paranal, Chile and 20 in La Palma, Canary Islands. One large telescope with a mirror of 23m diameter is already operating [4].

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

[2] [https://en.m.wikipedia.org/wiki/Air_shower_(physics)](https://en.m.wikipedia.org/wiki/Air_shower_\(physics\))

[3] [https://m.youtube.com/watch?v=5gRHFQP_SjU](https://m.youtube.com/watch?v=5gRHFQP_SjU)

[4] [https://www.cta-observatory.org/lst-1_inauguration/](https://www.cta- observatory.org/lst-1_inauguration/)

<comment><USER6> This is fascinating, but:

> which move faster than the speed of light

Citation needed. I was of the understanding that this is impossible, and your first two links provide no evidence to the contrary.

<comment><USER7> > which move faster than the speed of light in the air emitting Cherenkov > light

Key words "in the air". As they can't go faster than C in this medium[0], they are forced to slow down, and emit this lost kinetic energy as radiation - <AUTHOR> understanding.

Something a bit better, from [https://en.wikipedia.org/wiki/Cherenkov_radiation](https://en.wikipedia.org/wiki/Cherenkov_radiation)

Cherenkov radiation is electromagnetic radiation emitted when a charged particle passes through a dielectric medium at a speed greater than the phase velocity of light in that medium. A classic example of Cherenkov radiation is the characteristic blue glow of an underwater nuclear reactor.

[0] I realise this seems contradictory - they can't but for a short time they are - I don't understand that either.

<comment><USER5> Exactly, speed of light in the vacuum ( _c_ ) is the hard limit, only mass- less objects can move that fast (e.g. photons). The refraction index ( _n_ ) tells you how fast light moves in a medium. It is defined as _n=c /v_, where _v_ is the speed of light in the medium. That's why (and also because of internal reflections) the speed of light in the fiber optics is not quite reaching _c_ [0], and with inter-satellite communication Starlink may provide lower latency than the one using landline fiber optics channels. For air refraction index is very close to 1 [1], but not quite, at 10km altitude _n=_ 1.0001, which is 99.99% of _c_. For example a proton with an energy of 1TeV (Tera electron-volt, 1x10^12 eV) is moving 99.999956% speed of light in vacuum [2], and we see protons up to 5x10^19 eV reaching 99.99999999999999999998% of _c_ [3]. Even "low" energy protons (tens of GeV) hitting molecules of air can kick out electrons, which, due to being lighter, can move faster than the initial protons and emit Cherenkov radiation.

[0] [https://www.quora.com/What-is-precisely-the-speed-of- light-i...](https://www.quora.com/What-is-precisely-the-speed-of-light-in- fiber-optics)

[1] [https://www.researchgate.net/profile/Dmytro_Vasylyev/publica...](https://www.researchgate.net/profile/Dmytro_Vasylyev/publication/330553517/figure/fig9/AS:718074235863040@1548213647171/Temperature- pressure-and-refractive-index-as-functions-of-altitude-Dots-represent-the.png)

[2] [https://uspas.fnal.gov/materials/10MIT/Review_of_Relativity....](https://uspas.fnal.gov/materials/10MIT/Review_of_Relativity.pdf)

[3] [https://en.wikipedia.org/wiki/Greisen–Zatsepin–Kuzmin_limit](https://en.wikipedia.org/wiki/Greisen–Zatsepin–Kuzmin_limit)

</comment></comment></comment></comment><comment> ur-whale [http://archive.is/IJD98](http://archive.is/IJD98)</comment>


Ask HN: Your favorite mathematical equation? And Why? - <AUTHOR> <comment><USER2> Generalized Stokes' theorem, because it's so pretty, both in notation, and conception.

[https://en.wikipedia.org/wiki/Stokes'_theorem](https://en.wikipedia.org/wiki/Stokes'_theorem)</comment>


ColorEchoForShell, now writing shell script with colorful output is easier - <AUTHOR> https://github.com/PeterDaveHello/ColorEchoForShell

<comment><AUTHOR> Please give me your valuable advice, thank you all ^_^</comment>


Ars reviews the OnLive microconsole, service - <AUTHOR> http://arstechnica.com/gaming/news/2010/11/onlive-1.ars <comment><USER2> Yet another review leaves out network requirements.

How about testing it with a wimpy 1mbps... and maybe with someone also sharing that for Skype? ...that's my use case for gaming :)

Sucks that no one can talk about that. And that I have to install windows just to try it out</comment>


Ask HN: Are Bootstrap templates useful for AngularJS apps? - <AUTHOR>

Hey all,<p>I was looking to do a straw poll of Angular developers - how many of you find using templates for Twitter Bootstrap useful? Are they something you've used for a client/professional project, or do they fall more into the realm of any of the numerous "website creator" tools often found with most hosting plans? <comment><USER2> I think everyone's case is kind of unique, but my first impression is that they're used for time-constrained / resource-limited / beginner level projects. I'm inheriting a codebase where there were some templates used, and there's an 18,000+ line css file in one template. That's one example that can begin to explain why I don't prefer them. I know if I did it myself, things would be more organized. At the same time, if I have to choose between a nice outsourced UI or a terrible UI developed by a rushed coder who hates design, I will choose the former.

<comment><AUTHOR> That's an excellent consideration that I think comes with any drop-in functionality - ultimately there's nothing we can do to control the quality of the code/stylesheet/HTML/whatever else that we're pulling in. In Rails you can get into a special kind of dependency hell like this if you aren't careful, though my thought is that one of the most significant concerns with bootstrap templates specifically is related to the general size of the template itself (assuming it is correctly implemented, of course). What do you think would be a way to improve the utility of these templates, taking as read that developer time to replicate the functionality is likely at a premium?</comment></comment>


Best analysis of fractional reserve banking ever - <AUTHOR> http://www.youtube.com/user/khanacademy?blend=1&ob=4#p/c/CECDA315A8848B99/23/8SAMey9Gl5I

<comment><USER2> I understand the argument against government insurance of banking and the problems with telling people they can withdraw their money any time. But don't I understand why the phrase "fractional reserve banking" is used to describe the problem.

The term "fractional reserve" refers to what percent of total deposits the bank is required by the government to keep on hand. 0% reserve banking is not less risky than fractional reserve. And 100% reserve banking is clearly just putting paper in a vault so you're renting vault space in such a system.

So maybe people should stop using this term when they complain about banking. Their real problem is with government insurance and demand deposits.

The speaker asserts that this system could not exist without the FDIC but clearly it did exist before the FDIC.

I'm against government insurance too, but these kinds of unsubstantiated statements provide people with reasons to dismiss the sound things being said.</comment>


Where You Went to College Doesn't Matter. This Is Why - <AUTHOR> https://www.weforum.org/agenda/2017/06/where-you-went-to-college-doesnt-matter-this-is-why <comment><USER2> wow, so smart and talented looking in the back of the book for the answers to the lab :) so smart and talented having access to capital, food and shelter when others don't :^)</comment>


EU Clarifies Standard Contractual Clauses Only Legal Until End of January [pdf] - <AUTHOR> http://ec.europa.eu/justice/data-protection/article-29/press-material/press-release/art29_press_material/2015/20151016_wp29_statement_on_schrems_judgement.pdf <comment><AUTHOR> This was aimed at Facebook, but is a joke:

1\. It's aimed at the US while the Uk (EU) and France (EU) do the same thing.

2\. Facebook will just add an opt in checkbox and everyone who wants to share cat videos will opt in.

</comment><comment><AUTHOR> Including Corporate Bindings, I wonder what companies like Google and eBay do with employees in the EU and HR data transfer to the US.</comment>


Newer C++ features can create a lot of system yak shaving - <AUTHOR> https://rachelbythebay.com/w/2018/04/02/cpp/ <comment><USER3> So it's not the modern C++ features that cause the yak-shaving, but wanting to use these features on a RHEL6 instance with a compiler that does not support these modern features.

I'm specifically stating this (obvious observation), because the headline might lead someone to believe that the features are at fault. The features are great and should considerably _reduce_ yak shaving.

Going a step further, we've all been there. I once spent weeks building STLPort and boost, so I could avoid re-writing and extending an existing project against a C++ compiler from 2006, and more importantly, the WinCE 6.0 API (with weird timers and everything - ugh), and use a kind-of portable, recent version of C++, with extended features. I deeply questioned every single professional decision I had made the prior years. This had nothing to do with yak-shaving, but with how much platform-specific code you would end up prior to C++11, and how much _simple_ , every-day functionality you had to write again and again. C++11 and later are a huge leap in this regard IMO, and for everyone stuck with an old compiler: Consider using boost.

<comment><USER4> It's a real click-bait title. Using incompatible versions of anything will sooner than later cause issues. It's not related to C++ or C++ features at all, it's simply that in this case the version of the compiler supporting newer C++ features, wasn't compatible with the rest of the system.

However, ABI incompatibility is a real pain in C++ and one of the main reasons why I don't judge anyone building C libraries instead. While RHEL6 is just one example, you'll run into this issue all the time when developing on Windows. Here, either your C++ compiled libraries match 100% with the compiler used for to compile your application or it will simply not work. In 99.99% of the time you get a symbol issue with std::string you can be certain it's runtime library issue/compiler incompatibility.

<comment><USER5> It isn't clickbait because it is such a common situation. I would say in the majority of cases when I try to use the bleeding edge of any one technology, I end up dealing with a nightmare of version conflicts with the remaining technology that's relevant to the system I'm working on. I think articles like this are worth reading, because they illuminate a specific case of a very widespread condition that we all face as software developers.

<comment><USER6> I agree. Until recently, at work, I was targeting 3 different versions of gcc (Ubuntu 16, 14 & 12 so I think gcc 4.4-5.4). It's not just an issue of what language & library features they support, it's also an issue of which compiler flags to use. Is it --std=c++0x, --std=c++1y, something else?

Toss in there, I also have to compile a subset of libraries for Windows. Even when you use frameworks to isolate yourself from OS nuances, you may still have compatibility issues. Like, using the ACE library. What does the function you pass to ACE_Thread to spawn return? On posix systems, it returns void*. So, if you want to suppress compiler warnings (-Wzero-as-null-pointer- constant), you return nullptr. Oops, now your code breaks on Windows, because ACE_THR_FUNC_RETURN there is a DWORD, and no conversion from nullptr to DWORD. On yet other systems, it returns int. So, how do you have your warning free code on all the systems? Ugh: preprocessor.

<comment><USER7> it is 2018, just use std::thread. ACE belongs to the 90s.

<comment><USER6> I agree, and we're working towards that, but you know: legacy code.

<comment><USER7> Full disclosure, the code base I'm currently working on is in the same situation...

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> I actually thought this would be about yak shaving due to the huge number of ways to achieve everything in modern C++xy.

My internal monologues when writing modern C++ look a lot like this...

So I have to return from this function... it uses a lot of resources, so I don't want to copy it. But then there is RVO... Although is this actually NRVO? What was that rule again? I guess I can rely on move semantics? But only Scott Meyers himself understands those and he promptly exited the C++ community after figuring them out... And anyway, what if I want to change the ownership explicitly? Let's just use a unique_ptr. Oh but actually I mostly want to share it when I have returned, and that means two blocks of memory will be allocated per pointer instead of the optimal "single" allocation with the reference count at the beginning. Although maybe that's only in libc++? oh, and what if there is an error, should it return nullptr in that case?..

<comment><USER9> I realize that you're mostly ranting, but on the off chance that you're serious: check out std::make_shared. It's a helper function that can allocate storage for the object _and_ shared_ptr's control block in one go. It comes with its own caveats (what doesn't in C++?), but it has the answer to your concern about allocations.

<comment><USER10> To add: according to cppreference, all known STL implementations leverage this optimization. This used to be specific to Microsoft's STL implementation, but apparently all the major STL vendors are now on-board with it.

<comment><USER7> make_shared traces its roots back into the original boost implementation.

</comment></comment></comment></comment><comment><USER11> OP could just use devtoolset-7 on RHEL6 ([https://access.redhat.com/documentation/en- us/red_hat_develo...](https://access.redhat.com/documentation/en- us/red_hat_developer_toolset/7/html/7.0_release_notes/dts7.0_release)) and get a modern (supported) compiler that way.

<comment><USER12> Only assuming you have root or a sufficiently cooperative IT department. In situations where this is a problem, both assumptions are often untrue (managed HPC).

<comment><USER6> Been there, done that. Several jobs ago. At a hedge fund, corporate mandated OS at the time was RHEL5. C++11 had been finalized for about 3 years at this point, latest GCC at the time had nearly full support (only glaring gap I remember at the time was regex was "there" but it was a stubbed-out interface, it didn't actually work). We'd even had lecturers in the office of the likes of Scott Meyers & Herb Sutter on C++11, but could we use it? Hell, no. Shit, some of us had even been interviewed by Scott Meyers for his Effective Modern C++ book. Still couldn't officially use C++11, so, given the frustration, we went rogue. It was a pain, but I built the latest stable GCC from scratch and all of the libs we needed against it (boost, unixodbc, mqseries, intel tbb, tibrv). It took a while (I think GCC took like 4 hours to build at the time, even with a parallelized build), but once set up, it was liberating.

<comment><USER13> It sure seems to me that "enterprise" Linux distros not supporting modern languages/compilers (e.g., Python 2.7 in RHEL6) only hurts Linux adoption overall and its reputation.

<comment><USER14> Old is the keyword you are missing there. Linux distributions, even enterprise ones have great C++11 support. However RHEL is designed for those who are thinking "I got this working now lets not break it". There is no reason to want C++11 on RHEL5 - the only valid reason to do anything on that system is if you already have a working server and need to do a bug fix. If you want to write new features you should be targeting the latest RHEL where you do have all of that.

</comment></comment></comment></comment></comment><comment><USER15> Running freshly compiled experimental or very recent software on very old servers that cannot be upgraded piecemeal seems very unusual: if you don't want to destabilize the servers with updates, you shouldn't want to destabilize them with unproven new software either.

It's also strange to be unwilling to fork in source control, if necessary, a maintenance version for legacy servers and a current version for current C++ and current servers.

New software should probably run on more current servers and access the old RHEL 6 servers through stable network services (shared folders, DBMS, etc.) instead of expecting them to run bleeding edge software.

</comment><comment><USER16> HPC has the same problem (ancient bespoke Linux distributions with strange tooling) one way to solve it is spack [https://github.com/spack/spack](https://github.com/spack/spack). The ops person where I work is so much in love with it that he tried to get it to work on Mac OS, 2 days later and several patches it took _only_ 8 hours to compile all nescessary transitive dependencies. In my opinion the only good way to solve this is to ignore the distribution package manager and keep track of all dependencies explicitly. Most build systems for C++ make that relatively easy. To choose the compiler / standard library you can then use [http://modules.sourceforge.net](http://modules.sourceforge.net)

<comment><USER17> The RHEL6 compute node image I used to maintain just used rpms (maybe via SCL). I'm inclined to think the trades-off win against Spack and Guix, assuming you don't have the world telling you to use proprietary compilers and libraries that can't be handled that way.

The mess I'm used to seeing on HPC systems with combinatorial builds, with everything done through a confusion of environment modules, bothers me and typically confuses users, especially when there's a system package that provides the same thing. (At least look at TACC's Lmod instead of the canonical modules implementation.)

</comment></comment><comment><USER18> RHEL 6.0, the version released something like 10 years ago? Yeah, that is going to be painful and maybe the way out isn't rebuilding everything manually but upgrading the system ;-)

I only had to deal with RHEL6.x that had gcc 4.8 installed via packaging, I think Red Hat had a solution for this.

<comment><USER19> > I think Red Hat had a solution for this.

Yes, Red Hat has a solution in the form of the Developer Tool Set, which will give you gcc 7.2.1[0]

[0] [https://access.redhat.com/documentation/en- us/red_hat_develo...](https://access.redhat.com/documentation/en- us/red_hat_developer_toolset/7/html/7.0_release_notes/dts7.0_release)

<comment><USER20> Ditto, just wanted to say the same thing. On RH / CentOS, devtoolset exists exactly for the reason OP is worried about.

</comment></comment></comment><comment><USER21> FWIW, I highly recommend using conda as a package manager for your own pure C++ packages. You can compile everything with the compilers they ship, and the only external dependency from your own system will be glibc.

Yes, it means you're using your own "mini-me environment", but you can share that environment across all of your C++ projects. As long as you build with:

LDFLAGS="-Wl,-rpath,${PREFIX}/lib -L${PREFIX}/lib"

... then everything you compile ends up in the self-contained environment. Furthermore, distributing your build products to another user (or another machine) is as simple as:

tar -czf mystuff.tar.gz ${PREFIX}

Then your friends can take your tarball and unzip it in any directory of their choosing. The whole prefix (environment) is self contained (except glibc, which must be at least as new as the version on your build machine). It just works.

<comment><USER22> > your friends can take your tarball and unzip it in any directory of their > choosing. The whole prefix (environment) is self contained

How does this work if you are using ${PREFIX} with -rpath? I thought one had to use '$ORIGIN' to get a dynamic path that is relative to the executable's location. Unless conda is doing some '$ORIGIN' magic under the covers?

<comment><USER23> If you use conda-build it will do rpath fixups for you. You can also elect to specify that certain dependencies should come from the system. We do this for X11 for the Anaconda Distribution. To use these, in the recipe you list `cdt` (stands for Core Dependency Tree) packages as build dependencies. These packages are repackaged CentOS6 library and devel packages that are never installed on end-users machines, only at build time.

<comment><USER24> Why not build with -rpath $ORIGIN/../lib etc? Wouldn't that make the rpath fixups unnecessary? The whole tree should remain portable.

<comment><USER23> Well, the Anaconda Distribution and conda-forge build many thousands of packages and they use a variety of (often programmable) build systems.

So quite often the build system will be mis-programmed or will simply not care for relocatability _at all_ , hard-coding /usr/lib/libfoo.so as DT_NEEDED, or hard-coding /usr/lib as DT_RPATH and/or DT_RUNPATH.

So conda-build runs a post-build step to make all DSO loading relative. We use patchelf and install_name_tool for that on Linux and macOS respectively.

</comment></comment></comment></comment></comment><comment><USER25> > _The only way out of this is to tear off the bandage and rebuild all of > those with the new compiler and side-load them as well._

This industry is just one big test of how long you can shave yaks (aka pay technical debt) before you quit and move to the forest. It's rewarding... until it's not. :)

</comment><comment><USER26> After reading this I'm left with the feeling that the author is complaining more about "enterprise" linux distros that never ever change (hello, many centos users who are still running distros that require python2.7!) than about changes to the C++ standard. And for what it's worth, I agree that I'm always frustrated by such things, but it's not clear this is something we should blame on attempts to keep C++ modern.

</comment><comment><USER27> Can someone elucidate why one might not want to just update from RHEL 6-- especially on what I gather is a personal machine in the OP--rather than go through this?

<comment><USER28> Because the personal machine might be used to develop for a production machine running RHEL 6, and that cannot be upgraded because reasons(no time, software doesn't support RHEL 7 yet, $precious_driver doesn't support RHEL 7, + a lot of other reasons that makes sense to an OPS person but not a developer).

Binaries created on RHEL 7 does not run on RHEL 6 - even when linking statically appears to work, you run the risk of running into the unforseen.

You could develop on RHEL 7 and build for production on RHEL 6, but this causes you enough grief and trobleshooting nesting up in all kinds of minor differences to not make it worth it.

Best you can do if you cannot upgrade from RHEL 6 is to install devtoolset([https://www.softwarecollections.org/en/scls/rhscl/devtoolset...](https://www.softwarecollections.org/en/scls/rhscl/devtoolset-7/) \- these are official packages crerated by Red Hat) to get a newer compiler.

<comment><USER29> Load fedora 27, and put all your legacy projects into a rhel6 docker container, with your workspace volume mapped into a "projects" folder, that way you also get to play your code with multiple rhel variants.

</comment></comment></comment><comment><USER6> > A couple of days ago, that's exactly what I did. It turns out that it's not > a huge deal to compile gcc with a prefix which will put it off to the side > and then just drop the entire mess into that directory. You can then just do > /path/to/your/new/g++ and you'll have the new compiler working for you. > It'll gobble up the new syntax and will be happy.

I've been there, and it's not fun. And, been down the path of options the author enumerates after this statement.

Short of it is, on Linux (and I'm sure it's likely the same on BSDs & Mac), if you're not using the system supplied compiler, you're in for a world of hurt. You will have to build everything you depend on from scratch with your custom compiler. That said, it's possible. Just not fun, or user-friendly.

</comment><comment><USER30> > scoped_ptr which worked just like the one at a certain company. It gives you > a few neat things, like the ability to just forward-declare a class inside > your .h file and not include the whole thing right there.

But all pointers do this in C++? Why would you need a smart pointer to do this for you?

<comment><USER31> I think the starting point is having a by-value member of that class, which has convenient automatic destruction semantics, but requires the actual class definition in scope. To lift that requirement, you move to a pointer field, and if you go with a scoped_ptr rather than a raw pointer, you don't lose the automatic destruction.

<comment><USER6> scoped_ptr has the same issue due to the implicit destructor needing to know how to destroy the thing being held. The trick is you need to explicitly define your destructor (and it's implementation needs to have full knowledge of what it's pointing to). It doesn't have to do anything - ideally, it should be empty. This is known as the PIMPL idiom, or Cheshire Cat.

<comment><USER31> wow somehow i was sure i could get out of that just by having the destructor of the containing class in a separate compilation unit, that's unfortunate.

</comment></comment></comment></comment><comment><USER32> The author is correct that trying to get modern toolchains on older systems (like RH6) is a real pain. But sometimes there's no real choice -- some applications value reliability above all else, and tend to be deployed on RH where its relative stability is a feature, not a bug.

I've written about this ([http://btorpey.github.io/blog/2015/01/02/building- clang/](http://btorpey.github.io/blog/2015/01/02/building-clang/)), specifically in the context of getting clang running on RH6, which required first getting a C++11-compatible gcc running on RH6. For those who are in the same boat, you may find the article helpful.

</comment><comment><USER33> C++ really needs a standard ABI. None of these newer features really matter much without it. You still can't make libraries without compiling your code 10 different times with a handful of compilers and flags and shipping all of the resulting binaries.

<comment><USER34> There is one. Apologies for the ugly link, it goes to a pdf and I'm on a phone: [https://www.google.com/url?sa=t&source=web&rct=j&url=https:/...](https://www.google.com/url?sa=t&source=web&rct=j&url=https://software.intel.com/sites/default/files/article/402129/mpx- linux64-abi.pdf&ved=2ahUKEwiR4IimoZ7aAhVM2IMKHSlbD3gQFjAAegQIBxAB&usg=AOvVaw0MVQdLNlkOBigLu5VDb82x)

10 times? Do you mean 10 platforms vs 1 on something like Java?

<comment><USER9> I don't think C++ desperately needs a standard ABI, but ignoring that for a moment... The System V ABI doesn't really do anything for the people who asks for a standard C++ ABI.

It's not enough to mandate how objects are laid out. People want the ability to define a library function that uses standard types - for example std::string - in the interface. To build a library with libstdc++ and link it with an application that has been built with libc++, there would (among other things) have to be a common string type that they agree on.

Herb Sutter has done some work in this area, but I don't know the current status of it. [https://isocpp.org/files/papers/n4028.pdf](https://isocpp.org/files/papers/n4028.pdf)

<comment><USER35> > To build a library with libstdc++ and link it with an application that has > been built with libc++, there would (among other things) have to be a common > string type that they agree on.

well, then there would be a single standard library implementation. I think that would be the way to go : just put libc++ out of the std namespace and in a custom namespace, `st2` for instance, and use its types from everywhere. MSVC, GCC, whatever.

</comment></comment></comment></comment><comment><USER36> Last year I was playing with Red Hat's Open Shift. Remember when -std=c++0x was cutting edge? RHEL does. I ended up compiling (and statically linking) my c++11 code with Windows/WSL/Ubuntu/g++ and copying it over.

<comment><USER37> As many others have pointed out, there is an officially supported solution to this problem....

[https://access.redhat.com/documentation/en- us/red_hat_develo...](https://access.redhat.com/documentation/en- us/red_hat_developer_toolset/7/html/7.0_release_notes/dts7.0_release)

</comment></comment><comment><USER38> Either update RHEL6 or keep using the version of C++ that is supported on your OS. It's really that simple...

<comment><USER39> > Either update RHEL6 or keep using the version of C++ that is supported on > your OS. It's really that simple...

Or switch to Windows: Here you can use about any version of C++ you want (just e.g. install the respective version of Visual Studio that supports your desired version of C++). No need to pay attention which version of C++ is supported on which Windows version. :-)

<comment><USER22> You still have to pay attention to what version of C++ your dependencies compiled with, unless you are compiling them all.

And on Linux you can install newer compilers too.

The problems are still there; the root cause is C++ having no ABI, not Linux vs Windows.

</comment></comment></comment><comment> mark-r I've heard the term "yak shaving" before but the meaning escapes me - <USER2> anybody fill me in?

<comment><USER40> Watch this gif [https://imgur.com/gallery/rQIb4Vw](https://imgur.com/gallery/rQIb4Vw) , and at the scene of car with the engine taken out imagine shaving a yak.

But the original story, as far as I know, comes from Seth Godin [http://sethgodin.typepad.com/seths_blog/2005/03/dont_shave_t...](http://sethgodin.typepad.com/seths_blog/2005/03/dont_shave_that.html)

<comment> mark-r Ah, Malcolm in the Middle - how I miss it. I think that was about the time I stopped watching TV.

</comment></comment></comment><comment><USER41> Ever since my first Linux experience, where /usr actually contained way more useful tools by default than other systems, this has been a double-edged sword. All the convenience of autoconf and default behaviors, etc. goes far out the window when /usr/lib is ever so slightly too old. It's kind of a curse.

The virtualenv concept makes more sense: set a default on day 1 but assume you'll want a new foundation periodically. When the foundations themselves are versioned, you can evolve your environment to some degree without having a completely chaotic mix of the latest updates.

</comment><comment><USER42> > When it comes to C++ programs and libraries, you really do not want to try > to mix and match across compilers. It really does not like it, and it will > make you suffer.

Hence the Amazon build tooling for C and C++. I wish they would open source it, write about it, make it into an AWS product, or release it in any other form.

<comment><USER43> I don't want to be mean, but people like to make fun of Java. In this regard life is much, much easier. Yes WORA is only partially true, but it is still true. Life is so much easier it's not even funny. Except for the most performance critical bits I'd never write anything in C++... Oh, and embedded.

I'm sorry you guys still have to go through all this pain, I know it's a really hard problem with all the legacy.

<comment><USER44> Nah we feel sorry for you guys haha

</comment></comment></comment><comment><USER45> I've recently been reading up on how Rust does memory management and I've been wondering... whilst not a really new feature, I wonder if you could program via unique_ptrs in C++ and use RAII to handle concurrency in much the same way that Rust deals with it.

<comment><USER44> That's what many people do but not necessarily unique_ptrs ALL the time (too may heap allocations make the CPU a sad panda)

</comment></comment><comment><USER46> Had the same issue with RHEL6, solved (more or less) using Gentoo Prefix. It comes with its own libc and the bootstrapping process was pretty straightforward.

</comment><comment><USER47> I am not sure what the OP is complaining about.

Isn't this just another day in the office for a C++ dev?

</comment><comment><USER48> Yeah, this whole thing ain't a problem with Nix. The whole idea of only a single file being able to exist at /usr/lib/libstdc++.so seems quite backwards and ancient to me now.

</comment><comment><USER34> I hate to be /that guy/, but newer systems can run nix, which takes care of this stuff for you. I dunno about RHEL 6.

</comment><comment><USER49> _I have to admit this was a real bummer. I know better than to try to upgrade anything that important on a Red Hat type box. There 's just no sense in attempting to diverge from the base system. You either keep it or throw it out and go to the next major release... and I'm not ready for that. That leaves me with one option: leave it in place and then "side load" a new compiler and/or libraries, and then switch to using it for all of my local stuff._

Just use docker?? That is literally what docker is for. Get your favourite flavour of debian or whatever, with a modern GCC and fire up that docker container.

EDIT: Oh wow, docker is only available in RHEL7 and higher. Damn.

</comment><comment><USER50> I just wish 'auto' in Cpp can be changed to 'var'. Switching between C#/JS/C++, I always end up typing var instead of auto :).

<comment><USER51> #define var auto

Not that I necessarily recommend doing this.

</comment></comment><comment><USER52> > you find out that existing C++ libraries on the box are no longer happy > being linked into your program, like, oh, say, protobuf, gmock or gtest

Or even worse, they link happily then fail weirdly at run time because all the STL structure layouts have changed.

This is hugely exacerbated by Linux distributions perpetuating the fiction that C++ is an appropriate language for system library APIs. So now there is a generation of dependency-oriented developers who haven't realized that "apt- get install libfoo-cxx-dev" is an enormous headache waiting to happen.</comment>


California Is on the Verge of Water Abundance - <AUTHOR> http://waterfx.co/central-valley/solar-desalination/ <comment><USER2> It's worth pointing out that this is a blog post from a company that sells solar-powered desalination plants.

</comment><comment><USER3> We've known this for years. The problem is that for a return on a desalinization program you have to wait longer than one political cycle, so there isn't enough political will to get it done.

It's a shame because with the access to seawater and sun, it would be a perfect combination to desalinate with green energy.

<comment><USER4> Yep, total linkbait title and article. Californians have known scientific solutions for a long time, it's that people don't care enough to act. Convincing a huge population of people to change their lifestyle is far more difficult than solving a scientific dilemma. That's why a water surplus is not around the corner.

<comment><USER5> Agreed linkbait, but I would have to say that people do care enough to act. To pretend that a huge population doesn't give a shit about water usage is a gross misrepresentation of the facts. I agree that California is not the model of water preservation considering the climate and water available to the geography. When statistics point to the fact that only a fraction of the water used in California occurs from lifestyle behavior, stating that the issue is lifestyle changes is failing to take into account any other information than pure speculation. The numbers regarding agricultural usage vary, but in most cases the amount used by things other than directly attributable to people is far less when compared to agriculture or any other source of usage[1].

The lifestyle changes that would need to occur to stem California's water usage are far more extensive and could easily qualify as a scientific dilemma. Basically non-california citizens are the "problem". When you're talking about drastically altering the diet of the entire U.S. (most likely other nations as well) due to the water being consumed by Agriculture it is absolutely a scientific dilemma.

[1][http://www.scpr.org/news/2015/04/15/50941/10-things-to- know-...](http://www.scpr.org/news/2015/04/15/50941/10-things-to-know-about- california-water-use/)

</comment></comment></comment><comment><USER6> What a ludicrously sensationalist title. You could even get the impression that the author is trying to sell water desalination plants...

</comment><comment><USER7> Commercial desal isn't as easy as all that. We have one here where I live in the Tampa bay area. Its a good thing and all, but it was a nightmare, involving too many lawsuits and finger-pointing to get it working effectively. And its expensive water, so it rarely runs at capacity.

</comment><comment><USER8> All of these solutions are more expensive than free water that falls from the sky. If the drought ends, then you have an expensive white elephant on your hands.

If the drought conditions are the new normal, though, we'll wish that we started yesterday.</comment>


Simpsons in CSS - <AUTHOR> http://pattle.github.io/simpsons-in-css/

<comment><USER2> Full Disclosure: He didn't ask me to do this, and I hope he doesn't mind.

This guy's been working on a freelance project for a Start-Up for me for the last few months as an all round front-end, back-end and UI/UX guy. Nothing but professionalism and great delivery all the way through. What i've loved about him most has been the fact that he's a great self-starter and has brought so many useful ideas to the table. Exactly what a Start-Up needs.

Also had the chance to meet him and his wife for Coffee a few weekends ago. Really nice guy.

If there are any Start-Ups here that are looking for a coder that has a very good sense of UI/UX, you should hire him. (my project is almost finished, so he'll be free soon).

I'm willing to personally vouch for his work ethic, credibility and talent.

Oh and all the work he did for me has been done remotely through BitBucket, email and Skype. I was very comfortable throughout in leaving him to his own devices.

He is the epitome of what it means to have a remote worker, so if you're a Start-Up outside of the UK thinking you can't hand him work because he's remote, think again.

 __Edit: __Remote notes.

<comment><USER3> I'm willing to personally vouch for his work ethic, credibility and talent.

Does this include him respecting copyrights?

</comment></comment><comment><USER4> No, stop it. Why is this #1 on HN right now? Just use SVG. This was fun as a demo a couple of years ago, but don't use this technique in production folks...

<comment><USER5> Why is this the top comment of the thread? Just use flag. This was a fun comment a couple of years ago, but don't use this in discussions over and over.

<comment><USER6> Flag? That's not the appropriate action when one disagrees with the use of a technology described in an article. Flagging is for inappropriate content or spam. Voting down would be, if that was an option on HN.

</comment></comment></comment><comment><USER7> I can't even center text vertically in CSS... This is beautiful !

<comment><USER8> Vertical alignment is a real pain; flexbox offers a nice solution: [http://jsfiddle.net/Pr22b/](http://jsfiddle.net/Pr22b/)

(Disclaimer: flexbox is still 'bleeding edge' [https://developer.mozilla.org/en- US/docs/Web/Guide/CSS/Flexi...](https://developer.mozilla.org/en- US/docs/Web/Guide/CSS/Flexible_boxes))

</comment></comment><comment><USER9> So who's going to tackle the opening sequence of the Simpson's with pure CSS animations?

<comment><USER10> I'm like 98% compelled to quit my job just to see this come to fruition.

</comment></comment><comment><USER11> Wow, this has to be the most awesome "X in CSS" demos I've seen! As for performance, I can definitely see the decreased download size as beneficial, but what about rendering speed? All those elements and transforms must surely be heavier to render than a simple bitmap? I will definitely check back to see if/when more characters are added!

<comment><USER8> More awesome than the Mona Lisa in CSS? ([https://news.ycombinator.com/item?id=4610243](https://news.ycombinator.com/item?id=4610243))

<comment><USER11> Wow, thanks for sharing! I hadn't seen that before. But, yeah, hand crafted Simpsons characters are more slightly more awesome than code generated css images. And both pretty insane as well :)

</comment></comment></comment><comment><USER12> The claim on the blog is that this provide "obviously better performance" than an image, but is that true? Seems like browser could render an image faster that lots of CSS transforms.

</comment><comment><USER13> There are already many tools that convert any image to pure CSS if you are interested in doing this. As well as using base64 in the img source, and javascript+canvas.

I suppose the value in doing this is that maybe an image could go right into an email to someone, or if you are hosting a page on the web somewhere that doesn't have the ability to upload images - but you still want to display one - just use CSS.

Otherwise - I'm not sure what this post is telling us. Did he do them by hand? Did he just convert some images using freely available tools? I'm not sure the value here other than to show people that there are other ways to display images in browsers than loading and showing the images themselves.

<comment><USER14> Check out the DOM structure of the character heads, these were almost certainly done by hand.

</comment></comment><comment><USER15> Beautiful, and the CSS itself is beautifully organized.

<comment><USER16> Not really, the CSS might be organized, but overall it's pretty terrible. Classes are for multiple instances and IDs are for unique instances.

<comment><AUTHOR> I decided to use classes rather than id's because I knew my project page would have multiple characters on it. So I didn't want to have multiple elements with an id of "left-eye" or "nose" etc. But I guess I could have prefixed everything with the characters name and used ID's instead.

<comment><USER16> From what I see in the CSS files, you already prefixed (edit: by prefixed, I mean child selectors) everything with the character's name, which is where my confusion comes from. Either everything should use class selectors, or characters should use a class selector and the constituent body parts should be ID selectors.

<comment><USER17> but then wouldn't document.getElementById() calls get confused, even though your IDs are nested?

Shouldn't it be the other way around?

        #homer .left-eye { ... }
        #bart .left-eye { ... }

makes more sense to me than

        .homer #left-eye { ... }
        .bart #left-eye { ... }

<comment><USER18>
      .homer #left-eye

This indeed makes (almost) no sense. It makes no sense for sure if you intend to have several characters on the page — id must be unique, and it does not matter that something is in front of it.

.some-class #some-id makes sense only if you want to style page-unique elements differently in some cases but even in that case I'd argue that #some- page-id #some-id would be better (assuming #some-page-id is the body element id).

</comment></comment></comment></comment></comment></comment><comment><USER19> I'm wondering, how hard could it be to write a tool which converts (at least a basic subset of) SVG to CSS.

<comment><USER20> We make a drawing app called WebCode ([http://www.webcodeapp.com/](http://www.webcodeapp.com/)) which can import SVG and PSD files and export CSS+HTML or JavaScript+Canvas code. Of course, converting SVG files to CSS is not something you'd generally use it for, but it can be done :-)

</comment></comment><comment><USER21> "Everything done in CSS" fad makes me think this is the new ASCII art

</comment><comment><USER22> When viewed in IE8 or lower, it looks like the animation from season 1!

</comment><comment><USER23> By the title, I was hoping this was the Simpsons opening done entirely in CSS using animations. I bet it's possible, but would require insane effort.

Still awesome though.

</comment><comment><USER24> And here's one in Html tables: [http://pastebin.com/XAUpNZ44](http://pastebin.com/XAUpNZ44)

So what?

<comment><USER25> For the lazy: [http://jsbin.com/iXIrIlur/1](http://jsbin.com/iXIrIlur/1)

</comment></comment><comment><USER26> Very impressive but where's Lisa?

Was she harder than the rest to get right?

</comment><comment><USER27> Awesome! Made me laugh just looking at the characters. Good work!

</comment><comment><USER28> [http://en.wikipedia.org/wiki/Scalable_Vector_Graphics](http://en.wikipedia.org/wiki/Scalable_Vector_Graphics)

</comment><comment><USER29> While I appreciate the effort, claiming that is it "pure CSS" is not true. The page is made out of 235 divs, and divs are not CSS but HTML.

<comment><USER6> There is no CSS without HTML. And, there is no HTML without CSS as browsers contain built in style sheets.

<comment><USER30>
        > there is no HTML without CSS

        * HTML 2.0: 1995
        * CSS 1: 1996

That must have been a hard year for HTML 2.0, not to mention half a decade for HTML altogether.

<comment><USER6> Yes, things were definitely different 17 years ago.

</comment></comment></comment></comment><comment><USER31> This is pretty cool. It makes we wonder if it would be possible to create an automatic SVG-to-CSS converter

</comment><comment><USER32> Interesting that Homer's line count is less than the rest. Homers simplicity is even reflected in CSS!

</comment><comment><USER33> I think SVG makes more sense for this. CSS is not intended to be vector graphics format.

</comment><comment><USER34> This is very cool. Great Work!

<comment><AUTHOR> Thank you

</comment></comment><comment><USER35> It'd be cool if there was a tool to assist in the creation of such arts.

<comment><USER36> Here: [http://www.chrispattle.com/blog/simpsons-in- css/](http://www.chrispattle.com/blog/simpsons-in-css/)

Now you're 1 step closer to figuring out how to build this tool :)

</comment></comment><comment><USER37> Great Work! Looks real good. Hope he plans to do more :)

<comment><AUTHOR> Thank you. Yes I plan to do some more. Apu is nearly done and I'll add a few more characters after that.

</comment></comment><comment><USER38> Amazing. How many hours of work?

<comment><AUTHOR> Thanks. I'd say each character took me around 2-3 hours. After doing a couple you can begin to re-use eyes and noses etc.

</comment></comment><comment><USER39> where is the link?? I can't see anything

</comment><comment><USER40> wow haha impressive

</comment><comment><USER41> okely dokely</comment>


6 Phases of the Web Design & Development Process - <AUTHOR> http://www.idesignstudios.com/blog/2008/03/20/6-phases-of-the-web-design-development-process/ <comment><USER2> 3\. "Your web designer will create one or more prototype designs for your web site. This is typically a .jpg image of what the final design will look like."

5\. "At this point, your web designer will attend to the final details and test your web site. ... A good web designer is one who is well versed in current standards for web site design and development. The basic technologies currently used are XHTML and CSS"

I don't see the logic here. If a web designer's primary task is creating design mockups then knowledge of xhtml and css isn't very helpful. A professional tester would be a better choice.

</comment><comment><USER3> Nice overview for a first timer, but please tell me the designer is sending PNGs and not JPGs of a mockup.

</comment><comment><USER4> Nice outline - would be nice to see a little more meat on the bones, especially the "information gathering" phase. Maybe a future post, I suppose.</comment>


Open letter supporting Google employees urging Google to not weaponize its tech - <AUTHOR> https://www.icrac.net/open-letter-in-support-of-google-employees-and-tech-workers/ <comment><USER2> As someone who grew up during the Cold War and interned at Los Alamos Natl. Lab (including occasional work in the plutonium facility) I fail to be moved by what seems to be overwrought reaction to me. Seems Google could help make things be deployed more responsibly than might otherwise happen without them.

There are bad guys out there. Help make the tech great at not accidentally involving people who aren't the bad guys.

I know it isn't a popular view, but the Categorical Imperative implies that, if without Google's help the system deployed would falsely harm innocents who might have been spared, Google would be responsible for having pulled out.</comment>


Three of Sci-Hub's domains just went down for good - <AUTHOR> https://twitter.com/SteveMcLaugh/status/933063052743860224 <comment><AUTHOR> The Sci Hub Twitter account suggests a workaround by specifying direct DNS servers for the sci-hub.ac domain:

 _Sci-Hub is working. To get around domain names problem, use custom Sci-Hub DNS servers 188.8.131.52 and 126.96.36.199._

[https://twitter.com/Sci_Hub/status/933081884380278784](https://twitter.com/Sci_Hub/status/933081884380278784)

I'm finding this works at best only partially -- primary site responds, but secondaries don't.</comment>


Hack4good to make the world a better place - <AUTHOR> http://hack4good.io/

<comment><USER2> Looks interesting (great partners!). However, I can't discover what exactly what we will be hacking on (I must note that I'm on IE8). Is any further information available?

<comment><AUTHOR> The goal is to make the world better through hacking together with people from around the world. The guidelines of what 'tools' are open as we don't want to limit solutions to problems. The one guideline that is strict is that this is not a "build a business" hackathon. While that could be an outcome, judging will be based on solving real world problems for social good. (No, that means hacking a beer pong game to make parties better does not count) - Thanks so much for commenting!

</comment></comment><comment><USER3> Nice, have always wondered how I can use my superpower of programming for the good of mankind. Anyone knows what programmers have done earlier?

<comment><AUTHOR> here's a link to what was created in the past hack4good [http://bit.ly/16DiSGP](http://bit.ly/16DiSGP)</comment></comment>


Show HN: Twitter bot which tweets Magic cards with appropriate GIFs superimposed - <AUTHOR> https://github.com/minimaxir/magic-the-gifening <comment><USER2> This is awesome.

Side note: I absolutely despite how Twitter bakes all GIFs into videos and prevents you from saving them as GIFs.

<comment><USER3> When there's a gif in a discussion, it's like 3 taps on mobile to play it despite having a play icon on it. First time you touch it, it just expands the tweet. Then it expands the video. Then it actually plays the video.

Hilariously bad ui.

<comment><USER4> You say "bad UI," twitter says "increased engagement!"

Potato, potahto.

<comment><USER5> I know you're joking but that's still a bullshit metric and a risky one to make if they are looking at only taps + total time. It's not increasing ad revenue, extending meaningful engagement time, or user happiness.

Having worked in analytics for a long time I've seen countless examples of metrics like these being needlessly optimized so I find it harder to laugh at.

</comment></comment></comment></comment><comment><USER6> That's pretty amazing. Too bad we can't print GIFs. Will this lead to a resurgence of "MTGIF" or "Magic: The GIFering"?

(And all this time, I've been doing it manually with Imgur images and MTGCardMaker.com. Tangentially, here is an album of MTG cards I made to try and "port" common Powershell functions to MTG: [https://imgur.com/a/4sa6v](https://imgur.com/a/4sa6v))

<comment><USER7> "Too bad we can't print GIFs."

Gonna call it now - physical digital trading cards, animated.

<comment><USER8> [https://cardamajigs.com/collections/lenticular- tokens](https://cardamajigs.com/collections/lenticular-tokens)

<comment><USER7> No, no. Not even close.

</comment></comment></comment></comment><comment><USER9> Very interesting project, integrating all these different libraries. One thing, I noticed that you are using a hardcoded path to the json. Created an issue for you [https://github.com/minimaxir/magic-the- gifening/issues/2](https://github.com/minimaxir/magic-the-gifening/issues/2). Thanks for sharing your work.

</comment><comment><USER10> Another slightly related cool twitter bot is @RoboRosewater, that uses machine learning to generate new cards.

[https://twitter.com/RoboRosewater](https://twitter.com/RoboRosewater)

</comment><comment><USER11> I don't understand... where is it pulling the GIFs from? How does it determine what GIF to use for a given card?

<comment><USER12> The code is pretty short and easy to read:

It parses the card names and IDs from a CSV file here:

[https://github.com/minimaxir/magic-the- gifening/blob/master/...](https://github.com/minimaxir/magic-the- gifening/blob/master/mtgifening.py)

And calls create_mtg_gif, which calls get_giphy_gif, which requests GIFs from the giphy API by searching for the card name, and then finds one that has an appropriate aspect ratio.

[https://github.com/minimaxir/magic-the- gifening/blob/master/...](https://github.com/minimaxir/magic-the- gifening/blob/master/utils.py)

</comment></comment><comment><USER13> I can't believe it's 2017 and Twitter still doesn't have a "Top Tweets" link in every profile to sort tweets by popularity (RT+likes count)

<comment><USER14> Twitter is a complete mess, UX-wise. I don't know what they're doing over there.

<comment><USER15> Probably a continuous fight between progessive and conservative UX designers. Just like the US basically.

<comment><USER16> Haha does that mean that "prog" and "cons" designers actually have basically identical tastes, and fixate on tiny insignificant differences while ignoring a whole universe of design possibility? That would explain how fast Twitter gets new things out the door...

</comment></comment></comment></comment><comment><USER17> Too bad it barely works.

I like the idea though.</comment>


Ask HN: How you promote your crowdfunding campaign? - <AUTHOR>

Hi all,
We're running our crowdfunding campaign at Indiegogo, and got wonder how to drive traffic to our campaign ? We had great traffic in the first 3 days, but after that we went down drastically. We are advertising non-stop on Facebook, Twitter, Reddit & everyplace we can find, but still not getting the traffic we looking for.
Any suggestions ? <comment><AUTHOR> Anyone ?</comment>


Top Sites Built with Ruby on Rails - <AUTHOR> http://blog.netguru.co/post/58995145341

<comment><USER2> Define Ruby on Rails. At that scale don't you have to transition your model layer from ActiveRecord to a service layer that sits on top of your databases? Certainly at that scale you are going to be using many different types of databases to store different types of data.

<comment><USER3> Rails != ActiveRecord

This isn't rocket science. You start your project rails new foo. You include gem 'rails' in your Gemfile. You're a rails application. How you architect for growth is beside the point.

</comment></comment><comment><USER4> I had a sales meeting with a large IT company a week ago and they said that if we licensed them our product, they would want to do a re-write in Java if the product (currently Rails based) proved to be effective. My app is for physician use, so there could only theoretically be _at most_ less than 1000000 users, so "at scale" wouldn't be so huge, relatively. Any ideas as to why this company was thinking this way?

<comment><USER5> we are considering groovy and grails for this sort of reason. I work with lots of enterprise clients who won't consider anything on premises thats not .net or java.

<comment><USER6> I use groovy and grails at work and the only similarity of grails and rails is name.

<comment><USER7> Grails is a Jvm clone of Rails, and Groovy of Ruby.

<comment><USER5> I was under the impression that grails is a clone of rails (I think it was actually called rails at one point and they were asked to rename it), but not that groovy is a clone of ruby - I think they have drawn a lot of inspiration from ruby and python, but not that it is a jvm version of ruby - but someone please correct me if im wrong. It seems like it is more about being a scripting version of java itself.

<comment><USER7> Groovy starte d off that way under James Strachan, but when Graeme Rocher took Groovy over for Grails, he added a MOP just like Ruby's.

</comment></comment></comment></comment></comment></comment><comment><USER8> Groupon runs RoR and has many tens of millions of users.

</comment><comment><USER9> I thought Gilt Group (Gilt, Jetsetter) and Living Social were both pretty Rails-heavy.

Also, Shopify should be considered since they power tons of stores on separate sites.

</comment><comment><USER10> Seems like that article missed A LOT of sites running on RoR.

<comment><USER11> The domain name should have told us that.

</comment></comment><comment><USER12> Nice list but if you include off-homepage usage by the top sites then you get massive companies like

Amazon studios.amazon.com

Twitter support.twitter.com

Weather feedback.weather.com

Go sportsnation.espn.go.com

AT&T insider.att.com

Target weeklyad.target.com

Imgur store.imgur.com

Photobucket support.photobucket.com

Shameless plug - all found at [http://builtwith.com](http://builtwith.com)

</comment><comment><USER13> IIRC, Hulu is RoR.

</comment><comment><USER14> LivingSocial? Groupon? Shopify?

</comment><comment><USER15> I thought Twitter was always the canonical example for a large Ruby on Rails app. Although these days it's splintered into a very large variety of different technologies, I believe Rails is still in the mix somewhere.

<comment><USER16> Nope, their entire stack is JVM based now.

<comment><USER17> That wouldn't exclude JRuby though

<comment><USER18> That's not the move they made; they moved to Scala. Their original Rails app couldn't scale. They now use Rails on the front end, but the real data isn't Rails. This has been written about extensively:

[http://highscalability.com/blog/2013/7/8/the-architecture- tw...](http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses- to-deal-with-150m-active-users.html)

[http://highscalability.com/scaling-twitter-making- twitter-10...](http://highscalability.com/scaling-twitter-making- twitter-10000-percent-faster)

<comment><USER19> The newer link doesn't mention them using Rails anymore. It's probably still in use in some internal apps, but the main twitter.com site should be 100% Scala now.

<comment><USER20> No, I asked to an engineer last month and their still using their 'Monorail' for twitter.com

</comment></comment></comment></comment></comment></comment><comment><USER21> I think it's worth noting that sky.fm is hiring Ruby on Rails developers, so I am guess they are running Rails too, or are planning to switch to it!

</comment><comment><USER22> Sorry, this list doesn't sound correct at all. "Sites built with Ruby on Rails": maybe. "Top sites": nope.

<comment><USER23> From the article:

> _Out of curiosity (and for fun!) we've recently used Alexa - a web traffic > reporting platform - to discover the top ten sites built using Ruby on Rails > framework._

It clearly defines "top sites" as those listed from Alexa. In which case, it is correct.

<comment><USER24> In that case, Flipkart should also be there.

</comment></comment></comment><comment><USER25> Don't forget basecamp.com, the guys who started it all

</comment><comment><USER26> rails app -> [https://translate.twitter.com/home](https://translate.twitter.com/home)

</comment><comment><USER27> Bloomberg.com</comment>


Show HN: Metaballs efficiently with a GLSL shader - <AUTHOR> http://www.appsketch.xyz/d/metaballswithgravity <comment><AUTHOR> I wrote a blog post about this: [http://www.appsketch.xyz/p/3](http://www.appsketch.xyz/p/3)</comment>