Optimizely Raises $28 Million to Go Global - <AUTHOR> http://blog.optimizely.com/2013/04/10/optimizely-raises-28-million-to-go-global/ <comment><USER2> Aside from just what a solid company Optimizely is, I think that if you read Dan's blogpost you get a hint at the ultimate direction they may be going.

"We firmly believe that 10 years from now people will look back at today and be shocked at how generic, impersonal, and one-to-many what we call the web is... We are striving to become the layer on top of the web that powers that experience."

I'd guess that Optimizely may be becoming less about page optimisation and more about experience optimisation. Should my navigation and experience at Tesco be the same as that of a mother of four or a student? My recommendations may be personalised but what if the entire experience at the site including the advertising, design and calls-to action could be personalised and optimised for key customer segments.

If you've ever used Test and Target you'll know that it can get pretty complicated but equally that that that sort of segmentation can equally have a huge impact. If Optimizely can pull off a way to easily curate site experiences for different visitor segments and perhaps intertwine those experiences with social then they could have some huge topline impact in those companies.

<comment><USER3> Right, it looks like they're going to build something similar to Monetate <http://monetate.com/products/personalization>. There are already high quality, established players in this space. I'm curious to see how they'll differentiate themselves.

<comment><USER4> Did you notice the graph in that post? I think you mean to say "I'm curious how they've been differentiating themselves."

<comment><USER5> Without size cohorts that graph doesn't mean much. I'm sure that if you'd have those it would be very impressive but just by itself that graph is not interesting other than to show very good growth and very good future prospects. It's the kind of slope investors like to see :)

If optimizely is as well represented in the top 100 and top 1K as it is in the top 10K then that would be a much stronger statement.

<comment><USER6> Hi Jacques, we have pulled together the same data in terms of adoption for the top 100k and top million and they look very similar.

A great source for this data if you are looking to dive into it is <http://trends.builtwith.com/analytics/Optimizely>

<comment><USER5> Would it be a lot of work to get that data for top100 and top1000?

If it holds there too that would be absolutely awesome.

<comment><USER7> I am not sure how that would make sense. VWO has Microsoft and Groupon, but I am sure it is a tiny portion of their total traffic. What are you really measuring?

The thing is we are talking about .5%-3% share here, and the top 100 would be statistically meaningless. What you really want is revenue, and I am sure that is private information.

VWO advertises about 2500 customers and Optimizely claims 4000.

Frankly, I'd be more interested in how the Google numbers were calculated. It is now so integrated with Google Analytics it is pretty hard to detect.

If I were a betting man, I'd guess their revenue run rate is around $10M.

<comment><USER5> Selling into the top 100 would be statistically meaningless but it would be extremely important to optimizely to show their adoption. If F500 companies rely on your service that is an excellent arrow in the quiver of your sales staff to pull smaller companies over the dotted line.

If the representation in the top 100 and top 1,000 would be percentage wise just as high as in the top 10,000 then I believe that would be an extremely powerful tool in optimizely's sales arsenal.

Selling to 'the establishment' serves as a very strong validation, especially because there may be a ceiling at which it is easier/better to roll your own A/B testing. If optimizely can prove that there is no such ceiling (that for instance, even Amazon would be better off to use optimizely than to roll their own) you can expect their value to skyrocket.

<comment><USER7> I see your point, but they already provide their top customer list:

<https://www.optimizely.com/customers>

also see VWO:

<http://visualwebsiteoptimizer.com/customers.php>

You are asking for data that is publicly available.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Apart from the investment (well done guys!), the revenue figures here are staggering. That is an awesome achievement for what was completely niche when they started a few years back.

It used to be that people would refer to VWO when talking about A/B testing. In the last 18 months, every new article has talked about Optimizely. I guess this shows they are completely taking over the market.

Looks like awesome execution. This is fantastic guys!

