A cool way to use natural language in JavaScript - <AUTHOR> https://github.com/nlp-compromise/nlp_compromise <comment><AUTHOR>
      nlp.statement('She sells seashells').negate().text()
      // She doesn't sell seashells

      nlp.sentence('I fed the dog').replace('the [Noun]', 'the cat').text()
      // I fed the cat

      nlp.text("Tony Hawk did a kickflip").people();
      // [ Person { text: 'Tony Hawk' ..} ]

<comment><USER2> Thanks for writing this comment. I can't think of a better way to describe what this library does than reading these super simple examples.

<comment><USER3> Check out the docs. It is chock full of them.

[https://github.com/nlp- compromise/nlp_compromise/blob/master...](https://github.com/nlp- compromise/nlp_compromise/blob/master/docs/api.md)

</comment></comment></comment><comment><USER4> Perhaps I am misunderstanding the example but isn't the date parsing result from the API documentation incorrect.

      nlp.value("I married April for the 2nd time on June 5th 1998 ").date()
      // [Date object]   d.toLocaleString() -> "04/2/1998"

[https://github.com/nlp- compromise/nlp_compromise/blob/master...](https://github.com/nlp- compromise/nlp_compromise/blob/master/docs/api.md#date-parsing)

<comment><USER5> No 4th or February in the string either... yet another example of how unambiguous date parsing in natural languages is very, _very_ difficult. Also an example of why ISO-8601 is awesome.

<comment><USER6> Everyone always looks at me funny when I write my dates as `yyyy-mm-dd` - until, that is, I explain that it sorts alphabetically perfectly. That's the moment I can convert people to ISO-8601 converts.

<comment><USER7> I write dates that way too, but because mm/dd/yyy is ambiguous in an international context. Sorting correctly is great as well!

</comment></comment></comment></comment><comment><USER8> Hmm this example is interesting:

        nlp.person("Tony Hawk").pronoun();
        // 'he'

I was curious how it handled gender neutral names, since being able to identify gender from a name would be an awesome UX win. I tried a variety of different names, and for gender neutral names (ie "Alex" or "Taylor"), it always picked "he". If it doesn't recognize the name (ie "Alexa"), it returns "they". Unfortunately, it only recognizes very standard American names. Anything remotely ethnic (ie "Anjali") or slightly uncommon (ie "Nate") results in a "they".

Not picking on the library, since this would be an impossible task even for a human, but it seems odd to have used pronoun identification as one of the headline examples.

Anyway, awesome library overall. This could pair well with a dedicated date parsing library like Sherlock[1] to create some pretty cool conversational UI elements.

1: [https://github.com/neilgupta/sherlock](https://github.com/neilgupta/sherlock)

<comment><USER9> "since being able to identify gender from a name would be an awesome "

Way to misgender and insult a number of your users. As you said it is an impossible task and the result is telling "for gender neutral names (ie "Alex" or "Taylor"),"

The best way is to not care, it almost never matters, and when it does, ask.

<comment><USER10> This is a natural language library, and _languages_ still care very much about gender.

<comment><USER11> but can a function which is basically "name -> gender" really be honest with its users? It's claiming something that would require much more information to predict with any reasonable chance of success (even excluding lgbt folks). If you look at the files it is based on, it looks like there are only a tiny number of names defined anyway - what hope does the user have of accomplishing the goal they want?

Now, I might accept an API in which machine learning was involved and tons of historical data was included as input before predicting the value. Even then, it would of course have a decent potential of being wrong, but at least the result would be a more realistic claim.

The current API feels a lot like this sort of thing:

boolean isHappySentence(String sentence) { return sentence.contains(":)"); }

Sure, it might get it right some of the time, but it's not effective enough to be useful.

<comment><USER12> Every single aspect of this API has a degree of uncertainty.

If you'd like to improve the capability of the algorithm, put in some PRs to help out the accuracy.

</comment></comment></comment></comment></comment><comment><USER13> Why is NLP these days equivalent of Natural English Language Processing? There are much more languages in the world.

<comment><USER14> On a related note: why are we putting up with other languages anyway? I've been asking myself for a long time why we (as in humanity) don't try to standardize on a language.

The language of the Internet is English for the most part, and since the Internet is the greatest facilitator of communication in human history, that standard language might as well be English.

I firmly believe the world would be a much better place if people from everywhere could communicate with each other without being inhibited by the language barrier.

I understand that this is not something that can be done overnight, but a lot of people learn English as a second langue today, so maybe a switch could be made in a generation or two, as people who don't speak English as a first or second language slowly die out.

<comment><USER15> > _On a related note: why are we putting up with other languages anyway? I 've > been asking myself for a long time why we (as in humanity) don't try to > standardize on a language._

Because we value our languages and cultures, thank you very much?

Especially if you happened to be born a native English speaking, and you propose this from that vantage point, it comes as borderline racist, and reminds me of this except from Bernard Shaw's Julius Caesar:

"Pardon him, Theodotus: he is a barbarian, and thinks that the customs of his tribe and island are the laws of nature."

English the language of the internet? It is perhaps the language of YOUR internet. The Chinese internet is as big -- and there's the Indian internet, the Spanish speaking internet, and tons more besides.

Why not just get rid of other cultures too, and just keep anglo-saxon culture?

Imagine how easier things could be then, not only we'll have one language, but we could all relate to the same stuff...

Oh, and about those English -- it's dominance in the last centuries is just a historical accident, caused by British and then US power. Even the very term used to describe such a phenomenon, "lingua franca" is not English. The main language used to be Greek, then Latin, then French and English, etc. And that's mostly on the Western part of the world (Europe, US etc) -- that westerners tend to think it's the whole world, but it's hardly 10-20% of the global population. The "lingua franca" could be again very different in 1 or 2 centuries...

<comment><USER16> Call me a racist too (I am mocking your misuse of the term here) but I never saw the value in having multiple languages. It is not enriching our culture in the same way different cuisines do, you can not easily savour on a poem in different language. For absolute majority of people their native language is just a necessity because their adult brains are mostly unable to learn new language at the same level as their mother tongue (unless you spend many years in that culture). IMHO different languages are equally annoying, useless and impossible to deprecate as different calendars or metric systems. On the other hand it is a little tragedy that English with it's ambiguous spelling and pronunciation become the lingua franca of the day.

<comment><USER17> So how many languages do you speak? And no, english + some latin language doesn't count as "many".

There are many ideas which are impossible to express in english because it's not only lacking the words but the culture itself. Calling for standardization on a language is calling for the death of cultures you do not understand.

And while that's not "racist" as it's not about race, it's quite literally xenophobic. You're afraid of something because it's alien to you.

<comment><USER18> > There are many ideas which are impossible to express in english because it's > not only lacking the words but the culture itself.

This makes me really curious: do you have an example of this or would the explanation of an example in English lose the essence of the explanation?

<comment><USER15> It will mostly lose it, yes (like explaining a joke).

Because it's not just that a word exists in some language X that doesn't exist in language Y (you can always explain the word's general meaning with a complete phrase or two).

The most important part is rather having that notion in the language X as a handy thing to use -- and thus being able to shape concepts and phrases around it, and sharing an instant common recognition for that notion with others.

That said, there are several very good books on the subtleties of translation and language concepts in general, but one I suggest for the HN crowd would be "Le Ton Beau De Marot: In Praise Of The Music Of Language" by Douglas R. Hofstadter (of "Godel, Escher, Bach" fame).

[http://www.amazon.com/Ton-Beau-Marot-Praise- Language/dp/0465...](http://www.amazon.com/Ton-Beau-Marot-Praise- Language/dp/0465086454)

</comment></comment></comment></comment></comment></comment></comment><comment><USER19> How would I proceed to turn

"this library is great." into "all other libraries aren't great." ?

[https://tonicdev.com/5716bedc1dd0391100f67570/57372d9625c9be...](https://tonicdev.com/5716bedc1dd0391100f67570/57372d9625c9be1100f23823)

</comment><comment><USER20> This library is fantastic. I've used in some side projects and while it's far from perfect it hits that "good enough" space pretty well.

</comment><comment><USER21> Is there something similar available for PHP || Python?

</comment><comment><USER2> This could be great for foreign language learners!

Imagine integrating this into Anki: "Please negate this sentence", "Please turn this sentence into past tense", "What's the direct object", and so on.

Perhaps "this sentence" could refer to some interesting sentence from an article that you read in Pocket last week, for example!

</comment><comment><USER22> What a day it would be, when nlp natively supported in browsers and os.

<comment><USER23> NSLinguisticTagger has been a part of iOS since iOS5 :)

Link: [http://nshipster.com/nslinguistictagger/](http://nshipster.com/nslinguistictagger/)

<comment><USER24> This looks fantastic, thanks!

Do you know if there's something similar for OSX ?

<comment><USER25> [https://developer.apple.com/library/mac/documentation/Cocoa/...](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSLinguisticTagger_Class/)

Available in OS X v10.7 and later

</comment></comment></comment></comment><comment><USER26> Anyone know of any good Rust libraries in the NLP landscape? It seems quite dead in Rust. Only partial libraries, and non-compilable libraries.

</comment><comment><USER27> Wow, this is an excellent README if I have ever seen one. And the project is most excellent as well. Great work.

</comment><comment><USER28> Can anyone explain how this works?

</comment><comment><USER29> Title is misleading clickbait. Should be 'to process natural language.' or a cool way to use NLP.

</comment><comment><USER30> Somebody has to point out that the past participle of swim is swum, not swam. (/pedantic-mode)

</comment><comment><USER31> What's so cool about this in a way it hasn't been cool before?

</comment><comment><USER32> Instead of trying to train computers to parse our langueges, why don't we improve our languages so that they are unambigious and each word has one meaning and each meaning only has one word. If only there was one universal language that had no exceptions.

<comment><USER33> There are constructed languages like that. Lojban is supposed to aim for no ambiguity, I believe that Ithkuil does too.

However, it's very hard to allow abstraction without ambiguity. It might be best to think of ambiguity as a form of lossy compression, since it allows us to skip a bunch of thinking and words to say what we want to. Supposedly the creator of Ithkuil has to think for half an hour to get exactly the right word.

On top of that, we also use ambiguity for humor and colour. A new humor culture had to grow in Lojban, because typical puns and the like didn't translate.

I've grown more interested recently in languages that embrace ambiguity, such as toki pona. With a language like that, you can shrink the necessary vocabulary down to a tiny number of words meaning that nonspecialists can learn the language in a short period of time. Aiming for ease of acquisition seems like the right approach for a constructed language that aims to be practically useful.

</comment></comment><comment><USER31> Wow, and why exactly did this make into HN first page? Because it's Javascript?

<comment><USER31> Explain the downvotes, anyone?

Any good reason this is on the front page, other that:

Google made JS faster > Google made their NLP library SyntaxNet open-source > NLP_compromise is a NLP JS library so it has to be top news

?

How this library can even appear to be anything new?

Have you never explored the NLP field? I guess downvoters never did, I have to other way to understand it.

<comment><USER34> From the HN guidelines:

      Please don't submit comments complaining that a submission is inappropriate for the site. If you think a story is spam or off-topic, flag it by clicking on its "flag" link. (Not all users will see this; there is a karma threshold.) If you think a comment is egregious, click on its timestamp to go to its page, then click "flag" at the top.

Also:

      Please resist commenting about being downvoted. It never does any good, and it makes boring reading.

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

<comment><USER31> > Please don't submit comments complaining that a submission is inappropriate > for the site.

I never did. I was just questioning _on the popularity_ it got on HN, not on it being inappropriate.

> Please resist commenting about being downvoted.

Ok, I apologize for that. My mistake. But hey, may I know the reasons why do you think that my opinion is wrong, anyone, and specifically you @cskau, if you do? Eagerly waiting for it but I fear I'll receive no on-context answers :(

<comment><USER35> I will speculate:

1\. JavaScript is widely known and used. Thus, anything JavaScript attracts more attention than similar projects in other languages, especially if it's outside the box of the usual webby stuff.

2\. The API on this library looks very intuitive and utilitarian. It doesn't get much easier than .people(), .topics(), etc. People can see themselves actually using this.

<comment><USER31> Thanks, you confirmed my theory! :)</comment></comment></comment></comment></comment></comment>


Drop Root Privileges in Node.js after Binding to Port 80 - <AUTHOR> http://thomashunter.name/blog/drop-root-privileges-in-node-js/ <comment><USER2> Alternatively, you could grant the node binary the ability bind ports < 1024, using setcap (Linux only):

        sudo setcap 'cap_net_bind_service=+ep' /path/to/nodejs

Then you don't have to ever run it as root (at least not for the purpose of binding to the right port).

<comment><USER3> setcap solves the problem in the wrong way in this scenario imho: With setcap, any user could run node with a node script using ports < 1024.

What would be more useful is the ability to allow a _user_ to open a privileged port. In my option mappu's answer is the right way to go, i.e. using authbind to allow a certain user to open a port or a range of ports.

<comment><USER4> Authbind looks really appropriate here.

(Hmm, did parent just edit his comment ? He didn't mention authbind when I hit reply, did he ?)

From the man page: authbind allows a program which does not or should not run as root to bind to low-numbered ports in a controlled way. The shared library loaded using LD_PRELOAD overrides the bind(2) system call. When a program invoked via authbind calls bind to bind a socket to a low-numbered TCP/IP port, and if the program doesn't already have an effective uid of 0, the version of bind supposed by authbind forks and executes a setuid-root helper program.

You can create configuration file like /etc/authbind/byport/port and use standard linux file permissions to allow certain non-root users to bind to ports < 1024

</comment></comment></comment><comment><USER5> It's probably a better idea to just run nginx on port 80 and proxy requests through in any sort of real environment. And if you're not in production...well, it doesn't really matter which port you choose anyway.

<comment><USER6> Please excuse my ignorance, but why would I want to run nginx to proxy requests through?

<comment><USER7> [This response is a guess, and very generalized]

You probably won't handle every HTTP edge case as well as nginx defaults, and you don't really need the control at that level to implement a functional, high performance web app.

</comment></comment></comment><comment><USER8> Another technique is to launch the service via authbind, in your repositories. It's especially useful if you aren't able to recompile the target.

<http://en.wikipedia.org/wiki/Authbind>

</comment><comment><USER9> Looking at the snippet of code: Isn't that sample (probably) confusing group and user?

      process.setgid('tlhunter');
      process.setuid('users');

I'd expect that 'users' is the group here and 'tlhunter' the user 'thomas l. hunter'?

<comment><AUTHOR> Yep; A typo I made when converting variables to strings for the example.

</comment></comment><comment><USER10> Alternatively, if you don't trust a large program with dropping root, you can factor out the binding and listening into a separate program. Then accepting and everything beyond can be done with normal privileges.

Assuming a tcpserver-like program called tcplisten, this would look like

        sudo tcplisten 0.0.0.0 80 setuidgid nobody \
          program-that-accepts-on-stdin

FastCGI works similarly. Multiple workers can run underneath, calling accept(2) on stdin.

A simple implementation of tcplisten:

<https://gist.github.com/4211098>

</comment><comment><USER11> I wrote a similar article a few weeks ago (<http://syskall.com/dont-run-node- dot-js-as-root/>) but have since then realized that changing the process' UID brings a lot of unexpected problems and a much simpler solution is to use a higher port and proxy via nginx. For example, if you initialize a logger before starting your HTTP server and changing the process UID, you will might create root owned files and eventually run into permission conflicts.

</comment><comment><USER12> Not a good idea to hardcode the name of the "owner". Standard practice is to setuid/gid to 65535 (nobody).

<comment><USER13> Actually, even in the classical Unix security model, setuid'ing to nobody is considered a bad idea. Because so many services do it, giving an attacker an opportunity to become nobody will likely grant him access to those other services as well.

<comment><USER12> Point taken. Allow me to revise my statement.

"In production, one should create a specialized user to run any service." And if you have lots of money to waste, stick 'em all in separate VMs too.

</comment></comment></comment><comment><USER14> You could also create a unix socket and have node.js bind on it.</comment>


How ebooks lost their shine - <AUTHOR> https://www.theguardian.com/books/2017/apr/27/how-ebooks-lost-their-shine-kindles-look-clunky-unhip- <comment><USER2> _> "Here are some things that you can't do with a Kindle. You can't turn down a corner, tuck a flap in a chapter, crack a spine (brutal, but sometimes pleasurable) or flick the pages to see how far you have come and how far you have to go. You can't remember something potent and find it again with reference to where it appeared on a right- or left-hand page. You often can't remember much at all."_

I don't care about creating dog-ears or cracking spines. Really, who does?

On my kindle I'm able to highlight passages and/or make notes (which are saved to my amazon account) and I can look them up later. I can create multiple bookmarks. Some books have support for the "X-ray" feature, a reference tool, in which there might be entries on such things as characters, locations and so on.

I'm able to highlight words and look them up on wikipedia or the oxford dictionary. Very useful.

I'm able to "flick" pages back and forth and easily return to wherever I started out.

 _> "You can't tell whether the end is really the end, or whether the end equals 93% followed by 7% of index and/or questions for book clubs."_

I guess, not that it's a real issue for me.

And maybe best of all... I'm not dealing with mountains of books taking up space in my home anymore.

<comment><USER3> > > "You can't tell whether the end is really the end, or whether the end > equals 93% followed by 7% of index and/or questions for book clubs." > I > guess, not that it's a real issue for me.

Agreed, but also, is that really not a problem with physical books? Lots of them have backmatter with preview chapters, indices, and "questions for bookclubs".

<comment><USER4> It's much easier with a real book to flip back from the end until you find the real ending, then estimate your progress based on thickness from there. This can be done with e-books, but it's not a use-case that the developers have really worked with, so its cumbersome.

</comment></comment></comment><comment><USER5> I'm a book aficionado. I just love books. Our house is filled with thousands and thousands of books. And I have a Kindle. 2 Main reasons: (1) Travel. Going on a trip used to involve careful selection and (for longer trips) substantial packing weight and volume (I travel light), now I just take the Kindle, and don't even have to buy the books i want to read in advance (2) Pint quality. I read lots of paperbacks, and frankly, the print quality on some of them has become so atrocious that it is almost impossible to enjoy the read. Blurred tiny prints on flimsy but coarse grained paper are no exception.

Still love the physicality of books, but i succumbed to the practicality of the e-reader

<comment><USER6> Amen to that. My eyesight isn't the best, and Ebooks are a god send for being able to read in large, clear print.

I'm reading a paper book now (Fortress Draconis, ebook is not available) and I find myself squinting for hours at a time.

</comment></comment><comment><USER7> I find ebooks useful if the book is meant to be read from start to finish. I have yet to find ebooks useful for technical books, where I need to flip through chunks of pages and go back and forth between sections of chapters as well as where I need to search by figure or equations rather than by text.

<comment><USER8> I'm considering getting an iPad Pro just for this purpose. With a 13" screen, you can fit an entire 8.5" x 11" page on the screen at 1:1 scaling.

Alternatively, there are some really interesting 13" epaper tablets coming out soon that might fit the role more aptly.

</comment></comment><comment><USER9> I wish they gave more clarity to this stat * Overall digital sales up 6% to £1.7bn despite a continuation of the drop in eBook sales down 3%

I personally doubt that ebooks have 'lost their shine', I think this is more a matter of a journalist not being able to read into the numbers.

I haven't bought the report, but what little I know about the book market, I know that in 2016, adult colouring books became a BIG thing, really big! Are you going to buy those for kindle? No, so more money is spent on physical books and less on e-books.

If you're an ebook reader, you may also have noticed that Amazon has significantly raised prices on e-books in 2016. 25-50% on average it seems to me, and I often now see ebooks that cost the same as physical books. Now, I'm not going to buy a physical book because my ebook price has increased, but I do buy slightly fewer ebooks now.

Physical books have their place, but I don't see ebooks in serious decline in the near future.

<comment><USER10> I really don't get why ebooks are so pricy. If they were half the price of a book, I would actually consider buying them instead of borrowing them or only using Amazon Prime's free offerings.

<comment><USER11> Partially because Amazon lost to the Publishers in 2014-15 - [https://www.nytimes.com/2014/11/14/technology/amazon- hachett...](https://www.nytimes.com/2014/11/14/technology/amazon-hachette- ebook-dispute.html) ? All ebook prices jumped after that.

I am not sure why no one is correlating the price increase to the the drop in Ebook sales, especially since Amazon at that point pointed out exactly this as a consequence - since ebooks have to compete with other digital media.

<comment><USER12> I'm surprised no one is focusing on this as well. I believe that ebooks being overpriced is the main reason they aren't selling well. If ebooks were at least the same price as paperbacks instead of more expensive I would buy more of them. But right now it's cheaper to buy physical copies of books than ebooks.

</comment></comment></comment></comment><comment><USER13> One of the reasons might be due to price, physical books are exempt from VAT in the UK, whereas ebooks are not, so ebooks tend to be either the same price as their paper counterparts, or more expensive.

I read mostly on my kindle out of convenience, it doesn't take that much room in my bag and is comfortable to read on my commute.

<comment><USER14> VAT as a reason of e-books being expensive is complete bullshit. VAT is not a tax of some absolute value, it's a percent of the price. Smaller the price, smaller VAT.

</comment></comment><comment><USER15> I buy hardcopies. If they are heavy on graphics (as an example Krampus by Brom) or have a lot of code listings.

For fiction? No way. I sometimes read 5 books in a month. I really don't want to open up a private library or bother reselling them. When I travel I don't want to add several kilograms of books. When I reach the end of a book in a series, I don't want to have already bought the next part and have it lying next to me, instead I prefer to just click two buttons to instantly but it.

And for now, Kindle unlimited gives me some great value.

</comment><comment><USER16> There is one general problem I have with ebooks that limits them for me when it comes to technical books, but is generally not a problem for things like novels.

There is also a problem specific to Amazon ebook readers that holds me back from many technical books I would otherwise buy in ebook format.

First, the general problem. Suppose I am reading a 200 page mathematics book. I'm on page 150, and to understand something I want to review some point that was covered much earlier. I can close my eyes and visualize when I read that earlier point, and I get an image of the page it was on, where it was on that page, and how far it was into the book. I can pretty quickly jump back and find it.

This is not some "photographic memory" type thing. I don't "see" the page word for word, and cannot read the page number to know where to go. But I will get that the page I'm looking for had a diagram on the bottom and was a left side page, and that what I wanted was near the middle...that kind of thing.

It is enough that when combined with the way the pages are laid out in a physical sequence to give a sense of "place" to each page and the information on it. It seems kind of like a weak form of a memory palace.

With an ebook I do not get that sense of place as I read, and so if I need to find something much earlier in the book I have to rely on the search function or the table of contents, and often have to do a lot of paging around (which is slow on eInk readers). It usually takes a lot longer than it would have taken in the paper book.

The second problem, specific to Amazon's ereaders, is very inconsistent handling of images. For example I have some chess books that make extensive use of images for chess diagrams.

On my eInk Kindles, the chess diagrams are about the size of a postage stamp.

On the Kindle application for OS X, they are about the size that they would be in the paper book (in other words, they are the right size).

On the Kindle application for Windows, they are postage stamp sized.

On the Kindle Cloud Reader, the are the right size.

On the Kindle app for iOS they are the right size.

Same problem for math books. They often use images for equations. If those get the postage stamp treatment it makes that book very hard to deal with.

For things where images aren't needed, and where I'm not going to have to do a lot of looking back, I've greatly enjoyed reading on Kindle. Harry Potter was fine, for instance, as was the complete Sherlock Holmes stories.

<comment><USER17> I think these are issues with formatting. Kindle has the ability to render any mathematical book or chess book with diagrams. One only needs to find a good epub/mobi.

On the other hand reading magazines on kindle is painful, because they're meant to be viewed on a larger surface.

I read technical books (programming) on my computer/ipad.

If you intend to use the book as a reference, kindle is hard. The ability to go back and forth highlight take notes, remember what you thought by looking at the page these are very important.

For example I cannot study efficiently without printed codexes. I tried converting the laws into org mode and they became somewhat manageable. But I still prefer printed copies.

</comment></comment><comment><USER18> "While ebooks, which are not things of beauty, have become more expensive; a new digital fiction release is often only a pound or two cheaper than a hardback."

I'm betting has more to do with it than romantic notions of people preferring physical books. Given the choice of a fiction book for $10 in hardcopy or $9 as an ebook, I'll take the hardcopy.

If ebooks (and movie downloads come to that) were priced the same as the physical copy minus the true costs of printing, distribution, warehousing, shipping, etc. they'd (I'm guessing) be closer to $2-5 and would sell far more.

<comment><USER19> > _a pound or two cheaper_

Also, sometimes a pound or two lighter. (That's _per book_.)

</comment></comment><comment><USER20> I prefer PDF files rather than ebook formats. I don't like the idea of being locked into a particular technology, be it Apple's or Amazon's.

I consider PDF viewers to be superior to the experience offered by ebook viewers. For example, Having to tap the left and right side of the screen to move between pages is a pain compared to swiping up or down in a fluid motion.

Another issue is the waste of space by trying to simulate paper. On my iPad both Apple's and Amazon's ebook readers display almost an inch of white space margin all around the page. On the same device PDF viewer will zoom text to use the entire screen with a double tap of a paragraph.

And then there's zooming.

PDF's are easier to view on multilple devices. I keep all my books on Dropbox. They are instantly available no matter where I might be.

<comment><USER19> > _no matter where I might be_

Well, with a few exceptions, such as an airplane and some other places (on a trail, deep in the woods) where you may not have an internet connection.

<comment><USER20> If that will be the case I take a USB stick or preload my device with what I'll need

</comment></comment></comment><comment><USER21> Because they are e- so you never own them. You lend them- and the day the library is on fire- your books turn to ashes in your bag.

I also regret showing up at a friends place and at partys near his book shelve, and get the guy/girl to recommend me the books they lend from me and no returned.

</comment><comment><USER22> I only buy technical/developer e-books, and read them on my computer, or open them for a quick sanity check on a concept at work. I can take them everywhere rather than carrying 40 lbs of reference material.

However when it comes to pleasure reading, I usually like to buy a physical copy.

</comment><comment><USER23> > "You can't tell whether the end is really the end, or whether the end equals > 93% followed by 7% of index and/or questions for book clubs."

...um, you can't with a real book either? At least without looking, which is something you can also do on a Kindle?

That said, the Kindle Keyboard 3G was the peak. Knowing you need never run out of book; and also the ability, in a pinch, to get on the internet and check your email / look up a map, free, wherever you are in the world.

</comment><comment><USER24> The first paragraph is alread bullshit:

Ebooks have full-text search, of course you have bookmarks and a progress bar (not as "nice" but does the trick) and usually pages render always the same on one device. For literature I also doubt I remember less, why would I.

Where paper actually excells:

\- good for advanced layouts

\- you can find something you know was "somewhere arround XY" but don't have a clear keyword for (More important for literature, but even there full text search often wroks better. I once read a book in print and than wrot about it, I mainly used the epub for quotations and not just because of copy and paste).

\- some books are only available in print

\- a used print is cheaper than an epub...

\- you don't look like a mid 50s housewife in the train

If given the choice I still always take the epub.

<comment><USER25> >you don't look like a mid 50s housewife in the train

Stay classy.

I far prefer reading real books (on the train and off) myself - but am already having storage issues due to city living...

<comment><USER24> I can totally understand how one could prefer paper books.

The last one was a joke :) (And I have no shame sitting in the train with my reader).

</comment></comment></comment><comment><USER26> One thing I miss in a physical book is the ability to look up a term immediately.

</comment><comment><USER27> For practical reason, I prefer e-book nowadays. They don't take much physical space, easy to search, and so on.

The only reason I buy hardcopies these day is photography books, which rely heavily on graphics.

<comment><USER19> I find graphics looks much better on a computer screen than it does on paper these days.

</comment></comment><comment><USER28> It is the multitude of form factors on the internet that keeps absorbing and reducing the total value of books. For what subject is a 300-page collection of "pages" still the best form factor? How can it compete, for example, with a StackOverflow page, when answering technical questions? Maybe a book is still useful for fiction, but how long will it take before people design better form factors even for novels?

<comment><USER19> Indeed. Being stuck with the fixed page format is like being stuck in the "horseless-carriage" mentality. A4 or whatever paper sheet format should be completely abandoned in favor of dynamic text formatting - not unlike what browsers can do when displaying HTML.

<comment><USER29> That only applies to PDF.

Most e-books are in epub or mobi format, and those are essentially HTML.

</comment></comment></comment><comment><USER30> As I read the article I remembered that I would rather read a magazine article online --- an ezine? --- than flip through a real magazine. The same goes for newspapers. And I remembered I would much rather look up a function in an online reference than a thick, heavy book. I would rather get my mail electronically. But I would rather read a novel in paperback.

</comment><comment><USER31> I read around 70 space operas a year on my kindle. Before getting my kindle 3 year ago? Nothing. Kindle is amazing for reading at night when my partner is sleeping or while travelling. I use amazon prime and "borrow" the books, only buying a few series I'm hooked on. Overall costs are much lower than other forms of media.

</comment><comment><USER32> Things you can't do with a book (though I still love them): tap words to get a definition; carry thousands in your back pocket; highlight text non- destructively; write notes non-destructively; change the font size; read in the dark; know how long until you finish the chapter/book ....

</comment><comment><USER33> Minimalism might be trendy but I have to say, I love the look of a home library.

Of course, that doesn't mean I horde books :-)

</comment><comment><USER34> I find it very hard to read traditional books now because I'm so used to being able to drink a cup of tea or eat a snack while I read. Or read outside on a warm but windy day.

I use the PRS-350 which is an old sony model that fits comfortably into one hand and can be used one handed. I recommend it.</comment>


What It Takes to Be in the 1% Around the World - <AUTHOR> https://www.bloomberg.com/news/articles/2019-02-04/a-global-guide-to-what-it-means-to-be-part-of-the-1 <comment><USER2> I often chat with my wife (Chinese, runs her own business) about relative wealth in her home country. She's easily 1%, but living in big east coast Chinese cities, it often feels like we're pretty average, even sub-average. The hundreds of millions of rural and urban poor are almost hidden from view.

<comment><USER3> There's no upper limit and the right edge of the income distribution looks almost exponential. Mere multimillionaires feel like paupers next to the billionaires.

<comment><USER4> Which makes sense, as it's a x1000 factor.

Millionaire is actually just a x100 factor from a middle class saving account.

Each time, the real difference is not the physical goods anyway. From middle class to millionaire, it's the logistic that changes the most. You can live free of many constraints.

From millionaires to billionaires, it's more a matter of impact in the world. Having 100 luxury cars must be fun, but I can't imagine it changing your life that much.

<comment><USER5> > Having 100 luxury cars must be fun, but I can't imagine it changing your > life that much.

But it's the gap from flying first class to owning private jets. Or renting a large yacht or owning a small one to owning a super-yacht with two helicopter pads and a sub (like e.g. Paul Allen's "Octopus" [1]).

[1] [https://en.wikipedia.org/wiki/Octopus_(yacht)](https://en.wikipedia.org/wiki/Octopus_\(yacht\))

<comment><USER4> Again, all that doesn't change your life much. The difference in quality of like is nowhere close to the gap you bridge when you can stop trying to make a living and doing daily chores. You hit diminishing returns.

But being able to influence politics, the economy, and knowing personnally many people that can, is a huge difference in what life you can experience.

<comment><USER6> At some point additional wealth stops buying you significant comfort, but starts buying you significant power.

And to be honest, I think the area where that happens is a problem. I'm fine with people enjoying a life of comfort, I'm not so fine with people buying significant over others, over the society in which we live, simply because they have more money. It's a danger to democracy.

<comment><USER4> Any kind of concentrated power is a danger to democracy, but you can't setup any system that can counter that, because it will just concentrate somewhere else.

The only way to avoid this problem is for the people to actively, on their day to day live, think and act toward the society they want to co-create. Power to the people implies responsability for the people.

And we are nowhere near that. People don't want the responsability. They have enough on their plate already with their personnal life issues. They don't want to have to choose every day what to buy, what to read, what to watch. They don't want to include the entire what they think society should be in the process of choosing education, home or a job.

So they vote to delegate the power and responsability once in a while and call the resulting oligarchy a democracy. Semantics is way easier than implementing the real solution.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> This article seems to focus on top 1% by income. Very few of the top 1% earners in any developed country are also in the top 1% of wealthy people. The truly wealthy tend to be so because of their capital/assets. Salary is an utterly tax inefficient way to convert your life's work into personal wealth, versus other forms of income/compensation.

</comment><comment><USER8> Having a country-wide 1% must pull it down in some cases.

For instance in the UK if you bought the $4.1m London home on a 25 year, 3% mortgage, with a 25% deposit you'd pay about $170k per year. But after tax your $290k "top-1%" income would be about $185k -- only just enough to even cover your mortgage, forget about school fees.

I wonder what the London, NY, LA etc 1% numbers are? Surely that's a fairer comparison to e.g. Singapore anyway, since it's a city-state.

<comment><USER9> This piqued my interest.

At least according to this site [0] (which references a 2013 report [1]) for instance, to be in the 1% in New York state you have to be making at least $517,557. However, the average annual income of those in the 1% is $2,006,632.

In Mississippi, though, you only have to be making $264,952 to be in the 1% and the average annual income of the 1% in MS is $565,813.

Of course, you have to consider cost of living and what not, but 1% is definitely not the same everywhere.

[0] [https://www.cnbc.com/2017/06/12/how-much-you-have-to-earn- to...](https://www.cnbc.com/2017/06/12/how-much-you-have-to-earn-to-be-in-the- top-1-percent-in-every-us-state.html)

[1] [https://www.epi.org/publication/income-inequality-in-the- us/...](https://www.epi.org/publication/income-inequality-in-the-us/#epi- toc-3)

</comment></comment><comment><USER10> This reflects top 1% of income yet I'm not sure this is the best metric. It's much easier to measure income than wealth....many of those in the top 1% of income are probably not in the top 1% in terms of wealth.

</comment><comment> david-gpu The tax information is way off, at least for Canada. I'm guessing they are quoting federal taxes only, ignoring provincial taxes. In Ontario/Toronto, the highest combined marginal taxes are around 54% [0]

[0] [https://www.taxtips.ca/taxrates/on.htm](https://www.taxtips.ca/taxrates/on.htm)

</comment><comment><USER11> I've been in Bahrain and UAE for many years, income and wealth inequality is a real problem. A lot of the high earners are either sheikhs, landed nobility and business people who have large businesses in oil, energy, etc. who had opportunities open to them and could grab it while Bahrain or UAE was still undeveloped. It is also why their high earners is so high up in rankings. This coupled with the fact that these places are tax havens or pay much less tax because the govt can rely on oil revenue means you can keep a lot more of your income.

However, it seems there has been an economic downturn recently and taxes have been increasing so the economic landscape of Middle Eastern countries could change.

</comment><comment><USER12> Interesting that in Mumbai someone who just reaches the top 1% of earners must pay 44% of their income to send one child to a private school, while in Australia it is only 8%.

<comment><USER13> I am not sure if that number is accurate (or which super-exclusive school they've taken as reference). Private School fees depend on the institution and the grade you're in, and varies from $5-25K.

</comment></comment><comment><USER14> top marginal tax rate in Canada is way higher than 33%

<comment><AUTHOR> Yes, I had that same impression reading that chart. The top marginal tax rate in California is 13.3% and the top federal rate is 37%, so the top total tax on earned income is 50.3%.

</comment></comment><comment><USER4> What's the number for the 1% world wide ?

<comment><USER15> $32,400 According to Global Rich List - [https://www.investopedia.com/articles/personal- finance/05061...](https://www.investopedia.com/articles/personal- finance/050615/are-you-top-one-percent-world.asp)

I'm sure that shifts a bit from year to year

<comment><USER4> It's funny to think a lot of the « We are the 99% » are probably actually part of a class of people that are the 1%.

</comment></comment></comment><comment><USER16> Bloomberg could at least once publish more than a few regions when using "Around the World".

</comment><comment><USER17> I am going to become a Nanny in Monaco then ...

<comment><USER4> Working in Monaco without being from Monaco does not grant you the same benefits. Besides, it's a really, really boring city.

<comment><USER18> Even if it were true, it is 30 minutes from Nice, from the Italian border and within an hour of some of the best beaches in the Mediterranean...</comment></comment></comment>


Know Your Rights: H.264, patent licensing, and you - <AUTHOR> http://www.engadget.com/2010/05/04/know-your-rights-h-264-patent-licensing-and-you <comment><USER2> This was posted last night: <http://news.ycombinator.com/item?id=1319865>

</comment><comment><USER3> Finally a worthy debunking of the FUD spread by Mozilla, Thom Holwerda etc. regarding the license fees surrounding H.264.

I wonder if this article will finally be enough to make people understand that Mozilla et al. are either a) confused or b) deliberately spreading lies to instill fear of the H.264 format (while, oddly enough, in the past, they never made a sound about MPEG-1 Layer-III, MPEG-2 video, MPEG-4 ASP video, or AAC audio, all covered by the same licenses).

Really, get it into your heads already:

1) YOU ARE NOT SUBJECT TO LICENSING FEES AS AN END CONSUMER ENJOYING MPEG VIDEO/AUDIO

2) YOU ARE NOT SUBJECT TO LICENSING FEES WHEN DISTRIBUTING _FREE_ MPEG VIDEO/AUDIO IN A NON-COMMERCIAL CONTEXT

3) YOU ARE NOT SUBJECT TO LICENSING FEES WHEN DEVELOPING A VIDEO/AUDIO CODEC THAT CREATES MPEG VIDEO/AUDIO WHEN THE SOFTWARE IS _FREE_ AND NON-COMMERCIAL

4) YOU ARE NOT SUBJECT TO LICENSING FEES WHEN YOU, USING ANY SOFTWARE, CREATE MPEG VIDEO/AUDIO THAT WILL BE USED IN A _FREE_ , NON-COMMERCIAL CONTEXT

addendum, 5) YOU ARE NOT SUBJECT TO LICENSING FEES WHEN YOU DEVELOP SOFTWARE THAT CONTAINS MPEG VIDEO/AUDIO DECODERS/ENCODERS, IF THE DECODERS/ENCODERS AND THE HOUSING SOFTWARE IS _FREE_ AND NON-COMMERCIAL

The last point is aimed at developers of software like video players and web browsers, such as Firefox, which just happens to reside in a commercial context due to the massive, multi-million revenues generated by f.e. sponsored search, thus being subject to licensing fees for incorporating H.264 playback...which the Mozilla Foundation of course don't want to be subjected to, because that means less revenue. Remember: profit is the _foundation_ of all industry, and maximizing that profit is the _goal_ of all industry.

Sorry for the yelling; just had to get that out of my system. Stupid, greedy Mozilla keep pushing my buttons.

<comment><USER4> There's nothing wrong with Mozilla. The browsing consumer has a choice to choose another browser. I happen to think more than one video format in HTML5 is good for the consumer. If H264 does become the dominant format, then there is nothing to stop the licensing being revised a a future date. To prevent this perhaps you would have an alternative codec ready as an alternative so licensing remains competitively priced.

Monopoly isn't the foundation of industry, but often laziness.

Mozilla's outpourings, I think, are more of a campaign to get a free alternative to E264. As with all campaigns it could be economical with the truth. It remains to be seen if they have made the right move.

<comment><USER3> What's wrong are the misconceptions they are deliberately spreading to further their agenda. I am all for multiple choices just like you; I dislike that f.e. Safari has only H.264 support in its native HTML5 video component (problem solved if you have the XiphQT plugin, which takes 2 seconds to download and copy to your ~/Library) just as much as I dislike that Firefox has only Theora support. I want both FF and Safari to support _both_ so the user doesn't have to friggin' switch browser to enjoy this and that website's content - thankfully I can stick to Safari since XiphQT does an awesome job, and I'm damned happy to be able to see both H.264 and Theora content without having to juggle applications. And, admittedly, had I been in charge of picking just _one_ codec for the future, the choice would be _so_ easy, because in this debate I am all about video/audio quality for the end user, and I rrrrreally don't think the world of web video would ever have the carpet swept from under its feet by the MPEG-LA.

The notable difference here is that the H.264 camp in this debate isn't spewing bullshit all over the place.

<comment><USER5> Have you missed the vague patent threats against Theora?

MPEG-LA has spewed their share of bullshit, and Thompson before it spewed plenty as well.</comment></comment></comment></comment>


Blast from the past: Developer books from SGI - <AUTHOR> http://techpubs.sgi.com/library/tpl/cgi-bin/browse.cgi?db=bks&coll=0650&pth=/SGI_Developer

<comment><AUTHOR> For example, SGI C language reference using mipspro compilers:

[http://techpubs.sgi.com/library/manuals/0000/007-0701-150/pd...](http://techpubs.sgi.com/library/manuals/0000/007-0701-150/pdf/007-0701-150.pdf)

Send mail to the following address: Technical Publications SGI 1600 Amphitheatre Parkway, M/S 535 Mountain View, California 94043–1351 • Send a fax to the attention of "Technical Publications" at +1 650 932 0801. SGI values your comments and will respond to them promptly</comment>


C# is the past, the present and the future - <AUTHOR> http://blog.filipekberg.se/2013/01/11/c-is-the-past-the-present-and-the-future/ <comment><USER2> "I am a Software Engineer working with various techniques such as C#, WPF, WCF, ASP.NET MVC, ASP.NET and much more"

"I spend most of my days working with the latest technologies from Microsoft."

"In the darkest alley-ways we still have the people not wanting to touch C# with a pitch-fork because it's behind Microsoft"

In my opinion he lacks enough neutrality to make that statements(how he know MS tech is so great if he is totally ignorant of other options?).

Instead of telling people to learn only Microsoft tech he could take his own advise and learn non Microsoft tech too. The world is much bigger than a single company.

In my work as a software engineer I had to use what was good for my company, not what was good for Microsoft, Apple, or any religion(GNU or whatever).

I had to use Java, C#, objective C, python, (and lisp and c and c++). We will never be in the hands of a single company ever.

<comment><USER3> One problem with your statement is that C# is not only "Microsoft tech". C# is an ECMA language for crying out loud.

<comment><USER4> Microsoft used Ecma as a standards repository, not a standards body. Ecma neither created nor endorsed C# - they received and recorded a standards submission from Microsoft thus making C# "Microsoft tech."

Finally, neither C# 3.0, 4.0 or 5.0 have been submitted to Ecma. So we can hardly refer to C# as an Ecma language for crying out loud! :)

<comment><USER3> I didn't say that ECMA created or endorsed C#. I said that it's an ECMA standard because no matter how much posturing anyone wants to do, it is one.

Features of C# 3.0 and 4.0 have too been included in the ECMA standard. So yes, we can definitely refer to C# as an ECMA language...for crying out loud. The standard is not updated as often as Microsoft or Mono release a new version of their runtime (ohnoes!), just like web standards when a browser Mfr. comes out with a new feature.

</comment></comment></comment></comment><comment><USER5> The article is very scarce on content. This could have been a tweet. Also, saying "C# was here to stay from the beginning, we love it in the present and we will use it more and more in the future." wouldn't convince many people.

In my view, the future of C# is hanging in the balance. Microsoft has lost significant mind share, and I am not sure if Windows is a good platform anymore to write new apps.

<comment><USER6> I have to agree, it occurred to me the other day that my almost one year old daughter might never have a Windows computer, in the same sense that people 10 years younger than me simply never had an MS-DOS one, except this time Microsoft didn't build the next platform.

<comment><USER3> Totally dude. Because C# _only_ runs on Windows. You can't use it to build apps for the iPhone, Android, OS X or Linux at all. Nope.

<comment><USER6> Mono is an option for the current generation to learn one less language. Outside of Windows it's not the default language for anything except Unity3d so curious kids who grow up with tablets might not have much reason to learn it.

<comment><USER3> So, nobody should learn a language unless it's the "default language" for a platform? What is Python, Ruby or PHP the default language of? Should anybody be learning Perl, Haskell or Objective-C in your opinion?

<comment><USER6> I'm not saying nobody _should_ but I bet a shitload more people go with natively supported, which might be a better term than default.

And yeah this isn't at all specific to C#. Anything not natively supported suffers - just ask Flash who in a handful of years have gone from a defacto standard to a dinosaur.

<comment><USER7> I would say the experience is what matters. The user doesn't care what technology the developer used. If you can make gorgeous, fluid and speedy native apps with Mono and C# (which is very much possible) while at the same time making it easier to do cross platform development and deployment then why not.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> This article has a great title. Would have been nice if there was a bit more content to it; maybe we wouldn't have ended up with a bunch of hostile comments with spelling mistakes.

So let's give it a go. An opinionated past, present, and future for C#:

The past:

.NET emerged seemingly in 2002/2003 with a feature set similar to Java. This was pre-generics, and all code written in C# in this era is alien and involves a bit of casting.

Microsoft released Visual Studio 2002, containing support for (at least) Visual C#, VB.net, Visual C++ .NET (of course. let's blend two completely different object systems. my actual favourite: Objective-C++ .NET), real C++, and Visual J#, the successor to Visual J++ (which Sun had sued the crap out of them for). Of course you're not jealous of the JVM, Microdollar! We believe you.

C# did have structs at this point, distinct from classes, which are a pretty cool feature. They're more lightweight than classes, and I believe are passed by value rather than by reference like with classes.

Also, unsigned integer types. As a man who had to make a small machine 'emulator' in Java as part of a not incredibly well thought-out practical, I appreciate not having to bend my mind around poking the sign bit to try and get the real number I'm actually after.

And automatic unboxing and boxing of types was cool too. Int basically the same as int. So they did have a few original thoughts.

Event handling also deserves a mention, so there we go.

I personally was coding in VB6 at this time, and viewed VB.net with a mixture of bewilderment and contempt. So many keywords! Although the My.* namespace looked really cool. Actually being able to find out and change things about the current system, without being e.g. only allowed to change registry settings in a VisualBasic area of the registry.

That was about the time that I was messing around with threads thanks to the AddressOf operator, so really, a move was probably on the cards. (You had to bind the Windows threading API yourself, and when you tried to pause in the IDE it would only pause one thread, get confused, and crash.)

I eventually moved to VB.net (in the 2.0 era) and turned to treating C# with a mixture of bewilderment and disgust. (Clearly, I'm a quick learner.)

<comment><USER8> The 2.0 era

Java and .NET got generics around about the same time, a few years later. Java (sanely, to be honest) implemented generics via type erasure - so the compiler does the type checking, and then emits code that has no type information for generic containers - whereas the .NET team elected to break backwards compatibility* and make the runtime understand generics.

I think Mono appeared around this time.

This is the time when .NET started to get going, to be honest. Never settle for writing < 2.0 targetted code! Not that you can, unless you're running Visual Studio pre-2005.

XNA ran 2.0, although Microsoft's bored of trying to get people who aren't amateurs to use that now. Running my own code on the Xbox 360 was pretty cool though. But they seriously needed to put a better garbage collector on that thing. It was, er, rubbish.

* An annoying but possibly necessary decision. To this day, .NET 1.0/1.1 and 2.0+ apps require two separate runtimes to be installed, on Windows. Although Mono just deals with it, I think. Still, coming across the odd remaining 1.1 program can be a nasty surprise.

<comment><USER8> The present (kinda): 3.0/3.5

Man, why would anyone want any of this LINQ or closure stuff? I don't get it. We already have event handlers, and for blocks can do anything LINQ can do (that I'd use it for)!

It was about this time that I got into Haskell, somewhat out of necessity as that's what our uni course starts teaching. I've only grown more fond of Haskell since those days, mostly after learning a little OCaml/F# and seeing how comparatively nasty ML syntax is. Yeuch.

VB.net kinda lagged implementation-wise for these features vs. C# - I guess I wasn't the only person who moved from the former to the latter - but in C# they were fairly glorious.

No more would we be teased about the relative verbosity of our language! Fine, we still might go a bit long horizontally, but now we too can fit an amount of functionality on one line sufficient to guarantee the confusion of the reader and thus job security. Not that I have a job. Does job security keep you out of a job if you don't have one? Hm.

LINQ uses method extensions (a hilarious but occasionally useful bit of the language) to add new functions to all the collections types whenever LINQ is imported. Mapping and 'aggregating' (folding) and what have you arrived in C# 3.0, with surprisingly nippy implementations, and a whole lot more came with 3.5/4.0 (I forget).

Cool stuff. Cooler with closures. With events we didn't have to worry about writing inner Listener classes willy-nilly (insert comedy projectile vomiting here), but you still had to define the type of the function you were writing explicitly. Not so with closures. They're cool. I sometimes use them like private inner functions, but I'm pretty sure that's my fault.

Something else most definitely worth mentioning that came around here that is undoubtedly a good and cool thing was type inference, or the super magic 'var' keyword. (Like the C++ auto keyword, THAT CAME AFTERWARDS (possibly). We're inventing! Yay!)

Out with the List<string> stringList = new List<string>()! In with the var sl = new List<string>()! Glorious.

While I'm going long here, I need to also mention automatic property implementations.

So we don't have getWhatever and setWhatever functions in C# - (though we do agree with our Java brethren that generally exposed fields Are A Bad Thing) - we have: public whatever { get { return _whatever; } private set { _whatever = value; } }.

But in 3.0, you can do e.g. public whatever { get; private set; } and the boilerplate is written for you. If you ever want to swap them out with some code that actually does something at a point after that, you can then go ahead and do that. Awesome stuff. Java coders love this when they learn about it.

I think Mono also came of age here and stopped sucking. A new generational garbage collector (sgen), far greater API support, and the demands of game developers embedding the runtime left, right and center undoubtedly helped. (Mono runs on Windows and consoles, too, you know!)

Their System.Drawing implementation is still a bit crappy, though. I've had to do some weird things to alpha channels and what have you.

<comment><USER8> The future:

.NET 4.0 gave unto us the second revision of the F# language, and the Async and Await keywords. These are extremely cool, and I have had a great deal of fun writing seemingly-synchronous code (e.g. a character generation module for a MUD) that turns out to be asynchronous with the right words in the right places. Marvelous, great job, etc.

F# didn't begin existing at this point, but it basically did for me. F# is open source as heck, so it has a bit of the cool factor, and it really is just another take on OCaml. Unfortunately F# 'objects' (things, I mean) aren't real .NET objects, but you can explicitly write real .NET objects within the language with only slightly more verbose syntax and going the other way is really easy.

F# is a lot of fun and a real functional language. If you haven't tried it, you really should. Async and await are amazing here too.

Also gave us the .NET Framework 4 vs. .NET Framework 4 Client Profile as distinct framework targets. Clearly the latter is a cut-down version of the former, except that there's almost no difference in the available functionality, and the downloads for both runtimes are almost the same. Hm. Mono ignores the distinction completely, and I think we should too.

Whatever. Clearly C# is a labor of love, and we are going to get all the features we can ever pretend to understand over the coming years. I look forward to the eventual relaxing of having to put startup code in void main instead of just loose in the file (maybe), the IDE having more understanding of code (even if .NET intellisense in VS blows the C++ version out of the water and, indeed, at least three levels of atmosphere), and (optimistically) a more coherent F#.

.NET 4.0/4.5 has a bunch of features I can't even remember right now, and I look forward to learning more about the language, even if Littlecurrency politics seem to currently neglect .NET for C++ and Javascript in Metro apps a bit. (WinRT is a really cool framework though.) C'mon, only C++ apps allowed to use Direct3D? What year is this?

I'm still going to keep using C#, and I'm not the only one. (I use other languages too. Doesn't everyone? Go rules, Ruby has some very exciting ideas, and I wrote a node.js app the other day that to my surprise wasn't actually a piece of shit. So that's nice.)

I think that 'a slightly better Java than Java' is an idea that will prove promising for years to come.

A little about Mono:

Mono is a great platform, for what it's worth. With their new garbage collector (that can be tuned!), almost complete* support for the latest .NET 4.5 feature set, and their own additional features (tasklets and SIMD instructions, a REPL, and Compiler as a Service, anyone?) on top, I think it's pretty cool, and you might, too.

At the risk of preemptively lowering the tone - the current discussion here isn't that bad - the current best defense of Mono is an old Jo Shields rant at <http://apebox.org/wordpress/rants/124/>, though its tone is a little inflammatory at the start.

To summarize: Mono is independent from Microsoft, covered by the Open Invention Network re. patents, is a free implementation of an international standard by a convicted monopolist (a la the entire GNU system for UNIX) and is actually quite awesome in its own right. It's not just a compatibility framework. It isn't 100% compatible with the .NET Framework, and it doesn't need to be.

* Mono doesn't support WPF.

</comment></comment></comment></comment><comment><USER9> I like C# and I also think that it will keep evolving. But statements like "C# has adapted to the needs of the community over these 13 years or so very well" without explaining how makes this article sound too marketing-oriented.

</comment><comment> guard-of-terra I would like to try it out but I'm not on Windows obviously, and I won't work to become a second class citizen ("What do you use? Mono? That's not supported").

Also, most of tooling seems to be proprietary, Windows-only too.

So I'd stick to JVM.

<comment><AUTHOR> I'd suggest you give Mono and MonoDevelop (<http://monodevelop.com/>) a try! It's really good and at least most of the web stuff that I've developed have just worked out of the box on Linux (Apache + Mono).

<comment> guard-of-terra I don't want to be a second class citizen.

I don't want to be a second class citizen ever. I don't want to be a second class citizen. I don't want to be a second class citizen ever.

"Really good" is so much different from "The Most Awesome Edition" you get with languages like Java or Ruby.

I can tinker with a "Really good" tech on home projects all right (except I prefer Clojure), but not in the workplace.

<comment><USER10> There are real companies out there making real money off Mono. So it's not a toy reserved for weekend tinkering. Enough companies trust Mono to use it in production.

<comment> guard-of-terra I'm happy for them, but I'm not going to risk it. The reward is nice but not nearly worth the risk.

When adopting Java, you can trust it will just work, but with Mono you have to _bet_ it's going to work, you're not going to run into compatibility problems and tooling will be adequate.

<comment><USER11> Java comes with its own problems, especially in enterprise environments where you might be pinned to a single version. There are plenty of insecure JVMs out there that can't be upgraded on both servers and clients, mainly to ensure compatibility or meet support requirements.

<comment> guard-of-terra I don't see how it is relevant WRT considering a language/platform for a new project. You're talking about legacy stuff. I don't see how this can't happen to project in any language (PHP? Ruby? Perl? C#?)

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> He clearly works for MS and probably on the team that works on C#, which is why I find it odd that he touts Mono as a feature. If MS was serious about .NET everywhere, they'd sponsor Mono/Xamarin, or offer native .NET support for OSX and Linux instead of using the Mono community's hard work to toot their own horn.

C# is a great language and has evolved beautifully, but many people will still continue to avoid it because it's owned by MS and stuck on Windows (without the help of Mono). The next Google, Facebook or Twitter won't be written with C#.

<comment><USER12> He isn't MSFT staff, read his "About the Author" page, he works for a Swedish company. Also he's a MS MVP, you can't be a Microsoft MVP and work for Microsoft at the same time.

<comment><USER10> You're right. His use of "we" had me confused.

</comment></comment></comment><comment><USER13> From my limited perspective, C# hasn't changed much apart from syntactic sugar (less typing!) since generics were added in v2.0. This is similar to all the stuff Microsoft throws into their C++ compiler to make COM more user-friendly.

Most of the additions have been to the CLR, where Microsoft has earned a reputation for changing behavior in the 'green' bits (meaning: supposedly unmodified) when updates are installed. Also, Windows 8 brings the new WinRT; it's impossible to know how long either runtime will be 'the one true way' (see Silverlight).

It's hard to get behind a software development tech created by a company that makes its money selling new versions of operating systems and development tools (the cool stuff always requiring the latest versions, of course!). Microsoft is always moving the cheese.

</comment><comment><USER14> C# is a great language and Ximian has been doing brilliant work on Mono but I'm actually starting to wonder about the long-term prospects of Microsoft. Without a significant corporate sponsor I'm just not sure it has the momentum to endure.

<comment><USER15> Most of the Microsofts revenue comes from server side stuff anyway, 60% from memory(?), it'll be a good 5 years at least before that market dents. I don't think you'll see c# going away anytime soon.

EDIT : couldn't find 2012 but heres 2011 [http://punchcut.com/sites/punchcut.com/files/win8_1-8_eb- msf...](http://punchcut.com/sites/punchcut.com/files/win8_1-8_eb-msft- revenue-q42011.jpeg) business + server looks around 60% which I guess is where my figure comes from

<comment><USER16> I thought office was the cash cow...lot more desktops out there than (Windows) servers.

<comment><USER17> But lots of those desktops comes with cheap, sponsered OEM-licenses of Windows and Office. You don't get OEM rebates for your MS server-park.

<comment><USER16> Not the ones in corporations, they don't get oem anything. MS can, and does, extort practically whatever it wants from big business who basically are incapable of realizing alternatives to office/windows.

</comment></comment></comment></comment></comment><comment><USER18> DO NOT mention Windows in a good way on HackerNews, its just taboo around here. (sarcasm)

</comment><comment><USER19> I love C# as much as any MS fanboy would, but when people like Charles Petzold start abandoning C# and .NET for native C++ - [http://blogs.msdn.com/b/msdnmagazine/archive/2013/01/08/1038...](http://blogs.msdn.com/b/msdnmagazine/archive/2013/01/08/10383228.aspx) \- to get more speed out of Windows 8 apps, then you have to start thinking maybe Microsoft is at least pushing C#/.NET out of the limelight - its not the be all and end all it used to be.

<comment><USER20> Not everything needs native C++ performance. I use C# all the time on things that need easy maintainability and to be as secure as I can reasonably make it.

<comment><USER19> Totally agreed ... horses for courses etc. I also use C# the majority of the time ... but it seems like it will now be sharing the stage with C++ and possibly HTML/JS in terms of the recommended languages by MS.

</comment></comment></comment><comment><USER21> Can you please rewrite this so it doesn't look like an ad for Microsoft?

<comment><USER22> He's a junior MVP, of course it has to look like an ad :)

</comment></comment><comment><USER23> > _C# was here to stay from the beginning, we love it in the present and we > will use it more and more in the future_.

This article would have received a bit more respect if it had been a bit more subtle about the C# cheerleading.

</comment><comment><USER24> C# and .NET were designed to sell Microsoft Windows Servers, C# = Microsoft and any side project like Mono can be shut down any time. Microsoft did not become what it is by embracing open and free technologies unless it was to "extend and extinguish them", if you dont pay for a product one way or another there is no reason for Microsoft to support that product. C# is a good language but definetly not the future.

<comment><USER25> Microsoft has been making some decent moves into open and free as of late. The biggest thing lately, that I can think of, was their open sourcing of the entire asp.net stack:

<http://aspnet.codeplex.com/>

<http://aspnetwebstack.codeplex.com/></comment></comment>