Map of high-speed rail lines planned for US - <AUTHOR> http://scienceblogs.com/dispatches/2009/04/obama_reveals_high_speed_rail.php#more

<comment><USER3> I would love to see effective high speed rail in this country. I'm not so big on air travel.

Does this plan create new tracks that are solely used for transportation? Or is there cargo too? Because I know one of the biggest hassles with Amtrak - <USER2> least in the west - is that cargo carriers own the tracks and get priority.

I'm also kind of surprised that there isn't a high speed link for the three networks. That's probably asking too much, but if I could get to SF or Chicago from the PNW at high speed I'd be a happy guy.

</comment><comment><USER4> While I'm glad to see us expanding our rail lines, why is there an east-west link? I can't see rail surpassing air travel in this case in terms of price, and time is clearly not in rail's favor for long trips (like it is for short trips, which helps the high prices of rail slide by).</comment>


How I submit my startup website here? - <AUTHOR> i got flagged once i tried to do that (https://conferfly.com). any idea how i should post my startup link in here? thank you! <comment><USER2> [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

Have you seen this?

</comment><comment><USER3> I see what you did there. I like it.</comment>


Ava – Simple concurrent test runner - <AUTHOR> https://github.com/sindresorhus/ava

<comment><USER2> An "opinionated" framework cannot – by definition – "rule them all".

<comment><AUTHOR> Well, it's trending already ^^

</comment></comment><comment><USER3> I think a smarter solution would be to build a test runner that can run every .js testing framework.

Creating "yet another javascript framework" isn't really progressing the industry in any way.

</comment><comment><USER4> > atomic tests, meaning tests that don't depend on global state or the state > of other tests

We normally call this "hermetic", not "atomic".

<comment><USER5> Test automation professional here.

"Hermetic" means not relying on the performance of resources not under test, such as an external server. You get away from that with a combo of test doubles, fake servers, or real servers running on test localhost/cluster and strictly under that machine's control.

"Atomic" isn't really a standard term in testing as much as "hermetic" is (though I haven't heard "hermetic" much either until recently when Google Testing Blog started popularizing it).

Edit: googling "atomic unit test" shows that it's used more widely than I thought.

But generally, just by what "atomic" means (stands alone), I would interpret that to mean not sharing state between tests--i.e. nothing where the last test creates your fixture and your next test uses it, or multiple tests together form a sequenced scenario.

QUnit uses it that way too, for example:

[https://qunitjs.com/cookbook/#keeping-tests- atomic](https://qunitjs.com/cookbook/#keeping-tests-atomic)

Of course, your group might normally call that "hermetic," but you'd be out of step with most others.

</comment></comment><comment><USER6> What does Sindre Sorhus actually make besides those two iPhone apps he put on the app store? He's a widely seen name in JS open source, but if you only write tiny bits of software here and there to help other people write software, are you really making anything, or just making the process a bigger pain?

<comment><AUTHOR> He's the cure for cancer. Now seriously, look at my number of stars and followers.

</comment></comment><comment><AUTHOR> No more mocha, tape, Qunit, intern, Jasmine, Unit.js, Sinon, Buster, Chai or Wallaby.js. This is the best.

<comment><USER7> [https://xkcd.com/927/](https://xkcd.com/927/)

<comment><AUTHOR> Yes, but this is the one.</comment></comment></comment>


Startup - Bill Watterson, a cartoonist's advice  - <AUTHOR> http://www.zenpencils.com/comic/128-bill-watterson-a-cartoonists-advice <comment><USER2> I wish more people in software followed this kind of advice. I see posts about air hockey or ping-pong tables and fully stocked mini-fridges as if that is an acceptable replacement for ones free time and best creative years. Are we children, so easily fooled by the shiny, bright candy in the checkout aisle? Worse yet those who take the corporate-ladder type jobs at a big corp like MS, and sacrifice their friends, family, and home for something as meaningless as office or tablet apps.

Your startup is probably not changing, or even improving the world. Your social media killer app is part of the problem, not the solution. And I _know_ Microsoft/IBM/Oracle/etc gave up on improving the world a long time ago, instead opting for "shareholder" value, whatever that is. What good is money you can never enjoy? Your kids won't thank you if they don't even know who you are and have never spent time with you. Exhausted evenings don't count.

I have chosen door number 3. I live an ultra-frugal lifestyle and am already planning an exit from my day job in the next decade, to retire before 40.

People like Bill Watterson, Cory Doctorow, and Richard Stallman are on to something. They are actually enjoying life now - Are you?

<comment><USER3> >>Your kids won't thank you if they don't even know who you are and have never spent time with you.

Most kids, the moment they grow up will rather like you pay for their college fees, take care of them while they are settling down and you leave them a good inheritance.

May be small kids would like you spend time with them, but even teenagers are smart enough to understand the importance of financial priorities in life.

>>I live an ultra-frugal lifestyle and am already planning an exit from my day job in the next decade, to retire before 40.

I don't know how you propose to come back home so early, practically do nothing on the side. Don't start a business on your own. And yet save your way to becoming a millionaire(Which I can tell you as a some one saves and invests very often, that's just not possible).

Have you planned for medical emergencies, rising house rents, inflation and many other routine problems which come regularly in ones life etc?

>>People like Bill Watterson, Cory Doctorow, and Richard Stallman are on to something. They are actually enjoying life now - Are you?

There are two kinds of enjoyment a human being can experience. The pure philosophical kind of enjoyment of sitting on grass and sleeping under a tree. The other one is partying on a yacht.

Both have their own fun.

<comment><USER4> >> Most kids, the moment they grow up will rather like you pay for their college fees, take care of them while they are settling down and you leave them a good inheritance.

I'm still young with no kids, but that sounds awful. Especially "leave them a good inheritance."

<comment><USER5> I'm not sure it's entirely true.

I think with increasing life expectancy most people are settled into their lives long before their parents die.

Speaking as a parent I can see that I'll never stop wanting to be a father to my children and making their lives better in whatever way I can, but speaking as a child my only wish for my father is that he enjoys the rest of his life and if that involves him spending his money (that he earned and that, not to put too fine a point on it, I have no right at all to) then so be it.

Essentially as a parent, it's something you'll want to do, but I'm not convinced that it's something your children will expect of you.

</comment></comment></comment></comment><comment><USER6> At this point "follow your dreams", "live a satisfying life" and other variations thereof are cached wisdom. When you go to a high school class and hear people who admit they didn't go where they wanted in college telling you the same thing, you'll notice something like an epistemic code smell. Unless the proportion of people working for "the man" has changed significantly in the last...whenever this meme became popular, I can only conclude that the sort of "creative work" which seems to have become something of a holy grail to young job seekers is possibly:

1\. Unattainable or unsustainable for the vast majority of people.

2\. Not as good as it sounds on paper.

3\. Economically infeasible.

Otherwise we would all be cartoonists.

EDIT: Maybe I'm not 'getting it'. Considering that other HN thread on the front page where everyone complains about contrarianism, I have to wonder if theres something fundamental here that I'm not seeing.

<comment><USER7> I think what you're referring to are platitudes. People say "follow your dreams", but most of the people saying that in schools didn't follow their own advice.

Watterson actually lived by his own standards. This included forgoing millions in licensing deals, and retiring to pursue personal art, when the strip was at its peak.

He achieved great success, but to the conventionally minded he seemed positively insane for a long time. He spent four years living at home, working a day job and submitting cartoons, without success.

When most people say "follow your dreams" it's implied that they think you should do so within existing structures.

<comment><USER6> >I think what you're referring to are platitudes.

They are, and I guess my point of contention with Watterson is that I'm having trouble distinguishing between his advice and the platitudes, even though he actually lived it.

<comment><USER7> I think the difference is having your own standard and actually following it, even if others think its crazy.

</comment></comment></comment></comment><comment><USER8> As someone who dodged the corporate world and everything a person is 'supposed to do', I'm now in my early 30s. And while I did do the things I thought important during my 20s, I wish more than ever I had adhered more to the things one is supposed to do in order to 'get ahead'. I liked saying I was living more than everyone else I knew back home who stayed in the same place, with the same people, doing the same things...but I now know I was merely living differently, not necessarily more. My main comparison with all those people now is they are financially sound due to jumping through the hoops, and I deal with near poverty for having vagabonded around the world, learning about cultures and languages, while doing this and that to make ends meet. There's worth in what I did, sure, but that time spent on learning for learning's sake came at a cost.

The recent research by Princeton, et al. on the effects of poverty on the mind nailed what I go through daily. Now I'm learning to program in hopes to fix the problem (later, when I've spent a year learning to code) that most affects me day in, day out.

</comment><comment><USER9> Why is this prefixed with "Startup"? Unless I'm missing something... while working at a startup might be more inspiring than a large corporate job, it doesn't seem to be _AT ALL_ what the author is talking about. Leaving your job to become a cartoonist is a LOT riskier than working at a startup.

<comment><USER7> I have no idea. This title ought to be changed. It's not the original, and is not really the context of the original either.

</comment></comment><comment><USER10> If you're living alone on a desert island, there's one job available: scavenging for food. It doesn't matter if you're a genius mathematician or something, your job is to search for food.

If you're in a town full of dotcom businesses, you can probably find a job building web-apps in JavaScript. (Hey, it's a million times better than scavenging for food...)

I really like this cartoon. It's exactly how I feel about "having a day job" vs "doing something cool".

I've been reading PG's essays for a long time. Since back around the time that he created Y Combinator in the first place. I think his essays are brilliant and honest and inspiring.

But at the end of the day... I just don't care about starting a company. If I can live a normal, middle-class life and have a normal, middle-class retirement.... then, man, I really don't give a shit about getting rich. I have an endless supply of awesome things to work on and think about.

</comment><comment><USER11> This calls to me on so many levels.

I was contracting all around the UK traveling up to 5 hours per day with a 5:30am start and home around 9pm and even living away.

Now I've gone permie locally. I get up at 7:30am, walk the dog, make breakfast for the family, walk/cycle my child to school and then cycle off to work.

If my daughter is ill I can even shift work and start at 2pm (wife works to 1pm) so we don't lose holiday.

In theory I could work 8am-4pm and be home by 4:20pm. Most nights I'm home by 6pm after going on a long cycle ride.

Money isn't as good as it was contracting, but my god, is my home life better, and not just for me. THAT needs repeating, NOT JUST FOR ME.

I smile a lot more these days.

<comment><USER12> It's not the contracting that was bad it was the kind of contracts you were getting. Did you pay off your mortgage and set aside some money for your kids?

</comment></comment><comment><USER3> Amazing advice. But just that these kind of things don't workout for majority of the people.

Most people have to get married, have kids, prepare and pay for medical bills, pay rents or loan installments, send their kids to school and live life like other humans around. So you can't really sit the whole day under a tree play lego with your kid. Sooner of later you will run out of money and then the kid will itself want you to go out and work.

Our ancestors didn't write Ant and Cricket stories for nothing.

Working hard, and then savings and investments matter. Looking back the happiest families I see around with their kids doing well are generally kind of ones where parents worked hard and made sound financial decisions in the past. Which now takes care of their health care bills, post retirement expenses and nearly everything else.

So unless, you don't want to run into trouble when you are old you have to earn well enough right now.

<comment><USER13> > So you can't really sit the whole day under a tree play lego with your kid.

I don't know where you are getting the idea that the cartoonist(the artist) or Bill Watterson(the cartoonist has used a quote from Bill Watterson's speech) advocates doing nothing.

