Rubygems.org AWS bill for Feb 2014 [pdf] - <AUTHOR> https://www.dropbox.com/s/3v13d2g8klwer3d/AWS%20-%20RubyCentral%20-%20Feb2014.pdf <comment><USER2> I thought I'd answer some of your questions, as the person that pays the bill.

1\. This can be cheaper on AWS. We've been meaning to move to reserve instances, paying a year at a time, for a while and simply haven't done it yet.

2\. Fastly has already donate CDN usage to us, but we haven't fully utilized it yet as we're (slowly) sort out some issues between primary gem serving and the bundler APIs.

3\. RubyCentral pays the bill and can afford to do so via the proceeds generated from RubyConf and RailsConf.

4\. The administration is an all volunteer (myself included) effort. Because of that, paying a premium to use AWS has it's advantages because it allows more volunteers have help out given the well traveled platform. In the past, RubyGems was hosted on dedicated hardware within Rackspace. While this was certainly cheaper, it created administrative issues. Granted those can be solved without using AWS, but we get back to again desiring to have as low of friction on the administration as possible.

Any other questions?

<comment><USER3> Do you know who are the biggest consumers of bandwidth? I would guess the CI servers (Travis, Circle)

<comment><USER4> I think that bandwidth consumed by Circle should be free, since we're also hosted in AWS. Maybe somebody who knows more about the details of Amazon's billing can confirm/deny.

<comment><USER5> bandwidth is free in the same region, but not across regions.

*edit and I believe not if you end up using the public IP address instead of the internal ip address.

<comment><USER6> if you use the ec2 public dns it will resolve to an internal ip when the request comes from within ec2

</comment></comment></comment></comment></comment><comment><USER7> While one could probably knock a couple thousand bucks off that if one cared to (which is probably penny wise and pound foolish but invariably comes up in HN discussions of hosting costs), the amazing thing is that hundreds of thousands of people worldwide are able to use core infrastructure which costs less than the fully-loaded cost of a single billing clerk in your local municipal water department.

<comment><USER8> What is funny is that Github is footing the bill for most package systems, which were likely inspired by ruby gems, yet Github itself was built with Ruby gems. I am pretty sure the hosting costs for homebrew/npm round to nil (I could be wrong).

<comment><USER9> If you mean the npm homebrew package, then yes. If you mean npm packages, then you might be living under a rock.

