PEP 0501 – Translation ready string interpolation - <AUTHOR> https://www.python.org/dev/peps/pep-0501/ <comment><USER2> I like the general thrust of PEP 498 (`f""` is explicit, unlike Ruby or Bash's magic `"` vs. `'`).

That said, I think it would be much improved if it went the way of Scala and JavaScript (2015+) and made `r`, `u`, `b`, and `f` all interpolation providers. That way libraries could provide interpolators without having to extend the language to create a new one.

For example, in Scala or JavaScript, you can create a string context / template tag for composing JSON strings, resulting in a nice syntax like this (scala-like):

        json"""{
          "my": $data,
          "anArray": $someArray
        }"""

The `data` and `someArray` values serialized to JSON by the `json` interpolation provider.

At that point, internationalization is just creating your own interpolation provider and importing it as `i`, which is far less machinery than this PEP requires.

<comment><USER3> > (`f""` is explicit, unlike Ruby or Bash's magic `"` vs. `'`)

Both are equally explicit, though f"" is perhaps marginally more clear because it is somewhat mnemonic.

</comment></comment><comment><USER4> Reddit discussion

[https://www.reddit.com/r/Python/comments/3gfaji/pep_501_tran...](https://www.reddit.com/r/Python/comments/3gfaji/pep_501_translation_ready_string_interpolation/)

I think this and pep 498 are a pretty horrible proposals and does not fit well with the rest of the language and it's spirit.

1\. Decrements readability. When variables are hidden inside strings, you need to check for presence of a variable in two contexts. In the code and inside the strings. With format and % functions, you will be able to spot the variable in the argument list, which is part of the code itself.

2\. Security concerns regarding automatic evaluation of expressions inside the strings.

Also, why was format and % made in such a way as to require an explicit list of variables? What was the reasoning behind it? Is that reason no longer relevant?

<comment><USER5> I agree. For me the automatic "pulling" of local variables from the context feels like "magic", and I think that's an undesirable property for a programming language. Of course, PEP498 has the same issue.

<comment><USER6> > For me the automatic "pulling" of local variables from the context feels > like "magic", and I think that's an undesirable property for a programming > language.

Sounds like "Explicit is better than implicit" from the Tao of Python.

</comment></comment></comment><comment><USER6> I'm currently working on a heavily internationalized website written in Python 3[1] and as such I've had opportunity to work with a few ways of internationalizing content. My thoughts:

1\. Internationalization is, as far as I know, an unsolved problem. This solution doesn't stand out as obviously better than the alternatives. Unsolved problems don't belong at the language level. I'd rather wait until a real solution to this problem is discovered.

2\. What happened to explicit is better than implicit? Isn't that a core value of Python? Overriding implementations of builtin functions is all too magical, allowing spooky action at a distance. I'm extremely skeptical of solutions that don't allow me to grep my code for where a function is implemented. `gettext`, at least is clearly calling a function.

[1] [http://globalcitizen.org](http://globalcitizen.org)

</comment><comment><USER7> The idea that a translation string can execute Python code via ${expression} is really quite scary. Imagine a user downloading a third-party localization file that ends up being malicious.

Overall, I see there being two major styles for building strings. Since I use C++, I can't do literal interpolation, but I can get close with variadic templates. I hope you guys won't me talking about a statically typed language here, but it should be on topic to string interpolation at least.

        //interpolation
        print("My name is ", name, " and next year, I will be ", age + 1, " years old.\n");

        //arguments
        print("My name is {0}, and next year, I will be {1} years old.\n", name, age + 1);

        //arguments with hinting (:label is ignored)
        print("My name is {0:name}, and next year, I will be {1:age} years old."\n", fetch(), *values + 1);

        print(hex(size, 4), " KiB");  //interpolation formatting
        print("{0,4x} KiB", size);    //argument formatting (more covenient, but more cryptic and limited)

        //without the print component:
        string s{"My name is: ", name, "\n"};  //interpolation
        string s{"My name is: {0}\n", name};   //arguments

The latter is certainly vastly superior for localization. Because in another language, it may be more grammatically correct to reverse the parameters, eg: "来年の歳は{1}と名前は{0}"; which is something C printf doesn't support, shy of unofficial extensions for argument reordering.

But I find that as the string gets longer and longer, the former is much more readable. (You'll have to imagine the syntax highlighting, which helps a lot.) Eg when you have 17 arguments, it can be annoying to count to find the 11th parameter, whereas with interpolation, it's right there where it's used.

Ultimately, I decided on the former being the default, and added a format class for the latter, which is also really handy for building your argument lists somewhere else. Plus the default won't clobber your escape characters (in my case, braces.)

        //inline format
        print("I am {0}, and I'm {1} years old.\n", format{name, age});

        //external format
        format f;
        f.append(fetch());      //person's age
        f.append(*values + 1);  //person's name
        ...  //you could fetch the string from a translation table below, too
        print("I am {0}, and I'm almost {1} years old.\n", f);

Whenever string::append(format) is invoked, it will use all of the values inside the format array to parse {#} entries in the string. Of course, it's also safe and will simply skip over a reference to {2} in a format array with only one value.

Curious to hear others' opinions on the above, and any suggestions for improvement.</comment>


New routing library for Clojure/Script brings more structure. Like Rails - <AUTHOR> https://github.com/darkleaf/router <comment><USER2> My only comment is the support of the HTTP methods put, patch, and delete. Most users have support in a modern browser these days.

<comment><USER2> Nice code though :D</comment></comment>


Building an Apple-1 replica from scratch - <AUTHOR> http://www.computerworld.com/s/article/print/9136257/Image_gallery_Building_an_Apple_1_replica_from_scratch?taxonomyName=Hardware&taxonomyId=12 <comment><USER2> Mounting a bunch of chips and a few components on a circuit board ... I assumed he was going to be getting down to planning which chips to use, what they'd do, memory use, etc.. Not quite what I'd call "from scratch".</comment>


Ron Conway's Crystal Ball: 12 Startups To Watch - <AUTHOR> http://techcrunch.com/2010/11/16/ron-conways-crystal-ball-12-startups-to-watch/ <comment><USER2> I disagree with his guess of Blekko, which is the Cuil of its day.

There's a good discussion about Blekko over here ("Did Blekko launch the 'minimum viable product?"):

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

</comment><comment><USER3> It's impressive how many of those are YC startups</comment>


The Chainsmokers just closed their debut venture fund, Mantis, with $35M - <AUTHOR> https://techcrunch.com/2020/09/15/the-chainsmokers-just-closed-their-debut-venture-fund-mantis-with-35-million/ <comment><USER2> very interesting, had no idea... saw them at a music festival in Miami and they put on a good show, cool to learn that they're investing in startups!</comment>


Mr. Verb: Sarah Palin's accent - <AUTHOR> http://mr-verb.blogspot.com/2008/08/sarah-palins-accent.html <comment><USER2> What the hell does this have to do with anything, least of all hackers? You could some up this whole blog entry with "Sarah Palin has an accent". Who cares? It's readily apparent to anyone who hears her speak. Do we really need blog entries and headlines here informing us of that totally mundane fact? There really isn't anything even remotely interesting about this.

</comment><comment><USER3> Right out of "A Prairie Home Companion." (Although not from there myself, I have family from Northern Minnesota.)

While listening to her speech, I could envision the air quotes when she said 'Here's a little "news flash"'

I bet a bunch of comedians are secretly, well maybe not so secretly, wishing that the Republicans win because they provide such interesting and easily crafted caricatures. Not to say Obama and Biden wouldn't be ready material for parody, but the "McCain and Palin Show" practically writes itself, don'cha know!</comment>


Get Your App Ready for Rails 4 - <AUTHOR> http://rubysource.com/get-your-app-ready-for-rails-4/ <comment><USER2> FYI, here's what's new specifically for ActiveRecord 4, relevant for those of us who are using other frameworks (Sinatra, Padrino) that leverage Rails components:

[http://blog.remarkablelabs.com/2012/12/what-s-new-in- active-...](http://blog.remarkablelabs.com/2012/12/what-s-new-in-active- record-rails-4-countdown-to-2013)

The official edgenotes has sections for all the Active components:

<http://edgeguides.rubyonrails.org/4_0_release_notes.html>

<comment><USER3> Why are the dynamic finders being deprecated? Is it a speed/parsing thing? Or changing styles?

<comment><USER2> I had that question too...I was thinking that it must have some effect on performance but I thought it would be pretty minuscule?

<comment><USER3> OT performance rumination: I've not run tests on Rails' performance in this capacity, but I've _always_ thought that the runtime gymnastics to pluralize model names would be a big drag on Rails performance. I'm guessing something's cached, but I've _never_ understood the 'opinion' that a class should be 'Person' and the table name should be 'people'.

</comment></comment></comment></comment><comment><USER4> This is a really nice and handy guide, thanks! On a side note, having coded in many languages, I'm still a little at a loss for words that code breaking with new versions is tolerated.

Several of my talented friends spend too much time precariously managing their old Ruby codebases. I hope it keeps improving to make life easier.

<comment><USER5> Code breaking for patches and security enhancements is widely viewed as unacceptable, but this is the first occasion I've seen someone accept to breaking changes in a major release. Neither Rails 2 nor Rails 3 were fundamentally broken, and there's nothing stopping you from keeping an application on those releases.

<comment><USER6> In theory, there's nothing preventing you, but in reality it's just way too difficult. I put off upgrading to Rails 3 for a long time because of the rspec 2 fiasco and because Rails 2.3 was much faster. But, the problem is the rest of the ecosystem.

Most gems simply don't provide changelogs. Virtually none will maintain compatibility with more than one version of Rails, despite how easy monkey- patching makes this. So, if you care about fixing security releases in your app, you need to maintain not just Rails, but also the code for every plugin you use.

In one case I was told if I wanted the latest toys, I should upgrade to Rails 3, even when I offered to provide the Rails 2.3 compatibility branch. It's not a technical problem, it's a cultural one (and to be fair, those with opposing viewpoints don't view it as a problem). But, at the end of the day it's just not worth the headache.

You need to ruthlessly cut your dependency graph or accept the potentially destabilizing upgrade.

<comment><USER4> I think what you said about theory vs reality is the gap of technical debt that gets created. It's a real and growing issue in any framework that is maturing.

If what is today's leading edge will be legacy in the next 8-12 months, can a codebase get established and create value?

<comment><USER6> It's hard to say. Other communities do this much better. Java is obviously the poster child for backwards compatibility, but Python is much better too. Ruby makes supporting multiple versions very simple in most cases, but there's no will to do so.

For my part, I avoid anything that's a Rails plugin now. Time after time, I've found them to be a problem. Even if you decide you're going to upgrade to Rails 4, you need to update your entire dependency graph in one pass. Plugins targeting Rails 4 almost certainly won't target 3.x and not all plugins are going to be 4 ready on release day, so upgrading piecemeal is impossible.

</comment></comment></comment></comment></comment><comment><USER7> Great summary here, love the 3.2/4.0 side by side examples. I wondered why it hadn't mentioned the new background queue API though, only to find that's been pushed back out of 4.0 now. Just wanted to mention here incase anyone else hadn't seen that that has been taken out.

</comment><comment><USER8> Hi, Thanks all for the comments!

I didn't include queues, live streaming, and other features because unfortunately they are not available as a separate gems.

I tried to cover all the things that are possible now (via gems or simple code change). Maybe in a future post I'll cover all the new things in Rails 4. But as it's still on development I prefer to wait until a beta or release candidate.

<comment><USER9> Queues were recently pulled from Rails 4: [https://github.com/rails/rails/commit/f9da785d0b1b22317cfca2...](https://github.com/rails/rails/commit/f9da785d0b1b22317cfca25c15fb555e9016accb)

</comment></comment><comment><USER10> Does this mean that Rails will be released within a week or so?

<comment><USER11> No, it's a couple months out probably. There needs to be a couple release candidates first.

</comment></comment><comment><USER12> Are there any instructions to try out Rails 4 right now? And any major gotchas still left to be fixed?

Excellent post BTW.

<comment><USER13> Test with edge Rails by uncommenting out your normal Rails-line in your Gemfile, and add this:

# Bundle edge Rails instead:

gem 'rails', :git => 'git://github.com/rails/rails.git'

</comment></comment><comment><USER14> Turbolinks seems really, really nifty! It may have been released a long time ago but it's the first time I see a technique like this.

Does anybody know how this technique affects SEO?

<comment><USER15> Turbolinks still currently breaks a lot of things, including lots of .ready JS stuff.

</comment></comment><comment><USER16> Awesome! I've seen a lot of little coverage on some of these topics but this is about as comprehensive as I think we'll find without any sort of release notes.

</comment><comment><USER17> I saw no mention of live streaming.

The removal of 'match' in routes is a little saddening....

I'm not sure how I feel about the concerns abstraction.

</comment><comment><USER15> queues is going to be pretty nice.

</comment><comment><USER18> A</comment>


Ireland – the world's most litigious society - <AUTHOR> http://www.independent.ie/irish-news/courts/hill-walker-injured-on-rotting-boardwalk-on-wicklow-way-awarded-40000-damages-34631076.html <comment><USER2> Please don't rewrite titles like this. The HN guidelines ask you to "please use the original title, unless it is misleading or linkbait."

If you want to express your opinion, please do so by posting a comment to the thread. That way it will be on a level playing field with everyone else's.

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER3> Not only it is a rewrite, but the opinion is not substantiated by the article, which says this that despite "hundreds of falls over the years by walkers in the country's various national parks – many resulting in broken bones – Ms Wall's was the first in which the Service had been sued for negligence and breach of duty."</comment></comment>


Google Analytics: Responsive layout hides sign-in button #fail - <AUTHOR> http://dfcb.github.com/Responsivator/?site=www.google.com/analytics/

<comment><USER2> I thought I was losing my mind when this happened to me the other day while at a trade show trying to access Google Analytics from my iPhone.

</comment><comment><USER3> This is cool. But anybody else having just a blank screen when they try a different url other than google analytics?</comment>


Peter Cooper launches Ruby 1.8.7 - 1.9.2 guide - <AUTHOR> http://www.rubyinside.com/19walkthrough/

<comment><USER2> At popular request, there's now a sample that's a few minutes long so people can see the style, hear my voice, check the codec works for them, etc :-)

Also, I'm going to be doing a series of Ruby 1.9 upgrade and tips type posts on Ruby Inside in the next few weeks. Give away half the farm, as it were. Being hit with a sales page straight off isn't a great way to go IMHO ;-)

</comment><comment><USER3> This looks like a great piece of work, but I'd much prefer a textual format that I can read anywhere and refer back to later. A 3 hour video is rather unwieldy for me, and I can't grep it!

Do you have any plans to release the same material in blog or ebook format? If it's as comprehensive as the video TOC suggests, I'd happily pay for it.

<comment><USER2> I agree. When I set out I did _not_ expect it to be so long(!) but I'm a bit of a barge through and release kinda guy ;-)

What I'll be doing is a series of posts on Ruby Inside which cover much (but not all) of the material on a topic by topic basis and then, eventually, include an e-book version for free _with_ the screencast product (for existing customers too). So in the long term, yes.

However, in the interim.. I've put up the notes I used to make the screencast as a text file at <http://rubyinside.com/19.txt> \- it's also pretty unwieldy but is text, at least ;-)

<comment><USER3> This is great - thanks very much for the notes! Looking forward to that ebook version :)

</comment></comment></comment><comment><USER4> Just bought it, it's 3 hours long just as a warning to those short on time :) but on the other hand.. it's 3 hours of petercooper's manly voice for $16, bargin

</comment><comment><USER5> Looks great Peter. Are you going to do an affiliate program? I guess you pretty much _are_ the source for all things Ruby, so maybe that wouldn't make sense in this case.

<comment><USER2> Since a lot of my livelihood depends on Ruby and getting people up to Ruby 1.9 (a far less painful world!) is a big part of my strategy, I've priced this to sell.. and I doubt even half of $16 would be that interesting to an affiliate :-(

However, I will definitely have some bigger things out in future.. :-)

</comment></comment><comment><USER6> Hi Peter, this looks great. Was the decision to make a video rather than an ebook a commercial one or personal preference?

<comment><USER2> There's a bit of back story. I run a Ruby course for intermediate developers at <http://rubyreloaded.com/> and as a "bonus" part of the course I promised a run down of Ruby 1.9 in screencast format. My research showed there was more to it than I'd imagined so I decided to double down and put a lot more effort into it and sell it as a separate product too. So currently it's a video as that's what I promised my students, but I want to extend it later.

If it were a solely commercial decision, an e-book would have been the better way to go since there's still quite a bit of resistance against screencasts vs e-books IMHO.

</comment></comment><comment><USER7> THANK YOU THANK YOU!

</comment><comment><USER8> is it possible to have a pdf version?</comment>


Senate ID Cards Use a Photo of a Chip Rather Than an Actual Smart Chip - <AUTHOR> https://www.techdirt.com/articles/20170421/12072037207/senate-id-cards-use-photo-chip-rather-than-actual-smart-chip.shtml <comment><AUTHOR> Doesn't sound like it can be real (if _" most Senate staff ID cards have a photo of a chip printed on them, rather than a real chip"_ you have to keep track of who gets a real card and who a faked one, and that, I guess, costs more than you win by using cheaper cards), but it's late for an April fools joke, and that PDF ([https://assets.documentcloud.org/documents/3675403/cUt-5DPB....](https://assets.documentcloud.org/documents/3675403/cUt-5DPB.pdf)), if faked, is quite a good fake.</comment>


Beating cheating  - <AUTHOR> http://www.economist.com/blogs/babbage/2011/03/technology_monitor <comment><USER2> I'm a bit disturbed that students could be accused of cheating, and their academic careers potentially ruined, because of events that could happen purely by chance. For example, let's say I take an exam and get the same two wrong answers as the person sitting next to me. While the probability of this happening is small, it's not zero. With millions of students taking standardized tests, it would be strange if it didn't sometimes happen. Just like some percentage of the time, you're going to toss a coin and get 20 heads in a row.

<comment><USER3> I wonder how it compares to false positive rates in other, more conventional methods of detecting cheating. There might be a status quo bias at work here.

</comment></comment><comment><USER4> Or you can just have one-on-one oral examinations. Nah, that's a lot of work.

<comment><USER5> Call it a chat, then. Chatting is perhaps the fastest way to get to know someone and discover what they're interested in. And working with them is the best way to see if they're up to the job.

Testing is unpleasant and it doesn't work anyhow, IMO.

<comment><USER6> Chatting is also a great way to introduce subjectivity into the examination and provide an advantage to the students you like the best.

<comment><USER7> And short of "fill in the bubble", any written exam also provides an advantage to the students you like the best.</comment></comment></comment></comment>


9 Terms You'll See in Your Equity Offer–and What Actually They Mean - <AUTHOR> https://angel.co/blog/9-terms-youll-see-in-your-equity-offer-and-what-they-actually-mean <comment><USER2> What about "Right of First Refusal" in the context of start-up equity? How does this work in practice?

</comment><comment><USER3> TIL 0.1% of an average pie crust is roughly 0.0282 inches</comment>


Organizing Your Backbone.js Application With Modules - <AUTHOR> http://weblog.bocoup.com/organizing-your-backbone-js-application-with-modules

<comment><USER2> We are planning a follow up post on this soon that will discuss using script loaders and libraries that assist in organizing code into modules.</comment>


Axway Acquires Mobile App Development Platform Appcelerator - <AUTHOR> http://techcrunch.com/2016/01/17/axway-acquires-mobile-app-development-platform-appcelerator/ <comment><USER2> Axway acquired my employer several years ago. The primary metric used to evaluate technical solutions seemed to be the birthplace of the engineer. Very silly decisions were made. I advise caution.

</comment><comment><USER3> I'm not sure if this is good or bad.

They recently deleted their 4 years worth of support forum data which was vital for solving inherent issues with the platform. Even answer that were over 4 years old still held up to certain quirks that exists especially on the android side.

I recently spend quit a bit of time trying to debug an existing Titanium app just to find out that the new Titanium SDK broke HTTP Authentication when using the http client. Things like that should have automated tests and should never make it to a final release.

<comment><USER4> I think the acquisition is a good move for both companies and the SDK / platform. Axway is well positioned to take the product and team to a bigger market and is committing more resources into the product.

They are currently working on a plan to retain key information from the legacy q/a forum. SO will be the official forum going forward (which should have been in place early on). Expect a new search feature and cached results that will resolve these issues.

More will be announced in the coming weeks.

Fwiw, I built their new learning platform among other things.

<comment><USER5> > They are currently working on a plan to retain key information from the > legacy q/a forum

That's not what clients are asking. They want access to old threads period.Some people still need to maintain apps developed with a old version of the SDK.

> I think the acquisition is a good move for both companies and the SDK / > platform. Axway is well positioned to take the product and team to a bigger > market and is committing more resources into the product.

That's corporate talk. It says nothing about how current clients will be treated. It's vague and unnecessary.

<comment><USER4> Yesterday Axway was not in the mobile business. Today they are. I think existing customers will treated well as they vie for positioning. I think you could infer they want to retain and grow the business, not kill it.

<comment><USER6> Want is different than would. This is a highly competitive market where Appcelerator is pretty far behind the technical leaders of the pack. It mostly carries thanks to its huge head start but on technical terms its gotten old.

Most employees usually leave even with a good acquisition so if the acquiring company doesn't really "get it" this might be a problem.</comment></comment></comment></comment></comment>


Check-in to Foursquare by scanning QR codes with quiQR - <AUTHOR> http://quiqr.posterous.com/check-in-to-foursquare-by-scanning-qr-codes-w

<comment><USER2> I tried quiQR and it works really well!! It is a fast way to check-in to Foursquare.</comment>


Copywriting tips to drive up sales - <AUTHOR> http://blog.hsoub.com/copywriting-tips-to-drive-up-sales

<comment><USER2> Don't always believe that bit about sell the benefits, not the features. It depends on your target market. Robert Bly, author of _The Copywriter's Handbook_ et al., has written several good pieces on marketing to technical people. In one, he described how he fell flat "selling the benefits" in marketing high performance cars. It's an audience that craves features and doesn't give a rat's ass about glib benefit-speak. I don't have a link for that one, but here's a great piece about marketing to engineers:

<http://www.bly.com/Pages/documents/STIKFS.html>

<comment><USER3> The majority of the market for high-performance cars does not (and cannot) appreciate the major features of those cars. How many BMW buyers really understood the difference between the US and the Euro manifold, or understand the different kinds of variable valve timing systems?

My point here is, it may not be that the tech market wants to be sold based on features and not benefits; instead, it may be just that he was selling the _wrong benefits_.

It is a benefit (albeit one we tend to be derisive about) to have the most feature-packed, cutting-edge, sophisticated variant of something. To make the case for that benefit, you probably have to name lots of features.

But that's not the same thing as marketing _based on features_. For instance, the specific features you market may not matter, so long as you exceed the bar for "enough awesome sounding features to be the feature-leader in your category".

</comment></comment><comment> dorian-graph What are some good, popular books on learning effective copywriting?

<comment><USER4> 1\. Brain Audit - Sean D'Souza

2\. Advertising Secrets of the Written Word - Joe Sugarman

<comment><USER4> However, the best thing to do to learn copywriting is follow the advice of the late copywriting ace Gary Halbert.

Buy a book of control salesletters. ("Control" is an industry jargon which means that its a salesletter that has won in split tests with other versions of salesletters selling the same product.)

Then copy and write the salesletters down by hand. Because copywriting is essentially writing. You can read everything about it and yet be a so-so copywriter. Or you can just copy 30 or so control salesletters and learn more than you would by reading voraciously on the topic.

My swipe file book of control salesletters of choice is World's Greatest Direct Mail Sales Letters by Herschell Gordon Lewis. But its out of print. And second hand copies sell for $200-300 or so.

Another good and more affordable book of control salesletters is: Million Dollar Mailings by Denny Hatch</comment></comment></comment>


Mono 4.0.0 Release Notes - <AUTHOR> http://www.mono-project.com/docs/about-mono/releases/4.0.0/ <comment><USER2> Mono was the worst witch hunt in the Open Source Free Software movement. I think the whole it is Microsoft so even though it is an open standard and that Microsoft is flying people in from the mono project and publicly helping mono you are setting yourself up for a lawsuit.

So many projects in Linux we abandoned by users and people made clones of working software. Such wasted time and such a negative turn in our community.

<comment><USER2> Don't downvote without saying why. This isn't how conversations are made or stopped.

Here is RMS fiurst post on Mono and C# - [https://www.fsf.org/news/dont- depend-on-mono](https://www.fsf.org/news/dont-depend-on-mono)

"[...] we know that Microsoft is getting patents on some features of C#. So I think it's dangerous to use C#, and it may be dangerous to use Mono."

–Richard Stallman

I am glad that RMS is an advocate for Free Software and we certainly have been helped by his strong convictions. I think he was wrong with Mono and hurt specifically GNU/Linux (For RMS' sake) by limiting the use of a language due to pressure against developers using it. The fight was won and mono projects were dropped by distros.

P.S. Long time OpenSUSE user which was also strongly discouraged by the community due to Novell's and Microsoft's relationship and agreements.

<comment><USER3> What exactly was RMS wrong about? MS didn't try to sue Mono out of existence, but they could have. If Mono had become a critical part of the Linux world, they very well might have.

If MS didn't want the free software community to be wary of that threat, they could have made legally binding promises not to sue over patents (no, making something an "open standard" does not do that [1]). Failing that, RMS seems correct that it would have been dangerous to depend too greatly on technology that could be clearly be thwarted by lawsuits from MS.

Ironically, if MS had encouraged the free software community to use C# back then, MS would probably be better off today.

[1] [http://en.wikipedia.org/wiki/Category:Open_standards_covered...](http://en.wikipedia.org/wiki/Category:Open_standards_covered_by_patents)

<comment><USER2> He was wrong in seeing this as a hidden attack strategy by MS. RMS sees issues with many licenses and discourages many languages. This was an attack on a language which was MUCH less than others in terms of concerns, but the community attacked mono with such fervor.

Java - [https://www.gnu.org/philosophy/java- trap.html](https://www.gnu.org/philosophy/java-trap.html)

X Windows trap - [https://www.gnu.org/philosophy/x.html](https://www.gnu.org/philosophy/x.html)

How about javascript [https://www.gnu.org/philosophy/javascript- trap.html](https://www.gnu.org/philosophy/javascript-trap.html)

There are many projects that use javascript in Linux. Gnome has made javascript the default configuration language.

I find that the reason mono was so focused was that it came from Microsoft. It was a witch hunt that was guided by a conspiracy theory.

Answers by Mono Project [http://www.mono-project.com/docs/about-mono/concerns- about-m...](http://www.mono-project.com/docs/about-mono/concerns-about-mono/)

<comment><USER3> _He was wrong in seeing this as a hidden attack strategy by MS._

Just because an attack never happened doesn't mean there was no strategy. In part due to RMS's effort, there was basically nothing for MS to attack.

And even if there really was no strategy, there very clearly could have been. You can't fault RMS for not being a mindreader. That's why lawyers and contracts exist - if MS didn't want it to look like they were scheming, they very easily could have done that. Like Sun did with Java, as described at the top of the Java link you posted.

 _There are many projects that use javascript in Linux. Gnome has made javascript the default configuration language._

Please read the article you linked to and tell me what it has to do with GNOME using JavaScript (hint: nothing, it's about JS in the browser).

And from that last link:

 _In our opinion, nothing about Mono is different than other projects like Samba or Wine, that also substantially reproduce a Microsoft created technology or protocol._

RMS would be horrified if GNOME decided to write some core apps using Wine. But... they didn't. If they did, there would be an outcry even bigger than the one against Mono. RMS's problem isn't Mono (as described in your original link, he thinks it's good to have a free implementation of C#), it's relying on it for important applications.

I apologize if this comes off as a personal attack, but honestly, you seem to be more concerned with slinging mud at RMS than understanding the issues.

<comment><USER2> First: Never took anything you said as a personal attack. These are the conversations I like to have. Someone with a different perspective. Secondly yes I know that I was stretching the javascript to Gnome so I take that as a knock on my argument.

No my concern is not mud slinging at RMS. I really do appreciate him and I am glad he was born and is involved in our community.

My concern is the use of FUD. This is the very definition of FUD. Fear, Uncertainty and Doubt. It was a FUD attack on something that really couldn't have been a trap legally or intellectually. But placing a bit of fear and it could happen caused this uproar.

Now we are looking 6 years later and well things have really opened up in C# and mono?

<comment><USER3> _It was a FUD attack on something that really couldn 't have been a trap legally or intellectually._

I guess the sticking point is that I don't see how it couldn't have been a trap legally or intellectually. X exists. X is patented. Making a clone of X and using that clone in critical technologies is a risky strategy, unless you get an explicit legal guarantee that you won't be sued. It happened to C#, it happened to MP3, it happened to H.264. All very similar situations.

Now, you may say that C# is different than MP3 or H.264 because you personally reviewed MS's patents and you personally guarantee that none of them actually apply to Mono, so we're all in the clear. That is awesome, because as most software developers are not patent lawyers, we lack the ability to do that ourselves. We just know that some people said it's a problem, others said it's not, and MS itself was silent for quite some time. But it's not the same as an affirmative statement from MS saying they're not going to sue other C# implementations for patent infringement.

You are right that MS may have gotten a bit more attention than another company would have in the same situation. If so, it can be reasonably explained by that old "fool me once" quote. But even so, the whole situation could have been diffused by MS if they wanted to.

 _Now we are looking 6 years later and well things have really opened up in C# and mono?_

They seem to have. To be honest I haven't been following the developments of the past couple years in great detail because it seems like the "C# on Linux" ship has already sailed.

And that's a damn shame. I think C# is a great language. It fits a niche that still isn't really filled in the Linux ecosystem (although that niche is getting smaller and smaller as time goes on and other technologies develop).

<comment><USER4> I have to agree. Even Gnome developers described the thing as "putting our balls in Redmond's hands": [http://lu.is/blog/index.cgi/531.html](http://lu.is/blog/index.cgi/531.html). In fact the mono patent situation remained unclear for years, until 2009 if I remember correctly. And in 2006 there was the whole Novell-Microsoft kerfuffle, with Ballmer saying that only Suse Linux users were not violating Microsoft intellectual property [http://blog.seattlepi.com/microsoft/2006/11/16/ballmer-on- no...](http://blog.seattlepi.com/microsoft/2006/11/16/ballmer-on-novell-linux- and-patents/).

So I really would not call the reaction FUD.

Also, adding my personal experience from that period, I'd say that many Linux desktop users, myself included, were not interested in adding mono as another dependency to the stack, especially to run three applications: a note-taking application (tomboy), photo management (f-spot) or the banshee music player(which, I'm sorry to say, was one of the most crash-happy pieces of gnome). Samba and ffmpeg (well, the patented parts thereof) were never meant to be building blocks on which to write a lot free software, they are ways to ensure compatibility with existing closed solutions. I have some simpathy for de Icaza's idea that, since C# is a nice programming language, people should be encouraged and helped to use it, but the combination of patents' threat and frankly the "let's just put it in gnome!" approach doomed the effort. Also, in hindsight, mono would have (has?) worked better in the entreprise sector, rather than in desktop environment (Ruby is about as open as it gets, but it is not used for DE's stuff, execpt YAST2 I think). Hopefully now that most of the dotnet stack is open (except the bits that do depend on windows e.g. WindowsForm, if I'm not mistaken) we'll see a rebirth of interest.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> The apt install with their packages worked well in Ubuntu so no more build from source for me. I always had trouble with dependencies.

[http://www.mono-project.com/docs/getting- started/install/lin...](http://www.mono-project.com/docs/getting- started/install/linux/#debian-ubuntu-and-derivatives)

<comment><USER5> Struggling with dependencies on Debian Jessie via apt-get from the mono package repo. Anyone managed it yet?

<comment><USER6> For me on Ubuntu, I had to manually install mono-devel first.

For some reason apt-get wouldn't automatically install it, despite it being a dependency.

</comment></comment></comment><comment><USER7> It's going to be interesting to see how Mono going to be affected by the Microsoft's recent cross-platform activity.

<comment><USER8> Everyone here seems to be flagging this to hell now, so I'm guessing not very well.

<comment><USER9> How can you tell?</comment></comment></comment>


Productivity done right – The story behind Thingthing Keyboard - <AUTHOR> https://medium.com/@oplante/productivity-done-right-9522417cf8cf

<comment><AUTHOR> It was and his an amazing journey, what if tomorrow, you have a communication Dock called Thingthing. What if you can never have the need to switch apps while writing your next story. What if sharing all your content is easier than ever. We think of Thingthing as a whole new market for 3rd party services.</comment>


Ask HN: What are your favorite recipes on IFTTT/Zapier? - <AUTHOR>

<comment><USER2> I'm a _huge_ fan of anything of the general form:

When <X> happens, send a brief, well-considered message to the appropriate channel in our company's Slack account. (Hipchat/Campfire/etc also an option, but I prefer Slack for UX reasons.)

For example, when a new lead is added in Close.io, send to #ar-sales:

New lead for AR: Customer Foo ( email@example.com )

[https://app.close.io/lead/$REDACTED](https://app.close.io/lead/$REDACTED)

Dashboard: [https://www.appointmentreminder.org/a/admin/show_account/$RE...](https://www.appointmentreminder.org/a/admin/show_account/$REDACTED)

This lets people who care about AR sales have conversations in that room about it and get notifications right when a new lead happens. Then someone can say "Spiffy, I've got a minute, I'll give them a call." "Gave them a call. Not a great fit for our solution, but we'll try again in a few months." or "That looks to be a doctor. @patrick can you deal with them? It will likely involve the HIPAA discussion." "Can't do it right now -- do me a favor, call them and get as far as you can, then do the HIPAA handoff over email if they express interest in it." "Turned out they didn't ask." "Great, thanks for handling that."

I'm Slacking up all the things these days. It's easier for people to subscribe to Slack notifications (by being in the right channel) than to have them spend days configuring Gmail to e.g. filter out notifications from the monitoring software except when, spreads out the knowledge of events among time and people, and helps make the company feel like a community of purpose rather than N disconnected inboxes which happen to receive checks from the same bank account.

<comment><USER3> Do you use Slack solo? Or do you have people working with you on AR now.

<comment><USER2> I have people working with me on Appointment Reminder. This is a very recent thing. Writing about it today, actually -- essay will be out to the mailing list later about sales processes.

</comment></comment></comment><comment><USER4> I'm kind of cheating here, but one of my favorite set of Zaps is brand monitoring.

Basically, get notified whenever your company is mentioned in RSS feeds, Reddit, Hacker News (ahem), etc...

We actually did a pretty long write up on this exact use case here: [https://zapier.com/blog/monitor-brand- mentions/](https://zapier.com/blog/monitor-brand-mentions/)

</comment><comment><USER5> I'm cheating here a bit as well, since I work on the Zapier team, but some of my favorite use cases are ways my wife uses Zapier for her small business. Whenever an Ebay or Etsy sale comes in via PayPal, Zapier records the sale, along with fees and shipping price, in a Google Docs spreadsheet, and then copies the shipping address to a plain text document in Dropbox to easily print out address labels. It's a tiny thing that saves a ton of time.

Then, I've got Twilio integrations with Zapier that let me get Twilio SMS messages on my phone, and more, which I wrote about here: [https://zapier.com/blog/how-to-twilio-international-phone- nu...](https://zapier.com/blog/how-to-twilio-international-phone-number/)</comment>


LambCI – A continuous integration system built on AWS Lambda - <AUTHOR> https://github.com/lambci/lambci <comment><USER2> There's a lot of harsh commentary, but I think people here are missing the point. The fact that so much software needs root access to a (often mutable) global environment in order to properly build is a _bug_.

There are an increasing number of build systems that encourage squashing these bugs. The resulting build outputs are simpler and are often more portable. They're also easier to reason about. That translates to simpler deployment, simpler operations, and fewer edge cases to debug.

IMHO, the most promising answer to the 5 minute limit is finer granularity and better caching of dependency inputs.

</comment><comment><USER3> Cool! I had an idea for something like this but instead of having each build be it's own lambda event, I wanted to make each individual test it's own lambda event. The goal is to have the build time for a complex project boil down to the time it takes to setup + run the longest test.

<comment><USER4> We're doing something similar, but using mesos. We bundle tests up, so we don't have to eat the setup costs for every test, and try tracking test pollution by splitting bundles when they fail & running them separately, again.

<comment><USER5> where do you store build caches? npm/gems ect?

<comment><USER4> Dependencies? On the host; they're ephemeral but they'll run multiple builds between coming into existence and disappearing.

<comment><USER5> but first build always take a hit making the build times unpredictable making build time regressions hard to track.

</comment></comment></comment></comment></comment><comment><USER6> Cute.

> No root access > 5 min max build time > Bring-your-own-binaries – Lambda has > a limited selection of installed software > 1.5GB max memory > Linux only

There's a reason Jenkins is still used so widely. It's not because of utilization or all the other things pointed out. When your project gets big enough, managing the CI pipeline turns into a distributed systems problem with distributed queues, locks, error/failure recovery, and all the other headaches that such systems bring. Heck, reporting alone on a test suite with 12k tests is a problem in and of itself.

<comment><USER2> In my (limited) experience, treating your CI pipeline like a distributed system is a design smell. It leads to build processes that are difficult to test, fix, and iterate on.

When a build system can only be effectively invoked by CI/CD, it starts to pervert developer incentives. People need to check things in before they can be sure they work. They don't bother with tiny fixes because of the inertia. Flaky jobs get a quick rebuild, because reproducing a build failure locally is complex enough that they'd prefer to avoid it if they can.

Over time, these add up to a system that grows through accretion, which is the enemy of both agility and understandability.

Better is a build process that uses simple, reusable components that work equally well on developers' machines. These tools can be tested, refined, and replaced incrementally, using the same build processes that the rest of your code base does. You can do this without needing coupling your build processes to the specific way(s) that Jenkins (and company) model builds or their configuration.

<comment><USER6> Here's a problem statement for you. You have ~12k tests that takes > 40 hours to run sequentially. What do you do?

I know how we've solved the problem to provide as much validation as possible before shipping something to production and at pretty high rates of code churn. Whereas what you're suggesting is untenable on a large enough project. That's like saying drink your milk and have a hearty breakfast. Nice platitudes but not actual engineering. Our solution is not unique in fact. Shoppify and other big shops follow exact same practices ([https://www.youtube.com/watch?v=zWR477ypEsc](https://www.youtube.com/watch?v=zWR477ypEsc)). Not because they don't know any better and haven't heard of setting up proper build pipelines using principles from immutable infrastructure but because at large enough scale you need mutability.

Jenkins was just an example. We don't use Jenkins but you do need something that manages workers and their lifecycle. Saying reduce your test runtime to 5 minutes and have better engineers and tools doesn't cut it.

<comment><USER7> Good discussion guys. Please keep going.

Isn't the architecture of your build directly related to both the architecture of your system and your deployment?

If so, why would somebody think that a monolithic app, even one with threading and workers built in, be better than simply engineering your own as you go along? After all, this is supposed to be engineering, right? Not "How to use Jenkins"

I agree that platitudes aren't solutions, but code smells are the kind of thing that lead one to actually take ownership instead of perhaps using the same paradigm only larger, yes?

Apologies if I missed the point, dkarapetyan.

<comment><USER6> Code smell is a little ill-defined. Given two experienced enough engineers they'll smell different things based on what experiences have led them to that point. The general rough guidelines is I guess "things should be as simple as possible but not simpler" and depending on what sets of requirements you've optimized for it might not smell right to someone who values a different set of requirements.

</comment></comment></comment></comment></comment><comment><USER8> This looks very cool, but the 5 minute build time limit (an inherent limitation of the Lambda service) makes this less than ideal for a build system. The author does address this by recommending that you use Docker containers on ECS as an alternative for long running builds.

</comment><comment><USER9> Hardware is usually the cheapest component when it comes to software manufacturing, but we found out we wanted CI/CD to spin 24x365 as much as it can, increasing the resolution to ~single commits with the shortest possible cycles. With a sizeable codebase and a thorough testsuite AWS bills went up so quickly even the proponents decided it was not worth it. We restored our old CI infra and were able to add a couple of new servers too. The throughput increased considerably with money to spare. Still an interesting experiment, but it showed burning money on Amazon not defaults to moving faster.

</comment><comment><USER10> Very nice!

This looks very close to the ideal CI infrastructure. I'm used to waiting on queues and long VM or container boots and configuration on other services.

We can almost certainly count on Lambda getting longer execution times and higher memory limits. We can also count on containerization solving the root problem.

We should also be building software with the goal of tests that run within reasonable limits like this.

`time make test` takes 39 seconds on my businesses Go projects. I'd consider a 5m test suite serious tech debt. The time that developers wait for feedback on tests and deployment is becoming a business bottleneck in the continuous delivery age.

<comment><USER11> Wow, what's your secret to such fast builds? We're at ~35 minutes to build and test our rails monolith on Wercker. I'm guessing you're not hitting a db too much or loading phantomjs for end-to-end tests of a web ui?

<comment><USER12> At a guess, it's because they're using Go. The build and test processes are refreshingly (ludicrously) fast in that language.

Note that doesn't mean you should switch to Go, as the ridiculously fast compile times could be outweighed by other factors (retraining, lack of specific features, etc.)

I would however investigate it as an option as it seems to have found a place in the hearts of many former rails shops!

</comment></comment></comment><comment><USER13> Is a Google App Engine application also serverless?

<comment><USER14> Perhaps that's PaaS? Lambda and others are now described as FaaS (function as a service).

This might help:

[http://martinfowler.com/bliki/Serverless.html](http://martinfowler.com/bliki/Serverless.html)

Google has a seperate cloud functions offering:

[https://cloud.google.com/functions/](https://cloud.google.com/functions/)

<comment><USER15> Kinda surprised Google don't have Golang as their language. AWS offers nodejs, Java and Python. I wonder if it's due to being able to charge more for slow to start VM based languages?

</comment></comment></comment><comment><USER16> You win buzzword bingo for today.

</comment><comment><USER17> "LambCI - A continuous integration system built on surface dwellers"

</comment><comment><USER18> How is it serverless if it runs on an Amazon server? Also, how is it serverless if you need to consume a service? (AWS in this case)...

Every time I see something nice, there is this increasing chance that I'm gonna end up sad because it requires some sort of external provider like AWS, DO, Heroku, GCE... I don't have any of those and I don't want any of them.

<comment><USER19> "Serverless" here refers to not needing a pre-requisitioned server to exist in advance of the request. Sure, the physical hardware exists in AWS, but previously you'd need to have some sort of CI system running on a server that needs to be running and accepting web requests at any time that you might push to Github. With AWS Lambda, which LambCI is run on, a lightweight server boots up in realtime in response to that webhook, runs code, and shuts down. So you have a CI server that can respond any time of the day or night, but only consumes resources when it's actually running.

<comment><USER20> Serverless also describes the application invocation model.

The design intention for serverless applications uses pub-sub events rather than client-server calls. That's a major enabler of async processing and containers-on-demand, and it looks like LambCI has followed the pattern to a tee.

If you have to accept requests from a non-event-driven world, AWS offer their API Gateway to provide a listening server endpoint, but I think it's telling that this was not available when Lambda was released, and that LambCI does not need it.</comment></comment></comment>


Facebook Emails Show Its Real Mission: Making Money and Crushing Competition - <AUTHOR> https://www.nytimes.com/2018/12/05/technology/facebook-emails-privacy-data.html <comment><AUTHOR> "It should not come as a surprise that Facebook — a giant, for-profit company whose early employees reportedly ended staff meetings by chanting "domination!" — would act in its own interests.

But the internal emails, a rare glimpse into Facebook's inner workings, show that the image the company promoted for years — as an idealistic enterprise more dedicated to "bringing the world closer together" than increasing its own bottom line — was a carefully cultivated smoke screen."

</comment><comment><AUTHOR> This New Yorker piece covers the same topic in a more comprehensive and less sensationalistic format: [https://www.newyorker.com/tech/annals-of- technology/facebook...](https://www.newyorker.com/tech/annals-of- technology/facebooks-very-bad-month-just-got-worse)</comment>


Spanish novelist Lucía Etxebarria quits writing in piracy protest - <AUTHOR> http://www.guardian.co.uk/books/2011/dec/20/spanish-novelist-quits-piracy-protest

<comment><USER2> How ironic

[http://en.wikipedia.org/wiki/Luc%C3%ADa_Etxebarr%C3%ADa#Plag...](http://en.wikipedia.org/wiki/Luc%C3%ADa_Etxebarr%C3%ADa#Plagiarism_accusations)</comment>


Kite language - <AUTHOR> http://www.kite-language.org/

<comment><USER2> I skimmed through the documentation. What's the main value proposition? What do I get by using Kite that I don't get if I use Python or Objective C?</comment>


How To Not Get Fat At A Web Startup - <AUTHOR> http://www.televisionsky.org/2010/05/3-ways-to-not-get-fat-at-a-startup/ Working on the web all day long is a recipe for fatness. Not metaphorically, I mean literally. You're sitting on your butt all day. And especially when you're working at a startup and putting in 16 hour days, it's hard to find time to take care of yourself... <comment><USER2> I'm surprised he didn't mention sleep. There is a well- established correlation between sleep deprivation and weight gain. Not that I am acting on this knowledge, particularly. But someone could!

</comment><comment><USER3> Super simple: eat to keep insulin and cortisol levels low.

Avoid sugar (including artificial sweetners), juice, grain, starch and sweet fruit (berries are fine). eat enough fat and protein to feel full. get plenty of sleep (8+ hours / night).

Exercise will improve strength, muscle tone and metabolic conditioning, but diet is far more relevant to body composition.

As Gary Taubes taught us in "Good Calories Bad Calories" this is a hormonal issue, not a thermodynamic one.

</comment><comment><USER4> Interesting, working has the opposite effect on me. This past week I barely ate. I usually get so caught up working that I'll only stop to grab a bite to eat when my stomach won't allow me to continue. I'm curious to see what the distribution is for HNers.

<comment><USER5> I'm the same way; if I am busy I put off eating for hours longer than I should. Unfortunately I find that if I don't eat anything for a long time, I get progressively dumber. I read something that said there's a strong correlation between blood sugar and brain activity, but have no idea if it was scientifically sound. In any case, it seems true for me.

Sidenote: my best pick-me-up when I haven't eaten for too long are Triscuits, with a few glasses of water.

</comment></comment><comment><USER6> Bike to work, if it is possible. For me it is actually faster than using public transport, and it does wonders for my health, since I am not physically active at most other times (especially when working).

<comment><USER7> How good of an exercise is biking compared to running and walking?

<comment><USER8> Biking is good exercise but is quite efficient so you have to do a lot of it to get the same effect as running or even walking. For instance, it takes me about 1.5 hours to walk to work and I burn about 600 calories. The same distance on a bike, even going pretty fast, I only burn about 350 calories. And that's going flat out the whole way... in reality there are many opportunities to coast.

I've found that walking is underrated as an exercise. If you live in a suitable area (like NYC) it's easy to walk 2 hours a day, and you can also use the time to talk on the phone, listen to podcasts or books on tape, or just be outdoors.

<comment><USER9> > _"and you can also use the time to talk on the phone, listen to podcasts or > books on tape"_

Agreed on the walking, disagreed on the disconnection. Personally I feel like people have gotten disconnected from the world at large and each other for little more than a few tunes and podcasts.

I see everyone everywhere with earbuds stuffed into their ears - drowning out the activity and life all around them, absorbed into tunes that they've heard a million times already before.

I am often tempted to do the same - but over the last month I've made a concerted effort to eliminate headphone use while out and about (including commuting), and I think I'm a lot better off for it. I've had many an interesting conversation, have been more aware of my surroundings, and generally noticed and appreciated a lot of the things around me in the city that I used to just walk past without the slightest awareness.

I highly recommend this to anyone.

<comment><USER8> I sort of agree with you but I walk to work at 5:30 in the morning. Nobody else is there. Also NYC has the opposite problem of most places in the USA. You're bombarded with so much "activity and life" that you tend to grab any amount of personal time you can get.

</comment></comment></comment></comment></comment><comment><USER10> Eat less than you feel like and get 30 minutes- 1 hour of exercise per day.

The health and productivity benefits will outweight the lost time in food preparation and exercise.

</comment><comment><USER11> The second "proposal" reminded me of the South Park World of Warcrack episode, where Cartman....you know. Let's just say he didn't need to get up to fulfill basic bodily functions.

Anything can be taken to the extreme, even productivity ;-)

</comment><comment><USER12> Another thing that helps is a stand-up desk (this has been discussed on HN a few times). It won't reduce calorie intake, and by itself will not prevent you from gaining weight. But I believe it does encourage movement and improve posture.

</comment><comment><USER13> One word. Salads.

<comment><USER14> Man cannot live by salads alone.

But from a diet point of view, a lot of people aren't eating enough fruit and veg. Salads > junk food.

</comment></comment><comment><USER15> Nice, unexpected HN reference in there :-)

<comment><USER16> At least with a USB port to the brain, you don't have to worry about accidentally up/down-voting something. ;-)

<comment><USER17> ... Unless you sneeze? :)

</comment></comment></comment><comment><USER18> Step one: Don't eat</comment>


Cheer YC:  Happy Holidays! - <AUTHOR> Wishing you and yours a very happy holidays and a great New Year. <comment><USER2> You karma whore... ;) (Yes, I upmoded you xD)

But happy holidays!

<comment><AUTHOR> You're just jealous because you didn't think of it first... I upmoded you, too though. :)

Regardless, it's still a nice thing to do, don't you think?

<comment><USER3> Nice, but since the holiday in question is Christmas you might as well say it.

<comment><USER4> I think it's more productive to acknowledge all holidays and get 24% more audience, instead of going to extra effort to be sectarian in your good will.

There are plenty of people like me out there, for instance. My family celebrated christmas at this time of year when I was younger. I still feel like having a happy holiday right around now, but I don't connect with any of the Jesus stuff. Thanks to the original poster for wishing me a happy non- christmas-holiday-that-I-celebrate-around-the-same-time-as-christmas (on mine, I get to argue with people on the Internet!).

I feel your point has been thoroughly dismissed now. Happy holidays anyway!

<comment><USER3> Actually, since I'm not celebrating the holiday in question either and am more to happy to argue on the Internet, here are my more extended thoughts.

Even if some subset of the population is going to lose the Jesus bit doesn't it make more sense to keep the name of the holiday the same? For instance, if you are going to send out holiday well wishes (which I appreciate, I also upmodded the original poster) and going to send them out at a specific time (for example, Dec. 25) doesn't it make sense to refer to the holiday as 'Christmas' ?

In my own limited personal campaign of holiday well-wishes, I usually end up only wishing Christmas greetings to people I know are Christians, sending more general holiday greetings to others at a time other than Christmas.

In conclusion, my contention is that if you are going to send your greeting on Christmas, you might as well call it a Christmas greeting. If you send it Dec. 20, or 27, then maybe a holiday greeting.

<comment><USER4> It's terribly more efficient to send out generic holiday wishes to everyone and stop associating with anyone who gets too offended that you didn't conform to their particular brand of holiday. I really don't want to keep a 6 billion row spreadsheet of holiday associations for everyone I might encounter and wish well of.

Will mass confusion ensue if generic "happy holidays" cards are sent on the same day as christmas? Will people not know what day of the year it is? There is no utility to the nomenclature. No religion owns the day, and it's hardly a religious holiday to begin with.

It doesn't offend me when people say merry christmas, it only offends me if they are attempting to correct somebody who says happy holidays. It's a superset. You're correcting someone who says "yes! it's the weekend!" with "no, but thank god it's Saturday!".

<comment><AUTHOR> Sigh... I thought long and hard about the Christmas vs Holiday wishes thing. I'm actually pretty devout in my Christianity, but I rather dislike people who are jerks about it. How about this:

To my Christian friends Merry Christmas. To my Jewish friends Happy Hannukah. To my Atheist friends Happy Holidays. And to all a happy New Year. (Unless you're Chinese, then I'm a few weeks early.)

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> Have a great one guys! Hope 2008 is prosperous for all!

</comment><comment><USER6> merry christmas don't work to hard over the holiday period.

<comment><USER7> Working on Christmas is just another edge you can get over your competitors.

<comment><USER8> Unless, of course, your competitor is Santa!!!

<comment><USER9> Yeah, that schmuck. He brought my users all sorts of goodies, and all I could give them was one lousy new feature.

</comment></comment></comment></comment><comment><USER10> Happy holidays hackers!

Edu, don't worry you still have New year ;)

</comment><comment><USER11> At first I thought there was a meaning to the colored numbers, but then I noticed they alternated. Too bad. It'd be neat to indicate how fast a story is moving up the list. However, it'd be completely inaccessible to color blind people.

Anyway, Happy Holidays all.

</comment><comment><USER12> Quite the Xmas color theme going on at YC

Makes my eyes bleed red and green :)

</comment><comment><USER13> Wishing y'all every personal and startup success in the new year. Kick some butt!

</comment><comment><USER14> Holidays cure cancer.Happy holidays!

</comment><comment><USER15> happy whatever it is you celebrate!

</comment><comment><USER16> happy 2008!

</comment><comment><USER17> happy hols!

</comment><comment><USER18> I never understood what so great about changing the year. We have not needed an accurate sun/earth based calendar since the last time the majority of the population were farmers in need of harvesting and seeding.

Weeks and months area also devoid of meaning, and again a need only for farmers, hunters and gatherers. Since we live in a digital age, why not celebrate periods that are a power of 2? Like 1024 ... counting my life in kilodays would relate a lot more to what I'm doing every day than the notion of the earth revolving around the sun.</comment>


Ask HN: How do you manage user permissions on production servers? - <AUTHOR> Do you allow root access to production servers? or full sudo access? Do you allow particular tasks to be run with sudo? Which ones? Do you grant users temporary superuser permissions? What do you do in case of emergencies? Do you completely forbid users from sshing to production servers? Do you audit/monitor superusers activity? <comment><USER2> This would depend on what type of hosting this is for. If this is for a shared hosting setup then customers do not have or need sudo permissions. Either way the only people with sudo should be the top system engineers for emergencies, everyone else can go through the automated security, deployment and testing process from testing, staging and automated tested and verified push to production.</comment>


CASE CLOSED_Request SCI-FI Short Story_help - <AUTHOR> Hello, I'm desperately searching the internet for a short story I once found lurking through the comment section but as I changed PC there is no way for me to find it anymore.<p>However, the story is a short sci-fi end of the world - kinda like Asimov - story.
Specifically it's about two scientists who wait for a massiv star to rise as they calculated that it's light would reach earth on that day. In the end the light emitted by the star is so strong that the whole planet dies but the two scientist manage to survive just two more days in the cellar before they realize that there was no way to survive anymore. <comment><USER2> [https://en.wikipedia.org/wiki/Finis_(short_story)](https://en.wikipedia.org/wiki/Finis_\(short_story\))

<comment><AUTHOR> thank you so much

</comment></comment><comment><AUTHOR> please help :.)</comment>


Show HN: Bateman, a stock trading system I'm working on - <AUTHOR> https://github.com/fearofcode/bateman <comment><USER2> "And, in fact, every single one of our simulated trades was profitable, even while the stock overall was going up and down."

This is a huge red flag with respect to the simulation results. You show some trades like this one

> 2013-03-05 6:41,2013-03-05 > 7:15,14.47,14.48,LONG,5192,75145.75,52.85,100237.47

where you enter the trade and exit a penny higher. It sounds like you're just looking at the trade print and assuming you can execute at that price with a market order (or marketable limit order). Consider a stock at 14.47 bid x 14.48 ask. If I cross the spread to sell at 14.47 and then someone else crosses the spread to buy at 14.48, you will see two trades at the two different prices, without the prices on the inside having changed, this is why the midpoint between bid and ask is considered a more useful value than the last trade price.

With the system you propose, you are a price taker. You are crossing the spread with both your entering and exiting trades. Most of the trades you show are for around 5000 shares. Assuming the spread is $0.01, you are going to spend $100 just to get in and out of the position.

I don't know what kind of data Google offers about the intraday state of the order book, but I think you'll need to incorporate it into your backtesting in order to get a better picture about the profitability of your strategy.

<comment><AUTHOR> Thanks for this. I hadn't looked at that carefully enough and need to think more about it.

<comment><USER3> If you are up for porting Bateman to python, over at <https://www.quantopian.com> we let you backtest with high quality intraday data for free. You can also reference our opensource backtesting engine, <http://zipline.io>, to see how we handled modeling slippage and order simulation.

</comment></comment></comment><comment><USER4> " It produces profitable simulated results on historical data"

I understand this is an intellectual exercise, but for those considering going into algorithmic trading, those words are dangerous:

\- what transaction fee model is being used? Almost all profitable day trading strategies trade too often that the profits and adverse selection reserve are decimated by commissions and taxes.

\- have you tried to approximate the presence of your own trade? For example, if you sell a boatload of google shares, the price will start falling. Even with more liquid issues like AA it doesn't take much (5K shares) to rock the boat.

\- Have you considered the spread? It's unprofitable to quote a penny spread on google or other high-dollar names (the SEC tax alone, roughly $25 per $1M sold, doesn't allow for really profitable market making without at least 3 cent spreads.

There are many more questions, and for each question there are hedge funds and prop shops that have lost significant amounts of money, or were driven out of business, due to an oversight.

</comment><comment><USER5> Henning, If you are going to go some computer optimisation please read Whites reality check, I applaud your effort but I think the trading strategy as described might be too simple unfortunately and historical optimisation can make anything profitable. In an ideal strategy edge would be present do to an extrapolation of platonistic assumptions and optimisation would further tune this rather than produce profits in itself. Also AAPL is a lousy stock to simulate anything with apart from itself as its basically an complete outlier in terms of statistical factors(std deviation,exposure to news etc)

<comment><USER6> Wow, I've never seen anyone else who knew about White's reality check. Unfortunately, it is patented (US Patent 5,893,069). There's also a related thing called the test for Superior Predictive Ability (SPA), by Peter Reinhard Hansen, which is not patented (afaik). We liked it better for other reasons as well.

<comment><USER5> I didn't know that it was patented,thanks for the info. There go my plans for githubbing a small pandas(python) based version of same. Ill also look into the SPA now. People also need to consider the kelly criterion,and abandoning Technical Analysis as "not even wrong". Signal Processing is TA for grownups but even then people have to bear in mind that the assumption of a linear system (a default assumption for signal processing) is generally incorrect as far as the market is concerned. In the strange position of having a potentially very viable trading model myself and no time or funds to trade with as yet.Potentially a better position than the converse however.

</comment></comment></comment><comment><USER7> Someone should hire you just for your ability to write documentation for your projects.

<comment><USER8> Someone should hire you just for your ability to name your projects. "How'd a nitwit like you get so tasteful?"

</comment></comment><comment><USER9> Writing a framework for running trading strategies is certainly an interesting idea. I too am dissatisfied with most commercial platforms due to lack of features and flexibility. Unfortunately, there seems to be a lack of open source code in this sector. Eclipse Trader looked kind of interesting but the project appears to be dormant now. So expanding on this project could fill that gap.

However, from experience developing and testing algorithmic trading systems I can tell you that your strategy probably has some issues in its current form. I haven't looked into the code but from your description it appears you (correct me if I'm wrong): 1.) Pick a stock 2.) Use PSO to figure out the parameters 3.) If profitable, run the strategy on the stock with the optimised parameters

This means you're making a well known error in the system development community which is curve fitting parameters to historical data. This'll look very good in the simulations, but there is a high probablity that it will break down when trading it forward with real money, because it is optimised for the past. This is why there are a couple of widely accepted best practices when it comes to developing and testing trading systems.

First of all, your system should not have or need too many parameters. As a rule of thumb a robust system shouldn't have more than a handful of parameters and it should ideally show profits in simulations without a great deal of optimisation on those. When optimising make sure that the optimised parameter values are robust. This means that changing the value by a small increment only changes the resulting performance of your system by a small margin (somewhat analagous to numerical stability). If the performance changes by a big margin, then those values aren't robust and should be discarded. Furthermore, don't run optimisation on all of your historical data. Instead, optimise on portion of that data (the 'in-sample' data) and then test the optimised parameter values on the more recent data your didn't optimise on (the 'out-of-sample' data) and see if the performance of your system stays the same or breaks down. Another popular approach is 'Walk forward optimisation' [1] which takes the above one step further by repeatedly optimising and forward-testing on your historical data to find robust parameter values.

Some other things to consider: You need to factor in transaction costs, spread and slippage (the difference between the price you enter the order at and the price at which you get the fill). Transaction costs are easy to determine. Spread and slippage only apply when using market orders and can be reduced by trading with limit order if your system isn't negatively affected by this. Trading with market orders in a fast-moving market may incur siginificant slippage and there are predatory HF algos out there making money from screwing you on your execution. To get a better sense of this, it is considered a best practice to run your simulations on a lower timeframe than the one your system is supposed to work on in order to eliminate inaccuracies in the results. Ideally, you run simulations against unfiltered tick-by-tick data and additionally used bid and ask data series to factor in the spread. This may, however, be overkill and not needed for a system that runs on a daily timeframe, but it may make all the difference for a faster system.

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

<comment><USER10> This man speaks the truth.

Particularly running the optimise & test routine on chunks of past data to test for robustness & over-fitting.

</comment></comment><comment><USER11> That's a very interesting system you've built.

The the thing about backtesting a strategy is that it is very easy to make a mistake in your backtester. Look ahead bias is the most common mistake.

Another challenge is the data. Are you testing against a history of stocks that includes bankruptcies? If not you have survivorship bias.

I suggest you take a look at my website, www.quantopian.com. Look at our open- sourced backtester, <https://github.com/quantopian/zipline>. Between the two we can help you get past those two sources of error.

</comment><comment><USER12> I trade real money on a similar system, but using genetic algorithms. I worked on it for maybe 4 years before putting money on it in 2013. So far, I'm up 1.05% on $284K traded.

I wrote my own fairly pessimistic backtester. Also, I currently use the generated models for buy signals, but I tend to sell earlier than they dictate, because I find it hard to turn down even a modest profit.

<comment><USER13> Out of interest, is that better or worse than you were expecting? You don't say _when_ in 2013 you started, but since the start of the year the S&P is up around 6%, the NASDAQ composite is up 4.5%, and the FTSE All Share is up a similar amount.

Assuming you did put the money in in January you would have probably made more profit by simply investing in an index tracker.

<comment><USER12> True, I'm losing to the market, since January. But 'the market' is unpredictable, unrealized gains on paper. Unless you sell your index tracking positions, you will, in the next couple years, see some nice unrealized losses on paper.

My gains are realized. And fairly predictable.

Also, I only have about $55k in capital. But my rapid buy/sell cycle (not HFT) allows me to keep 'reusing' it.

<comment><USER10> So you're up 5% on capital employed. Well, if you can sustain that, you'll be doing pretty well!

</comment></comment></comment></comment><comment><USER14> I've toyed with this kind of thing before and things can look good in simulation, until I incorporated realistic effects of:

\- trading commissions & fees \- capital gains taxes \- currency exchange (for those of us "unamericans")

then all of a sudden blammo, I decided I'm better off putting "investment" cash into my mortgage

<comment><USER15> Might be a good idea if you are paying 12% interest on your mortgage, but not such a good idea if you're paying 3%.

I don't know what country you're in, but if you want to invest in the US stock market, I'm sure your broker sells an index fund with very low management fees. That may be a better investment than putting everything into a single home in the current market.

(In the US, mortgage interest is tax-deductible, making this strategy even less of a good idea.)

<comment><USER14> Mortgage interest not deductible here (Canada). Our current mortgage rate is 3.8% so given marginal taxe rate of 46% I would need to have a guaranteed return of at least 8.3% just to match wha I would save by "investing" in my mortgage. You tell me where I can get a 8.3% return over the next 5 yrs, guaranteed. PS here in Canada (maybe exception is Vancouver) our housing market is v stable, in my City house prices did not even dip during 2008 crisis. Yay Canada!

</comment></comment></comment><comment><USER16> I hate you, because how am I going to find a name for my project now, after you set the bar so high. Argh...

All jokes aside, this sounds promising. Will your framework be flexible enough to allow for composing and running any ML/statistical algorithm?

</comment><comment><USER17> Sorry if I'm missing something key here, but why does the implementation of a stock trading system involve a particular trading strategy?

</comment><comment><USER18> Whenever I hear of an amateur built trading system, the first question that always comes to mind is: What's your risk and money management like?

It's easy to come up with an algorithm, but where the real pro's win is with risk management.

EDIT: This isn't meant to be negative at all. Keep up the good work, but know that you're just starting down the rabbit hole now.

</comment><comment><USER19> Interesting practice project; I think the distinction between algorithmic trading and HFT is largely one of semantics.

I think we just generally label the higher latency, lower frequency strategies old fashioned 'stat-arb' -- this better connotes that the 'edge' from these trades is derived out of superior mathematical modeling and not better execution.

I highly recommend decoupling the simulation/back-testing framework from your strategy work.

Building a reasonable simulator is no small task -- market data is often NOT an accurate depiction of what is executable and there's a fair number of corrections/assumptions that must be made to reflect this.

Either way, I've always liked PSO -- I highly recommend playing with DE (differential evolution) as well. I've used DE to tune parameters for many strategies with great success where SGD would have been, well, painful.

</comment><comment><USER20> Expect a letter from a lawyer representing DC Comics demanding you to rename your product. An acquaintance of mine also launched a product (entirely unrelated to comics and toys) with the same name recently and was asked by DC Comics to change the name.

<comment><USER21> I am curious, on what basis he was asked to change the name? As per my understand, It is certainly not a trademark infringement, if not belonging to the same business domain.

<comment><USER20> Obviously their point was that Bateman was too close to Batman. Not being a trademarks expert, I can't comment on whether it was a trademark infringement or not, but that is besides the point. Do you want to spend time and money litigating with DC Comics?

<comment><USER22> > Obviously their point was that Bateman was too close to Batman.

Their point is moot. DC comics will have to go after people who own 'Patrick Bateman'. This isn't infringement(nobody is going to confuse a trading software named Bateman with a book/movie character); even if it were, the owners of 'Patrick Bateman' and not DC comics can claim infringement. At most, he will have to remove the image of Christian Bale as Patrick Bateman, but I doubt it will come to it.

Also, batman.js is in business, and DC comics didn't go after them. At what grounds did they went after your friend? Naming your software batman or superman isn't infringing DC's trademarks.

</comment></comment></comment></comment><comment><USER23> Spiffy! A buddy and I have been working on a similar thing (not open sourced (yet?)) for a while off and on. The model we're going to shoot for is to look at online opinion on the stock as a base for estimating rise/fall.

<comment><USER4> Derwent Capital Markets (website down now) tried to do this with twitter, but ultimately collapsed:

<http://www.idsnews.com/news/story.aspx?id=80469> [http://venturebeat.com/2012/05/28/twitter-fueled-hedge- fund-...](http://venturebeat.com/2012/05/28/twitter-fueled-hedge-fund-bit-the- dust-but-it-actually-worked/)

<comment><USER23> Interesting. The venturebeat story suggests that the strategy works, but the company's web presence is dead. Hmm.

</comment></comment></comment><comment><USER24> A practice that can improve results in intraday program trades is to only trade with the market, or only trade the direction that coincides with your meta analysis. In this case that might translate into only taking positions on days the market futures are up (above a threshold) pre-market and/or only trading tickers that you expect to rise over a 6-12 month timeframe.

While far from a silver bullet these can help you avoid buying positions when the market is hopeless, or trying to play a statistically losing game. It might be worth testing.

Make sure you include all trading fees and software license costs in your models.

</comment><comment><USER25> This looks interesting, and I'm going to try back testing this.

I would suggest trying out-

1\. market neutral positions. Eg- If you go long AAPL, go short XLK ( The tech stock ETF). 2\. going long slightly out of the money call options instead of stock. ( If the options are liquid)

I mostly do stat arb, and for back-testing, even I tried Metatrader, Quantopian and several other platforms and didn't think any of them were suitable. FXCM's Strategy Trader is worth taking a look at. It can only trade forex live through FXCM, but you can import CSV data and back test on whatever you import.

</comment><comment><USER26> Does anyone think someone extending this to place trades via API would be that horrible of an idea? Seems like it'd be interesting.

</comment><comment><USER27> Really good readme. Explains well without hype. I like the name too :)

</comment><comment><USER28> Interesting project. I haven't had the time to look at your project in-depth, but keep in mind most retail traders are at a disadvantage due to routing. Most orders are routed through providers such as Getco or Knight Capital, and often you are not aware of whom your counter-party is. Therefore, any expected P&L may vary by x amount of basis points, due to latency and liquidity.

<comment><USER29> alright, I don't know how many "professional" traders there are on HN but I spent a good part of my life doing prop algo-trading on Wallstreet. The assumption that most trading systems are in VBA is perhaps valid for small or retail, but I can tell you that serious algo shops (trading desks, hedgefunds) run clusters of GPU harnessing CUDA with matlab, and R plugins, C++ etc. When/If you try this with real in the real world, you will encounter something called, "slipage" - slipage is the price the trade gets executed vs. where you thought it would be. This is due to various factors like the bid-ask spread, liquidity in that moment, order size, route, vol, etc you got the idea. As you said this is an algo system and in your description you do emphasize the diff between HF and algo. The strategy is simple and could work as any other strategy but any algo system like this needs lots of capital to make a decent profit, and when lots of capital is in question it needs to be redundant when things go haywire - and haywire go they shall. So the key assumption seems to be:

>buy stocks that are going up intraday and sell them higer

to be blunt it seems interesting, and I would encourage you to work on it further because complex systems rarely work right. but also bear in mind that its not any different than a candle stick trading strategy, or ichimoku clouds. The key is how fast you converge to usable parameters (time,money,trades), if you can do this fast the underlying strategy can be a multitude of things, and thats my 2 cents...

<comment><USER2> "slipage is the price the trade gets executed vs. where you thought it would be."

Anyone not using limit orders in an automated trading system deserves whatever they get.

<comment><USER30> That's common wisdom for the Jim Cramer crowd and the reason it's so well known is that it's good advice for the common person who doesn't understand the market.

Sometimes a trading system just needs to get an order done. Having too many busted pairs can really cause your system to become ineffective fast.

or put another way, limit orders are your best bet, unless they aren't:)

<comment><USER2> I'm not from the Jim Cramer crowd and it doesn't sound like you are either. If you are sending orders at the best bid/offer and you can't get filled it's probably because you're too slow. I suppose you could send a marketable limit order in at a price deeper in the book and let the exchange match it at the best price available, but that's still different from outright market (i.e. no limit) orders.

</comment></comment></comment></comment></comment><comment><USER31> Is it profitable?</comment>


Google QR Code Experiment Concluded - <AUTHOR> https://accounts.google.com/sesame?concluded <comment><AUTHOR> The original HN thread was here: <http://news.ycombinator.com/item?id=3469692>

I appended ?concluded to make this appear as a separate thread.

I guess there are still open security risks. ie that the QR code you're viewing isn't credible. Or someone picks up your unlocked phone for a second and suddenly has long-term desktop access (which a G+ friend mentioned in comments here [https://plus.google.com/106413090159067280619/posts/KDtbaWgY...](https://plus.google.com/106413090159067280619/posts/KDtbaWgYA5Z)).

</comment><comment><USER2> Oh man! I really was enjoying this particular sign on. It felt more magical than two-factor.</comment>


Hyperloop One's next step is to test airlocks for pod entry and exit - <AUTHOR> https://techcrunch.com/2017/08/02/hyperloop-ones-next-step-is-to-test-airlocks-for-pod-entry-and-exit <comment><USER2> [https://en.wikipedia.org/wiki/Uncontrolled_decompression](https://en.wikipedia.org/wiki/Uncontrolled_decompression)</comment>


I am leaving a top tier university : A young entrepreneur's dilemma - <AUTHOR> https://medium.com/@johnhmeyer123/i-am-leaving-a-top-tier-university-4257ed3dfb6b

<comment><USER2> I'd love to hear any feedback, or maybe even your own opinions on this topic!</comment>


The first 100 registered .com domains. - <AUTHOR> http://thelongestlistofthelongeststuffatthelongestdomainnameatlonglast.com/first71.html

<comment><USER2> This is a very ugly website with a very bad (and long) domain.

How did you found it?</comment>