If you go by just the cartoon, the first panel shows him working. He doesn't find drawing the jeep for the advertisement fulfilling, and he isn't interested in having beers with his co-workers. Overall, his job isn't for him so he quits. Later, his old company comes with an offer which he considers but rejects because that will mean not being with his kid and going back to drawing jeeps for advertisements.

Do you know Bill Watterson's story? These aren't empty words. He pretty much followed this to the letter and spirit. He started at some news agency drawing cartoons(or was it ads). He didn't find it fulfilling and quit. He started Calvin & Hobbes. He could have become a millionaire had he merchandised it, but he fought against merchandising because he believed it will dilute the art. Now whether he did the right thing or not doesn't matter. Calvin & Hobbes is his; he can do whatever he wishes with it. On a slightly related topic, all this "Calvin pissing on cross" and "Calving kneeling against the cross" make me angrier than it should. For fuck's sake, I don't give a shit whether you are a militant atheist or a religious nutjob. Come up with your own ideas rather than stealing from someone who clearly doesn't wish his creation to be merchandised.

As the cartoon states, the whole point is creating a life that reflects your values and satisfies your soul. If your 9 to 5 does that, superb. If not, everyone owes it to himself to pursue something that does.

<comment><USER3> Bill Watterson got successful by doing X != If I do X I will be successful.

Even if you follow the advice in the same letter and spirit as he did.

Though I agree you increase your chances of being successful that way.

<comment><USER13> > Bill Watterson got successful by doing X != If I do X I will be successful. > > Even if you follow the advice in the same letter and spirit as he did.

You will notice that I didn't mention success once, nor did I talk about if I do what Bill Watterson did, I will be good. You are intentionally or unintentionally misreading the article and my comment.

The article or my comment isn't about "follow your dreams and you will be successful"(that will be incredibly stupid advice). The point is I don't have to care what you or anyone else thinks of what constitutes success. My monthly income is above average for an engineer in Bangalore. That is partly due to my hourly rates and partly because I put in long hours. If I had a kid, I won't put in long hours. Period. Will it affect the amount of money I make? Of course. Am I under the illusion that doing that will somehow make me more successful? Fuck no.

> Though I agree you increase your chances of being successful that way.

If only...

</comment></comment></comment></comment><comment><USER14> I like Bill Watterson's sentiment. It puts into words that I wasn't able to find why I've made the decision I have. That decision: to keep my software company a one-person operation. I don't _want_ the company to be bigger. I don't _want_ to have lots of employees. I don't _want_ to make a quadzillion dollars. I want the joy of running a tiny firm, where I can choose how to run every aspect of it. And have lots of free time for my other pursuits.

<comment><USER8> Does your one-person operation let you pay the bills or do you do it on the side?