</comment></comment></comment><comment><USER10> BTW this is paid for by : [http://rubycentral.org/](http://rubycentral.org/)

<comment><USER11> Thank you, Ruby Central!

</comment></comment><comment><USER12> At a glance, this looks like AWS being used like a dedicated host, which as demonstrated, isn't exactly cheap.

There's no spot or even reserved pricing, just a bunch of on-demand instances that were up 24/7 for all 28 days in February.

Seems like a genuine dedicated host, reserved instances or an architecture that leverages the elastic in elastic compute cloud would be worth considering.

<comment><USER13> A lot of the price is bandwidth. They are effectively being reamed by using CloudFront instead of negotiating a better rate with a "real" CDN (which will also give then much better performance, as CloudFront doesn't have many edge locations).

(Although, actually, while I verified their total dollars spent is greater than what would be required to get a fundamentally better deal on bandwidth, I didn't take into consideration that once you slash their costs the amount they would be paying might no longer be ;P.)

<comment><USER14> _CloudFront doesn 't have many edge locations_

This is nonsense. They have more edge locations than most. I didn't try all comparators in the list, but out of half of them I tried, none had more than Cloudfront: [http://www.cdnplanet.com/compare/cloudfront/maxcdn/](http://www.cdnplanet.com/compare/cloudfront/maxcdn/)

So if Cloudfront has 'not many', who has 'many', and how many is that?

<comment><USER13> MaxCDN is a very low-end "CDN". If you can buy your account from the website without talking to an account manager, and the plans are as low as $9/month, you should not expect a lot of performance, features, locations, etc.: what you should, however, expect is "cheap"... MaxCDN is appropriately cheap.

To look at something more reasonable: CDNetworks is realistic competition; they are strong in Asia, and were the people I was comparing the pricing to (so they aren't going to be horribly expensive). According to the comparison website you are using, they have almost four times as many edge locations.

[http://www.cdnplanet.com/compare/cloudfront/cdnetworks/](http://www.cdnplanet.com/compare/cloudfront/cdnetworks/)

Honestly, though, the reality is that the really great CDNs don't even have data on this website (even for CDNetworks I think this data is not accurate: looks like an approximation): the leaders in this space are Akamai and Limelight, and both just show "Not Available" for the number of edge nodes they have.

Even going a little lower on the CDN pecking list, though: Level3, which according to this website you are using is mostly "competitive" with CloudFront (sometimes actually worse) in the regions CloudFront bothers to cover, is clearly covering _entire subcontinents_ where CloudFront has nothing.

The reality is that CloudFront is still trying to grow out a network: they have poor coverage in Europe (which is pretty key), a few nodes in Japan/Singapore, and then next to no coverage anywhere else. Yet, they insist on pricing their product as if they were a big player (12c/GB is Akamai-level expensive).

(So, do I get to condescendingly say "this is nonsense" now? I mean, seriously: you clearly didn't spend much time using this website and you didn't look into who the leaders are to verify you weren't comparing low-end to low-end... also, I think you are not appreciating that 0->2 is infinitely better ;P.)

<comment><USER14> Well, like I said, I didn't check just one, but about half in the list - maxcdn was just in the link because you can't link that site to just one service. Akamai had nothing listed, and level3 and cdnetworks weren't in the ones I checked. From what I saw, they still have more than most.

I still think you're mischaracterising AWS as being a bit player - they have a decent presence with Cloudfront, it's just that there are a couple that are bigger. Like I originally said, 'more than most'. CDNetworks certainly does pound them in numbers, though.

</comment></comment></comment></comment></comment><comment><USER15> Right now we're a top 25 grossing iPhone game developer. The last AWS bill I saw was January's, a little under $200k.

I'm not on the server team, so I don't know exactly what contributes most to it. But part of me really thinks it could be reduced!

<comment><USER8> This bill is 2/3 bandwidth, and 1/3 compute.

Some games require massive amounts of compute, but the bandwidth to deliver the assets is generally paid by Apple.

I can guarantee you, your company is paying a metric fuck-ton more. It is called Apple's 30% cut.

Your company is paying AWS $200k to pass json messages around for analytics and social aspects of the game. You are paying Apple something like $1 million per week to distribute, market, and collect payments for the game.

I am not saying your company is dumb, or Apple is evil. I am saying your experience and anecdote isn't relevant to Ruby Gems, and offering a different way to think about the games industry vs. the open source software distribution world.

<comment><USER15> We aren't paying that much in cut just yet. We're a small team (6 engineers in total). You don't have to be pulling in millions per week to get high on the grossing charts. We're probably around 1/4 of what you estimated.

Though you mention delivering the assets. Actually (like a lot of games) we make a big effort in getting under 50MB over-the-air limit on the App Store. The total content for retina iPhone is ~300MB, delivered in parts as you progress in the game. That's kept on S3, downloaded through CloudFront.

But yes! You're right, it's mostly a hell of a lot of JSON flying around.

<comment><USER16> FYI, the OTA limit was increased to 100MB back in September.

We're managing to squeeze our apps into this at the moment, but will likely need a similar solution using S3/CloudFront in the near future.

[1] [http://www.macrumors.com/2013/09/18/apple-increases-over- the...](http://www.macrumors.com/2013/09/18/apple-increases-over-the-air-app- store-download-limit-to-100mb/)

<comment><USER15> We support non retina devices, which are stuck on iOS 6. When this came out we weren't sure whether it applied to that too, so stuck with 50. We'd already been keeping it under 50 for 6 months by then so we had all the infrastructure set up, its mostly automated.

Haven't looked at it since iOS 7 launch though, do you know if it was iOS 6 too?

<comment><USER16> Just checked with a couple folks here, the limit is for the iTunes store, and therefore was also raised for iOS 6 (we assume older versions as well, but don't support them either).

<comment><USER15> Interesting, thanks. Maybe next time we update, I'll try to convince everyone to panic-delete a little less :)

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> Package Control is a far cry from the scale of RubyGems. PC uses a little over 2TB a month, whereas my calculations show RubyGems using around 50TB.

That said, early on I chose Linode because of their generous bandwidth that is included with the boxes. For the price of less than 1TB of AWS bandwidth, I get 8TB, plus a decent box. The bigger boxes have an even bigger proportion.

I'm not posting this to give any suggestions for RubyGems - I know nothing of the complexity of that setup. Mostly just figured I'd share the research I did for finding reasonably priced bandwidth.

</comment><comment><USER18> The thing is there are many providers who can do the same and most of them will do it for less than half of this. Some less than 1/5th. I think they should move this to Digital Ocean and save $5000.

The bias towards AWS for this type of application is ridiculous and a big waste of money.

<comment><USER19> Whenever anybody makes this type of statement, I'm alway interested in knowing if they've ever run a site with this type of traffic, and this many customers.

In particular, have you ever run a site that consistently serves over 25 Terabytes of traffic/month, or have you worked with someone who has?

I guarantee you that no company I have worked for in the last 15 years, could have ever run this type of infrastructure for $7K/month. Its absolutely amazing.

<comment><USER20> My site serves 25 TB/mo, and it costs me $80/mo...

$60/mo for a dedicated server, $20/mo for CloudFlare. The dedicated server only serves 1 TB of it, the other 24 TB is static assets cached and served directly by CloudFlare.

Here's a screenshot of CloudFlare Analytics for the last 30 days: [http://d.pr/i/6Z8S/5GU2Ni8t](http://d.pr/i/6Z8S/5GU2Ni8t)

<comment><USER19> Thanks - that's eye opening.

So, what this really comes down to (after a good nights sleep) - is what type of traffic/transactions are you running on your back end infrastructure.

If the data is static, then you can probably (these days) cut your costs for 25 Terabytes/month from $8K to $800 (or, in your extraordinary case, $80), simply by being a bit intelligent as to how you make use of VPS/CDN/CloudFlare Transfer allocations.

On the flip side, if much of the data you are transferring out is the result of dynamic back end transactions, queries, and generation, then it's unclear to me that you can (easily) recognize the savings that you might see when generating static content.

I'm interested in knowing if CloudFlare will start throttling/shutting down people who pay $20 and use 25 TBytes in the long term though - that alone, for some organizations, will cost them more than the extra $8K they would pay to AWS (who, have zero problem with you using 25TB, 250TB, 2.5PB, etc...)

<comment><USER20> Yeah, I'll admit that other CloudFlare customers are likely subsidizing the amount of bandwidth I'm using.

Funny thing - back when I was using 10 TB/mo, my site was hosted entirely on DreamHost's $9/mo shared hosting. I moved mostly because I was starting to get several hours a month of downtime - presumably, they were gently nudging me off their service.

I've seen plenty of $60-$100 dedicated servers come with unlimited-use 100Mbit connections, which work out to 16ish TB/mo before you start getting to 50% saturation. Of course, those are still subsidized in that that pricing is possible only because most people who buy it don't max out a 100Mbit connection.

Still, though, S3's 9-12¢/GB bandwidth pricing seems a bit high. Bandwidth at DigitalOcean (presumably unsubsidized) is 2¢/GB, which comes out to a much more manageable $500 for 25 TB.

With dynamic content, CloudFlare has Railgun, which takes advantage of the fact that dynamic content is usually mostly static. Still, though, if you have 25 TB of dynamic content, I presume bandwidth stops becoming the limiting factor in your cost of operation.

</comment></comment></comment></comment></comment><comment><USER9> There's already 30+ comments on this thread and no one has pointed out the obvious: this is all for the peanut gallery to laugh at Npm, Inc.

If the bill remained relatively consistent they could host Rubygems.org for ~28 months with 200K.

</comment><comment><USER21> We run into the same cost-related problems for our CDN. What we did to solve it was to rent dedicated servers that are near AWS regions. We used Route53 latency based routing to route traffic to that dedicated servers + Nginx + LUA. We're serving 300+ TB of traffic per month and the total price is just a percent of the RubyGems AWS Bill. There is some maintenance included with this solution and the problem is finding the right dedicated server providers.

</comment><comment><USER22> That's not as bad as I was expecting. I was once working with a startups infrastructure (>100 servers) and it was near 20k/mo (mostly reserved instances)

<comment><USER23> Yes, this seems quite reasonable considering the scale it handles.

</comment></comment><comment><USER24> Since it can take a bit of time to read through the invoice, here's a summary of the bill:

CloudFront $1,071 Data Transfer $3,597 EC2 $2,184 S3 $ 228

While "bandwidth" costs equate to ~$4,668/month, only $1,071 is CDN (CloudFront), with the balance just raw Data Transfer.

Since lots of folks are commenting, and not everyone realizes the difference it's also a good time to point out the CloudFront vs. Data Transfer distinction.

Using Amazon's terms... Data Transfer means anything directly served/coming from EC2 or S3 (or a few other services which aren't relevant here), but NOT anything for CloudFront (which is, obviously, a separate line item, as shown above).

The bulk of CDN (CloudFront) usage ($735 worth or 69%) is US.

The bulk of Data raw bandwidth (Data Transfer) usage ($2,931 ~80%) is US East.

<comment><USER24> Is any of this good/bad/right/wrong? I have no idea. That depends quite a bit on what THEY are doing with it and why. For example, it can be cheaper to distribute from CloudFront versus straight from S3 for some use cases. Though, generally, you are not only looking at using CloudFront to save money over S3 ...there's typically a performance reason.

And sometimes the hosting costs simply don't matter. It's easy for us engineers - siting here on HN - to sit at our keyboards and play around with hypothetical ways to save money. This isn't necessarily a bad thing, but there are numerous things in IT that it doesn't make sense to optimize. Why? Because the ROI on the engineering time, CapEx, and OpEx (and the time, energy, and focus of ANYONE involved or impacted at all) to do the optimization doesn't outweigh the opportunity cost.

Sometimes there are simply better uses of our limited capital and time.

Not everything needs to be optimized. And the argument gets stronger when there are other factors more difficult to factor in: adopting a platform that isn't as widely known or isn't backed by a similar level of maturity (even with it's quirks, at least they are well known), etc.

The risks/concerns not only vary between organizations, but often from one period of an organization's growth to the next. The beauty is every organization gets to make their own decision ...and none of them have to give a damn if the HN community agrees or not. :-)

</comment></comment><comment><USER25> While by no means insignificant, this bill is no where near what I'd imagine would warrant a HN post. I wouldn't be surprised if most startups beat this regularly.

The startup whose backend I co-created racks up an AWS bill that hovers around a half million dollars a month. We make use of all of the ways to save with Amazon: pre-paid reserved instances, negotiated deals, etc. And we're not even that big; imagine what Netflix's AWS bill must cost?

We've tried other providers, toyed with co-locating, but at the end of the day the flexibility and cost benefit of IaaS outweighed the lower base price of CPU cycles when you roll it yourself.

<comment><USER26> > this bill is no where near what I'd imagine would warrant a HN post.

Can only guess at why folks like any post, but it's not necessarily how large the bill is. Maybe it's how low it is for a service that's widely relied on, or maybe it's the level of transparency, which turned out to include evanphx above showing up to answer questions about the project.

<comment><USER27> Absolutely, this is a transparency thing.

Compared to npm asking for $300,000 in donations to keep the thing running. I'm glad RubyGems can run for relatively so little, and be transparent in doing so.

</comment></comment></comment><comment><USER28> With most of this being bandwidth costs, it seems like switching to a host like Digital Ocean would make more sense here. The bandwidth costs are a fraction of Amazon's in comparison.

As for the CDN, switching to something like Cloudflare might make more sense rather than relying on Cloudfront. At the least, there's a "US and EU only" option for edge locations to use which si considerably cheaper than the default option of all edge locations.

<comment><USER29> Wow, as someone who uses rubygems all day and is not in "US and EU only", I'm glad you're not involved in this project.

</comment></comment><comment><USER30> Why was this even posted? Looking for help reducing it? Complaining about the amount spent? Looking for a pat on the back?

I saw a talk at Ruby/RailsConf about the work spent building and maintaining rubygems.org. It smelled a bit martyrish. "Look at the thankless work we perform behind the scenes".

Well, if help is required building or operating rubygems.org, please just say so. As a seasoned Ruby developer I'd be more than happy to contribute development time, and as a daily user I'd be willing to commit financially in a small way towards operating costs. Not that that is required - given all the offers of free hosting this post received in response.

If we don't know about a problem, we can't help. Just ask if help is what you want. It's not like the Ruby community doesn't have great communication channels.

</comment><comment><USER31> This seems reasonable to me? Why is this a newsworthy item?

<comment><USER32> Transparency is nice and the guy paying the bill answered questions for curious minds.

</comment></comment><comment><USER33> How can I donate to Ruby Central? Checked out their "Support" page yet it didn't help much. Any easier ways like donating via Paypal?

</comment><comment><USER34> could easily knock multiple thousand bucks off of that by just reserving the ec2 servers you know you'll need, plus reserve the cloudfront bandwidth you know you'll need (for the amount of data served I believe you should be able to cut CF costs by at least half).

3 year heavy EC2 reservations pay for themselves in ~7 months, cloudfront reserved bandwidth is just a 12 month agreement so that costs nothing up front. You might want to experiment with some different instance types though, depending on your resource utilization. Personally I really like using the new c3.large instances for my web servers and anything else that needs more CPU than memory, proportionately. If the standard instances suit your needs better you still might want to move to the m3 class.

Aside from those two items it looks like you are sending out a considerable amount of stuff from EC2->internet (27 TB transfer out from US-East to internet). I'd recommend looking at whether you could set up a cloudfront distribution with your EC2 servers as its origin.

</comment><comment><USER35> I had no idea it cost this much to host rubygems.org.

The website says that hosting is provided by BlueBox?

<comment><USER36> This seems to be mostly their CDN bill. Not sure, but I don't really consider a CDN as part of hosting fees, more of a general infrastructure fee.

<comment><USER37> This includes all our compute fees too.

</comment></comment></comment><comment><USER38> Could it be possible to cache the version list locally and then just update it incrementally, e.g. via Git? Wouldn't this save both download time (for us), and bandwidth (for RubyGems)?

</comment><comment><USER39> Interesting. Looks like most are bandwidth cost.

</comment><comment><USER40> assuming there is a direct correlation between requests and projects, we can do a guestimate on ruby developers and projects which are active

</comment><comment><USER41> That's it?

</comment><comment><USER42> WHY DOWNLOAD!!! WHY</comment>


Don't Go, Part 2: The Perils of Grad School in the Humanities - <AUTHOR> http://chronicle.com/jobs/news/2009/03/2009031301c.htm

<comment><USER2> This can be extended beyond the humanities... Science and Engineering graduate schools are under increasing risk as the job possibilities of their output is reduced - reduction in DoD funding, outsourcing/offshoring, reduction in commercial R&D funding, etc.

Yeah, the Boomers' retirement will help, but that's not going to occur in the near term. Countries, somehow, have to be net job creators if they want to keep the tax revenue coming in and the government cash going out.

<comment><USER3> It's just as skewed a perspective to look only at the negatives as it is to only consider the positives.

Science and engineering may not be the paths to easy street, but at least there's some sort of perfectly rational story as to how an engineer can get paid: Someone pays the engineer to make stuff, and make stuff better, then sells the stuff. Engineers can actually expand the economy, with new resources, new things to do with those resources, better ways to use those resources, and so on. Yes, there's up-and-coming competition, but it's not as if we're going into that competition empty handed or as if the other side is populated with some sort of superhumans or something (yet); it's just _competition_. Cry about it if you must, but then get back to work.

For those with humanities degrees, and especially the PhDs we're really talking about in the context of this story, they are, not to put too fine a point on it, luxuries. Expenditures. Ones we're a bit overstocked on, too. And they do _not_ grow the economy, their sustenance comes from producers.

This is not intrinsically bad. We have humanities PhDs in general for good reasons. I am not trying to draw intrinsic "goodness" judgments from this point, because that depends too much on your personal definition of goodness. The point I _am_ trying to draw is that going into science and engineering in general is going to be a stronger bet over time, because you're much closer to the parts of the economy that generate economic value. The humanities majors are at the end of a much longer chain, with every middleman taking their cut, and too many of them trying to drink from the same hose. And what they generate may be valuable to humanity, but... it's hard to eat a thesis on the philosophical similarities between Marxist dialectic and Dingbellian Hypertrophisms as manifested in the movie Titanic. And that's before we talk about "oversupply", which drives the economic value of such things even lower.

I don't think science and engineering are particularly "increasing" in risk; they've never been perfectly safe and they continue to not be perfectly safe; I'm unconvinced the magnitude has changed much, it's just the delusions of safety have been replaced by reality. Humanities is at increasing risk, because in a contraction they're really, really easy to cut off, especially when there's more than we need. And contractions happen.

(Remember, as raw and as rough as it may sound, _nothing_ is perfectly safe. When something is portrayed as perfectly safe, _run screaming_. Someone is either lying to you, or deluded, and neither is good. Engineering and science are as good a bet as you're going to find over the next 25 years, but in general, the closer you can get to generating value the better. You may get parasites, but try to find ones smart enough to realize they have to let the host live for it to work.)

<comment><USER4> It's wrong to equate science and engineering in terms of productivity. They're both technical disciplines, and a lot of what you learn as a scientist can be applied to productive endeavors, but science in itself isn't inherently productive.

Science is speculative. A good scientist is answering questions for the sake of the questions, and doesn't expect anything for answering them. She certainly doesn't expect to make something that can be sold for a profit.

<comment><USER3> Who's equating? I just said they're both more reliable than humanities; that does not imply they are equal. You can overspecialize yourself out of a job in science and engineering, but at least you stand a chance.

<comment><USER4> You're implicitly equating them every time you use the phrase "science and engineering", as if they were a dual entity. They're very different, and you're _far_ more likely to be employable as an engineer than a scientist. Totally different beasts.

<comment><USER3> No, I'm not.

My explicit disavowal trumps your implicit-ness argument.

Go back and read it. I haven't edited it since you posted this, and it's not actually part of the point. It reads just fine without that.

<comment><USER4> It doesn't really matter whether you explicitly made the comparison or not. Science and engineering are totally different things, but you drew a bright- line distinction between them (as a group) and the humanities.

It's far easier to find a job as an engineer than as a scientist. That's all I'm saying.

</comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> This, by the way, is of particular interest to me because I'm ignoring the advice given in the article and am in grad school for English lit, as I discuss tangentially <a href="[http://jseliger.wordpress.com/2008/12/28/laptops-students- di...](http://jseliger.wordpress.com/2008/12/28/laptops-students-distraction- hardly-a-surprise/).</comment>


Ask HN: Please rate my web application - <AUTHOR>

I'm a foodie, and this web application came about out of pure frustration with the big recipe websites. I got tired of recipes being reduced to font size 2 and surrounded by banner adds for viagra (nothing against viagra of course!). So I took my families recipe scrapbook, which by the way has all these cool stories added over the years, and this became my vision.
If you have a moment, especially if you are also a fellow foodie, please let me know what you think.
deadgrandmacookies.com
Also, I haven't added any email authentication, so feel free to sign in with a fake password if you want see your personal scrapbook.
And finally, if you love it and want to know when it's ready to go, fire me an email at email@example.com <comment><USER2> I see that the name has a story behind it, but most people will be seriously turned off by a website named "Dead Grandma Cookies." Definitely look into changing that.

<comment><USER3> Seconded. Perhaps alternate wording with a more positive emotion attached to it like 'Favorite Grandma Cookies' or 'Grandma Approved Cookies', something that will make you think about warm cookies coming out of the oven and visiting your site to trigger that feeling.

Certainly no problems with mentioning your departed grandmother and her contributions in the About Us section though.

</comment></comment><comment><USER4> Looks quite nice. I am always looking for new recipes. One thing I haven't seen is recipes with good photos of each step of the process. If you add that, I'll use it.

Regarding the name, the story resonates with me, but dead grandma still makes for a very bad name. I bet the grandma had a name....

<comment><AUTHOR> I find the name is quite polarizing. It intrigues people and pulls them in, but it also creeps them out a little. I'm going to have to really think this one over. Thanks for the feedback.

<comment><USER5> I like that name a lot. It's funny, memorable and a total differentiator in the recipes market.

</comment></comment></comment><comment><USER6> Could you bear to increase the contrast of the light grey on white font color? And remove the long sequence of queries from the recipe URLs. Otherwise I really dig this design. The guiding arrows on the homepage are a nice, casual and inviting touch.

</comment><comment><USER7> Love the idea! Yeah the name could use some tweaking. It's a little bit morbid and just be careful with the "grandma" part. People might remember it differently: "grandmother", "granma" etc.

</comment><comment><USER8> It's really nice and simple .. Again the name is a little creepy! Old or Sweet sound much more appealing.

</comment><comment><USER9> Even though the name is creepy, I'd suggest you test it against other names. It is a memorable name.

</comment><comment><USER10> cool site, digging the design! Suggestion though - who is ever going to remember a 'recipe number', especially as the site gets bigger? I suggest you make that a search box instead, which seems needed anyway to find specific content.

</comment><comment><USER11> I like it. Does quite a bit and has a minimal gem stack.</comment>


I work in tech and pester Jeff Bezos' inbox weekly - <AUTHOR> https://medium.com/@megamindbrian/i-annoy-jeff-bezos-weekly-and-he-still-doesnt-want-to-be-friends-ef40e6e86686 <comment><USER2> 1) How did you get Bezos' inbox? 2) Even so, you know it's 99% likely that Jeff has never actually read even one of your emails, right?

<comment><AUTHOR> Ha! 1) Jeff welcomes all emails to be filtered by his staff. firstname.lastname@example.com. 2) yes. Some of them get routed correctly and bug reports are followed up on.</comment></comment>


The next generation of mobile maps - <AUTHOR> http://googlemobile.blogspot.com/2010/12/next-generation-of-mobile-maps.html

<comment><USER2> Duplicate:

<http://news.ycombinator.com/item?id=2012819>

1 comment</comment>


I tried to fly to London on a fake passport [video] - <AUTHOR> http://www.bbc.co.uk/news/video_and_audio/features/magazine-36744910/36744910 <comment><USER2> A tip for anyone who can't play the video:

If you're trying to view the video under Windows, you'll get an error that says, "You need to install Flash Player to play this content. Download Flash Player now."

Tip: Install a browser add-on to change the user agent to report "iPad" or another platform for which a Flash Player does not exist. The video will then play. I personally use the Firefox extension called "User Agent Switcher" which works well.

It's so ridiculous that we have to do this. I thought Flash was dead. I'd like to ask the BBC's web developers why they don't just show the non-Flash video if Flash is not installed in the user's browser?

<comment><USER3> This would make sense if they didn't have a non Flash option (like Twitch.tv for instance, although they just announced an HTML5 beta).

But if they have a way to serve the video without flash, it just blows my mind.

<comment><USER4> iPlayer defaults to HTML5 if flash isn't installed, but this hasn't been rolled out to the news player yet by the looks of it.

If I visit [http://www.bbc.co.uk/html5](http://www.bbc.co.uk/html5) in Firefox with no Flash installed then I get:

      Flash is not installed or enabled

      If you would prefer not to use the HTML5 Player beta on this device you must download or enable Flash.

</comment></comment></comment><comment><USER5> I was wondering if it's legal what this person did. I thought others would too. Here's what I found:

"Although some asylum seekers might enter the UK illegally, once they have applied for asylum they are no longer 'illegal'. Anyone seeking protection is entitled to stay in the UK while awaiting a decision on their asylum claim." ([http://www.asylumaid.org.uk/the-asylum-process-made- simple](http://www.asylumaid.org.uk/the-asylum-process-made-simple))

<comment><USER6> Well, this is only true as long as UK is part of EU. It's an EU law.

<comment><USER7> I must be missing something. Why didn't he apply for asylum in France then?

<comment><USER8> Social services don't pay enough.

<comment><USER9> You'll probably get downvoted but you are correct. As an Arab it sickens me how these "refugees" are choosing what country to stay in despite the fact they say they escaped war and torture. It saddens me how they are giving us, potential future immigrants with degrees and a desire to be functional parts of society, more bad rep.

<comment><USER10> > It saddens me how they are giving us, potential future immigrants with > degrees and a desire to be functional parts of society, more bad rep.

Does having a degree make you a better person or a more functional part of society? Does not having a degree bring bad rep?

And.

Why do you think these people don't have degrees and can't be functional members of society? Do you think they're stupid because their country was at war? or are they stupid because they have no means to just catch a plane and get a visa?

Your comment is extremely unfortunate.

<comment><USER9> >Does having a degree make you a better person or a more functional part of society?

I can't answer that. However, I can say that having a degree makes an _Syrian immigrant_ a better person or a more functional part of a _Western_ society.

A degree in the Third World is often associated with education (duh), work ethics and a sense of civility. I know this might sound elitist as heck but what use would a developed country have for someone without any of those qualities?

>Why do you think these people don't have degrees and can't be functional members of society?

Simply because they couldn't even be functional in their own society.

I never said they were stupid but if Third Worlders were so bright, why isn't the Third World developed?

Unfortunate? What's unfortunate to me is that I have to point out why countries like my own are far behind. Like it or not the reason for that regression is people.

<comment><USER10> Wow. You're going to have a hard time adapting to Europe, unless you only mingle with the elites.

Here is the thing, our values are not "get a degree". Our values are respect, treating and considering each other as equals, help each other, you know, stuff like that.

Unfortunately you seem to be very far from understanding it. Hence why you'll have issues in Europe. You're welcome to come and learn about our values, but be ready to respect everyone equally regardless of their origin, studies or money.

Good luck in your life.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> What's annoying for me that's for other people (non-asylum, non-EU) the system is very bureaucratic and usually not so supportive, for example for someone from post-soviet country it might take up to a year to get a working permit in Sweden. Even if you apply for EU blue card it doesn't help much. But for asylum applications there is a "fast track" with all support possible, sure some part of them are fleeing from war, but some (or even probably most) of them are just economic asylum seekers, just check last statistic from Sweden [1].

It might be safe to assume that economic asylum seekers are looking for better life, which is fair and reasonable, but in this case the system is broken : why economic asylum seekers should get easier/faster/priority process over workers from non-EU countries, or why workers from non-EU countries should even bother with immigration process if they can just apply for asylum and be done with it?

\- [1] [http://www.migrationsverket.se/Om- Migrationsverket/Statistik...](http://www.migrationsverket.se/Om- Migrationsverket/Statistik/Asylsokande---de-storsta-landerna.html)

<comment><USER12> > why economic asylum seekers should get easier/faster/priority process over > workers from non-EU countrie

What makes you think they do? The UK locks many asylum seekers in immigration detention centres.

</comment></comment><comment><USER8> I just fail to understand how the BBC can portray this as something great. I mean the guy tries to enter Britain 2 times with fake passports and he was already in France. (what is he fleeing from in France?)

And then there's the fact that this guy had contacts to criminals that can create fake passports. I guess nobody did something about that too, their smuggling and fake passport business is probably still making profits!

<comment><USER13> what is he fleeing from in France? => nothing. France is a great place.

However, I have lived both in the UK and in France. If I had a choice, and if I was looking for asylum, I would choose the UK every time. In another video from him he says his two friends made it to the UK before him. The best country to get into Europe (as an asylum seeker) is the UK. It is also a reason why there is such a big fuss about immigration. The benefits are great, it is a very safe country, wealthy, lots of opportunity... etc etc. I might be very biast but the UK is quite a bit ahead of the other European countries in my opinion (with a few exceptions). If the UK was on mainland Europe it would have waayyy more immigration problems.

Edit: I am happy he made it. I am pro immigration.

<comment><USER14> > If I had a choice, and if I was looking for asylum, I would choose the UK > every time.

It depends on your previous education. If he speaked both french and english (thus, language were not a relevant part in the decision), then France would be a better destiny. Is a Mediterranean country, so there is a lot of shared context. More similar climate (in the South), familiar ingredients used in the kitchen easily available, and because France have stronger historical bounds with several African, and by extension Islamic, countries. For islamic people to be able to find food halal prepared by other muslim of their same branch is a must. Finding a suitable job out of the capital would be also much easier. There are more locations suitable in France.

</comment></comment></comment><comment><USER15> I don't quite understand it, but he was already in France when he tried to fly to London, right? He could have just applied for asylum there, it's all EU. Or was this in the light of the UK at some point in the future leaving the EU?

<comment><USER16> The UK is not part of the Schengen zone so being a temporary resident of France would not entitle you to enter the UK.

<comment><USER15> Yes, you're right. But my point was: if what he wants is to seek asylum because he's from Syria, he could as well have applied for it in the E.U.

<comment><USER17> You can't really apply for asylum in the "EU", you need to apply for asylum at a country. Often there are also travel restrictions in place and asylum status e.g. in Greece doesn't allow you to just move to Germany, Italy or France.

And as some comments have pointed out: With very good English, your opportunites are obviously a lot better in the UK than in any other country.

</comment></comment></comment></comment><comment><USER18> This was incredibly moving. I don't come across content like this in HN that often. Kudos, he was brave.

</comment><comment><USER19> Does anyone have a mirror that does not require flashplayer to be installed?

<comment><USER2> See my tip elsewhere in the comments about the Flash problem.

</comment></comment><comment><USER20> Part of Mrs May propaganda.

<comment><USER12> If it's propaganda, it's probably not propaganda _for_ her, she's taken a very hard line on immigration.

<comment><USER20> Making immigration the issue at BBC. This is propaganda. Britain instead of trying to solve internal economical problems, caused by greed and incompetence, goes the easy way - demonisation of immigration.

</comment></comment></comment><comment><USER21> Smuggling tip: On a Slavic passport, if your last name ends in ova, it says you're female.

<comment><USER22> Interesting... So one's surname changes according to their gender?

<comment><USER23> If you come from a place where you surname is simply FathersnameSon or FathersnameDaughter, then yes. Eg: Bjornson or Einarsdottir (sorry Scandi friends for typos)

<comment><USER22> Well, I actually come from such a place. In Turkey it's not uncommon that a surname ends with "oğlu", meaning "son of X" where surname is the form "Xoğlu". Because of "reasons", there are no surnames ending with "kızı" ("daughter of") though - at least I've never came upon one.

Also, we never change them, even if the holder is not male.

<comment><USER10> Funnily enough, this is more widespread than one would think. I didn't know about the Turkish example.

In Spanish, all the surnames ending in -ez also mean "son of". Even many Spanish speaking people don't know (or don't care? :)) about it, as they've been used as "normal" (sorry) surnames for long now.

Lopez: Son of Lope Rodriguez: Son of Rodrigo Perez: Son of Pedro Martínez: Son of Martín etc

<comment><USER24> I had no idea!! Was there ever a "daughter of" convention?

I love when etymology pops up in random threads :)

<comment><USER10> Actually, when I said "son of" in my head I was using the gender neutral "hijo", so it applies actually to sons and daughters :-)</comment></comment></comment></comment></comment></comment></comment>


Fedora/RISC-V reaches initial goal - <AUTHOR> https://rwmj.wordpress.com/2016/10/15/fedorarisc-v-is-finished/#content <comment><USER2> I feel like there's so much momentum around RISCV recently, it should really take off... These guys have just completed bringup of their first Cortex M0-like RISCV implementation:

[http://hackaday.com/2016/10/10/the-journey-toward-a- complete...](http://hackaday.com/2016/10/10/the-journey-toward-a-completely- open-microcontroller/)

And are thinking about crowdfunding an open Arduino-like platform based around it. I can't wait!

<comment><USER3> Similarly, lowRISC are planning to put together a RISC-V SoC:

[http://www.lowrisc.org/](http://www.lowrisc.org/)

<comment><AUTHOR> Fedora/RISC-V should run on the lowRISC chips, but probably won't ever work on the embedded ones. We're targeting RV64G (64 bit RISC-V, with general purpose extensions) and given that it's a Linux server/desktop environment it also requires a fair amount of RAM.

We're not building any 32 bit binaries at all.

<comment><USER4> just. awesome. (+1 on no 32 bit).

looking forward to playing with this when you are ready.

</comment></comment></comment></comment><comment><USER5> I'm thinking a risk v backbend for llvmpipe will be important at some time in the near future. Reason is that it will be easier to make a chip with 16 or more RV64G cores than to develop an open GPU in the same time. ;-)

<comment><USER6> Indeed. Even better, someone is already doing good work in that space ;) [http://hwacha.org/](http://hwacha.org/)

</comment></comment><comment><USER7> Looking forward to the day i can get a RISC-V board in a standard desktop format (or perhaps a de-facto standard like RPi).

</comment><comment><USER8> This is great. Thanks for putting in work towards the goal of a FOSS alternative. I always appreciate the hard work people put in for good principles. Seeing things like this makes me happy.</comment>


A Python-to-JavaScript Transpiler with BabelJS and SourceMaps - <AUTHOR> https://github.com/azazel75/metapensiero.pj <comment><USER2> Can all of you python to javascript library creators get together and create one solid library, or maybe not all of you, because it would be a grid-lock of decisions. How about half of you with the most similar ideas get together and do one super solid library, instead of having 20 of these python to javascript libraries so the community can easily decide on one to use as a standard. This would be awesome! Thanks!

<comment><USER2> Probably need a company to do it. Like Microsoft made Typescript, Facebook made React, Google made Angular, etc... We need Dropbox to make this, since they have Guido and he can push this on the python 3 community to make this a standard library. Dropbox please rescue us and pull the python to javascript community together. Please!!!

<comment><USER3> > push this on the python 3 community to make this a standard library

Do you mean "standard" as in "the community's most often used", or as in "included in the standard library"?

A wise man once told me that "the standard library is where libraries go to die."

<comment><USER2> Well if I suggest standard library to an area that has 20 plus libraries, then maybe we can get somewhere in the middle :)

</comment></comment></comment></comment><comment><USER4> When i ran this on the Django github to create DjangoJS it didn't work, any ideas?

<comment><USER5> Did you really expect that to work?!

<comment><USER6> This comment perfectly sums up my expectations of modern JS libraries.

</comment></comment></comment><comment><USER7> I'm a little horrified to suggest this seriously, but this could be a cool way to accomplish consistent field validation between server and client.

I wrote this little library [https://github.com/fuhrysteve/marshmallow- jsonschema#complet...](https://github.com/fuhrysteve/marshmallow- jsonschema#complete-example-flask-application-using-brutisinjson-forms) to convert marshmallow schemas to a JSON representation with the intention of passing it to a browser or mobile device for rendering. Imagine if you could also pass native code to be used by the client for validation. In other words: write your validator in python and use it server side - but _also_ convert it to javascript so that the client can attempt to validate it before bothering to send a web request.

<comment><AUTHOR> Javascripthon supports converting either a python source file or a python function object directly, but actually using the embedded js interpreter to do the transpilation takes some time due to BabelJS code bootstrap time.

Having a "HOT" interpreter with an execution context that is persistent and can be used to convert code to ES5 on the fly has been already implemented by duckpy creator and i plan to intergate it very soon.

See [https://github.com/amol-/dukpy/issues/4](https://github.com/amol-/dukpy/issues/4)

</comment></comment><comment><USER8> Looks interesting, but it has naming incoherences: 'pip install javascripython' actually installs in site-packages/metapensiero/pj. I don't get why it does not simply install in site-packages/javascripthon.

</comment><comment><USER9> If you want to build the web with Python, IMO the emphasis should be bringing Python to the web. I think a more promising project is [http://pypyjs.org/](http://pypyjs.org/) \- a Python runtime in your browser powered by asm.js

Listen to this podcast where the author describes the project: [https://talkpython.fm/episodes/show/32/pypy.js-pypy- python-i...](https://talkpython.fm/episodes/show/32/pypy.js-pypy-python-in- your-browser)

<comment><USER10> I think it's certainly an interesting project, but the goal of compiling to JS today is to be able to access the DOM and interface easily with existing JS infrastructure.

</comment></comment><comment><USER11> This is awesome! One comment, it might be a good idea to make the docstrings in JS appear above the functions rather than inside them? Chrome refuses to optimize functions if they are above a certain size in bytes, which includes comments, so it seems most 'docstrings' are placed above the definition rather than inside. Also does str(x) convert to x.toString(x)?

I'm going to use this in a project I have in mind :)

<comment><AUTHOR> Good :-)

Do you have any link for this chrome detail about optimization?

str(x) conversion is missing... i'll will implement it asap

<comment><USER12> It'd be related to inlining a function since size is a common rule there. Some searching turns up this[1] article on crankshaft from three years ago, which lists the restrictions as ">600 source characters including whitespace or 196 AST nodes".

[1] [http://jayconrod.com/posts/54/a-tour-of-v8-crankshaft-the- op...](http://jayconrod.com/posts/54/a-tour-of-v8-crankshaft-the-optimizing- compiler)

</comment></comment></comment><comment><USER13> So this transpiler makes ES6 code and then Babel makes it runnable on most browsers, or does it leverage Babel in making JS code in the first place?

<comment><AUTHOR> The former, it translates Python 3.5 syntax and some of the core semantics to ES6+ JavaScript and then BabelJS is used to transpile that ES6 JS to ES5. All this retaining a sourcemap that maps back to the original Python sources.

It does all without the need for nodejs (even if it can be used of course), it uses an embedded js interpreter.

</comment></comment><comment><USER14> For-in array can be implemented using ES6's for-of. [https://developer.mozilla.org/en/docs/Web/JavaScript/Referen...](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of)

Also, Not sure if it would be correct to implement a python dict using an ES6 map. If the keys are all strings, probably better to stick to a JS object. Check out the performance difference: [http://jsperf.com/es6-map-vs-object- properties/73](http://jsperf.com/es6-map-vs-object-properties/73)

<comment><AUTHOR> For-of only works for iterable sources, it would not be a complete replacement of for...in, also it seems a bit slower that for...in as of now.. see [https://kpdecker.github.io/six-speed/](https://kpdecker.github.io/six-speed/)

</comment></comment><comment><USER15> Python and modern JavaScript seem like fairly similar languages (dynamically typed, object oriented/functional hybrid, rich ecosystem of packages), the biggest difference being Python's "batteries included" standard library, which presumably isn't (all?) available in the browser.

So is the main reason to use this just familiarity with Python, minimal context switching if your backend is in Python, and the potential for a bit of code reuse between front/backend?

<comment><AUTHOR> The main reason is... context switching, also i'm a big fan of python's standard library, but I have yet to do any complete work just with it.

<comment><USER5> Is this supposed to be able to work for really large apps at some point? Some commenter lamented how it didn't work with django.

<comment><AUTHOR> It cannot be used to convert python frameworks to javascript, nor Django nor any other

<comment><USER16> That seems to suggest that this isn't a fully-formed py->js transpiler?

<comment><AUTHOR> It's in development, as many others software projects are, and is far from complete. The goal is to translate as much of core semantics as possible, but i doubt that all the core semantics will be translated. One for all is multi inheritance which is currently unsupported by current Javascript syntax. Even more, when you use an object such a list, it's really a JS Array that will be manipulated in the end, so you will have to use array.push() to add instead of python's list.append()

But Translating something like Django is out of scope for all the transpilers, it would mean also converting sql drivers and so on? Does this really make any sense? Maybe you have a look at emscripten [https://github.com/kripken/emscripten/wiki](https://github.com/kripken/emscripten/wiki)

<comment><USER5> [http://www.transcrypt.org/](http://www.transcrypt.org/)

Does multiple inheritance

<comment><AUTHOR> I could assure you that even transcrypt cannot transpile Django.

It does multiple inheritance with a polyfill and overally is much more "fatter" than JavaScripthon.

But with JavaScripthon you can use any tool available in JS land to accomplish the same goal. Want to use Backbone's extend()? Use it.. want to use react's createClass() mixin?, the same

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> How does interfacing with existing JS libraries work? I try to imagine how using this with a bootstrap theme (=jQuery) would look like.

<comment><AUTHOR> If jQuery is installed globally, without package management, just use:

from __globals__ import jQuery

....

jQuery('#an_id')...

<comment><USER17> awesome, thanks for the info!

</comment></comment></comment><comment><USER18> Related: [https://blog.glyphobet.net/essay/2557](https://blog.glyphobet.net/essay/2557)

By the way, I prefer Javascript's scoping rules over Python's. Also, it is easier to create a lexical block in Javascript than in Python.

<comment><AUTHOR> Your post seems quite imprecise about Python's semantics...

<comment><USER19> The part about `lambda` is certainly imprecise. You can use the ternary form of `a if b else c` and you can use comprehensions and/or functional style with `map` or `filter` or things from itertools if you want iteration in a `lambda`. Instead of putting statements inside the `lambda`, you should write whatever would be a statement as a helper function, and just refactor the `lambda` so that the sequence of statements you wanted will just be some expression.

I didn't check in Python 2, but in Python 3 anyway, `type()` of a `lambda` is definitely `function` and the `lambda` object has a `__code__` attribute with `co_code` containing the actual bytecode, so it's definitely a function.

For raising errors, once again you can just define a helper that does the raising -- the limitation here is the use of statements, not anything inherent to exceptions. For example:

        In [56]: def r():
           ....:     raise TypeError
           ....:

        In [57]: f = lambda x: x[0] if isinstance(x, list) else r()

        In [58]: f([1])
        Out[58]: 1

        In [59]: f("hi")
        </comment></comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>---
        TypeError                                 Traceback (most recent call last)
        <ipython-input-59-987cd5963ca4> in <module>()
        ----> 1 f("hi")

        <ipython-input-57-b0e388d24fbc> in <lambda>(x)
        ----> 1 f = lambda x: x[0] if isinstance(x, list) else r()

        <ipython-input-56-a540441a09db> in r()
              1 def r():
        ----> 2     raise TypeError
              3

        TypeError:

The same idea would work with context managers, etc.

FWIW, having used Python for a long time, I see the limitations on `lambda` as very good things. `lambda` should almost never be used for complex, side- effectful logic, and instead should be used when a short expression needs to be encapsulated and it's easier to do so with an anonymous function than a full function definition, and to a lesser extent sometimes for some tricky metaprogramming use cases, like dynamically binding functions at run time.

I'm sure that high-quality Javascript style probably implicitly uses these same kinds of limitations, even if the language itself doesn't make it mandatory.

</comment><comment><USER20> [https://twitter.com/pmrondon/status/648251230804946944](https://twitter.com/pmrondon/status/648251230804946944)

</comment><comment><USER21> It's Python with javascript ES6 semantic, there is no support for Python list, dict or support for Python magic parameters __kwargs. Good work nonetheless.

<comment><AUTHOR> Python lists are supported:

* as literals;

* in for loops;

Keyword arguments accumulator has no corresponding feature in the ES6 world, as far as I know....

<comment><USER22> > _Keyword arguments accumulator has no corresponding feature in the ES6 > world, as far as I know...._

As a feature no, but Python code using that could be easily transpiled to a function taking a dict with the args...

<comment><AUTHOR> It's implementable really and it is half-implemented, have a look at the call conventions... additional keyword arguments can be specified without any problem

The problem is that there's no __kwargs equivalent in js land.. and probably i don 't want to wrap any call to make it possible.

</comment></comment></comment></comment><comment><USER23> Related: [https://github.com/atsepkov/RapydScript](https://github.com/atsepkov/RapydScript)

<comment><AUTHOR> I'm a big fan of RapydScript, unfortunately it requires nodejs and I would prefer not have to.. but hey, there is a space for everybody ;-)

</comment></comment><comment><USER24> Does this support:

1\. CommonJS modules

2\. Static types

3\. Webpack loader

Having CommonJS module support will enable polyglot development where language syntax live inside a module and everything follows JavaScript semantics.

<comment><AUTHOR> 1) it renders import and from...import statements to equivalent ES6 imports. If you use something like Webpack down the pipeline you can already mix ES6 imports and CommonJS requires. Also, BabelJS by default transpiles ES6 imports to CommonJS requires.

2) What do you mean exactly?

3) There's no direct from-python loader, but the compilation can be splitted in two steps with the BabelJS Webpack loader used for the latter

</comment></comment><comment><USER25> Either make python a first class web lanGuage (not gonna happen) or just write in javascript. It's awesome.

</comment><comment><USER26> It's an awesome library/tool yay for more Python to JS tools!

</comment><comment><USER27> have you heard about coffee??? ((:

<comment><AUTHOR> Yes, I drink it everyday

</comment></comment><comment><USER28> Does this actually mean I can now write python code instead of JS for websites?

<comment><AUTHOR> Have a look at the example! ;-)

<comment><USER29> I'd love to but

a) make failed b) I didn't really want to build something just to see an example running ;-) c) you don't have an issues turned on in Github so I couldn't file a bug.

It would be lovely if you could host the example somewhere and link to it. Or failing that - have a compiled example in the repo so the idle and curious can try it out with jumping through any hoops.

<comment><AUTHOR> ops, sorry for that. Issues are enabled now ;-)</comment></comment></comment></comment>


Show HN: Kasaya – A scripting language and runtime for browser automation - <AUTHOR> https://github.com/syscolabs/kasaya <comment><USER2> All those kind of projects share the same flaw: it uses a DSL instead of an existing language, so tooling/documentation/testing/support/modules are going to be very weak, and 100% depending of the creator for the first years, in a domain that is already a niche.

It could be a library with good API instead. Or even a special env setup for an existing language with injected built-in and automatic imports.

Now you could argue that the goal is to have this "simple DSL that looks like english" so that normal people can use it.

This argument has existed since DSL exist, and the result is always the same:

\- the simplicity of the language will, in the end, limits its usefulness. Not every domain is like SQL/HTML/CSS, where descriptive is enough. Complex domains need branches, loop, namespaces, etc. Eventually you will be forced to add features in a twisted way to something that was not designed for it and replace its simplicity with ugliness, or restrain yourself and be limited forever. See Ansible DSL for a good, or rather, horrible, example of that.

\- end users that can't use a normal programming language won't suddenly become tech saavy because your DSL is simple, but their use case will never stop at simple. So they will start building complex systems as soon as they use it for real, with a limited DSL and their limited ability. The system will become a monstrosity, and you'll have no tooling to help.

\- successful dsl are usually not simple. Css is not. Sql is not. Html is an exception because it has no logic. This has logic.

\- it looks so cool. It's like candy for tech lovers. Even to me: I find it so sexy. And so people will adopt it, ignoring the arguments above. Ignoring the decades of such attempts that ended up in pain behind so many corporate firewalls. There will be many tweets at adoption to talk about how nice it is, but no blog post 2 years later to admit it was a bad idea. And then it will happen again with $new_shiny_dsl_based_tool.

<comment><USER3> All these kinds of HN comments share the same flaw: they unnecessarily detract from the work the OP has done by attacking use cases that the project never claimed to solve.

DSL's, for all their problems, do simplify complex programming logic, and people use them every day to do great things. DSL's like Ansible and Chef save people an order of magnitude of time for server provisioning hence why they are wildly popular.

It seems reasonable to me that someone would build a DSL with the same goals for web browser automation. The screen recording example gif they have looks so intuitive even a non-programmer could do it.

I don't look at this project and expect that it solved every problem with web scraping and reading the README it doesn't look like they are claiming it does either.

<comment><USER4> Using Ansible is what made me lose faith in DSL's in all the ways mentioned (eventually wanted loops, conditions, variables and namespaces...). Ansible is an API over a domain and if it were originally just represented through a Python language library I don't see why it would be less accessible or productive. Even something as simple as YAML can be screwed up and turned complicated.

<comment><USER5> Building infrastructure is complicated. Have you found an easier way then Ansible to accomplish building infrastructure?

Ansible does make yaml more complicated, however, you don't need to use much of that complexity for simple projects. Compared to Terraform, Chef, Google Deployment Manager, and Windows Desired State Configuration, Ansible is by far the simplest to get up and running on to do real work with.

<comment><USER6> AWS CDK would be an example of using a programming language rather than a DSL to build infra.

<comment><USER7> There's also Pulumi that covers a wider range of infrastructure than AWS only.

</comment></comment></comment></comment></comment></comment><comment><USER8> This looks great.

I also want to shamelessly plug something similar I am working on, Taiko, it uses javascript and comes with a REPL that generates scripts like.

      await openBrowser();
      await goto("http://todomvc.com/examples/react/#/");
      await write("automate with taiko");
      await press("Enter");
      await click(checkBox(near("automate with taiko")));

The reason we use a javascript is familiarity, IDE support and use of existing node js libraries for testing.

For anyone who's interested

[https://github.com/getgauge/taiko](https://github.com/getgauge/taiko)

<comment><USER9> FYI to avoid all those awaits and make it chainable you can wrap it in a Proxy.

[https://github.com/kozhevnikov/proxymise](https://github.com/kozhevnikov/proxymise)

<comment><USER10> Or ppipe, if you want more features (I'm the author):

[https://github.com/egeozcan/ppipe](https://github.com/egeozcan/ppipe)

<comment><USER11> Completely irrelevant. Something I tried for front end frameworks

[https://github.com/imvetri/ui-editor](https://github.com/imvetri/ui-editor)

</comment></comment></comment></comment><comment><USER12> We can do this with Canopy in F# (repl/interactive style too!):

        //go to url
        url "http://lefthandedgoat.github.io/canopy/testpages/"

        //assert that the element with an id of 'welcome' has
        //the text 'Welcome'
        "#welcome" == "Welcome"

        //assert that the element with an id of 'firstName' has the value 'John'
        "#firstName" == "John"

        //change the value of element with
        //an id of 'firstName' to 'Something Else'
        "#firstName" << "Something Else"

        //verify another element's value, click a button,
        //verify the element is updated
        "#button_clicked" == "button not clicked"
        click "#button"
        "#button_clicked" == "button clicked"

[https://lefthandedgoat.github.io/canopy/](https://lefthandedgoat.github.io/canopy/)

<comment><USER13> The idea of this library is exactly to not use HTML ids (or css paths etc), but use instructions you could give to an human browsing the web (enter the page, press tab, type this..)

<comment><USER14> the problem with that is anything that can 'detect' an html element based on human-language will eventually fail to find something described with human- language due to crappy html on legacy systems.

</comment></comment></comment><comment><USER15> Test automaton guy here. Why reinvent the wheel? Selenium/WebDriver is already a standard ([https://www.w3.org/TR/webdriver/](https://www.w3.org/TR/webdriver/)). It has years of maturity. Maturity means that through use and development iterations it can now cater for a lot of corner cases. How to do domain authentication in IE. How to handle all the different types of modal dialogues. And so on. It can be used in several different REAL programming languages so you can interact with a database, or drop a message in a queue or call a webservive during browser interaction. I have done all of those. But sure, if you want a tool for a specific small use like a business analyst doing one linear test case, go ahead. If you don't believe all the corner cases, do yourself a favour and look under the Selenium tag on SO.

<comment><USER16> I'm currently developing a test automation DSL as part of a full automation service.

My partner worked for some time running on-site test automation courses. This was for organisations where the devs were average 9-5 workers without any passion for software development. Not the sort of places that would ever feature on HN.

Manual testers transitioning to automation testers within such organisations are, in most cases, fully incapable of doing so effectively.

Such testers cannot learn to code. Many could barely type with much proficiency. All were great people and great at manual testing, but coding was generally not what they were wired for.

There is a market for something easier.

It took me some time developing a plain-English DSL to realise myself that the majority of browser automation coding isn't coding.

You can abstract away the hard parts. What you're left with is not coding but configuration.

Given the right automation system you don't need to write code to define your tests, you instead need to configure the system to test as needed.

A DSL to replace current automation coding as-is is indeed an odd task.

A DSL for a minimal-grammar configuration language within an automation system can definitely work.

Will it work for everyone? No, absolutely not. Not you and not many who read HN. We're the outliers.

Will it work for boring dusty companies that we've never heard of and which can't afford to employ people who read HN? Yes, definitely.

<comment><USER15> I take your point, and kudo's.

Where I'm coming from is having seen some tool vendors sell "scriptless" test automation tools. UFT has it, and what used to be Rational Functional Tester has it (I peddled RFT in a previous life). The vendors sold it very successfully to non-technical managers, and it looks cool, the dusty companies and large companies all fell for it. "Your Business Analysts can automate tests". But a few months down the line, you realise that it is a rock muffin. No modular code, but linear end-to-end scripts. The login page changed? Update hundreds of test scripts. Who looks bad? Test automation as a profession.

<comment><USER16> I certainly feel your pain when it comes to non-modular linear end-to-end scripts.

The DSL I'm working on is already quite modular so as to reduce repetition, to hide complex-looking things like CSS selectors behind user-defined names and to support the definition of data sets independent of the tests that use them.

A test for a given page can import test steps, adding further actions and assertions if required and injecting one or more sets of data over which to iterate.

Sets of data can be defined inline (to support quick learning) or defined in separate files and imported and referenced (more ideal).

Properties of a page being tested can be defined separately to the test itself, including aspects such as the URL and named locators expressed as either CSS selectors or XPath expressions, referenced later as needed by the user-defined name. This reduces to one the number places many page-specific details need changing, as well as allowing the tests (which reference by name pre-defined locators) to flow more naturally.

I'd greatly appreciate your feedback in a few months when we have something workable to demonstrate. My email is in my profile if you're happy to help.

<comment><USER15> So is mine. Send me a link when you have something.

<comment><USER16> Your email doesn't appear to be present in your public profile that I can see.

</comment></comment></comment></comment></comment></comment><comment><USER17> Interesting but I'm not sure about the syntax. If I'm writing code, why do I want to write code in a language that is overly verbose and not that precise? Just make it code.

And if it is not meant for programmers, then make it clickable+drag-and-drop. Having a compromise in this case, makes it not a solution for anyone.

<comment><USER18> _> Having a compromise in this case, makes it not a solution for anyone._

Drag n drop is surprisingly slow and limiting to use, it's also hard to implement etc.

I think this DSL is approachable for non-programmers. I envision bosses/clients using this to write tests for parts of website to make sure it works.

If they need more functionality, they can move to more complex browser automation later... _if they need it_

A specific use case, but I can see demand for it...

</comment></comment><comment><USER19> Interesting concept, sounds promising.

Have you checked taiko ? [https://github.com/getgauge/taiko](https://github.com/getgauge/taiko)

<comment><AUTHOR> Neat! When we were looking around, we didn't find this one, thanks.

Can it also do stuff like this:

      read ${sender} from row "Test email" column "Sender"

By the way, that works using cartesian lookup.

</comment></comment><comment><USER20> > pronounced Kuh-SAA-yuh

That's ambiguous and not helpful – particularly in English that has many varieties and also too many vowel phonemes to map onto letters. Use IPA instead.

<comment><USER21> For anyone else wondering, IPA = International Phonetic Alphabet.

</comment></comment><comment><USER22> Looks promising but I don't want to install the JDK (and it's not practical for CI). Isn't it possible to do without with something like Puppeteer?

<comment><AUTHOR> Will look into this!

</comment></comment><comment><USER23> might want to think about a different name. [https://www.kaseya.com](https://www.kaseya.com)

</comment><comment><USER24> Would be great if this "transpiled" into a more robust and popularly supported formalism so that the functionality could be refined over time.

I could see implementing this script as being a requirement for a new feature delivered by engineering, and then having test engineering use that functionality as a foundation for more thorough qualification.

I worry that this approach by itself will fall into the same issues that Cucumber does, which is the amount of manual definition you would need to implement through what they're referring to as "macros". Over time those become as brittle as the code you intend to test.

<comment><USER25> I think Selenium IDE is still around.

Its a drag-n-drop browser plugin that does everything Kasaya can do (both selenium under the hood) and can export to js/python/etc.

</comment></comment><comment><USER26> I don't see how this is a scripting language and runtime; so, maybe I'm totally missing the boat and everything below is nonsense...

I think DSLs like this turn into one thing: maintenance nightmares.

I love the idea of them, I've just _never_ seen one be useful for more than a demo. Especially, for something as complex as interacting with the browser... Why not just use a visual tool and record the session with something like selenium? At this point, the idea of a "DSL" for non-programmers is pretty much a fantastic myth. I think DSLs should really only be used when they enforce quality, not to have a nicer looking statement. Same rule applies with macros, and lmao, if they aren't responsible for most DSLs.

I haven't even begun touch on the problems with errors, debugging, warnings, deprecating, updates, etc. which also come with a DSL.

The SDK setup looks an awful lot like I'm just using selenium with node and this is on-top of that entire debugging nightmare, is there more to it than that and the DSL?

As well I'm curious, how do you reliably use the web without selectors? I see it referenced, but I don't see "how," and that quite honestly seems like the coolest thing on the readme.

Again, I love the idea, it looks slick. Just based on my experiences, it seems like how nightmares, not dreams, start...

</comment><comment><USER21> The "blah blah this could have just been a library instead of a DSL blah blah no one will use this blah blah" conversation always comes up, but always ignores the fact that even if it were just a library, that alone wouldn't make people use it... It also ignores the fact that you'd get just as many "blah blah why not just use this other existing library blah blah" comments.

</comment><comment><USER27> Cool. Related: the venerable WPT ([https://webpagetest.org](https://webpagetest.org)) is well-documented, and it's straightforward to set up a private instance (eg via AWS AMI) that supports scripting and a robust set of testing tools.

</comment><comment><USER28> This is neat. I was just looking for something like this the other day.

Does it support loops? I don't see any example like that. Basically I wanted to load a search results page and check something about _each_ of the results on the page.

<comment><AUTHOR> Our current thinking is to not provide branching mechanisms (loops, conditionals) by design. Both to keep the language simple, but more importantly, to force script writers to create one test per each scenario. If you need an if statement, that's probably an indicate you need two tests.

For your use case, you'll need to write a macro and then call it the number of times you need.

      how to check for $something in search results for $thing
        ...
      end

      check for "foo" in "bar"
      check for "foo2" in "bar"
      check for "foo3" in "bar"

That works?

</comment></comment><comment><USER29> I think people often fail to grasp why natural language works for humans. It is because we can have a conversation back and forth and supplement with other things like illustrations or drawings.

That I can explain task to a programmer in natural language and that he can implement it, is only possible because he can ask questions back and gradually build up a mental model.

These natural language solutions often lack this feedback loop mechanism.

When you don't have feedback you are better off with a more precise and more mathematical language.

</comment><comment><USER30> Looks cool for really simple things but wouldn't use it for anything serious. I have been using Cypress[0] the past few months and so far I've been quite pleased with it.

[0] cypress.io/

<comment><USER31> Is it suitable to do automation? They seem to be mentioning testing only.

<comment><USER32> It is. Testing is simply automation with assertions.

</comment></comment></comment><comment><USER33> I like the idea. Bookmarked for when I get back to my home machine.

</comment><comment><USER34> One way this can be achieved is using specflow or cucumber and then make that drive selenium or puppeteer.

Probably a 10 minute job to set up some basic commands (like demoed here). Not saying you can replace this project in 10 minutes of course.

Advantage is you can use the same language as used here pretty much, but you can use some of gherkin's nice features like the tables for different test cases (or scraping cases!).

Kasaya would have the role in this case of defining the common language.

</comment><comment><USER35> Does it use Selenium under the hood?

<comment><AUTHOR> Yes it does...

<comment><USER36> Note that some sites block Selenium, since browsers report the use of WebDriver, and Selenium injects known predictable Javascript. Does Kasaya do anything to mitigate this?

<comment><AUTHOR> Not yet, but someone suggested Chrome DevTools protocol. This is still in the very early stages, so we're looking into these things.

<comment><USER37> I wonder why don't use Puppeteer[1], which is a established project for automating Chromium using Chrome DevTools protocol.

[1]: [https://github.com/puppeteer/puppeteer](https://github.com/puppeteer/puppeteer)

<comment><USER8> Taiko was initially based on puppeteer, but it was hard to keep up with puppeteer's api changes.

Plus, the abstraction leaked. Taiko is now built on the excellent [https://github.com/cyrus-and/chrome-remote- interface](https://github.com/cyrus-and/chrome-remote-interface)

<comment><AUTHOR> This is possibly Kasaya's plan as well.

</comment></comment></comment></comment></comment></comment></comment><comment><USER38> Is Selenium less crashy nowadays?

Back in 2017 when I had a testing automation job, I wrote a test automation system using Node, Selenium WebDriver, Cucumber and Vagrant.

It worked well once I managed to set up a Vagrant box that would take Cucumber tests from a local directory and keep a Node, Selenium WebDriver and Cucumber install cached, but WebDriver never really stopped crashing unpredictably.

I had to implement very coarse retry logic. Tests would take way too much time just because each run a few of the tests would keep crashing for a minute or more, until they finally succeeded.

I parameterized the Vagrant box so that testers could run subsets of tests by running the "test" command with parameters, not because we had that many tests (just about a 100) but because they were so slow.

It wasn't even that complicated of a SPA, and the backend engineers even added nice classes and ID's to elements that were to be tested.

The binding of Cucumber to JS to WebDriver was flawless, adding new testing functions (e.g. "do something with some particular type of list of items"), it was just that the browser component kept crashing all. the. time.

I longed for a deterministic means of automating the browser then, preferably by hooking right into the browser code and integrating with it, so I would know why the thing kept crashing. That hasn't happened yet.

</comment><comment><USER39> Dragging is a command I wish existed. I'm not super sure how to test draggable components - any thoughts?

<comment><AUTHOR> Drag is implemented, but we haven't fully tested or documented it properly: [https://github.com/syscolabs/kasaya/blob/master/kasaya.js#L8...](https://github.com/syscolabs/kasaya/blob/master/kasaya.js#L86)

</comment></comment><comment><USER40> Inspiring ideas, Perhaps this will be useful for automated testing or accessibility, etc.

</comment><comment><USER29> Trying to explain to my mother what to click in a user interface over the phone is next to impossible. So much for the superiority of natural language.

What you need is the ability to point and talk.

</comment><comment><USER41> There seems to be a lot of different efforts going on this space. While it's great to see people trying to make this area better I'm pretty sceptical that almost anybody would be wise to try and adopt this - you will hit the limits of what you can do with such a limited language so fast. And the language is only marginally more intepretable than things like Geb[1], which even supports similar constructs to "near" etc., but is a full programming language (Groovy) when you need it to be.

[1] [https://gebish.org/](https://gebish.org/)

</comment><comment><USER42> Who is this for? It requires the JDK and Node.js to be installed, telling me that this is targeted to developers. If I'm a developer, I'm OK to use a browser automation framework that requires a bit of code (at least one that has conditionals and loops...).

<comment><USER43> I guess it'd just need to be packaged up nicely.

</comment></comment><comment><USER44> Why is Java SDK needed?

</comment><comment> veysel-im I did think today :)

</comment><comment><USER45> I am confused by the use of "WYSIWYG". It seems to be more a control console/REPL with Natural Language syntax.

Edit: A killer feature would be autocomplete for things found on the page.

<comment><AUTHOR> > Edit: A killer feature would be autocomplete for things found on the page.

 _Challenge accepted!_

<comment><USER46> IMHO it would also benefit from a "raw typing" mode. It's a bit silly to have to explicitly write _' type "cat"'_ and _' press "enter"'_, when you're already typing _' cat'_ and _' enter'_.

You could simply start this raw mode with a keyboard shortcut, and everything you type is automatically transformed into this "type" and "press" commands, until you exit the mode with either the same shortcut or Esc.

<comment><USER45> Or if the first thing you type is a quote if you are focused on an input, then it infers the type command, otherwise it's a focus search.</comment></comment></comment></comment>


Benchmarking D vs Go vs Erlang vs C for MQTT broker  - <AUTHOR> https://atilanevesoncode.wordpress.com/2013/12/05/go-vs-d-vs-erlang-vs-c-in-real-life-mqtt-broker-implementation-shootout/ <comment><USER2> > Go 1.2 produces a binary that performs on the order of 10%-15% faster than > the numbers above, which might mean equivalent performance to the Erlang > implementation.

Huh, impressive for Erlang, beating a newer, statically compiled language, while being interpreted and with dynamic types.

<comment><USER3> Erlang's VM is very sophisticated and mature, it is at least years ahead of Go, imo. For example, compare Erlang's pre-emptive scheduling [1] to "goroutines".

[1] [http://jlouisramblings.blogspot.com/2013/01/how-erlang- does-...](http://jlouisramblings.blogspot.com/2013/01/how-erlang-does- scheduling.html)

<comment><USER4> > it is at least years ahead of Go,

Yes, Erlang has admittedly had decades to improve the scheduler (versus a couple of years for the gc compiler in Go), so this is quite literally true.

However, you should know that goroutines _are_ pre-emptively scheduled now; the "scare quotes in your comment seem to imply that they aren't: [http://golang.org/doc/go1.2#preemption](http://golang.org/doc/go1.2#preemption)

<comment><USER5> I'm a go fanboi, but to be fair, goroutines are now more preemptive, but not completely.

In practice that means that if you call a function somewhere in your infinite loop, you'll get preempted. It's still possible for a single goroutine to steal an os thread.

Practically speaking though, I feel like nobody should be scared away from go due to it's lack of full pre-emption. Seriously, don't write an infinite loop with no function calls.

</comment></comment></comment></comment><comment><USER6> i see no mention of "concurrency" in that article. i see that the go programs make heavy use of goroutines so why were they run in "single threaded" mode? just testing their mqttsrv with various levels of GOMAXPROCS rewards with immediate benefits. here are some numbers for pingtest and loadtest in Go for varying levels of GOMAXPROCS for them and the server:

(pingtest/mqtt gomaxprocs) vs pingtest, reporting "elapsed time":

      1x1  5.8s
      2x1  6.0s
      4x1  6.0s
      8x1  6.1s
      16x1 6.1s

      1x2  5.5s
      2x2  3.5s
      4x2  3.4s
      8x2  3.5s
      16x2 3.5s

      1x4  5.4s
      2x4  3.6s
      4x4  3.3s
      8x4  3.4s
      16x4 3.7s

same thing but for loadtest, reported value is "messages/sec":

      1x1  75521
      2x1  76523
      4x1  77477
      8x1  74613
      16x1 73678

      1x2   71439
      2x2  100571
      4x2   93426
      8x2  108938
      16x2  97593

      1x4   71390
      2x4   87426
      4x4   98746
      8x4   99320
      16x4 119692

      1x8   64413
      2x8   87445
      4x8  102953
      8x8  120720
      16x8 106842

(note that the loadtest doesn't look like it takes long enough to be meaningful in its default)

as always with benchmarks, caveat emptor, but in my opinion go does just fine.

<comment><USER7> Are your numbers in line with the blog's table?

So you get those instead of these?

Loadtest:

Go: 90.9 +/\- 11 100.1 +/\- 0.1 99.3 +/\- 0.2 98.8 +/\- 0.3

If not can you make it relevant to the table so people can compare and contrast?

<comment><USER6> loadtest for 100 500 750 1000, X*Y below means X = loadtest GOMAXPROCS and Y = mqttsrv GOMAXPROCS:

      1x1 80735 67696 67068 66585
      2x1 64380 76531 31346 43268
      4x1 77613 73794 72759 43263
      8x1 77813 64197 32899 46960

      1x2 71641 72521 72715 72695
      2x2 103711 102944 104210 39619
      4x2 73171 23803 90537 46204
      8x2 96624 49698 33714 45729

      1x4 69418 74088 34364 38935
      2x4 88805 102847 113740 108829
      4x4 102406 108110 34672 120161
      8x4 109022 124726 121642 46765

      1x8 62336 68238 71297 68754
      2x8 104833 115276 118170 44617
      4x8 122292 126075 126101 121306
      8x8 108826 125098 124765 47713

edit: s/pingtest/loadtest/ in the explanation above.

<comment><USER7> Still not following. For Loadtest:

D: -- [121.7 +/\- 1.5] -- [166.9 +/\- 1.5] -- [171.1 +/\- 3.3] -- [167.9 +/\- 1.3]

C: -- [106.1 +/\- 0.8] -- [122.4 +/\- 0.4] -- [95.2 +/\- 1.3] -- [74.7 +/\- 0.4]

E: -- [104.1 +/\- 2.2] -- [124.2 +/\- 5.9] -- [117.6 +/\- 4.6 -- [117.7 +/\- 3.2]

G: ---- [90.9 +/\- 11] -- [100.1 +/\- 0.1] -- [99.3 +/\- 0.2] -- [98.8 +/\- 0.3]

G(2): ? ? ? ? ?

G(4): ? ? ? ? ?

G(8): ? ? ? ? ?

</comment></comment></comment></comment><comment><USER8> "the Erlang version I'm not sure"

At least try to find out if it's HiPE (native compilation) or not?

</comment><comment><USER9> "an excuse to learn Erlang, and wrote his own implementation"

Why even included Erlang if you're not going to share the source...

<comment><USER10> He wasn't in the office. I'm going to ask him about it today. Like it says at the end of the blog post, if he puts it up on bitbucket I'll include the link.

</comment></comment><comment><USER11> "the Go implementation was executed with go run ". I think it would be much more appropriate to build the GO script with "go build" and use the resultant binary. Because the D program was compiled.

<comment><USER8> [http://golang.org/src/cmd/go/run.go?ModPagespeed=noscript](http://golang.org/src/cmd/go/run.go?ModPagespeed=noscript)

"Run _compiles_ and runs the main package comprising the named Go source files."

<comment><USER12> So he should have run the D program with dmd -run :D

<comment><USER13> or #!/usr/bin/rdmd

</comment></comment></comment></comment><comment><USER14> I found this article a little hard to read;

\- #555 on #fff is distinctly too light for a web page's text color (I generally recommend around #202020);

\- the font-size of 13px is too small—remove it and let the default of 16px show.

</comment><comment><USER15> "Go is an opinionated language, which would be fine if I agreed with its creators' opinions." Spot on.

</comment><comment><USER16> Would have been cool to see how many lines of code each implementation took including the erlang one.

<comment><USER10> It's mentioned. It's not easy to measure but they're all in the 800-1000 lines region.

</comment></comment><comment><USER17> Summary:

I hate Go, So Go Lost this race.

I love D, So it won or tied with C which I don't like but everyone knows is fast.

I wanted to learn Erlang, so I made sure it did better than Go.

I didn't share my SourceCode so you can't see if I was stupid or cheated.

Did I miss anything?

<comment><AUTHOR> Quite a few things.

The Go version was written by a person enthusiastic and presumably competent in Go. See their perspective here where he concedes defeat on the performance front: [http://blog.nella.org/mqtt-code-golf/](http://blog.nella.org/mqtt- code-golf/)

Adding C as a baseline is entirely appropriate.

The source code for C, Go, and D is available. The Erlang version may or may not at the discretion of its author.

Probably a more sensible hypothesis is that you like Go and saw a result that is unfavorable to it, so you had an emotional response.

<comment><USER18> > As usual, Go programs compare quite favorably to C programs in terms of > memory safety...

That's not saying much :)

</comment></comment></comment><comment><USER19> > Go implementation was executed with go run

Why didn't they just use "go build program.go; ./program"?

If you're compiling the other programs it doesn't seem fair to use the interpreter for go.

<comment><USER8> I thought "go run" did exactly that (compile then run)?

<comment><USER19> Perhaps I'm mistaken, looking at the source it does seem to do just that: [http://golang.org/src/cmd/go/run.go?ModPagespeed=noscript](http://golang.org/src/cmd/go/run.go?ModPagespeed=noscript)

</comment></comment></comment><comment><USER14> I'd rather like to see Rust in here.

<comment><USER10> Me too, but I've decided to not even look at Rust until it hits 1.0.

<comment><USER20> Good, because we're certainly not ready to compete in serious benchmarks yet. :)

</comment></comment></comment><comment><USER21> The results of the latency benchmark say that a larger latency is better. Is that a mistake?

<comment><USER10> No, it was measured in thousands of messages per second.

</comment></comment><comment><USER22> While your "benchmark" (if we should call it that way) obviously make no sense, I would suggest you guys look into how concurrency and parallelism are different concepts.

</comment><comment><USER23> The key takeaway in the benchmarks seem is that Go is significantly slower than the rest, much much slower.

Apart from the regular 30-sec interval postings on HN extolling the virtues of Go, it seems to me, people should rekindle an interest, or discover a new interest in D, C or Erlang where performance is a consideration, and maybe Go where a need to feel like part of the post-Ruby crowd.

<comment><USER24>
        >Go is significantly slower than the rest, much much slower.

Everyone knows that Go is a new-ish language and has room to improve on performance. That said, Go seems perfectly fast since all of the languages seem to perform fairly well.

Further, were Go "much much slower", CloudFlare, IronIO, Google, etc would probably not be using it...

        >discover a new interest in D, C or Erlang
        >where performance is a consideration

Erlang on The Game: [http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?t...](http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=go&lang2=hipe&data=u64q)

Go looks to be about ~50% the performance of C++, but, from lots of peoples' comments/writings, is much nicer to write so they use it when productivity is more important than absolute performance.

Note: I'm interested in Go (as I am about lots of languages), but am not a user of it right now.

<comment><USER8> Ya, Erlang doesn't do well on the Benchmarks Game because the Benchmarks Game doesn't measure communication, which is Erlang's strong point. No-one writes algorithms like those in the Game in Erlang; you code them as a server in C or Java or anything and farm work out to them from Erlang.

</comment></comment></comment><comment><USER25> I don't understand those benchmarks, 'insert any languages' can achieve performances than 99% of companies don't even need. And for the other 1% you're probably smarter than those posts on HN.</comment>


Los Alamos Map Of Science - <AUTHOR> http://www.lanl.gov/news/albums/science/PLOSMapOfScience.jpg <comment><USER2> Where's computer science? :(

Or mathematics for that matter..

<comment><USER3> They didn't label everything. According to their research paper ([http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjourna...](http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0004803)) they covered the "natural sciences, social sciences, as well as the humanities." From the companion article ([http://www.lanl.gov/news/index.php/fuseaction/home.story/sto...](http://www.lanl.gov/news/index.php/fuseaction/home.story/story_id/15960)) "it's a graphic depiction of the virtual trails scientists leave behind when they retrieve information from online services."</comment></comment>


A retired statistician proved the Gaussian correlation inequality conjecture - <AUTHOR> https://www.wired.com/2017/04/elusive-math-proof-found-almost-lost/ <comment><USER2> > > [https://news.ycombinator.com/item?id=13977554](https://news.ycombinator.com/item?id=13977554)

<comment><USER3> I got flagged yesterday for submitting this story:

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

<comment><USER4> That title seemed a bit click-baity?

<comment><USER3> Perhaps, but it was the real title. I thought that was what we should use on HN.

<comment><USER4> The title was "A Retiree Discovers an Elusive Math Proof–and Nobody Notices". The last three words were unnecessary, very click-bait, and as the first comment observed not even true. Even "Retiree" is strictly worse and more click-bait than the "retired statistician" that we have here. They're hoping to get some people to click through on the idea that the discoverer is a retired plumber or car salesman. A title that terrible should definitely be edited when posted to HN. Actually this post edited the title perfectly. Next time do that, because something so click-bait as the original will get flagged to oblivion more often than not.</comment></comment></comment></comment></comment>


Ask HN: Why Hacker News is not responsive? - <AUTHOR> I want to know the thinking behind it, as it won't be much an effort to build one for this page. I guess. <comment><USER2> There is a Github you can use to open issues, specifically #96 [https://github.com/HackerNews/HN/issues/96](https://github.com/HackerNews/HN/issues/96)

There are also these mobile-web alternatives: [http://hnmob.org/](http://hnmob.org/) [http://ihackernews.com/](http://ihackernews.com/)

You can also look at the source for HN, [http://arclanguage.com/](http://arclanguage.com/) And some other places on github likely; it's not easy to get that code running. Also, I'm not sure it's easy to make the updates. Plus, Nick is very busy.

<comment><USER3> Each of those alternatives is missing something important.

hnmob.org only formats front page while the comments pages (which can be the hardest to read) still link to HN.

ihackernews.com does not have a search function and login seems to be not working, also check author's own explanation at [http://ihackernews.com/login](http://ihackernews.com/login)

In my opinion there simply doesn't exist a web or native app which works 100% and never needs you to flip back and forth from news.combinator.com

As @kowdermeister said, it won't require much, just a couple of media queries. I'm not a fan too of over complicated things and I like HN raw, essential style. That sort of raw, minimal rule could also be used for a request from a smaller width device.

<comment><USER2> I've fixed the stuff on [http://hnmob.com/](http://hnmob.com/) so now you have more pages which are translated into a more mobile aware format. Also added Atom feeds for every page I could.

Still a little sloppy, I'm only hacking this code when watching TNG re-runs (so every day ;p )

<comment><USER3> Thanks! Btw, now domain name expired! :)

</comment></comment></comment></comment><comment><USER4> This really is a very simple site which tries to get the the job done (simple link aggregation and self posts with basic discussions). The code and functionality isn't state of the art, because they never really had the proper resources to look into it. I believe that has changed recently and they are slowly trying to bring in changes.

<comment><USER5> This is a lame excuse. If I have to zoom and scroll horizontally on a mobile screen with 1mm font size, then the user experience sucks. What resources? Implement 2 media queries and change page width and font size? Please.

</comment></comment><comment><USER6> That the current devs are considering it after pg's retirement from the site suggests the reason has been 'because pg considered it a waste of time.'

</comment><comment><USER7> I use firefox and the HN mobile addon

<comment><USER3> Nice find thank you... but it is a bit sad that we need an extension for this... and that it only works in Firefox.</comment></comment>