<comment><USER9> Congratulations to the Optimizely team for raising such a huge round. We (Visual Website Optimizer <http://visualwebsiteoptimizer.com>) regularly keep getting mentioned in most of the articles that talk about A/B testing. Just as a current comparison, we're growing at a breakneck speed. Here are some stats:

* 2400+ paying customers across 75+ countries. We have added 1000+ customers in last 9 months alone

* Millions of USD in annual revenue

* Serving 10 Billion+ pageviews/month across all our customers

All this we have been able to achieve with a team of 17 people right here from Delhi, India and without raising a penny of external funding. We have consciously chose not to raise any VC funding so far as we're very happy with the organic growth we're seeing and the product that we're able to build. Our company vision extends much beyond A/B testing and as an independent company, it is very exciting to see where we can take it.

We have a lot of interesting plans for this year. Stay tuned!

<comment><USER10> Congratulations, always been interesting to follow the VWO progress. Given A/B testing would benefit a massive amount more companies than the numbers of customers quoted here for both companies I am sure there is plenty of room for multiple players in this market.

</comment></comment></comment><comment><USER11> I heard through the grapevine that no one wanted to fund Optimizely the first time they pitched for a series A because VCs pigeonholed A/B testing as a crowded space with too small a market. So then, Optimizely went out and executed like crazy, is now making millions per year, and was able to basically define whatever terms they wanted for their fundraising round.

This story, if true, would explain why it's such a massive round: it's payback for the annoyance of having to pitch a second time around.

Anyway, that's all hearsay. The team deserves nothing but praise -- I hear love for their products regularly from my customers (my startup is next-gen content analytics provider for large sites).

<comment><USER5> > it's payback for the annoyance of having to pitch a second time around.

I really don't see how you would make 'payback' work. If you can do a better round you should do a better round, payback doesn't enter into it. Everybody involved thought this was a good deal otherwise there would be no deal. You can't get a (sane) investor to pay a premium over and beyond what they feel the company is worth.

</comment></comment><comment><USER12> Why do people call things `verb`ly? Does it make more sense to native English speakers than to me?

Some even go through the trouble of getting a Libyan domain, which is simply foolish.

<comment><USER13> I think we'll look back on this and other similar fetishes like .io TLDs and laugh just like we chuckle at the geocities web designs and AOL CDs of yore.

<comment><USER14> As a .io company... when we bought our domain over a year ago, the only other io I had heard of was <http://drop.io> (now gone). It has been nuts how many other new companies became .io in the past year.

</comment></comment></comment><comment><USER15> I've been impressed by how many odd cases their website editor handles. When I first started experimenting with Optimizely I got curious and tried loading maps.google.com and replacing one of the map tiles with a picture of my dog. I didn't expect it to work, but it did.

So then I made a little torture test page with all the different ways I could think of to insert content into the page dynamically, and they handled them all perfectly.

Kudos to the Optimizely team: This is some serious attention to detail.

<comment><USER16> Hi there! I'm one of the engineers who worked extensively on the editor, and it warms my heart to hear of your successes! An overarching goal for our team was maximum compatibility with as many sites as possible. Glad it was beneficial to you!

</comment></comment><comment><USER17> Optimizely is a fantastic product; no doubt it creates a lot of value for its customers. That said, it's very difficult for tool vendors (Visual Website Optimizer, Optimizely, Unbounce, etc.) to capture a lot of that value. This deal makes sense in so far as Google, Adobe, etc. will need to buy up all the players in this space so as to beef up their advertising or web tool offerings.

<comment><USER18> Google Ventures is part of this round of investment and prior rounds too.

<comment><USER19> ... and awaiting the right moment to acquire!

</comment></comment></comment><comment><USER20> Wow! A blog where clicking the logo takes you to the actual website!

</comment><comment><USER21> Slight tangent: What are the benefits/reasons for a company to be so public about raising investment? Is just a good opportunity for name recognition boosting PR?

For some reason, this seems strange [https://dl.dropbox.com/u/131615/screenshots/Screen%20shot%20...](https://dl.dropbox.com/u/131615/screenshots/Screen%20shot%202013-04-10%20at%2016.31.27.png)

<comment><USER22> There are a couple of good reasons, actually. For one, it improves the morale of the team. Twenty-eight million dollars give a false impression of security to team members. In terms of the market's perception, the perception of company's solidity improves. Don't mind that outside investment is actually a _loan_ (which for me is a risk, and not an asset). The word _investment_ brings in a lot of positive connotations with it. There is also the morale- crunching effect it has on the competition. Everyone else starts to scramble in order to raise money, instead of actually improving their offerings. Its a weird psychological effect mostly found on founders. Investment announcements from competitors make them suffer a lot, and a fair amount simply lose concentration and or quit.

<comment><USER5> A series 'B' round is not a loan, and it is definitely not a risk but a _huge_ asset.

<comment><USER10> It can be a risk, it redefines the kind of exits you can have in future and still be successful. The founders would likely see little now from a $50 mil sale where as that would be a big windfall for a bootstrapped or angel invested only company.

<comment><USER5> You trade one risk for another, and you are ignoring that post money optimizely has $28M in the bank so it's balance sheet is simply $28M fatter than it was pre-money.

A buyer would simply be buying cash and would have no problem with paying $78M.

If optimizely now spends this $78M in a way that does not contribute to the balance sheet (superbowl ads, whatever) _then_ they have limited their future options.

</comment></comment></comment></comment></comment><comment><USER23> Great accomplishment by Dan & Pete. It really validates the space for a disruptive A/B testing tool at great price-points.

Dennis CEO of A/B testing tool <http://www.convert.com>

</comment><comment><USER24> Optimizely is a ridiculously well done product, and it's great to hear they're succeeding. I just started a test today on an app using a huge amount of Backbone, and it's incredible how easy it was to set up.</comment>


Firefox Adds Powerful New Developer Tools - <AUTHOR> http://blog.mozilla.com/blog/2012/01/31/firefox-adds-powerful-new-developer-tools/

<comment><USER2> While the developer tools are cool, I think the real exciting change in this release is that add-ons will no longer be disabled by default when the browser is updated:

[https://wiki.mozilla.org/Features/Add-ons/Add- ons_Default_to...](https://wiki.mozilla.org/Features/Add-ons/Add- ons_Default_to_Compatible)</comment>


Attn: Jeff Bezos - <AUTHOR> http://scripting.com/2016/11/18/attnJeffBezos.html <comment><USER2> I certainly can't see a path to solution, but the excellent talk 'who will command the robot army?' puts in clear perspective the urgent ethical and technical challenge facing this world.

I don't know Jeff, but I too hope he will come up with something good here.

</comment><comment><USER3> Isn't this essentially google news?</comment>


Task Dispatch and Nonblocking IO in Scala - <AUTHOR> http://blog.ometer.com/2011/11/13/task-dispatch-and-nonblocking-io-in-scala/

<comment><USER2> I think he's fundamentally wrong in his careful definitions of blocking and non-blocking sans "IO" term.

For all the hyperbole, Ted Dziuba did directly address this here: <http://teddziuba.com/2011/10/node-js-is-cancer.html>

</comment><comment><USER3> Follow up thoughts from Miles Sabin, expert group member for JSR-51 (Java Nio):

[https://plus.google.com/117117878292459457922/posts/hX2AZup1...](https://plus.google.com/117117878292459457922/posts/hX2AZup1Vbi)</comment>


How hard can canceling your Comcast account be - <AUTHOR> http://thenextweb.com/shareables/2014/07/15/how-hard-can-canceling-your-comcast-account-be-very-hard/ <comment><USER2> Similar in difficulty (but worser) than when we called to downgrade service for our HOA and our shared office account.

Would it be possible to have 10m people cancel for a month in protest?</comment>


Ask HN: Review our startup - resu.me - <AUTHOR>

resu.me (http://resu.me/) launched day before yesterday. Venturebeat covered our launch - http://venturebeat.com/2011/01/25/resu-me/.
A short snippet about resu.me - resu.me is a career networking platform for college grads/young professionals. resu.me uses semantic web and machine learning to match users with jobs better and faster. resu.me provides a set of awesome tools (RSS reader, Portfolio Wall, Blog/code post tool, Job aggregation and some more) that lets one quickly build a meaningful resume/network and land that dream job. resu.me is the one resume to rule them all :)
We'd love to hear your feedback/thoughts/suggestions. As a token of gratitude to HNers, we'll give a 2 letter http://xy.resu.me/ account (FCFS, if not already taken). Just indicate your current resu.me URL and your desired 2 letter resu.me URL. <comment><USER2> I'd really like to see a sample completed resume, a lot of the "recently viewed" profiles are just empty from people signing up to see how it works, it seems.

<comment><AUTHOR> the page actually will show a couple of more tabs if you are signed in .. like the RSS reader, job aggregator

<comment><USER3> I think that would-be users should be shown a comprehensive experience without having to sign in; if things don't work when they first go to the site, then they probably won't go back...

<comment><AUTHOR> some features are specific to the users and hence they need to sign in .. would a demo video work instead?

<comment><USER3> If there are features that don't work without signing in, then I think that unregistered users shouldn't be able to see them UNTIL they sign in. You can list them in a feature list or something, but don't make them available as links for someone to click on and not see anything in.

For example, if you don't sign into facebook, you can't see a wall or profile or anything, but if you sign in, everything is available.

<comment><AUTHOR> thats how we have it now ..

<comment><USER3> Sorry, I misread your original comment. That's completely my fault.

About the recently viewed list -- could you filter it so that it only shows recently viewed resumes with X fields filled out? Or maybe even make it something you have to log in to see, then take advantage of that space to list the features really plainly right there, with no need to click through links or sit and watch the ad.

</comment></comment></comment></comment></comment></comment></comment><comment><USER4> You should consider some serious design review. You want to appeal to young users, and yet your website is reminiscent of a site from the early 2000's.

<comment><AUTHOR> We are working on a redesign. Would you have any recommendations for good designers/design houses?

<comment><USER4> It depends on how much you're looking to spend, and where you are located.

Is it important for your graphic designer to be in-house? Good graphic designers I know charge up to $250/hour... Some of the more average ones will do $50-100/hour (especially if they like the idea.)

</comment></comment></comment><comment><AUTHOR> Clickable links: <http://resu.me/> and <http://venturebeat.com/2011/01/25/resu-me/></comment>


Negative Expertise (1994) - the-mitr http://web.media.mit.edu/~minsky/papers/NegExp.mss.txt <comment><AUTHOR> (1994) Minsky essay.

> Could it be that our accumulations of counterexamples are larger and more > powerful than our collections of instances and examples? Could it be that we > learn more from negative rather than from positive reinforcement?

It seems like major scientific breakthroughs involve both positive (oh, so THAT'S how to do it) and negative (well, we tried a, b, and c, they all failed or had bad consequences, so let's not do that again) knowledge.

I think the essay sets up a false dichotomy, or a false question, of "which is more important?"

It might be that everyday life depends more on negative expertise than positive expertise. You don't have to be top of your field or know things that nobody else knows, but if you make a major mistake you might get hurt, socially outcast, etc. But humanity's progress seems like it depends on both positive and negative expertise, inextricably intertwined.

<comment><USER2> > I think the essay sets up a false dichotomy, or a false question, of "which > is more important?"

He sets the ground right up front: that expert systems (the state of the art at the time, though by then in decline) primarily consist(ed) of positive questions, and that that was a mistake. Essentially the dichotomy had been implicitly resolved in favor of the "positive questions are more important" side, and Marvin was arguing against that.

</comment></comment><comment><USER3> > Other colleagues maintain that we should be able to construct large, uniform > neural networks that can learn to do all that minds might need. I do not see > much hope of this, because of fear that any very large such network would be > prone to accumulate too many interconnections and become paralyzed by > oscillations or instabilities. How could we stabilize such systems ? My > answer is that one might have to provide a variety of alternative sub- > systems, decoupled enough that if each part should fail from time to time, > the rest could continue to function so that not all the system will all fail > at once. This means that those parts must be suitably insulated from one > another.

Looks like Generative Adversorial Networks ?

<comment><USER2> I think he's referring to the Society of Mind.

</comment></comment><comment><USER2> I happen to have a copy of The Emotion Machine on my desk right this instant, so I looked in it and this topic is discussed in that book (his last).

</comment><comment><USER4> > But a 'negative' way to seem competent is, simply, never to make mistakes. > How much of what we learn to do -- and learn to think -- is of this other > variety?

Is it an interesting question, but I feel like the words "competent" and "expertise" set up misleading expectations. Most people are experts at walking and eating, but not nuclear physics or the history of Asian music.

I guess almost all of what we do at any given moment - look, talk, eat, sleep, walk, read, etc. - is this type. We abstract everything and don't consciously process most of what we see & do. Lots of people have speculated that if we were consciously thinking about every sensory input and every action we took, living would be unbearable.

But for learning new things, for establishing what it means to be an expert in a new field by being better than others, by doing research, by breaking new ground -- it has to be asked, what good does learned knowledge and not making mistakes serve? What is ever learned if someone doesn't make a mistake? Science doesn't move without mistakes. Nor does evolution. With competence, there's no change.

Maybe I'm just coming to the conclusion that being competent and becoming an expert are two completely different things?

> Presumably, experts have more effective censors than the rest of us

I'm honestly not sure why this is presumed. A lot of us would recognize that someone who's made more mistakes and learned from them is more expert than someone who's tried nothing new and has only relied on the learned "book knowledge" of mistakes of others.

> It annoys me how frequently people suggest that the 'secret' of making > creative machines might lie in providing some sort of random or chaotic kind > of search generator. Nonsense!

I couldn't agree more with this, it hits home having spent time practicing digital art. So many people talk about adding a random number generator as if that's going to find new things and add some magical discovery to the process. It doesn't, and there are almost always better alternatives.

</comment><comment><USER5> One challenge with encoding negatives is that there are infinitely many of them. When confronted with a lion, positive things to do would all involve defense or escape. Things not to do include taking a nap, having lunch, provoking the lion, pulling out your phone to read HN... We can sift through those and say "provoking the lion" will likely be very bad and avoid that. All the others might get lumped into "do nothing" because they don't really address the lion. So I suppose I've answered myself - the negatives must be restricted by potential relevance to the situation in order to limit their number.</comment>


Undeclared martial law... and we applauded - <AUTHOR> https://plus.google.com/100157670154620604789/posts/YZE1Dx8YkXZ

<comment><USER2> Devil's advocate here... what if this was all consensual? They asked people to stay in their homes and businesses to stay closed, asked to search your property, etc. I don't recall seeing Watertown citizens on their knees with zip ties around their wrists. Maybe most people just cooperated and wanted to help.

</comment><comment><USER3> Counterpoint, from an information security researcher who actually lived through the lockdown:

> I know we in infosec are paid to be paranoid but thinking that this was a > "dry run" for some sort of coup is a little over the top even for us.

[http://abad1dea.tumblr.com/post/48488539386/thoughts-on- the-...](http://abad1dea.tumblr.com/post/48488539386/thoughts-on-the-boston- lockdown-from-the-edge)

</comment><comment><USER4> Oh please, this woman clearly doesnt live here. The media played it up. Officials simply asked us and businesses to stay home and stay closed. We, the citizens of Boston, complied because we felt that it would be the best for the greater good. No tanks were at my door telling me to stay inside. No one was arrested for walking down the block.

Take off the tinfoil hat once and a while...

</comment><comment><USER5> Yeah, it was very creepy how the mainstream media never questioned the ramifications of an entire city being under newspeak "lockdown".

I'm sure there are lots of authoritarian types in government who are very pleased with how docile the sheeple were during the manhunt for the Boston bomber.

</comment><comment><USER6> The only thing wrong with this aquarium is that it's metal instead of glass.

So I can't see out.

No big deal, really. I can still swim around.

It does seem to be a little hot though. I mean really, really uncomfortably hot.

 _Hey, wait..._</comment>


Michael Lewis's 'The Big Short'? Read the Harvard Thesis Instead - <AUTHOR> http://blogs.wsj.com/deals/2010/03/15/michael-lewiss-the-big-short-read-the-harvard-thesis-instead/ <comment><USER2> I posted this about a month ago, didn't seem to get much interest then unfortunately. In any case, here is a link to the actual thesis:

"The Story of the CDO Market Meltdown: An Empirical Analysis." - [http://www.hks.harvard.edu/m-rcbg/students/dunlop/2009-CDOme...](http://www.hks.harvard.edu/m-rcbg/students/dunlop/2009-CDOmeltdown.pdf)

<comment><AUTHOR> Weird. Wonder why my submission didn't get caught by the duplicate check? Looks like both have the same URLs.

<comment><USER2> I believe that there is a time limit on the duplicate check, that way items can be re-posted after some time has passed. I'd guess it's probably 30 days.

For those wondering, here is the original: <http://news.ycombinator.com/item?id=1201079>

<comment><USER3> You were just ahead of your time (but only by a month, that's better than missing by centuries like some people).

</comment></comment></comment></comment><comment><USER4> > Ah, the innocence of youth.

Ah, the smug certainty of a Wall Street Reporter. Let's not forget how miserably the WSJ (and all other media) have failed to pick up on the gross fiscal abuse on wall street. Some modesty would be in order here!

Besides, the student's suggestions are rather uncontroversial. She merely suggests that "to change wall street you have to change the incentives". How can any sensible person disagree with that?

The attitude that... "of _course_ the people at Wall Street are going to screw everybody over for profit; what did you _expect_?" oozes from those last remarks. Urgh!

<comment><USER5> I hardly disagree about the WSJ in general but I read the end of this article differently. The author's final question is a good one: why on earth did she take a job working for the very people whose irresponsibility her research exposed? Her answer, assuming it's sincere and not quoted out of context, is indeed naive: she's doing it to change the culture of Wall Street. Well, I agree with what I imagine the author's implicit points to be: (1) the odds that Wall Street culture will change because she took an analyst job are infinitesimal, it doesn't matter how brilliant and well-intentioned she is; (2) this is the kind of grandiose fantasy you have at that age.

Sadly, many young people overestimate how resilient they will be to a culture they abhor, which is how they get sucked in and assimilated. The risks to the beast are negligible compared to the risks to her soul (if this were a movie we'd all be yelling Nooooooooo...) and she's not unusual in underestimating this.

On the other hand, it's easy to understand why any "large New York investment bank" would want to hire her: anyone who can figure out what they do that masterfully will be useful in doing more of it.

<comment><USER6> "The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man."

-George Bernard Shaw

<comment><USER7> As much as I used to love this quote, I now see it as a non-sequitur.

<comment><USER5> Interesting you should say that. I wrote a comment last night (and then decided not to post it) that went like this:

That's one of those lines, like the opening sentence of Anna Karenina, that is written so authoritatively that you just take it for granted when you read it, but when you stop and think, there's no reason to believe is true.

(The reason I didn't post it is because I don't accept that the quote, even if true, invalidates what I said about naive people getting sucked into the beast. Disputing whether the quote is true makes it seem like I'm conceding that point, which I ain't. I'm the last person to defend the "reasonable man".)

Edit: Shaw was great though. "Animals are my friends and I don't eat my friends" is Wilde-worthy.

<comment><USER7> Thanks for the great reply. Love that last quote especially. :)

</comment></comment></comment></comment></comment></comment><comment><USER8> Just finished Big Short and it's good - like anything by Michael Lewis. It's the only thing I've read that completely tied together the hedge funds, the investment banks and AIG for me.

<comment><USER9> It's not the most complete book on the financial crisis, but it's not trying to be. It is certainly the most entertaining though.

</comment></comment><comment><USER10> Here's how to turn the Big Short into a bunch of little shorts and save us all a lot of trouble in the future: Require the banks to report each and every line item that they are long and short. A line item is simply there aggregate position in any security, loan or derivative.

The banks already have this information, obviously. All they need to do is publish it--daily. In the past this would have been "infeasible". Now it would cost them little to release it electronically and it would be feasible for a small shop to analyze the risk for an entire bank. If available, the information would lead to an industry of small analyst/investors buying and selling bank stocks, eventually providing better information about the bank's risk than the banks themselves. Under this regime, the regulators can go back to sleep or continue surfing the web.

Until now many would claim this information is the banks' by right and not ours. Is it? You and I effectively disclose this information for our houses and loans. It is deemed necessary for credit markets to function. We have no inherent right to keep it a secret. Banks are just bigger versions of us with thousands of assets and liabilities, playing with taxpayers' money it turns out. Their rights are determined by us and not nature.

<comment><USER11> There are a couple of companies that already do this for the banks. They get all the information on longs and short trades throughout the day, from all the big investment firms, and produce a market snaphshot. One of these companies is called Dataexplorers.

You can pay money to get this data now.

I am not sure how this would stop anything?

<comment><USER12> Dataexplorers appears to be focused on the securities lending business, which is a tiny segment of the market compared to what the parent is proposing. Also, I see nowhere on the site where they claim to "get all the information on longs and short trades throughout the day, from all the big investment firms, and produce a market snapshot", can you please provide a reference to the place where this claim, or a similar one, is made? Most likely they are simply analyzing all long and short trades in the market on a given day to provide information about expected lending fees, which is a far cry from being able to assemble an accurate picture of the securities held by various financial institutions for their own accounts.

<comment><USER11> I used to work for them. We would recieve a huge list of the millions of trades that the big investment houses did, every single day. They only show a market snapshot, and try to make it impossible to determine what any individual company was doing - that was very important, for obvious reasons.

</comment></comment></comment></comment><comment><USER13> You can read most of the Prologue to the book, which sort of ties this article together on Amazon -- [http://www.amazon.com/Big-Short-Inside-Doomsday- Machine/dp/0...](http://www.amazon.com/Big-Short-Inside-Doomsday- Machine/dp/0393072231)

</comment><comment><USER14> I think it's great that she investigated the issue and wrote a well put together article, but the heart of the problem has been known for a while:

* No money down loans

* No proof of jobs required

* Fannie & Freddie bought this junk

* Repeal of Glass Steagal

All the talk in the world won't change the fact that the solution requires legislators and law enforcers to have a strong backbone and prosecute those who committed fraud.

<comment><USER15> Fannie and Freddie actually lost market share as the bubble really got going. They were prohibited from getting into most subprime, and tried to get around their regulations.

Wall Street was the driver in buying up these shitty mortgages to put into MBS/CDOs -- and quite a few big banks bought mortage originators so they could get bigger margin on these deals. Unfortunately for them Wall Street couldn't find buyers for all of this toxic crap and/or were too dumb to realize how bad some of this stuff was (ie Citigroup). That's why you had a bank run on Bear Stearns, once people realized the collateral they were using in the repo market was effectively worthless.

<comment><USER14> Fannie and Freddie bought a lot of subprime. I had friends that worked there and told me so and I've read about it. Over the long term Fannie made a lot of people rich. Read Beating the Street by Peter Lynch. He made a fortune off Fannie. Taxpayers will pay, unfortunately.

[http://www.washingtonpost.com/wp- dyn/content/article/2008/08...](http://www.washingtonpost.com/wp- dyn/content/article/2008/08/18/AR2008081802111.html)

Without Fannie and Freddie and the backing by the US taxpayer Wall Street would not have taken as much risk.

<comment><USER3> Maybe, but the underlying problems were the bad ratings assignments, shady conflicts of interest, and companies figuring out they could drive demand while betting against that demand.

</comment></comment></comment></comment><comment><USER16> From Michael Blum's letter to Bernanke: "CDOs are like love. When they're good, they're great, but when they're bad, watch out."

The linked paper itself is quite easy to read, though at 115 pages I didn't make it through the whole thing and resorted to skipping around. I'd love to see the tables of results put in perspective with a better visualization.

<comment><USER17> Were there any good CDOs? An interesting aspect (in retrospect) of _The Big Short_ is that some people spent huge effort determining which ones were worth shorting and other people seemed to make just as much money indiscriminately shorting all of them.

<comment><USER16> From the thesis:

 _J.P. Morgan's CDOs consistently underperformed, while those from Goldman Sachs were among the top performers_

Also:

 _CDOs rated by Fitch generally had less defaults than those without a Fitch rating. However, this result is not conclusive, as a number of other factors could be responsible for the lower level of defaults in Fitch-rated CDOs._

</comment></comment></comment><comment><USER3> What an inspiration this young woman is!

<comment><USER18> This is sure to get down-voted, but the first thing I noticed after reading about her supposed brilliance was -- she's very pretty.

<comment><USER3> And a world-class amateur violinist. And apparently something of an idealist.

I hope she continues to do good work with her many gifts. While the cynic can argue she'll get crushed by the system, occasionally good people can get in and make positive change happen.

<comment><USER19> She could kick ass as a quant, but I don't see her moving up the ranks in IBD or M&A. She's (1) very intelligent, which works against you in that sort of conformist environment, (2) a woman, and (3) not from the "right kind of family" (I know nothing about her background, but she actually worked in college). In other words, she's just too good to be an investment banker.

</comment></comment></comment></comment><comment><USER20> I got about 10 pages into the paper and then that there's a good reason that I didn't get into Harvard.

Anybody up for compiling a summary?

<comment><USER3> Go listen to the "This American Life" pieces about Magnetar and about the financial collapse. They are enjoyable and make good snapshots to get some of the same information/ideas.

[http://www.thisamericanlife.org/radio- archives/episode/355/T...](http://www.thisamericanlife.org/radio- archives/episode/355/The-Giant-Pool-of-Money)

[http://www.thisamericanlife.org/radio- archives/episode/405/i...](http://www.thisamericanlife.org/radio- archives/episode/405/inside-job/)

</comment></comment><comment><USER19> It's really sad that someone as talented as she is ended up at an investment bank.

If she's an analyst, instead of a direct promote to associate at the very least, I think I'm going to barf blood.

<comment><USER21> it's a standard, socially acceptable, not-very-risky-if-you-come-from-the- right-pedigree path to wealth/power.</comment></comment>


The Arctic is warming twice as fast as rest of the world - <AUTHOR> https://www.climaterealityproject.org/blog/watch-arctic-oldest-sea-ice-disappear-over-last-25-years <comment><AUTHOR> Meanwhile, on the other pole, a huge crack is spreading across Antarctica.

[https://www.thestar.com/news/world/2016/08/22/a-huge- crack-i...](https://www.thestar.com/news/world/2016/08/22/a-huge-crack-is- spreading-across-one-of-antarcticas-biggest-ice-shelves.html)

<comment><USER2> When that falls into the ocean, how big will the tidal wave be, and which countries will it obliterate?

<comment><AUTHOR> Good question about the tidal wave. I'm not sure about that. From the article:

"When ice shelves lose large chunks, it does not raise sea level because these bodies are already afloat. However, the loss of an ice shelf can speed up the seaward flow of the nonfloating glacial ice behind it, and this ice can in turn contribute to sea-level rise. Researchers have estimated that the loss of all the ice that the Larsen C ice shelf currently holds back would raise global sea levels by 10 centimetres."

</comment></comment></comment><comment><USER3> What should we do? Does anyone here know?

<comment><USER4> Plants absorb carbon dioxide. Grow more plants.

<comment><USER5> Fun fact: the US Midwest grows corn, which produces as much oxygen (absorbs as much CO2) as the Amazon Basin. During the summer anyway. So we're growing a lot of plants already.

<comment><USER6> And most of that corn goes to feed cattle, which produce methane (worse than CO2). So, what we do with the plants matters. Do we allow them to sequester the carbon or we put their carbon right back into the atmosphere?

<comment><USER5> Under 40% these days. In Iowa the largest buyer of corn is Pepsi. Oh! Unless by 'cattle' you meant people?</comment></comment></comment></comment></comment>


Ask HN: Need suggestions for online t-shirt store business. - <AUTHOR>

I don't know if this is the right place to ask this question but still I will give a try.
I have an startup idea about setting up an online store that will sell t-shirts designed around a niche concept. It will be somewhat like Myntra.com. I can develop and design the site but I don't have much idea about T-shirt printing business. I need help in these -
a) Where can I learn more about this business? Any links or resources will be helpful
b) Do you know any T-shirt whole-seller near New Delhi, India region who can provide me cheap unbranded plain t-shirts? or from any other place who can deliver me it in 2-3 days time?
c) Which design and printing technologies are used in creating custom t-shirt designs?
d) If this is not the best place to ask this question, where should I try? <comment><USER2> Perhaps you can start by using the service Spreadshirt offers. They handle the payment, printing and delivery, so you can focus on the niches you want to address and of course the designs. Is your idea working? Great! Then it is a good time to learn about printing shirts yourself. I think this way you can start with almost no costs and really learn if you idea is viable.

</comment><comment><USER3> I can't answer any of your questions deeply, but they might fit the Answers on Startups domain better. <http://answers.onstartups.com/>

How long have you been searching on Google? Is it such a neglected business?

</comment><comment><USER4> threadbird.com does awesome printing. They used to be Storenvy printing when I've used them - but they've branched off just for printing now it looks like. But they are based out of the US. Maybe drop them a line.

BTW, I don't know if your startup is just a temporary t-shirt store, but here is my 2 cents from my brief experience selling shirts: Spend a little more for the better quality shirts, you will get repeat customers. I highly recommend the American Apparel shirts. It really does make a difference. Also, if customers know that the shirt is AA, they are definitely more likely to buy if you list it for a moderate price. The quality is far superior and in my opinion, just feel better wearing them.</comment>


Spawning barebones openresty applications using ancient witchcraft - <AUTHOR> https://github.com/brickcap/restyskleton <comment><AUTHOR> Added a new option "-w" that allows you to watch the project directory for changes in .lua and nginx configuration files and automatically restart nginx process to make those changes available.</comment>


Introducing Qubes Odyssey Framework - <AUTHOR> http://theinvisiblethings.blogspot.com/2013/03/introducing-qubes-odyssey-framework.html

<comment><AUTHOR> She starts to lose me when talking about using the MS Windows kernel as a "hypervisor", but she acknowledges it's a poor solution and defends it by supposing it'd be better than nothing. Otherwise, it's a decent discussion of security through virtualization.</comment>


Ask HN: When and when not to use AWS - <AUTHOR> A lot of folks are jumping on the AWS train, especially after Netflix partnered up with AWS. people are scrambling to get their AWS dev/sol architect certificates, every board room meeting has yet another Buzzword added to the list to be slapped around, and hence to protect myself from being dragged into projects that may potentially not need the overhead of AWS, what sort of projects don't need to go anywhere the services offered by AWS? <comment><USER2> Positive of using AWS is that you learn how to do it which is a valuable job skill later on. These are important skills and the best way to learn them is on your own projects.</comment>


The CPython Bytecode Compiler Is Dumb - <AUTHOR> https://nullprogram.com/blog/2019/02/24/ <comment><USER2> There is a reason why basically every attempt to make this kind of language fast has to support some form of on-stack replacement.

For example, it's hard to optimize even local variable dataflow in python since it's part of the API : you can inspect the local frame of your caller, so you have a problem as soon as your function contains a single call. And no you can't know statically what is the call target since it can be replaced dynamically.

So either you perform the optimization anyway and then have to try to support reconstructing values correctly to support introspection, or you just do that generically with OSR and use the simple introspection on the interpeter.

Either way, there are not a lot of "simple optimization" when the language is so dynamic.

<comment><USER3> You could support markers stating "I swear this part is never going to use those dynamic features", disabling them for you and others.

E.G: I have no problem putting a few annotation telling Python I'm not going to and allow to override builtins in my program and it's dependancies.

We could make sure those markers can only be set in __main__, and crashes with very explicit errors in the unlikely event anything down there decide to do otherwise.

Indeed, many dynamic features are rarely used. They are handy from time to time, but I won't miss them for many codes.

<comment><USER4> "You could support markers stating "I swear this part is never going to use those dynamic features", disabling them for you and others."

Right now, the swing is in general to statically-typed languages that are more convenient to use, but I've thought there's room for a new dynamic scripting language that is still dynamically typed, but is written from the beginning to focus on speed. You can see some of the ideas in Julia or LuaJIT, but you pay a penalty on what can be dynamic.

One of the ideas I've had is more like the "pledge" feature that OpenBSD recently introduced. Rather than stating up front "I will not use this feature", you initialize your program, do all the dynamic stuff, then push the "OK, now I'm done being dynamic" button. After that, the program "freezes" into place, and calling a function with a new type of argument it has never seen before or something becomes an error.

My reasoning here is that the dynamic scripting languages tend not to use their dynamism evenly. The vast bulk of "dynamic" behavior is all done in an informal initialization phase, but then, for the bulk of the program's execution, you continue to pay for all the dynamism because the interpreter has to constantly follow the dynamic chains of functions, or even if the code is JIT'ed, the JIT has to be written to handle functions suddenly getting the "wrong" type, which at the _very_ least means you pay for a check the static programs don't need to pay for, and generally, you may have to pay more. You set up the dynamism once at the start of the program, but pay for the ability to be dynamic later billions and trillions and so on of times over the course of the program.

(Don't just think about how poorly this would work if bodged onto Python or Javascript or something, because I know such an attempt would absolutely be a disaster. That's why I'm hypothesizing someone sitting down and designing this language from scratch with these ideas in mind, so it'll have the correct affordances and paved cow paths and such to make this work. While you're at it, give your new dynamic scripting language a solid concurrency story, since none of the current ones have one, since they all grotesquely predate that as a concern. I think there's a hole in the programming language landscape here right now. Another way to think of this is "write a dynamic scripting language that is _designed_ to have a good, simple JIT".)

(Actually, for all the languages there are, I think there's several holes in the programming language landscape right now. You'd think everything would be covered, but it really isn't.)

<comment><USER5> > a dynamic scripting language that is designed to have a good, simple JIT

Julia is designed along these lines - its JIT compiler is really just does AOT compilation at runtime. JavaScript JITs tend to work along the lines of:

        1. Interpret (and gather profiling data including type information)
        2. JIT compile hot code, making assumptions based on profiling data
        3. Deoptimize (fall back to the interpreter) if an assumption is broken

Julia does none of this - it can only work with types that are explicitly stated or that can be inferred statically. For extremely dynamic source code, Julia's compiler must emit slow, highly generic machine code.

This is why Julia code tends to contain many more explicit types than code in other dynamic languages. Compared to other JIT-compiled dynamic languages, Julia trades-off some dynamism for compiler simplicity.

<comment><USER4> That's what I thought Julia did.

I'm proposing that you could probably get back a lot of that dynamicness if you could explicitly say "OK, I'm done being dynamic now", because in general, even Python programs that do things like introspect databases and dynamically create classes on the fly based on that still have a distinct initialization phase. Reifying that into something the interpreter/compiler (honestly, in this language design, that distinction barely matters...) understands might let you have both worlds.

</comment></comment></comment></comment></comment><comment><USER6> The author hints at the problem

> Don't count on your operator overloads to work here, though.

> by keeping these variables around, debugging is more straightforward

The transformations the author is suggesting are not in general legal. Missing operator overloads and inconsistent debugging states aren't something to gloss over - they're showing you your optimisations are just wrong!

You would need a sophisticated deoptimisation system with frame states, like JVMs or V8 has, to make them legal.

The Python compiler isn't dumb - it's correct.

<comment><USER7> From half way in the 2nd paragraph, it was obvious that the author had been looking at Python all wrong

> I wonder if the code I'm writing is putting undue constraints on the > bytecode compiler and limiting its options

If that's what you're wondering while writing Python, then you probably shouldn't be writing Python.

<comment> fake-name Ooooor, maybe you like to think about what's actually going on when you write code?

I certainly basically mentally execute code to some extent as I write it. Is there a way to program that _doesn 't_ do something like that?

<comment><USER8> Nobody has any idea what a modern x86 cpu does under the hood because we have no access to the microcode.

The only thing you can do is run your code and get an empirical answer to the question 'Is it fast enough'.

<comment><USER9> Technically true, but also useless point of view, because it's essentially saying "it's all arbitrary chaos underneath". But it isn't. You can get 90% there with basic understanding of x86 assembly and some CPU-level abstractions.

(I too execute the code in my head, but these days usually a couple layers above x86 ASM, in my own mental "bytecode" that tracks how expensive are some of programming language's operations and stdlib functions.)

<comment><USER10> Whether relevant things fit into L1 cache will make an order of magnitude more difference than whether you're using a nominally 2-cycle or 4-cycle assembly instruction. I don't believe any human programmer on a modern CPU is able to keep track of what cache level their code operates at entirely in their head; certainly such a human would not be thinking in terms of x86 assembly or normal language stdlib functions. So attempting to execute the code in one's head is overwhelmingly likely to be a waste of time.

</comment></comment></comment></comment></comment></comment><comment><USER11> Well, yes. It's a naive interpreter. The source is translated to the obvious bytecode. At run time, everything is a CObject, including integers and floats. Everything which you'd expect to be a dict really is a dict. So you spend a lot of run time checking the types of objects, dispatching, and looking up variables. There's a bit of memoization, I think, to cut down some of the lookups.

It's tough to optimize a language where any thread can change the internal variables of any other thread at any time. Python has gratuitous dynamism. Rarely does code muck with the state of another thread, but it can, and the code has to handle the worst case. There's no such thing as a thread-local variable in Python.

<comment><USER5> > any thread can change the internal variables of any other thread at any time

Why is this different from Java, where the JVM can assume that local variables cannot be changed by other threads?

That is, in the absence of special cases, which I believe include `volatile` and function calls. (Any other special cases?)

<comment><USER12> Am I missing something, or does your first question answer itself? The question asserts a specific difference. (I don't remember how it works in Java to know if the assertion is correct.)

<comment><USER5> As I understand it, the JVM can assume that local variables are not modified by other threads. My question is _why_ can't CPython make the same assumption?

<comment><USER13> Because it's not true! Threads in Python can muck around with the state of any other thread, at any time – it would be a language change to assume otherwise.

<comment><USER14> What op means is that it's not true in Java as well, but the JVM assumes it is true until detecting otherwise

</comment></comment></comment></comment></comment></comment><comment><USER15> JavaScript is really lucky. Imagine having you pet language's execution being continuously optimized for decades by the likes of Apple, Google, Microsoft and Mozilla.

The amount of brainpower that has gone into making JavaScript fast is amazing.

<comment><USER16> Well, there are multiple attempts in Python's history to make it faster, yet failed.

Most noteworthy one is Unladen Swallow from Google:

[https://www.python.org/dev/peps/pep-3146/](https://www.python.org/dev/peps/pep-3146/)

And Dropbox's now dead Pyston.

While both are pretty dynamic, Python has a rich ecosystem of C-extensions, which exposes a lot of interpreter details to developers, making moving away from the CPython implementation much harder or straight impossible if compatibility is required.

<comment><USER5> Unladen Swallow had a small fraction of the resources that Google allocated to V8, though. I think it was only worked on by a few interns.

Pyston was better supported, but I think just too ambitious - IIRC it was initially intended to be a full rewrite _and_ to be compatible with C-extensions.

<comment><USER16> Pyston as far as I was tracking, it seems to be mainly 2 devs from Dropbox, hardly that better off.

You have a point though, no company can replace javascript , the cost is straightly forbidden. But Python as mainly a backend language at the time, it can be more realistically replaced, with newer more performant alternatives like Golang, and to some extent node.js.

But it has its own stronghold, which is data/ml land stuff. However, that community has gotten around with Python in its own way, either they are tolering the slowness because that happens behind the scene, or they are bypassing the performance bottleneck to c-extensions.

So in the end, I guess people love complaining about Python's performance, including myself, but it never reaches the break point where they said enough is enough.

<comment><USER17> The number of devs is not so important. One author who is left alone from corporate BS for three years can achieve more than a collection of 10 randomly hired programmers who just disturb the lead dev.

<comment><USER18> As someone who has worked on language runtimes in a corporate environment, I believe there's some truth to this. One successful example of this would be Mike Pall, of the LuaJIT fame.

</comment></comment></comment></comment></comment></comment><comment><USER19> Indeed, a patch I created in 2010 for the peepholer to optimize 'a,b=b,a' was rejected with one particular reason being "changing order of execution starts to venture into territory that we've stayed away from (on purpose)." [https://bugs.python.org/issue10648](https://bugs.python.org/issue10648)

Not that I disagree with the patch being rejected, only that this is an example of the compiler's philosophy

<comment><USER20> I know you don't disagree with the patch being rejected, but I have to say that the reviewer gave you a firm example in which your patch changes expected behavior.

Philosophy aside, that is a fine reason to reject the patch unless you can convince the reviewer (and the committee) that you are in the right (you very well may be).

<comment><USER19> Yes, I agree that the patch was wrong in that it shouldn't optimize NAME/GLOBAL. I was unaware of those semantics when I wrote it. However that doesn't apply to FAST, the most common LOAD/STORE ops. The other reasons are why the patch wouldn't be accepted if it were fixed

Also, just want to also say Python reviewers are great. They're very good at explaining issues with patches & are willing to collaborate on improving a patch when necessary. There's a long list of backlog issues because there is simply not enough review to go around, not because of a lack of quality. Highly recommend CPython to people who want to get involved in contributing to an open source project, even just testing patches helps

</comment></comment></comment><comment><USER21> Guido himself said "Python is about having the simplest, dumbest compiler imaginable." Even a subset of this dumbest thing turned out to be a lot to cover when I dug into it at [https://codewords.recurse.com/issues/seven/dragon-taming- wit...](https://codewords.recurse.com/issues/seven/dragon-taming-with- tailbiter-a-bytecode-compiler)

</comment><comment><USER22> Fast bytecode-based implementations of dynamic languages, like JavaScriptCore, do optimizations _after_ the bytecode is generated. The bytecode is just the common frame of reference for profiling and OSR.

<comment><USER5> LuaJIT is the same, as is V8 (at least with Ignition & TurboFan). The article's assumption that _fewer instructions = faster_ does not necessarily apply to these implementations, but is approximately correct for CPython (because it's a simple bytecode interpreter).

</comment></comment><comment><USER23> Python's slowness has been a very real problem for me. It's a great language to write data-wrangling scripts in, but when there's a little bit more data, it's terribly slow. And then you have to rewrite your script in a faster language, like C++ or Rust. I've observed speedups on the order of 20x this way. Which means that I could've saved myself a lot of time by writing them in another language at the start.

<comment><USER3> I doubt it.

If you start writting a C++ process first, you will take a lot of time.

Python allow you to have a good idea of how the thing works. And if, eventually, you find out that it's not fast enough (even with pypy, numpy, a few lines of cython, etc), you may rewrite it in C++. But the rewrite is going to be much, much faster to do, because you know now what's up, and can just translate it to C++ and focus on its gotchas.

<comment><USER23> But usually, I know how the thing works. I have data in this format, and I need data in this other format. The transformation may include cross- referencing among the data, processing strings in various ways, computing sums and counts, calling external libraries, etc. These are simple to code and well-defined tasks. In my experience, they rarely benefit from prototyping.

My recent example is processing around 10m chess games to get statistics on all positions that occurred inside them (above an occurrence threshold). This required parsing the games in chess notation, using a chess library to simulate the moves to get positions, and counting how often each position occurred, in which matches, etc. My first try was with Python. After I realized it's unbearably slow, I tried using PyPy, running multiple processes for each core, etc., and in the end my approximation was that the job would finish in a couple of hours. I tried more optimizations and nothing helped. And there's no number crunching to use numpy for. Then I wrote the same script in Rust, and it ran in a couple of minutes, finishing well before the original Python script would have finished, had I left it to run. I arguably didn't save time by using Python here.

<comment><USER3> If you knew how it works, and it was fast to write it in rust, why didn't write it in rust in the first place ?

Because it was easy in Python.

It was easy to write the same script in Rust, then, because you already got the Python version working.

</comment></comment></comment></comment><comment><USER24> The local variable elimination optimization breaks introspection features.

        def foo():
          a=1
          return a

Then we can inspect the local variables:

        print(foo.__code__.co_nlocals)
        print(foo.__code__.co_varnames)

On a related note, I believe it was also a deliberate decision to keep the name of all local variables during compilation. This is of course very different from C.

<comment><USER25> Actually, C compilers with -O0 keep all of the local variables, for debugging purposes. O0 is deliberately bad. And if you file bugs complaining about debugging at higher optimization levels, well, if you want loop fusion and splitting for high performance, you're going to lose some debugging.

<comment><USER26> I wonder if Python could similarly have opt-in optimization ('-Osomething') for those who are sure it won't break anything. Though I guess the standard lib might get in the way immediately.

<comment><USER27> CPython already has -O and -OO, they just don't do much that's useful (and are mostly detrimental): -O will skip asserts and set __debug__ to False, -OO will also remove docstrings.

CPython's compilation pipeline just has a fairly straightforward peephole optimiser: [https://github.com/python/cpython/blob/master/Python/peephol...](https://github.com/python/cpython/blob/master/Python/peephole.c)

<comment><USER25> You're describing opt-in pessmisation, not opt-in optimization.

</comment></comment></comment></comment></comment><comment><USER28> > Unless the Python language specification is specific about this case

No there's no such thing called Python language specification. Every implementation of Python is based on CPython. This also leads to the sad fact that every non-CPython implementation has to provide C API that's compatible with CPython if they want to be adopted widely.

<comment><USER5> > Every implementation of Python is based on CPython.

Not _quite_ true - there are notes in the documentation that call out parts of CPython's behaviour as "implementation-specific".

These are quite rare though. I seem to recall the suggestion being made that MicroPython shouldn't call itself "an implementation of Python" simply because its internal string encoding is UTF-8.

> This also leads to the sad fact that every non-CPython implementation has to > provide C API that's compatible with CPython if they want to be adopted > widely.

A specification for the C API wouldn't necessarily help with this. The problem for alternative implementations is that the C API is closely tied to CPython internals - there is no reason that having a specification would change that.

Designing and specifying a more abstracted API would be useful - but I don't see it happening.

<comment><USER29> > _there are notes in the documentation that call out parts of CPython 's > behaviour as "implementation-specific"_

In a document like this, that means "doing whatever CPython does in a way that we are not bothering to commit to documentation" (and that any other implementation will have to reverse engineer and implement).

</comment></comment></comment><comment><USER30> As the article points out, CPython is dumb _on purpose_ , which benefits transparency, maintainability, and development. I've always appreciated this -- it's obvious when you're doing something expensive in Python because you know the interpreter is going to do pretty much what you'd expect it to.

</comment><comment><USER31> "...in this case for my wife's photo blog". Stunning bird photographs, really exceptional. And nice work on that responsive static album generator. Now time to continue reading about CPython byte code...

</comment><comment><USER32> Some people are working on optimizing ruby "bytecode" (what the VM interprets): [https://developers.redhat.com/blog/2019/02/19/register- trans...](https://developers.redhat.com/blog/2019/02/19/register-transfer- language-for-cruby)

I'm pretty sure the same concepts could be applied to CPython.

</comment><comment><USER33> Seems like part of the problem is that there might not be much overlap between the types of things he points out that aren't optimized - which are obscure and useless - and what could "legally" be optimized.

So, yes, something like this isn't optimized:

def foo(): return [1024][0]

But it's also pretty unlikely to see something like that in actual code. One could argue that that's just an example of a /type/ of a more general case, but I think you'd find that the more general case can't be safely optimized because Python is insanely dynamic. So e.g.

def foo(): return SomeArrayLikeThing(1024)[0]

can't be optimized because not only might the behavior be very different from a typical Python array, the behavior could very easily not be determined until the exact moment when that code is run.

IOW, the things the author points out are things that, in practice, end up being so narrow and rare that there's no real point in trying to optimize them.

</comment><comment><USER34> It hasn't been updated in 5 years, and IIRC Python2 only - but Russell Power's "Falcon" was an attempt to solve these issues that showed a lot of promise.

[https://github.com/rjpower/falcon](https://github.com/rjpower/falcon)

<comment><USER5> Thanks for this - I hadn't seen it before. Looks like an implementation of the core Python interpreter designed to work more like the reference interpreter for Lua.

Unfortunately it seems to be incomplete - and even if support for exceptions etc were added, I suspect some of Python's more highly dynamic features (e.g. inspection of stack frame objects) would be extremely difficult to support in a compatible way.

I think supporting such niche dynamic features would be essential - I've found the Python community to be strongly against the idea of changing (or removing) such features in the pursuit of increased performance.

<comment><USER35> Have you seen this twitter thread? [https://twitter.com/mitsuhiko/status/1091802711908106240?s=2...](https://twitter.com/mitsuhiko/status/1091802711908106240?s=21)

Lots of high profile python developers not so against a version of python that was less dynamic and more performant.

</comment></comment></comment><comment><USER36> If you want to see an advanced Python compiler, have a look at PyPy. While CPython bytecode compiler is "dump", it's as smart as it can be. You can do crazy stuff with speculative replacing of bytecodes with guards and type- specific bytecodes, but then you might as well create a full just in time compiler. It's incredibly hard to create optimizations on bytecode level without changing semantics, which Python rightly stayed away from.

</comment><comment><USER37> This [1] is a bytecode optimizer for Python - it takes the bytecode from CPython's compiler, and outputs bytecode with a few select optimizations.

Anyone know of someone taking this idea further?

[1] [http://code.activestate.com/recipes/277940-decorator-for- bin...](http://code.activestate.com/recipes/277940-decorator-for- bindingconstants-at-compile-time/) \- it's old, for Python2.4

<comment><USER38> I work on a library for doing Python bytecode transformations like this, but with a more abstract API. Here is a similar transformation with this library, which works with Python 3: [https://github.com/llllllllll/codetransformer/blob/master/co...](https://github.com/llllllllll/codetransformer/blob/master/codetransformer/transformers/constants.py)

</comment></comment><comment><USER39> That's why php7 is now 2x faster. Just by simple escape analysis, optimizing to stack-allocation and omitting unnecessary refcounting.

But you need to be aware that optimization passes are costly, and with a dynamic language this adds to the overall performance, unlike as with static languages where the optimizer may spend seconds, but run-time is unaffected.

<comment><USER40> The optimization is a one time cost at load time that Python already caches anyway.

</comment></comment><comment><USER41> Even the Java compiler is pretty stupid: it's HotSpot doing amazing things under the hood that makes it fast.

</comment><comment><USER42> Some optimizations can be enabled

"python -OO -m compileall mydir"

But it's merely skipping comments and names

</comment><comment><USER43> I think CPython is quite clear about not optimising python code, no? I think both the docs and python programmers quickly disabused me of that notion (although this was some years ago so I guess things could have changed).

After all PyPy's selling point is that it does optimise, isn't it?

<comment><USER44> Of course he does not intend to criticize it, but to show what the dumb compiler is.

> To be clear: This isn't to say CPython is bad, or even that it should > necessarily change. In fact, as I'll show, dumb bytecode compilers are par > for the course. In the past I've lamented how the Emacs Lisp compiler could > do a better job, but CPython and Lua are operating at the same level. There > are benefits to a dumb and straightforward bytecode compiler: the compiler > itself is simpler, easier to maintain, and more amenable to modification > (e.g. as Python continues to evolve). It's also easier to debug Python (pdb) > because it's such a close match to the source listing.

<comment><USER45> Right, the CPython runtime is first trying to be correct (IMHO is also correct). Very few optimizations are made by the compiler/interpreter. This has long been known by Python devs, and exploited by specifically using APIs known to be written in C/C++. e.g. using 'map' instead of a list comprehension. Map was generally faster (at least in the 2.x days) than an equivalent list comprehension.

<comment><USER46> Just FYI this specific wisdom you're suggesting is exactly backwards, or at least could be depending how how you read it.

        timeit.timeit(setup='x = range(10000); l = lambda n: n + 1', stmt='map(l, x)', number=1000)

provides approximately 1.2 seconds to do that. The same with a listcomp:

        timeit.timeit(setup='x = range(10000)', stmt='[n+1 for n in x]', number=1000)

runs in a half second.

Although dropping the inlined function runs slower still (1.6s):

        timeit.timeit(setup='x = range(10000); l = lambda n: n + 1', stmt='[l(n) for n in x]', number=1000)

The second is the fastest because you drop the overhead of the function call, which does stack pushes and pops, and instead do them locally. The last is the slowest because it does the stack pushes and pops, as well as loads extra globals, which is slow.

On 3.6 the map version runs in 0.00067 seconds, because it doesn't actually do anything, it just constructs a generator object.

The general point is well taken. My favorite bit of trivia like this is the fast matrix transpose: `zip(*matrix)`, which does everything in pure c, and is also likely the shortest way to do the transpose in python.

<comment><USER27> > Just FYI this specific wisdom you're suggesting is exactly backwards, or at > least could be depending how how you read it.

Yeah. map is usually faster _if you already have a function to invoke_ (especially if that function is a builtin or in C). If you have an expression and have to wrap it in a lambda to get it in map, it's going to be way slower than the listcomp because all things considered CPython's function calls are expensive.</comment></comment></comment></comment></comment>


Google's HQ Redesign - <AUTHOR> http://www.wired.com/2015/02/first-look-googles-reconfigurable-see-thru-headquarters/

<comment><USER2> I understand why architects are attracted to transparency - it's beautiful and let's you see the internal structure of what the architects spend all their time designing. But letting that much light into an enclosed space is basically a giant greenhouse. Either you're uncomfortable, or you're spending all sorts of energy keeping it cool - if it's even feasible to keep such a large space comfortably ventilated...

</comment><comment><USER3> [https://news.ycombinator.com/item?id=9120364](https://news.ycombinator.com/item?id=9120364)</comment>


Women 2.0 - <AUTHOR> http://www.women2.org/

<comment><AUTHOR> Women 2.0 is committed to increasing the number of women entrepreneurs starting high growth ventures by providing the resources, network, and knowledge for the launch and growth of their company.

Anyway, wow~</comment>


Ask HN: What has improved your developer experience the most? - <AUTHOR> Is there a language, tool, way of thinking or thing of any kind that has improved your developer experience? <comment><USER2> I believe that ways of thinking are so much more powerful than languages or tools that I wouldn't lump them together in the same question.

One way of thinking that has made me a better developer is insisting to myself that I need to understand how things really work. For example, if I've fixed a bug but can't understand why my fix works, I have no way of knowing if I've really fixed the bug or just made one of its symptoms go away (and maybe created two more bugs). Because understanding how a system works requires understanding the systems it interacts with, I've become good at reading and understanding other peoples' code (which seems to be a surprisingly rare skill).

Another way of thinking I believe is useful is to try to approach all problems in a logical way. If I catch myself trying random solutions to see if they work, I stop and think some more, or look at documentation.

</comment><comment><USER3> Emacs, bar none.</comment>


AWS Global Accelerator for Availability and Performance - <AUTHOR> https://aws.amazon.com/blogs/aws/new-aws-global-accelerator-for-availability-and-performance/ <comment><USER2> I'm having a hard time trying to wrap my head around this. What are the differences between this and CloudFront?

<comment><USER3> Seems like Amazon's response to GCE Premium Network Service tier. Instead of user traffic going over regional ISPs until it hits the AWS region, user traffic hits an AWS PoP and then uses Amazon's backbone network to get to the AWS region running your service, leading to marked improvements in multi- region deployments.

With CloudFlare, you're limited to what you can run in a CloudFlare PoP (i.e. CloudFlare workers).

<comment><USER4> (CloudFront, not CloudFlare.)

So CloudFront added support for custom origins a while back (making it more like normal CDNs) and with Lambda@Edge you could direct the user to the correct region.

[https://aws.amazon.com/blogs/networking-and-content- delivery...](https://aws.amazon.com/blogs/networking-and-content- delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/)

</comment></comment></comment><comment><USER5> I turned this on for an ALB I have in us-east-1, and the performance for Global Accelerator is noticeably worse than using regular commercial Internet transit. Using the 8 standard endpoints from worldping, Amazon Global Accelerator has 44% slower latency on average, with the South Carolina endpoint being 172% slower and the New York endpoint being 96% slower. Four of the other worldping endpoints are neck and neck, neither faster nor slower.

</comment><comment><USER6> It is like a global LoadBalancer for several loadBalancers... Does that mean we do not need to refer the different regions for AWS services in the future?

<comment><USER7> Unlikely. This is for making your own application available globally via a single endpoint.

AWS services are isolated and operated independently in each region so you'll still have to use regional endpoints for those as necessary.

</comment></comment><comment><USER8> Teridion will not like this, at all. Good for the customers though.

</comment><comment><USER9> can someone clearly explain the pricing for this?

</comment><comment><USER10> Sometimes I wish I built on AWS, but then if I did build on AWS I would be so tempted to throw money at everything they have and incurring at least 3-5x of my current infrastructure costs in the process.</comment>


Show HN: Operational transform for realtime collaborative editing in JS/Flow - <AUTHOR> http://cricklet.github.io/sites/blue/index.html <comment><USER2> The basic problem with OT (and current "real-time" collaborative editing approaches) is that they can only achieve eventual consistency.

While this sounds great, eventual consistency DOES NOT mean semantic consistency. This rules it out for many applications where semantic correctness is important.

Even for simple text documents you can get eventually correct but semantically incorrect results.

For example, consider the sentence

"The car run well"

This has an obvious grammatical error.

Now imagine two collaborative editors.

Editor 1: Fixes this to

"The car runs well"

Editor 2: Fixes this to

"The car will run well"

Depending on the specific ordering of character inserts and deletes this could easily converge to

"The car will runs well"

Obviously this statement is both grammatically incorrect as well as semantically ambiguous. (However, both editors see the same result and it is hence eventually consistent). Worse, OT collaborative editing will silently do this and carry on.

Now, for non-critical text where errors like this are ok, this may not be a big problem. But imagine contracts or white papers, or trying to use this on something like a spreadsheet where semantic correctness is critical and one can see why the current scope of collaborative "real-time" editing is very limited.

In general current "real-time" editing approaches like OT are outright dangerous.

<comment><USER3> I would expect that if an editor makes a change, their change should be preserved. There is no general case where you can decide which edit to keep, because in some cases(like the one you presented) people are editing the exact same sentence, but far more often people will not make edits to the same small part at the same time(at least in the real world). This makes OT very practical since generally the eventual consistency can be reached quickly, and there is consistency, so the results with given inputs are predictable.

<comment><USER2> It is fairly trivial to construct an example where editors are editing _different_ sentences and OT takes two locally semantically correct states and converges to a semantically incorrect (but grammatically correct) state.

I think OT and other "real-time" collaborative editors are practical if you are willing to (or your use case can) live with "silent semantic errors".

The greater the document "interconnectivity" (eg, paragraph A is semantically related to paragraph C), the greater the likelihood of having far-flung silent semantic errors.

For documents like spreadsheets this is very obvious because you start getting nonsensical results and (hopefully) errors very quickly. For Word-like documents, the errors are "silent" and thus much more insidious.

My point was that that is an element of OT which many users don't realize.

With regards to predictability, I would not call the results of OT predictable from a user's perspective. It is predictable in the narrow sense that for a sequence of arrival of operations AT THE SERVER it is predictable.

However, it is impossible for a user to predict how their local operations will interleave at the server with other users' local operations. For all practical purposes the converged result is unpredictable from the user's perspective.

The only property which one can confidently assert with OT is eventual consistency.

<comment><USER3> Yeah, I guess I see what you are trying to say. I just want to clarify when I say predictable, I mean that given a set of operations. No matter the order they come in, the results will be the same. This makes OT powerful in that everyone just needs the operations eventually in order to have a consistent document. The only middle ground that I could see that would allow predictability in the document, and help mitigate these silent errors would be to notify users of when they have both edited the same range before consistency was reached. This would catch "almost" any case that I think you are talking about, although would of course miss the situations in which semantic errors arise due to errors in very different parts of the document(e.g. referencing a figure 2.1, while someone changes that figure to 2.2), but these errors can still easily arise with a single editor, and so are not really unique to OT. I do think that it would be nice to have a solution to that problem though...

</comment></comment></comment></comment><comment><USER4> Great! I like the format of the post a lot: demo, code example and super clear explanation all combined in a good starting point on the subject.

(You could also have cited Etherpad as a common implementation in addition to Docs. Etherpad was a direct predecessor to character by character OT in Docs —the team was acquhired— and it is still widely used by many organizations. But then there is so many examples and libs, I understand that you wanted to just give context!)

</comment><comment><USER5> Wow! Front-end only is actually a great advantage for me. I actually tried to modify [ShareDB] to be front-end only[1]. (ShareDB uses WebSockets or any other full duplex stream; it's a great reference if you want to implement true client/server.)

I guess my use case is quite unique: [Todo.taskpaper] needs to sync multiple "views" of a single document in the same web app. Right now it uses very naive syncing; I'm going to try to upgrade it to blue-ot.js.

[ShareDB]: [https://github.com/share/sharedb](https://github.com/share/sharedb)

[1]: [http://stackoverflow.com/q/40616650/117030](http://stackoverflow.com/q/40616650/117030)

[Todo.taskpaper]: [https://todo-taskpaper.leftium.com](https://todo- taskpaper.leftium.com)

</comment><comment><USER3> This is cool! I've been working on something similar in Go, but I haven't spent much time on it recently. Is this a purely front-end application, or is there a server associated with it?

<comment><AUTHOR> Thanks! My implementation is currently front-end only.

Here's the code that simulates all the client/server communication: [https://github.com/cricklet/blue- ot.js/blob/master/js/ot/orc...](https://github.com/cricklet/blue- ot.js/blob/master/js/ot/orchestrator.js#L533)

It shouldn't be too hard to take that and put it in an actual client/server architecture. The client needs to have a way to send local operations to the server (this can just be an endpoint on the server) and the server needs a way to broadcast operations to all clients (probably webRTC?).

<comment><USER6> Hey Kenrick, I agree - WebRTC would be a good choice since it allows out of order packets, that can speed stuff up quite a bit.

Did you see this article? It was posted on HN yesterday. It links to a gh project that might be useful for your project. [https://getkey.eu/blog/5862b0cf/webrtc:-the-future-of-web- ga...](https://getkey.eu/blog/5862b0cf/webrtc:-the-future-of-web-games)</comment></comment></comment>


Google+ launches opt-in "Find my face" feature - <AUTHOR> http://www.washingtonpost.com/business/technology/google-releases-opt-in-find-my-face-facial-recognition-tool/2011/12/09/gIQAlUQ6hO_story.html

<comment><USER2> Ok this is a bit, uh, unsettling. For 'find my face' to work they have to already classify your face in images regardless of your 'opt in' status. And of course if you turn it on it pretty much instantly knows which pictures have your face in them.

I would like to see the first national security letter that demands Google hand over all pictures with the following 'face' in them. But I won't because the first rule of NSLs is you don't talk about NSLs.

I hope that when it gets abused by the government Google rips it out rather than allowing itself to be used in that way.

(apparently I woke up on the paranoid side of the bed today)

<comment><USER3> The same paranoia applies to all photo hosting services that can link photographs to accounts. (shrug)

<comment><USER4> The difference is that other photo sharing sites don't hold a huge amount of behaviour and associative data about you.

To put it in a context you have to consider the fear involved when countries like China have already been caught breaching Google systems.

It might not mean much to us westerns as generally we aren't afraid of your government and it has at least they have some due process. Many totalitarian governments don't and from what the media spread they aren't afraid to arrerst everyone you associate with as well.

You can pretend that it isn't happening, but it is, and china isn't alone. Processes like this lead to industrialised abuses of power and perseuction of innocent people that have may have signed upto services without considering the full impact of just being snapped in a photo with someone else they barely know... and what evidence do they have this person is guilty? well like any normal person they probably read up on the news, where shocked about a few things, and all of a sudden you can pull items out of context and have a history of being involving with undesired behaviour.

</comment></comment></comment><comment><USER5> I'm glad to see Google taking this route when adding new features to its social network.

I am _infuriated_ by Facebook opting me in to every new sharing feature when they add it. It is a constant maintenance headache for people like me who want to simply have a presence on Facebook without participating on a day to day basis.

</comment><comment><USER6> Could this mean in the future that simply showing your face in a picture will provide the world the means to find all sorts of information about you? Imagine a future where high-resolution cameras are common and anyone's identity can be drawn from a photo. On one hand, perhaps it could be used to quickly identify criminals. Public cameras or bots scouring publicly posted photographs might alert officials to recent uploads helping to pinpoint their location. In an entirely different scenario, the people participating in protests would be doxed; perhaps their frequency would be recorded somewhere. Soon it would become obvious who the loudest voices are.

</comment><comment><USER7> Side note: Not even WaPo can seem to get it right. The unofficial slogan is "Don't be evil" not "Do no evil", which is what they have as one of their photo captions.

</comment><comment><USER8> Is it really respectful of privacy rights to allow me to opt-out of tagging? People should be able to photograph me, attach my name, and share with their friends without my intervention. What happens in public is public.</comment>


Ask HN: Naming service - <AUTHOR>

Do you know any good alternatives to http://startupgods.com/ naming service? <comment><USER2> Hmm... they help you find the name for $249 but does that include buying the domain?

There are quite a few naming services - pickydomains,com is an example.

I'm usually ok at finding decent names, if you want me to find you a few that are available shoot me an e-mail. Im my username on gmail.com

It'll probably save you $249! :)

</comment><comment><USER3> BustAName.com is a great site if you already have an idea of the words.

</comment><comment><USER4> <http://stylate.com/></comment>


Is Yahoo buying failed startups because it's the only way it can get good devs? - <AUTHOR> http://www.theverge.com/2013/8/2/4583284/marissa-mayer-buys-failed-startups-yahoo?utm_source=buffer&utm_campaign=Buffer&utm_content=buffer1db05&utm_medium=twitter

<comment><USER2> Is The Verge writing this because it's the only way it can establish a presence on HN?</comment>


Lang5 – A Stack Based Array Language - <AUTHOR> http://lang5.sourceforge.net/tiki-index.php <comment><USER2> > Obviously this program [in C] contains a lot of things that deal with the > computer and not the problem of calculating a sum.

Stack based languages replace "dealing with the computer" with "dealing with the stack". Except the stack is always invisible, because it's a runtime artifact and not a code artifact. Their front-page example neatly dodges this, but their examples on the about page make this much more visible. For instance, here's their prime finder:

        : prime_list
          1 - iota 2 +  dup dup dup
          '* outer  swap in not  select
        ;

        100 prime_list .

<comment><USER3> Stack is cool as long as it's the top element or two that you care about. Anything more complex, and you want (well, I do) some sort of a binding syntax, so that it is possible to refer to the value symbolically. I find all those swaps and dups impossible to reason about.

<comment><USER4> I've found that there can be some cool stack combinators (like Factor's dip), but binding in stack based languages is nice in that it lets you effectively turn off having to think about the stack in depth, which frees up mental resources for thinking about the problem at hand.

</comment></comment></comment><comment><USER5> Kinda neat, but it breaks the APL convention of reading right to left. J version of their example:

+/ 1+ i.100

Interesting that it was developed for the HP48:

[http://archive.vector.org.uk/art10500710](http://archive.vector.org.uk/art10500710)

<comment><USER6> Given that I read left to right usually, I think that this is a _good_ change

<comment><USER5> Pretty sure you don't do that in coding. I do in R sometimes because it has ->, but generally speaking, coding is actually done right to left, just like K and Hebrew.

<comment><USER6> Uh? No I write code (C++) left to right most of the time, and when I have to do a right to left update, the IDE's stupid autocomplete (vscode but other IDE are the same) keeps making annoying unneeded changes.

<comment><USER5> Literally everyone writes J or K from left to right also: it's not read that way any more than C is.

</comment></comment></comment></comment></comment><comment><USER7> Love it aesthetics!

Not sure if it has its niche though. I mean, "stack based" is not really a feature on its own, and we have tons of options to do tensor processing in conventional languages; but the conception is awesome.

</comment><comment><USER8> Related from 2018: [https://news.ycombinator.com/item?id=17286754](https://news.ycombinator.com/item?id=17286754)

</comment><comment><USER6> While I like its 'style', I'm not sure about the Perl5 implementation, is the speed 'good enough'?

</comment><comment><USER9> It should evaluate from right to left, like all other array languages. Looks neat though!

<comment><USER10> This is a mistake perpetuated from old array languages.

Evaluation from left to right is more natural to people using latin alphabet.

It's totally arbitrary anyways. I suspect the only reason why there is right to left evaluation in APL family is to support assignment like this:

      x: 1 + 2 + 3

which would have to be the following in left to right

      1 + 2 + 3 :x

<comment><USER9> I think most people would agree that 'a:f g h x' is easier to read than 'x h g f:a'. This may be an artifact from familiarity from math or something else, but I think the point still stands. I've personally never found RPN languages easy to read.

</comment></comment></comment><comment> 5- A different APL in Forth: [http://www.cosy.com/CoSy/](http://www.cosy.com/CoSy/)</comment>


First Recorded Usage of "Hacker" - <AUTHOR> http://duartes.org/gustavo/blog/post/first-recorded-usage-of-hacker

<comment><USER2> It's like a disease endemic to us nerds. Honestly who looks at the word "hack" and thinks hey i'm gonna make a white hat form of this? An OS called GNU?? Linus was lucky he had a buddy in marketing to help him name the kernel otherwise we'd have something like the clusterfuck in gnome & kde packages.

<comment><USER3> hahahah.

Exactly. Specifically, Linus' name for Linux was "Freax"

<comment><USER4> _"... Linus' name for Linux was "Freax" ..."_

By himself he referred to it as _"Linux"_ but thought it was lame. Only after the name being suggested by others did he agree. I got this "first-hand" from Revolution OS ~ <http://en.wikipedia.org/wiki/Revolution_OS> You can watch it here ~ <http://video.google.com/videoplay?docid=7707585592627775409>

<comment><USER3> thanks!

</comment></comment></comment></comment><comment><USER5> "Hacker" is a bit like the term "witch" in the Wizard of Oz.

"Are you a good hacker, or a bad hacker?"

The techniques and thinking styles are the same, either way.

<comment><USER6> Decades ago to crack into a computer you needed to be a hacker, since computers were all different. Today we have "script kiddies" who most definitely aren't hackers, but are crackers.

I don't think there's a script-kiddie equivalent for phone systems.

<comment><USER7> I thought the original hackers were almost exclusively using AT&T's system.

<comment><USER8> Considering that Ma Bell was a monopoly until 1984, I'd agree.

To paraphrase John Draper (aka Captain Crunch), "A system is a system, whether a phone network or a computer."

</comment></comment></comment></comment><comment><USER9> Wardialing is over 40 years old? Learn something new every day.

<comment><USER10> Wierd, I thought war dialing (at least by hand) came about around the time of the Strowger Switch? I read somewhere (sorry, no link) that as telephones became popular people would ring numbers sequentially to see who was at the other end.

</comment></comment><comment><USER11> Also: First usage of a masculine pronoun when discussing hacking! Gotta protect 'the boys'.</comment>


Julian Assange: Google 'Shit-bag' and NSA - <AUTHOR> http://cryptome.org/2013/08/assange-google-nsa.htm

<comment><USER2> A couple of weeks ago when Snowden had a similar leak about Microsoft's compliance with NSA the everybody was up in arms against them. Naively forgetting that Google is the one that collects way more information and has way more context about most people and is very likely sharing that information with NSA as well. Now here you go!</comment>


The Master-Slave Analogy in Technical Literature - <AUTHOR> http://www.historyoftechnology.org/eTC/v48no2/eglash.html

<comment><USER2> I agree that the term is bad taste and not really a good metaphor anyway. Slavery was about people trading and legally owning other people, and nowadays refers to a certain type of adult relationship. Both of them do not adequately describe what compsci master-slave aims to convey - e.g. an asymetric cloning strategy from an original.

I'd be happy for the term to be scrapped.

<comment><USER3> I think "slavery _is_..." would be more accurate, given it's ongoing existence on the planet.</comment></comment>


AIRBNB for garages - <AUTHOR>

People, i've decided to launch a platform to connect people listing and those who want to rent garages.
Do you guys have any feedback to give me and maybe help me out?
thanks
www.pamg.co <comment><USER2> This is something that probably does need to exist.

Suggestions:

* I have no idea how to see whether you have inventory in my city (I assume you have none). The classic call to action on the front page of sites like this is "look up a location".

* You're not doing a good job of selling to lessors, which, because you have no inventory, should probably be the lead on your site.

* You can sell to lessors with the same search box you'd offer to renters, and use it to turn your biggest weakness (no inventory) into an advantage ("there's no competition for you right now in Chicago, and 4984 people have used us to find a space in Chicago! Let's get your garage listed!")

* "CL" is not some kind of universal shorthand for Craigslist.

* Don't bury "save 70% on parking costs" in the middle of a paragraph 3 clicks into your site.

* Nobody cares about "multi-platform". Do you see words like that anywhere on the front page of Airbnb?

* Nobody wants garage analytics, so if you're going to sell some kind of analytics-based value proposition, you need to lead with the benefit and probably bury the word "analytics".

* The copy on this page seems a little bit in love with itself, for instance by talking up the importance of a desktop UI and a phone UI. Who cares? Be confident in what you're trying to sell and the value you're providing, and forget about all the technical detail. Nobody cares.

* Your "About Us" has nothing to do with parking. Fix.

Good luck!

<comment><AUTHOR> thanks for the tips buddy. can you just clarify the 3rd bullet? What do you mean my 4984 people have used us to find a space in Chicago?

<comment><USER3> The point is, if you list your garage space, there's a good chance it will get leased. 4984 is one of your site's metrics that can help convince people to take action.

<comment><USER2> You might also be able to drive those metrics externally from things like long-tail SEO.

</comment></comment></comment></comment><comment><USER4> Is anybody doing anything to connect bands with rehearsal space?

</comment><comment><USER5> Website not clear if selling parking spots or garage space.

<comment><AUTHOR> it's just a platform to rent private garages

</comment></comment><comment><AUTHOR> btw, go ahead and signup at [http://signup.pamg.co](http://signup.pamg.co)

</comment><comment><AUTHOR> we've checked them and they are doing a nice job in UK i guess. I wanna tap into the american market.

</comment><comment><USER6> pamg is not memorable. I think a more brandable domain name would help immensely.

<comment><USER2> Airbnb isn't particularly memorable either; we just think it is because of all the work they've put into the brand. Meaning is usually invested into names, not extracted from them.

Best example: "ebay".

Move on from the name.

<comment><USER6> I disagree about airbnb. The name at least hints at what it is, as 'BNB' is a fairly common term for 'Bed and Breakfast' which is of course, a place to stay. I had no idea that PAMG stood for Park At My Garage until I clicked through.

</comment></comment></comment><comment><USER7> Check out parkatmyhouse.com

<comment><USER2> UK only, for what it's worth.

<comment><USER7> No, I live in San Francisco and used it this weekend to park near the airport.

</comment></comment></comment><comment><AUTHOR> anyone else?</comment>


Use constexpr for faster, smaller, and safer code - <AUTHOR> https://blog.trailofbits.com/2019/06/27/use-constexpr-for-faster-smaller-and-safer-code/ <comment><USER2> Thanks for sharing constexpr-everything, i was looking for a tool like that. Did you consider to implement it as an (implicit) optimization step for clang? Also, i like how short the source is, i think it will help me getting started with libtooling.</comment>


Using Videogames to Study Japanese - <AUTHOR> https://blog.nihongo-app.com/using-videogames-to-study-japanese/ <comment><AUTHOR> I spend a lot of time playing games as a way to study Japanese. So I wrote a blog post summing up everything I've learned!

From picking the right game, to finding scripts, to study strategies, this is how I get the most learning out of the time I spend playing.

If you have any thoughts/question/comments please let me know!

</comment><comment><USER2> important note, dont learn too much spoken Japanese from games as much like learning from anime the way the characters speak is a little different from how people actually speak in real life so you may actually sound a bit odd (imagine a foreigner speaking to you in English but with Marvin The Martians voice) im not saying dont use it just dont make it all you do or youll both sound strange and be unprepared for the machine gun pace of day to day conversation

<comment><AUTHOR> Yeah, definitely a good point.</comment></comment>


Radar Radio – The $4m-in-debt shut down digital radio - <AUTHOR> https://www.failory.com/cemetery/radar-radio <comment><USER2> Wow, I didn't realize they went under.

It'll be interesting to see if platforms like Boiler Room meet a similar fate. Mostly because they're no longer fringe enough to support their original values (I stopped following them after a Call of Duty collaboration haha).</comment>