I sometimes see small shops here on the streets of Lisbon and they seem like specialty shops where (I imagine) old men who have perfected their craft sell their wares and services. When I pass them I think to myself that the world would be way better if everyone sought to be a master of their craft, if they just focused on one thing and on doing it well...like Jiro ([http://www.youtube.com/watch?v=M-aGPniFvS0](http://www.youtube.com/watch?v=M-aGPniFvS0)).

<comment><USER14> It is my sole income and sole work. Definitely lets me pay the bills

<comment><USER7> Are you a fan of rob Walling? If not, you should look him up:

[http://www.amazon.com/Start-Small-Stay-Developers- Launching/...](http://www.amazon.com/Start-Small-Stay-Developers- Launching/dp/0615373968)

<comment><USER15> Very cool. This is exactly the type of book I was looking for ideas on how to better describe my current situation and for ideas on where to go next.

<comment><USER7> Awesome. Just noticed you're in Montreal too. My email's in my profile if you want to talk. I'm not a developer but find most of the advice still applies.

</comment></comment></comment></comment></comment></comment><comment><USER16> A great cartoon but wasn't this posted just two days ago with the exact same title: [https://news.ycombinator.com/item?id=6303776](https://news.ycombinator.com/item?id=6303776)

<comment><USER17> By the same user, no less!

<comment><USER16> They must _really_ like it :)

</comment></comment></comment><comment><USER18> Again and again, the same point comes up: It is VERY difficult not to compare yourself to others. Once you can stop doing that, you can decide for yourself how to live on your own terms (if - and this is a big "if" \- if you are fortunate enough not to have any circumstances on your plate that prevent that - disabilities, debt, bad circumstances, and so on).

On top of this challenge, if you have the support of a loving family, your chances are orders of magnitude better. Without such support - or with resistance - then things can be even more difficult.

No one said it is easy.

<comment><USER19> Indeed. I find myself become ever more aware of how even when I think I'm not comparing myself to some norm, I subconsciously am doing this anyways.

I find that meeting people wildly different from myself in lifestyle or perspective really helps. Traveling to 'foreign' cultures too.

</comment></comment><comment><USER20> It's funny that some parts of this are exactly the opposite to the culture here in the Netherlands. Everyone's expected to be happy with who they are, and ambition is often looked more or less looked down upon unless you can explain how much happier you are for it even if you don't reach the top.

Ironically, with the peer pressure to seem happy, in a collective definition, the result is more or less the same: few people are brave enough to break out of expectations and live according to their personal values.

</comment><comment><USER21> The title is misleading. This is not by Bill Watterson, it is _inspired_ by Watterson's work...

<comment><USER22> The art is not Watterson's, but the words are.

<comment><USER16> Can't really say it has anything to do with startup's either.

<comment><USER23> I thought about starting-up a company about stuff I like to do in my freetime, like creating video-games. But when I look at the game industry I get the fear that it's a bad idea.

</comment></comment></comment></comment><comment><USER24> Some of this advice is good but I think it ultimately misses the mark it's aimed at. It's interesting how "follow your dreams" and effectively "don't worry about fulfilling your potential" can simultaneously fill the same cognitive space despite being diametrically opposed.

I wish I had more time to reply here so if these thoughts are muddled or incomplete: my apologies.

Ultimately I think advice like this is possibly a net disservice to people. The end result tends to be people who accept living a life without ever trying very hard at anything. The crux here is that societal pressures on achievement, status, and wealth are onerous and by and large should be rejected but if that leads to nihilism or something close, which it often does, that's not much better. There are many people today who are just not trying very hard, because trying hard has been associaated with corporate bullshit and classism and so on. But many people are capable of some degree of amazing things, and those things take effort and perseverence. Not necessarily sacrifice ofall of one's free time or health or anything like that but it will require effort and time. And without a drive to achieve one can miss out on the potential of creating great art, great tools, or even becoming a great parent.

So don't give up on the idea of fulfilling your potential just avoid getting suckered into climbing into a hamster wheel just because you think that's what everyone around you wants. Take the time to make your life choices carefully and intentionally but don't be a nihilist by accident and don't avoid greatness merely because it's hard.

</comment><comment><USER25> Is this the third time this showed up in a week or Am I having trouble with cache?

<comment><USER26> No, this was submitted twice before in the last few days.

</comment></comment><comment><USER27> I'm glad you posted this. It's a much needed reminder.

Your artwork is excellent and I love the sentiment. I signed up and look forward to seeing more from you. Keep up the good work!

BTW, thanks for the free posters!

</comment><comment><USER28> Working over the wkend for the company. Took a break to paint a space marine. read this comic. Crying on the inside.</comment>


Ask HN: personal blog logo  - <AUTHOR>

It's well known that top left corner of the page attracts users attention first (http://styleguide.yahoo.com/writing/write-web/eye-tracking-where-do-readers-look-first).<p>The question is: if you have a personal blog and you dont't actually have any kind of logo or something, what should you place there? Share your opinions please. <comment><USER2> I will put my Blog name it self. It will quit simple and nice.

</comment><comment><USER3> My photo? I'm a nice guy.</comment>


Meteor 1.0 is coming - <AUTHOR> http://differential.io/blog/meteor-10-is-coming

<comment><USER2> I've been reading Discover Meteor. So far, the book's been very helpful, and Meteor itself has been jaw-dropping in terms of how if works.

I'm excited to see what the future of Meteor and Meteor-like frameworks hold.

<comment><AUTHOR> Yeah, I've been super happy since switching to it. Javascript still has it's ugly warts, but overall I think time to develop apps has dropped dramatically!

</comment></comment><comment><USER3> Predictions on how quickly adoption grows after 1.0?

<comment><AUTHOR> I think it will be a pretty sizeable jump (100% growth?). I expect the next 0.8 release will make a lot of noise when they leave Handlebars behind and really ramp up the rendering engine side of things.

<comment><USER4> Yea, I need some jade or haml, as the current packages are brittle as f#%k.

Asset ordering for packages is another important issue I'd like to see rolled out for 1.0.

In terms of growth, who knows, right now it appears to be linear, but I feel a ramp up is coming.

<comment><AUTHOR> Interesting, we haven't really run into big asset ordering issues, we tend to stick jquery plugins and libraries in /lib or /client/lib

<comment><USER4> Yea, I wouldn't call them big either, but they happen none-the-less. For package developers it can be vital. Sometimes A must be loaded for B. It's mainly a third party javascript issue. The compatibility folder sometimes does the trick, but by contrast the same utility doesn't exist for package developers. It's a larger dependancy management issue not tackled by the current packaging system.

<comment><USER5> Yeah, the current packaging system is more of a download installer and less of a dependency management system. That should get a lot better in 1.0. As for Jade, [https://atmosphere.meteor.com/package/jade- handlebars](https://atmosphere.meteor.com/package/jade-handlebars) is working towards this. It also appears that Meteor is (or was) thinking of integrating Jade support in Meteor directly: [https://github.com/meteor/meteor/tree/jade](https://github.com/meteor/meteor/tree/jade)</comment></comment></comment></comment></comment></comment>


The Best 20+ Icon Designers & UI Ninjas - <AUTHOR> http://www.inspiredm.com/2009/06/08/the-best-20-icon-designers-ui-ninjas/

<comment><USER2> I know that the skill sets overlap some, but icons laid out in a window does not make you an interface designer.</comment>


Main R archives lost "packages" directory - don't copy to your mirror site - <AUTHOR> http://cran.r-project.org/web/

<comment><AUTHOR> There should be a ton of R packages to download here:

<http://cran.r-project.org/web/packages>

This change is propagating to the mirror websites. For some it might mean downtime with their statistical analysis.

EDIT: Actually, you can still get the packages source code here:

<http://cran.r-project.org/src/contrib/>

Binaries for mac os x are here:

<http://cran.r-project.org/bin/macosx/leopard/contrib/>

But I don't know where to get the PDF documentation for the individual packages.

EDIT2: Google keeps cached PDFs, you can view them using Google docs pdf reader.

P.S. I've contacted Uwe, Kurt, and Stefan but probably they are already gone for the day.

<comment><USER3> The pdfs should be generated automatically when you install from source - <USER2> could be forced through a command line option (there were some changes to v 2.14, I don't recall them exactly)

Also most pdfs for R packages will show up in a google search somewhere.

<comment><AUTHOR> This mirror does not auto-delete (as posted on r-devel):

<http://stat.ethz.ch/CRAN/web/packages/>

</comment></comment></comment><comment><USER4> I think we need a little more context?

<comment><USER5> I think the packages directory was removed?

</comment></comment><comment><USER6> what about disabling access to this archive until "packages" directory is restored, so it won't propagate to mirrors ?

</comment><comment><USER7> My package got published today... I hope it's only correlated |-:</comment>


When an angel could turn out to be a devil in disguise - <AUTHOR> http://www.ft.com/cms/s/0/80677de8-20b1-11de-b930-00144feabdc0.html?nclick_check=1

<comment><USER2> Reading this post requires registration.

I think I will skip it.

</comment><comment><USER3> Link to just the text: <http://tinypaste.com/4c117>

<comment><USER4> is that the full text? I didn't see anything about angels turning devils.

<comment><USER3> It's the full text, the title is just a little misleading.</comment></comment></comment>


Darknet and Deepnet Mining for Proactive Cybersecurity Threat Intelligence - <AUTHOR> https://www.technologyreview.com/s/602115/machine-learning-algorithm-combs-the-darknet-for-zero-day-exploits-and-finds-them/?set=602119 <comment><AUTHOR> arxiv link at the bottom: [http://arxiv.org/abs/1607.08583](http://arxiv.org/abs/1607.08583)</comment>


What Powers Instagram: Hundreds of Instances, Dozens of Technologies - <AUTHOR> http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances-dozens-of <comment><USER2> I love that companies like Instagram are happy to share this kind of information. I don't have the problem of scaling yet, but it's reassuring to know that when I do, there are good models like this one to follow.

<comment><USER3> The Instagram founders are exceptionally cool. After the $1B Facebook acquisition Mike Krieger kept right on answering questions on the instagram- api mailing list without missing a beat, as if nothing had happened.

<comment><USER4> I might be wrong, but as far as I know they haven't sold _yet_ (it's still got to clear regulators?) so although he technically _could_ have walked away I don't think it would been sensible as he isn't going to be able to cash out yet?

<comment><AUTHOR> Some sources (the NY Post for example) say the deal may take up to 6 months with a 50% chance of going through. There's some concerns as to whether Instagram may prevent sharing with social networks other than facebook (flickr for e.g.). I'm already booted off instagram without upgrading to the new app, but fear that I'll be forced to share all my instagram pictures on my facebook timeline.

<comment><USER3> To prevent sharing out except to Facebook, Instagram would have to disable its API and stop saving photos to Camera Roll. I don't expect either of those to happen.

Even if the deal might fall through, I could easily imagine Mike taking a day or two to celebrate instead of jumping back in and answering questions, particularly on the instagram-api list, since nurturing a slowly-growing ecosystem is not Instagram's best path to a successful exit. Logically, I think he did it because he's a nice guy.

</comment></comment></comment></comment></comment><comment><USER5> This is a fairly old blog post and it is posted to HN by Kevin Systrom – he's co-founder of Instagram. Here's his post:

<http://news.ycombinator.com/item?id=3306027> (223 points, 220 days ago) so I'd like to say this is a repost. Though, I have no idea how the same link can be reposted to HN.

<comment><USER6> I don't understand how this topic comes up so frequently, but HN is configured to allow reposts after a certain amount of time. That isn't really a problem for old posts with excellent information, so I think a repost is warranted for this.

</comment></comment><comment><USER7> I don't see Amazon SimpleDB in this list, rather Postgres and Redis.

Can someone who knows more about various DBs opine on this. Is it better to run your own DB as Instagram seems to be doing or is relying on SimpleDB good enough if you don't need such high performance.

Also, as happens with many startups, how easy/difficult is data migration when startups try to scale and need to scale fast.

<comment><USER8> AWS has more than one DB option.

<http://aws.amazon.com/simpledb/>

SimpleDB is a non-relational store that automatically indexes everything, but can only store up to 10GB. It's very flexible but limited, good for prototyping.

<http://aws.amazon.com/dynamodb/>

DynamoDB is like SimpleDB's grown-up version. At greater cost and with more up-front configuration, it scales automatically to huge workloads. It's still a non-relational store, with the drawbacks that implies.

<http://aws.amazon.com/rds/>

Relational Database Service is literally managed MySQL instances. Amazon spins them up for you, manages configuration, backups and restoration. One of RDS's primary value-adds is that it can automatically partition your data across multiple EBS volumes (like hard drives). This helps get around the relatively low I/O performance of EBS volumes.

So pick your poison -- if you don't need high performance, simpleDB or a small RDS instance will work; it depends whether you want relational data or not. I can't speak for the difficulty of migrating; we stuck with running our own MySQL instances from the start.

For a lot of reasons (that I can enumerate if you'd like), we think running your own DBs is the best option.

<comment><USER9> I would very much appreciate it if you elaborate on why managing your own MySQL database is the best option. I'm currently moving from back end proprietary systems development to web development and would like to hear your considerations.

<comment><USER8> The short answer is that we believe running your own instances gives better performance and reliability than RDS. However, the cost is complexity: I'm a relatively experienced DBA, and we've since hired a second person with deep MySQL experience. If MySQL admin is something you don't want to spend much time doing, you may be willing to make the performance sacrifice of RDS.

The longer answer is that we don't use RDS because it relies on EBS, and we do not trust EBS for any critical applications. Instead, we put our data on instance storage (aka "ephemeral" storage).

This has two big disadvantages:

a) portability: you can't detach the drive and move it to a new instance like you can with EBS -- to clone or backup, you have to copy over the network, which is much slower (and obviously, if you kill the instance, you lose the data).

b) storage: you are limited in how big your DB can be. An AWS large instance these days gives you nearly 1TB of instance storage, but if you have a single DB larger than that, you need to use EBS if you're on Amazon. (Of course, if you care about performance and your database is > 1TB, you should probably be looking at sharding across multiple machines anyway)

However, using instance storage has two big advantages that we think outweigh those:

a) performance. EBS is basically a network drive. Total I/O operations per second (iops) is punishingly low. If you have a high transaction rate on your database you're going to really hate it. As I mentioned, RDS tries to mitigate this by using multiple EBS drives, but we consider that a band-aid on a pretty fundamental problem with EBS. Instance storage on the other hand is physically local to the VM's host machine, and is therefore much faster.

b) reliability. After 3 years on AWS, our trust in EBS is zero. It fails too often, and its failure pattern is awful: you tend to lose big batches of EBS drives at the same time, and whenever there been a major EBS failure, the API used to launch replacement volumes has failed at the same time, making replacement impossible. Again, we think this is a fundamental problem with the nature of EBS and unlikely to change.

<comment><USER10> Thanks seldo, interesting. Just been looking at a client's Amazon dashboard where they have a small set-up running, not something I normally deal with but I see their RDS is billing over 2e9 I/Os/month and ends up being a significant part of the non-fixed bit of their bill. I suspect their MySQL queries are doing table scans and building temporary tables for some of the queries; these would both up the I/O count as all RDS storage is EBS, even temporaries?

So if your MySQL storage is ephemeral how do you cope with outage? Replicate it off AWS?

<comment><USER8> I believe MySQL's working directory is on EBS, so yes, even temporary tables would be on EBS -- don't quote me on that, though.

Re: outages, we use multiple replicated servers in different availability zones -- an outage is usually (though not always!) limited to a single zone. For a region-wide outage, we have emergency backups being sent to a different AWS region (east -> west), and if shit completely hits the fan we have off-AWS backups.

</comment></comment></comment></comment></comment></comment><comment><USER11> I'm pretty sure that "dozens of technologies" is a meaningless thing to say. Instagram is powered by _thousands_ of technologies; it's just that a few dozen of those happen to have trendy buzzwords attached.

<comment><USER12> Instagram! Powered by the polio vaccine and domestication of wheat.

<comment><USER13> Instagram! Powered by a lack of earth destroying quantum vacuum metastability!

<comment><USER11> I'm pretty sure that one's not a technology, but just a happy and not very unlikely set of circumstances.

</comment></comment></comment></comment><comment><USER14> To sum up: it's gonna fall over at any minute without a continuous injection of money.

<comment><USER15> My take-away was "this is why when EC2 when down it wasn't just a case of rebooting the server". My other thought was "and how did all of this help you when EC2 went down?"

<comment><USER16> That was my thought too, the multiple mentions of "stuff" in different zones had me wondering why the recent EC2 outage was able to get them.

</comment></comment></comment><comment><USER17> I don't feel very good about the idea of DR just being duplicate servers in a different zone. You don't know what kind of problem could ripple out and affect more zones, or all of them. A completely different host/cloud/colo provider seems like a safer bet.

<comment><USER18> When you come down to it earth is a single point of failure, its about how big of a disaster you expect to occur and how big of one you expect to recover from.

<comment><USER19> Yes but it's a lot easier and cheaper to protect against e.g. a major bug surfacing in amazon's cloud management api vs protecting against an asteroid hitting earth.

</comment></comment></comment><comment><USER20> Could someone plug these into the AWS monthly calculator and try to figure out the monthly cost, when I try I get around $10,000 per Months, but I think I am wildly underestimating the bandwidth usage. AWS Calculator <http://calculator.s3.amazonaws.com/calc5.html>

</comment><comment><USER21> The idea of mdadm on top of EBS volumes makes me cringe.

Mark Mayo's thoughts on abstracted block storage are spot on: [http://joyeur.com/2011/04/24/magical-block-store-when- abstra...](http://joyeur.com/2011/04/24/magical-block-store-when-abstractions- fail-us/)

</comment><comment><USER22> A couple of comments as one of the authors of Solr's spatial code:

\- I don't think any of us have compared it to PostgreSQL, but I can tell you we have clients doing 500 queries per second+ with it including text search. I've yet to see a DB do good text-based fuzzy matching and combining two systems (DB + search) via a join is usually slow. YMMV.

\- The main goal of the implementation is to add point-based search to text search. It is not a general purpose replacement for an r-tree, etc.

\- You are not required to use haversine. The distance function is pluggable and we have other options implemented. Also, in many cases, you have other clauses in your query that restrict down the set of documents that need to be scored by distance.

</comment><comment><USER23> "The photos themselves go straight to Amazon S3"... Is there no image resizing involved? It's pretty hard to find stuff about scaling image resizing, It's hugely CPU intensive, that's a sure thing.

<comment><USER24> I'd imagine it's easy enough to do before transmission.

<comment><USER25> Actually they have to do the compression on the mobile clients before uploading, otherwise it will take forever and cost a real fortunate on the mobile data usage.

</comment></comment></comment><comment><USER26> Well explained, and an awesome way to say "We are hiring a DevOps"

</comment><comment><USER27> Do they have any application monitoring stuff a la NewRelic? I saw stuff like munin but that isn't really the same.

</comment><comment><USER28> > For our geo-search API, we used PostgreSQL for many months, but once our > Media entries were sharded, moved over to using Apache Solr. It has a simple > JSON interface, so as far as our application is concerned, it's just another > API to consume.

Does anyone have particular insight to share on this? Last I checked, Solr's geospatial searching methods are rather inefficient -- haversine across all documents, bounding boxes that rely on haversine and Solr4 was looking into geohashes (better but have some serious edge-case problems where they fall apart).

Meanwhile PostgreSQL offers r-tree indexing for spatial queries and is blazing fast.

Am I missing some hidden power about Solr's geospatial lookups that make it faster/better than an r-tree implementation?

<comment><USER29> It probably was the database sharding. If the Solr setup could handle the geo- search-related data without the need for sharding it probably can beat out Postgres with sharding.

Having this exposed through an api that is standardized and maintained by someone else is also nothing to sneeze at. I'd trade a bit of performance for that kind of standardization and turnkey use in the right scenario.

<comment><USER30> The reason we use Solr for this specific task is because PostgreSQL cannot efficiently and quickly merge two index queries (time & space). It can do this to a limited degree, but both of these dimensions potentially match 10s of millions of documents, and PG falls over at this.

<comment><USER28> So you make the r-tree 3 dimensions (lat,lng,time). PostgreSQL supports this.

I dunno I can't envision Solr being more efficient than a properly designed RDBMS for these situations. If you were integrating a full-text search I'd absolutely believe that to be the case but...

<comment><USER30> We need independent time & geo searches as well. The indexes are vastly smaller in Solr. We use PostgreSQL extensively and prefer it, so it's not a matter of simply wanting to use something different.

<comment><USER31> That's very interesting. Could you share your story with the mailing list pgsql-hackers a little bit? The guys who work on indexing are quite active on those lists.

Also, there's some new thing I don't understand super well, sp-gist, do you have any thoughts on that?

</comment></comment></comment></comment></comment></comment><comment><USER32> Color me surprised: No NoSQL? Instagram seems to be a prime candidate for such a storage method.

<comment><USER33> You don't consider Amazon/S3 or Redis NoSQL databases?

<comment><USER34> Since when is S3 a 'database'?

<comment><USER35> It's got an API, you can store data in it and retreive it later by key, since when was S3 not a database? It's a key/value store that lets you store very large values.</comment></comment></comment></comment>


ArchiveTeam + Yahoo Messages Shuttering + EC2 Spot Instances = MegaCrawl - <AUTHOR> http://rossduggan.ie/blog/technology/archiveteam-yahoo-messages-shuttering-ec2-spot-instances-megacrawl/

<comment><USER2> I built 2 CloudFormation templates to allow you to easily spin up a ton of these things across multiple availability zones. It uses the Amazon Linux AMI that exists in each region instead of the ones listed, and builds up the dependencies and the application on the fly. You can run either of these two templates in any region and it should just work.

Download one of these files:

With a keypair ( so you can login to the host) <http://files.wordsaboutbytes.com/yahoo-messages-save.cf.txt>

Without a keypair ( can't log in locally, but it will run) [http://files.wordsaboutbytes.com/yahoo-messages-save- nokeypa...](http://files.wordsaboutbytes.com/yahoo-messages-save- nokeypair.cf.txt)

Then:

1\. Open the console ( <https://console.aws.amazon.com> )

2\. Go to CloudFormation

3\. Give your stack a name

4\. Browse and select the file you downloaded from above

5\. Click Next.

6\. Fill in the parameters here ( # of instances, The nick you want to be tracked with at the archive team site, the spot price you are willing to pay, and optionally a keypair if you selected that file).

7\. Check the box at the bottom acknowledging that the template will create IAM resources ( used by the host to bootstrap )

8\. Click Continue.

9\. Tags if you want, or click continue.

10\. Review. Click Continue.

11\. Close.

This will launch however many instances you told it to, as t1.micro's, as the spot price you set it to. When you want to stop, you just go and delete the stack in this console and everything should go away.

Running this right now in US-West-2, spread across all 3 AZ's there, about 90 instances total, and cranking through things.

</comment><comment><AUTHOR> For those having trouble with the EC2 instructions, I thought I'd point out that I think that the Archive Warrior[0] (which is much easier to get up and running on your laptop, etc) running over my tethered cellphone is my most performant client.

Yahoo don't appear to rate limit mobile devices / IP blocks as aggressively as everything else (probably because cellular providers tend to have many customers behind one IP).

[0] [http://www.archiveteam.org/index.php?title=ArchiveTeam_Warri...](http://www.archiveteam.org/index.php?title=ArchiveTeam_Warrior)

<comment><AUTHOR> I've also made the image available in all regions, for those who want to run in additional regions:

      N. Virginia: ami-2400984d
      Ireland: ami-d8d2d8ac
      Tokyo: ami-a361e1a2
      Singapore: ami-6e703c3c
      Sydney: ami-4e0e9f74
      Sao Paolo: ami-9d7aa180
      N. California: ami-94f6dbd1
      Oregon: ami-cf9206ff

</comment></comment><comment><USER3> If you have boto installed, this is all you'll need to do

        import boto.ec2
        conn = boto.ec2.connect_to_region("us-east-1")
        conn.request_spot_instances('0.005', 'ami-2400984d',
                                    instance_type='t1.micro', user_data='USERNAME')

</comment><comment><USER4> We're currently at 16,000+ items and 61 GB uploaded. Nice work.

Edit: 25 minutes later and we are at 18,700+ items and 67 GB uploaded. Distributed computing at its finest!

</comment><comment><USER5> When your spot instance gets killed mid-download, does the Warrior system handle that and re-assign it to someone else immediately?

Or was your spot instance assigned some URLs to download with the assumption that your Warrior would be reliable, and now they won't get reassigned until they check them all at the end, which may be too late?

<comment><USER6> They will be reassigned later on

</comment></comment><comment><USER7> If you'd rather run a script than a vm, check out:

<https://github.com/ArchiveTeam/yahoomessages-grab>

<comment><USER8> That works for this project, but having the warrior makes it easy to join other ArchiveTeam projects now and in the future.

</comment></comment><comment><USER9> I always hate it, when companies remove user generated content from the internet. Why doesn't Yahoo just send some Dvds with the content to Archive.org?

<comment><USER10> I was thinking the same thing whilst reading the article. There are surely people at Yahoo! who would gladly help if asked.

<comment><USER6> I'm sure there would be people in Yahoo would want to help, the problem is actually finding and getting in contact with someone who does care.

<comment><USER11> ...then clearing it with legal and getting approval within the org to actually /do/ this. AFAIK, this would be unprecedented, but would probably win Yahoo! a lot of fans when they need it most. I have no real hope for them or anyone in a similar position to provide user data back to community custodians.

<comment><USER12> .. as long as you forget all the other user-generated-content sites Yahoo has closed over the years.

</comment></comment></comment></comment></comment><comment><USER13> Is there a way we can donate to this? If you can supply a Paypal account, I'd gladly throw in a few bucks.

<comment><USER14> Their wiki answers your question: [http://archiveteam.org/index.php?title=Posterous#Can_I_donat...](http://archiveteam.org/index.php?title=Posterous#Can_I_donate_some_cash_instead.3F)

</comment></comment><comment><USER15> I've got 50 spot requests running and another 50 pending evaluation. I'm really curious to see how much I can contribute with that in 24 hours.

</comment><comment><USER11> Happy to help, but it looks like we're getting throttled hard by Yahoo. Anyone have a contact over there who they can ping about this?

</comment><comment><USER16> Is this whole archival movement the Internet equivalent of hoarding? When is it ok to clean house?

<comment><USER8> Several groups tried to salvage as much of Geocities as possible before Yahoo killed it. They got most of it (about 1 terabyte) and you can fix most geocities.com links by changing them to point at reocities.com instead. The main reason is that it's user data and deleting it is rude. Second is that you can do interesting analysis on a terabyte of user accounts during the boom of the internet. <http://contemporary-home-computing.org/1tb/archives/3297> The third is that it's history! NSFW example from geocities <http://contemporary- home-computing.org/1tb/archives/2736></comment></comment>


Original Bauhaus Journals for Free: Gropius, Klee, Kandinsky and More - <AUTHOR> http://www.openculture.com/2015/10/download-original-bauhaus-books-journals-for-free.html <comment><USER2> I visited the Cité U in Paris recently where different countries have residence housing for students, each respective building designed in a particular architectural style.

Germany's Maison Heinrich Heine, constructed in Bauhaus style [1], didn't particularly impress me. It was dull and rather uninteresting. I had the opposite feeling of what one generally fells in a place like this, surrounded by trees and Greek and Roman-inspired architecture like Fondation Rosa Abreu De Grancher [2].

[1] [http://www.ciup.fr/maison-heinrich- heine/en/history/](http://www.ciup.fr/maison-heinrich-heine/en/history/)

[2] [http://www.ciup.fr/fondation-abreu- grancher/en/](http://www.ciup.fr/fondation-abreu-grancher/en/)

<comment><USER3> I think it is a victim of own success. The bauhaus school design has creeped in so many parts of our modern life that the originals no longer seem as interesting. That was a little bit of the vibe I get when I went to the Bauhaus museum in Germany the past summer. It is still beautiful, nevertheless.

<comment><USER4> Indeed. Bauhaus is the precursor of many modern design schools, like Mid- century Scandinavian.

And modern buildings in this style are a total delight to be in. Functional, simple, bright, cozy and often inexpensive.

But as you say original Bauhaus looks conventional because we judge it by modern standards.

<comment><USER5> Except in US residential construction where it is vanishingly rare.

<comment><USER4> Yes, same in UK where sadly designs tend to be quite bland and quality is atrocious.

</comment></comment></comment></comment></comment><comment><USER6> Just started to read the included book from Kasimir Malewitsch called "Die Gegenstandslose Welt" (The Objectless World), where starts with philosophy about systems (that they're always static, and only dynamic during creation while becoming a system), normality in fine arts (pointing out that Rembrandt is considered normal and the point from which other works were judged). Just a few sites in so far, but it's already deep.

Many thanks for these books.

</comment><comment><USER7> Just wonder why the way it was distributed. Is the dropbox traffic free for 1.3 GB download or ... There is strangely not even an option just to copy to my dropbox so I can share the load. And I guess they were too political correct to use torrent but that is the way even for ubuntu distribution. 1.3 GB is a lot of bandwidth. In fact, this apply to the files for academic just public domain. That is also a large file collection. Just wonder

</comment><comment><USER8> In norway the bahaus style srchitecture has been so succesful that almost no large buildings has been designed with ornaments on the outside since after world war 2. There only exception is a very few postmodern buildings designed in the 1980's. Graphic designers have no problems using old typefaces, like the 200 year old typegace bodoni that can be seen in h&m and lady gaga ads. Comsidering how hughely sought after old apartments in the cities are in norway, it does not make sense that they do not build any apartments in that style anymore. Norway also has a serious problem with urban sprawl. It could have helped if there were more housing other than bauhausinspired architecture offered.

</comment><comment><USER9> [https://frinkiac.com/caption/S14E18/369077](https://frinkiac.com/caption/S14E18/369077)

"Hey, we could go to Walter Gropius's!"

bonus: the exhibitor is at Homer's because the "Take One" sign.

</comment><comment><USER10> So good. And just in time for the centenary celebration ;)

[https://www.bauhaus100.com/](https://www.bauhaus100.com/)</comment>


Go Performance Tales - <AUTHOR> http://jmoiron.net/blog/go-performance-tales/ <comment><USER2> I found the bit about Go using AES native instructions to accelerate map key hashing most interesting. This accounted for a >50% throughput increase when he found aws c1.xlarge instances which had AES-NI as compared to those that didn't.¹

This is the kind of detail most developers would not be aware of, and to be fair, even now knowing it exists the only reference I can google up at golang.org is the C source code of runtime/alg.c where you will see…

        23		if(use_aeshash) {
        24			runtime·aeshash(h, s, a);
        25			return;
        26		}

… no hint that it might reduce your hosting costs by 33% or account for some huge variation in performance between one test machine and the next, or even individual runs if you are spinning up cloud instances to do your testing.

␄

¹ Does your CPU have the AES, SSE3 and SSE4.1 cpu capability bits all turned on? If so, you will hash mightily! Do you even know where to look to check?

<comment><USER3> I had a similar realization recently, where I would occasionally get an ec2 instance that would cause my server to core dump.

Turns out that a library I was using set `gcc -Mnative` by default, which was emitting some instructions which weren't valid everywhere. I was requesting the same virtual hardware, but the physical variations caught me off guard.

</comment></comment><comment><USER4> I find it interesting how insightful, technical articles like this receive hardly any comments while the usual "softer" articles that tend to dominate the Hacker News frontpage these days receive dozens if not hundreds of comments. I wonder what this says about us, HN readers.

<comment><USER5> There's a difference between comments and upvotes. With articles like this (which I really liked), I certainly upvoted it but _because_ it's so technically detailed, I don't have anything useful to add.

<comment><USER6> Same here. I really enjoyed reading it, but I don't understand a lot of what it is talking about. I also bookmarked it. When the post had 0 comments I was tempted to post something to the effect of what I just said, but I figured it didn't really add any value.

</comment></comment></comment><comment><USER7> Just a note on the zlib optimization patches. The blog post is linking to an old version, there's a newer one from a month ago. Also, the patch still appears to be a bit buggy (e.g. corrupt output being generated by the new deflate strategy), so don't plan on actually deploying it.

</comment><comment><USER8> If you want more details on Go profiling, this Go Lang blog post is a great place to look

[http://blog.golang.org/profiling-go- programs](http://blog.golang.org/profiling-go-programs)

</comment><comment><USER9> I've been looking into _false sharing_ and other pitfalls of parallelism on multi-core systems.

[http://en.wikipedia.org/wiki/False_sharing](http://en.wikipedia.org/wiki/False_sharing)

It seems like our multi-core hardware isn't that well thought out yet. In particular, _locks_ can cause false sharing. Even go channels are based on locks!

I would love to see some kind of annotation in golang for padding certain structs to cache-line boundaries. This value can be read from most processors, so it could be done in a cross-platform fashion. The gringo ring-channel library has to do its own padding to avoid false sharing.

[https://github.com/textnode/gringo/blob/master/gringo.go](https://github.com/textnode/gringo/blob/master/gringo.go)

        type Gringo struct {
            padding1 [8]uint64
            lastCommittedIndex uint64
            padding2 [8]uint64
            nextFreeIndex uint64
            padding3 [8]uint64
            readerIndex uint64
            padding4 [8]uint64
            contents [queueSize]Payload
            padding5 [8]uint64
        }

There was a similar technique for padding Java objects, but it now turns out that the JVM is smart enough to optimize the padding out!

<comment><USER10> Interesting point. I doubt go would let something as low level like struct padding bubble up into the language though, perhaps there could be some kind of library level "Unsafe" field annotation, though I'd prefer the compiler to optimize this automatically.

<comment><USER9> My first thought is that it's going to be pretty challenging for a compiler to optimize this without runtime information.

</comment></comment></comment><comment><USER11> The biggest performance issues I think that some people run into with Go involve reflection which seems to be slow. Something that does a lot of JSON parsing for example maybe could be much slower in Go than in Java, Python or JavaScript I think. I don't have any data, but I've known people to complain about it that work with Go. I wonder if a JIT or AOT compiler might help.

<comment><USER12> There are libraries that generate specialized marshallers to fix precisely this issue: [https://journal.paul.querna.org/articles/2014/03/31/ffjson-f...](https://journal.paul.querna.org/articles/2014/03/31/ffjson- faster-json-in-go/)

<comment><USER13> That is an interesting project but won't yet help to speed up the (very slow) JSON unmarshalling.

<comment><USER12> Indeed, that's on the TODO list at the bottom.

</comment></comment></comment></comment><comment><USER14> I have also played around trying to achieve a high performance trie in Go.[1] My approach is to use the Ternary Search Trie structure. Unfortunately, I have not yet approached either the performance of the native hash table or a hash table in Go (although Sedgewick tells us you should be able to beat a hash table). My TST does not yet have the Patricia Trie optimization (of collapsing long internal runs). Perhaps with that addition it will get closer to hash table performance.

Also everything he said about channels also holds true in my experience. I haven't tried writing a C library for Go yet but his discovery is pretty interesting for when I dive into that.

[1] : [https://github.com/timtadh/data- structures/blob/master/trie/...](https://github.com/timtadh/data- structures/blob/master/trie/tst.go)

</comment><comment><USER15> Good article. It closely reflects the experience we've had at SoundCloud in our more heavily-stressed services.

<comment><USER16> do you still use ruby and how?

<comment><USER15> Sure, the monolithic app at the center is still Rails. We're working to deprecate it and go all SOA/microservice, but many of those services are JRuby.

tl;dr still very polyglot here.

</comment></comment></comment><comment><USER17> > All of our existing indexes were based on string data which had associated > integer IDs in our backend

You already have a perfect hash function :).

<comment><USER18> The IDs might be sparse though.

<comment><USER19> Sparse is fine if they are more-or-less randomly distributed.

<comment><USER17> I was mostly aiming for unique -> no hash collisions.

</comment></comment></comment></comment><comment><USER20> This is probably a stupid question, but I wonder if the author could have used slices instead of maps with integer keys. It would have used more memory, but it would probably also have been significantly faster. A significant proportion of the performance issues I see raised on the Go mailing list seem to involve maps.

<comment><USER21> Probably no. Author says that he uses IDs as keys. I can assume that they are 32 or 64 bit long. So even if they are 32 bits, you would need a 4GB slice to hold any potential key. Or make a dynamic array (well, slice) that would give even more overhead than a map (and would closely resemble what map does internally better anyways). So only if those keys were really small, that would be a possible alternative.

<comment><USER17> If 'select min(keycolumn) from footable' is relatively stable and keys are created ascending (databases do this, right?), a resizing slice (with 0-min() elided from the bottom) seems like a good alternative to a hashing structure.

If the key-space is relatively sparse, this will waste more memory than the hash, of course.

</comment></comment></comment><comment><USER22> Do they have to use zlib? For on the wire compression LZ4 is better, for archiving lzma2 or zpaq is better.

</comment><comment><USER23> > Using a map[int]* Metric instead of a map[string]struct{} would give us that > integer key we knew would be faster while keeping access to the strings we > needed for the indexes. Indeed, it was much faster: the overall throughput > doubled.

I'm a little sceptical of this -- type assertions are fast but it's an extra step to initializing a struct. It would have been nice to see tests done comparing map[string]struct{} to map[int]struct{} and comparing map[string]* Metric to map[int]* Metric.

Also, there is no way to escape an asterisk, so I apologize for the awkward space after each one.

<comment><USER24> My understanding of this section was, that in * Metric they keep the original string ID and struct{}. If they went straight to map[int] struct{}, they would lose the string ID.</comment></comment>


Riak 1.2 Officially Released  - <AUTHOR> http://basho.com/blog/technical/2012/08/07/Riak-1-2-released/

<comment><AUTHOR> Somewhat of a shameless plug here: Basho is having conference in October called RICON. It's in San Francisco, and it's two days dedicated to Riak, developers, and distributed systems in production. And there will be plenty of chatter about Riak 1.2 (and 1.3).

<http://basho.com/community/ricon2012/>

</comment><comment><USER2> One thing that isn't highlighted much in the release notes or blog post (but will be once I get around to updating the docs) is the addition of the new 'replace' and 'force-replace' cluster commands in Riak 1.2.

Have a cluster A/B/C and want to replace A with an upgraded machine Z? Bring up Z and then: cluster join Z; cluster replace A Z; cluster plan/commit.

Have cluster A/B/C and C irreversibly crashes? Bring up node D from backups of C, and then: cluster join D, cluster force-replace C D, cluster plan/commit. Passive read-repair (or the newer repair logic) will resolve replicas missing from the backup.

</comment><comment><USER3> Any chance on getting indicative pricing for Enterprise.

I generally hate hidden pricing and using products with it because it generally means the company attempts to charge whatever it can get away with and is afraid of having their clients find or what others are paying.

<comment><USER4> What is the thing you can build with Riak Enterprise that you don't think you can build with just-plain-Riak?

<comment><USER5> WAN replication and their apparently awesome support are the differentiating factors I usually hear about.

<comment><USER6> You can get a support contract on the OSS version as well and just use what you pay for. If you need Multi-Site replication though, yes that's a EDS thing.

Don't forget though, if you are in a startup, we have Riak for Startups (<http://basho.com/products/riak-enterprise-for-startups/>) where you pay what you can.

<comment><USER5> I was under the impression that Basho specifically chose not to provide paid support for the OSS version. Were you speaking of other companies offering support, or is this a new thing?

<comment><USER6> What I was essentially saying was you can pay for EE for the support even if you weren't getting it for the multi-site ability.

<comment><USER5> ah. gotcha.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> With the 1.2 release, the Riak Enterprise docs are public for the first time.

[http://wiki.basho.com/Multi-Data-Center-Replication- Concepts...](http://wiki.basho.com/Multi-Data-Center-Replication- Concepts.html)

</comment><comment><USER7> Yay for FreeBSD support! I didn't like hacking on it to get it to install on FreeBSD... Also yay for LevelDB improvements :)

</comment><comment><USER8> How is Riak different from Cassandra or HBase?

What might be the reasons I'd want to use Riak instead of open source alternatives?

</comment><comment><USER9> can you guys update provide a non-/CURRENT/ link so I can bring over the homebrew formula?

<comment><USER10> Go to <http://basho.com/resources/downloads/>, static links are available if you navigate down the tree to the individual files. e.g. [http://s3.amazonaws.com/downloads.basho.com/riak/1.2/1.2.0/o...](http://s3.amazonaws.com/downloads.basho.com/riak/1.2/1.2.0/osx/10.4/riak-1.2.0-osx-i386.tar.gz)

<comment><USER9> roger, it's in the main brew tree now

why does <http://downloads.basho.com/> show different results than the above, for the record?

thanks for the nifty db >:3

<comment><USER6> <http://downloads.basho.com> is being phased out for the new downloads site. We left it up for now, but it will eventually be taken down.

</comment></comment></comment></comment><comment><USER11> Basho continues to rapidly add features and improve Riak. I think they're far ahead of the competition. Frankly, I think Riak is the undiscovered gem in the NoSQL space.

<comment><USER12> we're working on the 'undiscovered' part. :-)

<comment><USER13> How about a getting started page that is as easy as this one:

[http://docs.mongodb.org/manual/tutorial/install-mongodb- on-d...](http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or- ubuntu-linux/)

<comment><AUTHOR> Yes. Docs are high on our list of things to revamp. We should be refacing and improving in all areas starting right about now...

<comment><USER14> Look at this page (linked from Basho home page, titled "Learn More"): <http://basho.com/products/riak-overview/>

There's nothing on that page except useless _talk_ and a chart. There are hundreds of other NOSQL highly distributed, available, blah blah blah databases. Why should I choose Riak? Why not MongoDB? CouchDB?

And I challenge you to find a link on that page that tells you anything more. All other links are just as bad: <http://basho.com/technology/why-use-riak/> and <http://basho.com/technology/architecture/> and <http://basho.com/technology/technology-stack/> and <http://basho.com/technology/technology-stack/> \- The wiki is also not good at all: <http://wiki.basho.com/Riak.html>

They are just spec sheets and vague sentences. For God's sake, show me a sample project. A to-do app so I can get my head around all these new concepts...

It's been 6th or 7th time in the past year that I've stumbled upon your site and was mildly interested to know more about Riak, but the docs are so horrible that I know "nothing" about it.

I gave a (introductory) presentation (to an undergraduate class) about MongoDB after 10 hours of reading their site and "The Little MongoDB Book"[1] and hacking around with it (that's how good and thorough they explained their system). I'm not sure how much it would take for me to understand enough of Riak to explain it to someone.

That guy also wrote a decent "Little Book" on Redis, which I also found extremely compelling. _Please_ , if you like your product and want to see more people use it, write a better documentation. Or hire Karl Seguin to write one for you!

[1]: <http://openmymind.net/2011/3/28/The-Little-MongoDB-Book/>

[2]: <http://openmymind.net/2012/1/23/The-Little-Redis-Book/>

<comment><USER4> Unlike Mongo, which is a pin compatible architectural replacement for MySQL in most web app designs, you would probably never build a "to-do app" in Riak. Mongo is thus probably inherently easier to demo.

Moreover, if you just show someone the API for Riak and what it's capable of doing, you're not really giving them an appreciation of what Riak is about. To an application developer, Mongo's interface is probably much more congenial and full-featured.

I think there's a certain extent to which you either have the problem Riak solves and know why you'd want it, or you don't and no tutorial is going to change that. But that might just be an opportunity for a really creative tutorial.

<comment><USER15> Riak's documentation is horrible. It reads like a whitepaper; spending more time explaining how Riak is built than explaining how to build something with Riak. It's suitable when all you care about are early adopters, but will put off everyone else.

Trying to understand Riak by its documentation is like trying to understand Redis by reading up on ziplists.

Edit:

I'm the author of the two Little books mentioned above. I have no doubt that Riak's documentation can be much more approachable. (and I have a love-hate relationship with writing and would never write for money, so you can't hire me, if you were so inclined)

<comment><USER16> Can I beg you to write a little book on Riak then? I'm not a basho employee, I just hate their documentation every bit as much as you do for the same reasons.

Your "little" series is a boon to humanity man :(</comment></comment></comment></comment></comment></comment></comment></comment>


Ask HN: How illegal does the code have to be before you refuse to deploy? - <AUTHOR> Context: I work in the US.
During code review, I noticed that we were putting a registered trademark symbol after our product name, and I didn't know if our company had gone through the appropriate approval process yet, and so should be using the unregistered trademark symbol. This seems to me pretty benign, plus IANAL, so I just made a note in code review that we should look into that, and moved on.
The company has legal counsel. I feel it'd be inappropriate for me to do more than make a note, and that management & legal are taking care of the business.
But there is line where I'd refuse to deploy code, for either ethical or legal reasons (nobody wants to be that Volkswagen engineer). Anybody have some thoughts or good resources? <comment><USER2> I'm not giving you legal advice, but you can quickly learn from Google that TM symbols don't require filing anything.

I've never heard of 'illegal' code coming back to haunt a developer except in the VW example, and they were instructed to break the law with no ambiguity.

<comment><AUTHOR> We weren't using TM, that was what I noticed. We were using the registered trademark symbol ®.</comment></comment>


July 20, 1969: One Giant Leap For Mankind (2013) - <AUTHOR> http://www.nasa.gov/mission_pages/apollo/apollo11_40th.html <comment><USER2> The thing that really shocked me about the Apollo missions was how quickly they jumped from testing the hardware to actual mission to the moon. The _second_ manned launch of Apollo (and _first_ manned launch of the incredible Saturn V rocket) went straight out to the moon and orbited before returning back to Earth! The next missions did a few tests of the lunar lander in space, and the fifth manned mission was Apollo 11 which finally landed. Crazy to think of all the systems, hardware, etc. that just had a couple shakedown flights before the real deal. Incredibly impressive engineering to pull off such a feat without more problems.

<comment><USER3> Even more shocking is the fact that today's cell phones have more computing power than the Apollo computers had - talk about optimizing your code! Just think of the code reviews those developers went through.

And, all the work that the Apollo program brought forth with physics, electronics, etc has powered decades of innovation.

<comment><USER4> Forget cell phones, your _keyboard_ has vastly more power than the Apollo computers.

<comment><USER5> The power sequencer I worked with recently for an embedded system was a 16Mhz general purpose 8-bit processor with a bunch of 16 bit instructions and 24 bit addressing.

It cost 17 cents; I'm guessing this is a fraction of the cost of a single BIT of the Apollo computers.

<comment><USER6> I assume you're aware, but for the general audience: Every _bit_ of memory on space shuttles was an individual physical bead stored in a hand-woven wire grid, with memory contents stored as magnetic orientation. This style of storage was the only available at the time, but continued through the 80's for robustness. No power to maintain memory, and practically immune to bit-flips caused by cosmic radiation.

[http://en.wikipedia.org/wiki/Magnetic_core_memory](http://en.wikipedia.org/wiki/Magnetic_core_memory)

The article states that the price of a single bit varied from $1 to $0.01 USD over the product lifetime. I would assume that NASA paid extra for higher reliability. 17 cents for a single bit is well within the cost range of a single bit, and a reasonable estimate for that time period.

... jesus tap-dancing christ, a whole dollar for a single BIT? Wolfram|Alpha says that a dollar in 1955 would be worth almost $9 today. The memory in my desktop would be worth more than the GDP of all but 10 US states o_0

<comment><USER7> The Apollo memory, which was rope core memory, was also known at LOL memory, or "little old lady" memory, since it was women, with their quilting, knitting and crocheting skills, who wove it.

[http://news.bbc.co.uk/2/hi/technology/8148730.stm](http://news.bbc.co.uk/2/hi/technology/8148730.stm)

</comment></comment></comment></comment></comment></comment><comment><USER8> Perhaps of relevance to Hacker News:

Four minutes before the moon landing, the Apollo Guidance Computer began throwing 1202 and 1201 alarms - indicating that it wasn't completing its processing loop in time.

Here's the audio from the flight director and guidance loops, as they troubleshooted the problem in real time, clearing Apollo 11 to land.

[http://forum.nasaspaceflight.com/index.php?topic=35230.0](http://forum.nasaspaceflight.com/index.php?topic=35230.0)

<comment><USER9> Jack Garman had hand-written down all the trouble codes on a "cheat sheet". He's the one who called "go". I am not even sure if the MIT software team knew what 1201 and 1202 were.

The AGC was one of the first to use priority multitasking. The 1201 and 1201 faults were indication that lower priority tasks were getting yanked.

See "Moon Machines". Seriously.

<comment><USER10> What would be an example of a lower-priority task in this situation?

A couple of links to the videos you mentioned:

[http://www.sciencechannel.com/video-topics/space- videos/moon...](http://www.sciencechannel.com/video-topics/space-videos/moon- machines.htm)

The above is probably one of the most informative 2 minute videos I've ever seen.

[https://www.youtube.com/watch?v=DWcITjqZtpU&list=PL7E6922816...](https://www.youtube.com/watch?v=DWcITjqZtpU&list=PL7E69228169F0FA1B)

"there were no specs, we made it up" "if you screwed up you got a stack of papers that was 2 feet thick" "the overall memory for the Apollo guidance computer was 72 kilobytes"

[https://www.youtube.com/channel/UClDdlBdSzrWIUijnnUDXobw](https://www.youtube.com/channel/UClDdlBdSzrWIUijnnUDXobw)

[https://www.youtube.com/channel/UCNpdHqZ5OmFOnICpZz4Mflw](https://www.youtube.com/channel/UCNpdHqZ5OmFOnICpZz4Mflw)

<comment><USER11> Clicked into the first one and got a thing about the insulation between the tanks - the 3rd video in the playlist was about them hiring surfboard makers to do the honeycomb insulation between the fuel tanks, since they had more experience working with the materials in the heat conditions.

Just another kind of "the space program was amazing" thing - the sheer diversity of people who got hired on to contribute is continually surprising. An amazing tribute to the pragmatism of NASA under the conditions.

</comment></comment></comment></comment><comment><USER12> I highly recommend the Discovery Channel mini-series "When We Left Earth: The NASA Missions". This mini-series covers the entire breadth of the NASA missions, from Mercury to the International Space Station. This series is available on Netflix: www.netflix.com/WiMovie/70218722

If "When We Left Earth" sparks your interest. I suggest watching "Apollo 13" and "The Right Stuff" next.

Lastly, I'm currently reading the excellent book "Moon Lander: How We Developed the Apollo Lunar Module". This book gives an insiders view of what it took to build the Lunar Module (LM). I particularly appreciate that the book covers a lot of the hard work, arguments, and drama that are often forgotten when we romanticize the past.

<comment><USER13> You forgot "From the Earth to the Moon", which was an excellent miniseries produced by the same team that did Apollo 13.

<comment><USER14> Largely based on _A Man on the Moon_ by Andrew Chaikin. Excellent read.

</comment></comment></comment><comment><USER15> And remarkably, the Apollo Guidance Computer (AGC) operated at just 0.043 Mhz (43 KHz) and had just 64 Kilobytes of memory. There is more computing power in modern toasters and by comparison the smartphones we all carry around today are supercomputers!

And the complete listing of the AGC can actually be downloaded as a PDF here :

[http://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/a...](http://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/apollo/public/archive/1701.pdf)

And for the Lunar Lander here:

[http://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/a...](http://authors.library.caltech.edu/5456/1/hrst.mit.edu/hrs/apollo/public/archive/1729.pdf)

It is fascinating to go through it!

</comment><comment><USER16> I know we marvel at the pace of technology lately but it blows my mind that humankind went from:

0\. Bicycles in the early/mid 19th century (depending on your definition)

1\. to motorized cars 50ish years later

2\. to actually flying at the turn of the 20th century

3\. to transporting humans into space and then on the moon just 66 years later

I'd argue we haven't made such large, significant technology leaps in such a short span (just over 100 years) since then. Not sure we ever will (hopefully with energy).

<comment><USER17> >I'd argue we haven't made such large, significant technology leaps in such a short span

In 1999 I used a card catalog at my rural library to get an encyclopedia from 19 _8_ 9.

Just today I used my cell phone to call my friend who is quite literally halfway around the world and had a real time video chat with her. This happened in 14 years.

<comment><USER18> > ... and had a real time video chat with her

I'm not sure that's a particularly inspiring example of technology progress.

In 1999 video conferencing over the Internet was already a reality, though it was very low quality. I know we tried it in work around that time. Skype launched in 2003 and basically solved that problem.

So in the next 11 years the main development was in wireless networking, which was basically a refinement of military datalinks which had been in service at least since the AN/ARR-39 of 1956.

<comment><USER19> _So in the next 11 years the main development was in wireless networking, which was basically a refinement of military datalinks which had been in service at least since the AN /ARR-39 of 1956._

You might as well write the whole lot off as a glorified telegram, if that's the stance you're going to take.

<comment><USER17> Well the internet is essentially just a really fast mail horse so there haven't been any improvements in communication for thousands of years!

</comment></comment></comment></comment></comment><comment><USER20> Leaps of mankind in this particular field:

1) first satellite - USSR;

2) first man in space - USSR;

3) first man-made object to impact Moon - USSR;

4) first man-made object to land Moon - USSR;

...

<comment><USER21> 5) Best scale model imitation of the US space shuttle.

6) first failed Mars probe (and second, and third, and fourth, and fifth...)

It's possible to commemorate LANDING A MAN ON THE MOON, on its anniversary, without it necessarily having to be a political dick-waving contest you know.

But since you brought it up, it does make you wonder how the US so completely outleaped the USSR to the moon, given how far ahead the USSR was in space development. The USSR wasn't even second to putting a man on the moon, no one has done it since Apollo.

<comment><USER22> > Best scale model imitation of the US space shuttle.

Scale model? It was about the same size, though internally very different (it's thought that they used the shape to save on doing some of their own re- entry validation).

[http://www.buran.fr/bourane-buran/img/STS-Buran- grand.jpg](http://www.buran.fr/bourane-buran/img/STS-Buran-grand.jpg)

It's really kind of ridiculous how similar it looked versus how different it was; the big thing on the Buran stack is a rocket, not a tank, for instance, and the boosters are kerosene.

> But since you brought it up, it does make you wonder how the US so > completely outleaped the USSR to the moon, given how far ahead the USSR was > in space development.

Well, first, the USSR wasn't that far ahead, perhaps a few years. But its moon programme was inadequately funded (and not funded at all until 1963 or so), not terribly focussed (there were designs based on Proton/Zond for flybys, tested unmanned shortly before Apollo 10, based on the N1, a giant kerosene rocket, on the UR-700, an ultimately undeveloped giant Proton, and so on), and subject to political interference, both from the government, and between the design bureaus.

It also wasn't pursued as the ultimate goal in the same way the US one was; at the time the USSR was also working on the Almaz (later Salyut) space stations, an automated sample return system, a greater focus on interplanetary probes (albeit without much success except for the Venus stuff) and other bits and pieces.

If they'd been willing to take the risk, they could probably have had the first manned flyby; there were a number of Zond missions, using a modified Soyuz, unmanned, in the couple of years before Apollo 10. It would have been _extremely_ risky, though; most of the Zond missions were at least partial failures.

</comment></comment></comment><comment><USER23> In a little over 60 years we went from rickety wood planes that could barely fly a few meters to walking on the surface of the moon.

<comment><USER24> My grandfather lived through that era. he grew up before planes, mass cars and electrifcation. And died after the moon landing, PCs and TVs. Didnt make it to smartphones.

</comment></comment><comment><USER25> We mighty app developers are following in their legacy. God bless.

<comment><USER26> I hope you're kidding.

<comment><USER27> I'm waiting for the 'Let's build a Moonbase' Kickstarter.

<comment><USER28> Next best thing:

[https://www.kickstarter.com/projects/michaellaine/space- elev...](https://www.kickstarter.com/projects/michaellaine/space-elevator- science-climb-to-the-sky-a-tethered)

</comment></comment></comment></comment><comment><USER29> Growing up in the early 70's (1970's, that is) I got a small book as birthday present: 'Let's go to the moon'. It was about a bunch of racoons that build a lunar rocket, and a sly fox named Reynard up to no good. Wonderfully illustrated with racoons drawing up plans, wearing goggles, and welding away. Does anyone else remember this masterpiece?

</comment><comment><USER30> NASA is currently "live" streaming the mission:

[http://www.nasa.gov/multimedia/nasatv/index.html](http://www.nasa.gov/multimedia/nasatv/index.html)

<comment><USER31> >> NASA is currently "live" streaming the mission:

Like an old man telling a story about the good old days. Because, you know, it was the greatest thing NASA ever did and it was 45 years ago.

</comment></comment><comment><USER32> Good luck Mr Gorsky

</comment><comment><USER33> I'd like to see some refutation of the claims in this film (and not by the guy - physicist as I recall - in the film who just hand-waves say "well we know they went there and it can't possibly have been a hoax"): [https://www.youtube.com/watch?v=yo5w0pm24ic](https://www.youtube.com/watch?v=yo5w0pm24ic)

<comment><USER34> Why bother? People who believe that one of the most documented events in human history, in which 100s of thousands of people took part, was a hoax are not going to be convinced by refutation of the supposed "evidence" they bring forth.

<comment><USER33> Because if you watch that film and believe Apollo went to the moon, the only conclusion is that light has different properties on the moon compared to Earth.

I'd like to know what could explain, for example, their shadows lengthening significantly when they move a small distance as shown in the NASA footage better than "the astronauts were close to a large artificial light source" as they claim in the film that physics implies.

<comment><USER34> I don't know the answer to that. But this is just another in a long line of theories about the shadows in the photos and videos from the lunar surface, all of which are based on ignorance of how photographs work and how three- dimensional space translates into two dimensional images. Every claim of the conspiracy theorists gets proven wrong and then they come up with something else. Sometimes, things they offer as proof that the landing was a fake are actually proof that they're real! They say that it was obviously a set because that hill is in the background of two photos that were supposedly taken miles apart. Well, that's because the "hill" is a mountain bigger than any mountain on Earth, and if you analyse the parallax effect on that mountain in the two images it is consistent with the distance between the two photos.

The point is that googling just about any claim from the conspiracy theorists will return results debunking those claims by experts in photography or other relevant fields, and if it doesn't, that's only because the claim is something new enough that the sisyphean debunkers, who undoubtedly have better things to do with their time given that _they actually know what they 're talking about_, haven't gotten around to it yet.

You can point to some trivia or artifact of photography that you don't understand and cling to that as proof of the hoax, whereas I can point to _rocks that came from the moon_ , or to the fact that ham radio operators were able to pick up the tv transmission from the moon by pointing their receivers at the moon, or the fact that some of the missions placed mirrors on the moon that various third parties have bounced light off of. My evidence beats your "evidence."</comment></comment></comment></comment>


Italy and China sign memorandum deepening economic ties - <AUTHOR> https://www.washingtonpost.com/business/italy-china-sign-memorandum-deepening-economic-ties/2019/03/23/e65bb84a-4d5f-11e9-8cfc-2c5d0999c21e_story.html <comment><USER2> Comments moved to [https://news.ycombinator.com/item?id=19470313](https://news.ycombinator.com/item?id=19470313), except the low-rent flamewar.

</comment><comment><USER3> I find it hilariously ironic that most commenters on this thread express their concern over China for their supposed attempt at "gaining control over foreign lands". As if Western nations haven't been involved in military campaigns in most of the middle east and now even Africa for decades now.

<comment><USER4> I find it hilariously unmasking that in every single China discussion there is at least one person with the usual "evil west did it too once" whataboutism.

<comment><USER5> And another couple who accuse them of "whataboutism" without providing any valuable response.

<comment><USER4> I'd argue that the fact that there is a trend to whataboutise in China threads has more value than the actual whataboutism. It may not be a lot but it doesn't need much to be more then a whataboutism.

Where is the value in your comment?

<comment><USER5> > Where is the value in your comment?

To urge people not to engage into this pointless debate, you won't change their opinion by calling it whataboutism and will only enforce it since neither you nor him provided any valuable points in the discussion.

<comment><USER4> Again: where is the value in your comment?</comment></comment></comment></comment></comment></comment>