Eloquent JavaScript 3rd Edition (2018) - <AUTHOR> https://eloquentjavascript.net/ <comment><USER2> I'm actually working through this book right now. I've been away from front- end coding for a bit and my weekend/evening project over the next month is to brush up on modern Javascript and ReactJS. This book is very well written and great re-introduction to JS/programming fundamentals.

For those interested--Besides this book, my current learning plan includes: Javascript 30 by WesBos Exploring ES6 [[http://exploringjs.com/es6/](http://exploringjs.com/es6/)] Learning React-2nd Edition on O'Reilly Learning The Beginners Guide to React on Egghead Data Structures and Algorithms in JavaScript on Egghead.

I also used Kent C. Dodds' excellent "JavaScript to Know for React" article as an outline.

<comment><USER3> For React, why not just read the docs? You don't really need anything else.

<comment><USER4> Yes. I 100% agree with you. For whatever reason most people almost alway look elsewhere for the thing while it's right in front of them.

<comment><USER5> The React docs are excellent. But many (if not most) other projects have woefully under-developed docs that offer confusion more than clarity. I wouldn't blame anyone for assuming that the docs are _not_ the place to start for learning something new.

<comment><USER6> Nowadays if you face a tool with sparse official documentation or with total absence of it, it's probably better to find another tool or be prepared to learn from the source code.

<comment><USER4> Exactly. That's one of the heuristic I use nowadays to filter things.

Does it have a good documentation?

Yes? Cool. I dive in head first.

No? Hard pass.

</comment></comment></comment></comment></comment></comment><comment><USER7> JavaScript is very expressive and powerful language. Maybe hard to learn. The prototypal inheritence and 'this' were confusing to me and took much time to understand those.

Then I learnt that prototypal inheritance is a superset of ''class''ical inheritance [1] as well as this [2]. Hmm.

With Reflect, Proxy etc. you have great metaprogramming capabilities that make this language much powerful.

Still, there are some (many?) edge/corner cases and unfixable bugs (aka features) that the language is stuck with for the sake of backwards compatibility and developers have to learn these. (The most famous of these might be typeof null === "object")

When I look at the amount of features added to the language specification, sometimes it seems like it is going to become another incarnation of the C++ specification.

I still like its expressiveness and power, but if it becomes another C++ in future, I have to look somewhere else. (TypeScript maybe.)

[1]: [https://aaditmshah.github.io/why-prototypal-inheritance- matt...](https://aaditmshah.github.io/why-prototypal-inheritance-matters/) [2]: [https://wiki.c2.com/?ClosuresAndObjectsAreEquivalent](https://wiki.c2.com/?ClosuresAndObjectsAreEquivalent) and [https://www.crockford.com/javascript/private.html](https://www.crockford.com/javascript/private.html)

<comment><USER8> I'm convinced that prototype object systems represent a poor set of requirements.

Those requirements are chosen because they lead to ease of implementation: prototype objects are the quickest and dirtiest way to enhance an interpreter such that programs can be written in it that are discernibly OOP-ish.

They don't represent a set of requirements that amount to a good OOP system.

<comment><USER7> Read the accepted answer to this question: [https://stackoverflow.com/questions/2800964/benefits-of- prot...](https://stackoverflow.com/questions/2800964/benefits-of-prototypal- inheritance-over-classical)

<comment><USER9> > @s̮̦̩e̝͓c̮͔̞ṛ̖̖e̬̣̦t̸͉̥̳̼ It's been a while since I wrote this answer. My > views have changed since I wrote it. Now, I believe that inheritance, both > classical and prototypal, are bad and should be avoided at all costs. > There's never a good reason to use inheritance. If you're writing object- > oriented code then you should always prefer composition over inheritance. > Even better, don't write object-oriented code. Embrace functional > programming.

Author finally opened his eyes.

<comment><USER8> > _There 's never a good reason to use inheritance._

Looks rather like eyes closing to me.

<comment><USER10> Definitely agree with you. as much as I hate inheritance... _never_ using it seems like a big leap.

<comment><USER8> I hate being locked to single inheritance. Like, okay, we got the properties of _foo_ ; so that means we now absolutely cannot be a _bar_. It bugs me even if there is no plan to do that in the current program. By inheriting from _foo_ , I'm enforcing the decision that this cannot be a _bar_ , which could cause a problem to a future maintainer (maybe myself in six months).

Java has single inheritance, which sucks; but it has multiple inheritance of interfaces at least, and good luck doing any serious work in Java without that being involved. (That is also designed that way in order to pander to implementation ease and certain run-time efficiencies; but has been turned into fallacious arguments like "multiple inheritance is bad ... unless it's interface inheritance").

Oh, and one problem with this prototype business is that in fact it is single inheritance (in the typical incarnations, at least; am I invoking a strawman)? It seems inescapable that supporting multiple inheritance under the prototype paradigm requires that we make a single new object out of two or more existing objects. But if objects are effectively just bags of properties (a.k.a. hash tables) it does seem easily doable. Make new empty object, stuff with properties of all argument objects, season to taste, return.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> I would consider myself pretty close to an expert with JavaScript. I've been using it for 5 years professionally, currently use ES2020. Fairly familiar with Node 12, V8, etc. But I'm always worried about those situations where you dont know what you dont know. This might sound strange, but would anyone recommend any reading material or blogs for someone at my level?

<comment><USER12> I've been using JavaScript professionally for about 12 years.

You're going to have to look for talks and really technical posts. Consider whitepapers and source code for JavaScript engines at this point. You'll probably want to start reading up on the things attached to JavaScript, rather than the language itself. Browser rendering, event loop, V8 things, garbage collection, etc.

I'm sure you've seen it, but things like this: [https://www.youtube.com/watch?v=8aGhZQkoFbQ](https://www.youtube.com/watch?v=8aGhZQkoFbQ), and this: [https://www.youtube.com/watch?v=SmE4OwHztCc](https://www.youtube.com/watch?v=SmE4OwHztCc)

It might be time for you to start writing what you know about JavaScript.

<comment><USER13> I definitely wouldn't consider the first video 'advanced' material (an excellent talk btw), JavaScript event loop is something beginners should know about and intermediate developers know very well.

<comment><USER14> Ah, but do they know where in the event loop, for example, "microtasks" get executed as opposed to... I forget.. tasks? In other words, how execution of promises is different from the execution of setTimeout?

</comment></comment></comment></comment><comment><USER15> Great read, though his writing style is less intuitive if you are fairly new to JavaScript and trying to grasp some of its concepts. For example, in his reduce function [0] example, he names his variable "current" to bind the accumulated value the reduce function is going to eventually return. That is a totally fair name, but I don't know if it really "clicks" if you were reading over this for the first time. I think it would be faster to grasp the reduce function's purpose if it was simply named "accumulated" or something alike, especially when this snippet is advertising the idea of higher order functions and callbacks.

Little things like this I am nit-picky about, but overall, great book.

[0] [https://eloquentjavascript.net/05_higher_order.html#h_fx3e34...](https://eloquentjavascript.net/05_higher_order.html#h_fx3e34kT/k)

</comment><comment><USER16> We used EJS in our basic programming courses in my CS program and it was a great book. Loved the exersices you could try directly in the book!

I now program JS for a living so i guess the book also really worked. Thank you for the third edition!

</comment><comment><USER17> I am unable to find out what has changed between editions

<comment><USER18> I learned JS with this book back when it was ES5 - looks like the new edition is updated for ES6

<comment><USER19> ES6 came out 5 years ago

</comment></comment></comment><comment><USER20> Does anyone have a book recommendation (free or paid) that is modern and up- to-date, preferably regarding typescript, that talks about best practices and patterns for large-scale project design and code structure?

For example, a book that could go into details of code practices at companies like Airbnb, Facebook, or Google.

<comment><USER21> Typescript is relatively new, and I think a lot of those companies are still trying new things and experimenting with what works. I expect that we will see more refined content and books about TS-at-scale in the near future though.

However, for those looking for a great way to learn Typescript from a beginner's perspective I can fully recommend Execute Program[1].

[1]: [https://www.executeprogram.com/](https://www.executeprogram.com/)

<comment><USER20> At the speed of javascript though, it's pretty mature now. When I tried searching on Amazon I was getting back $30+ dollar ebooks with chapters on how to use Gulp (superseded by webpack or babel)...

</comment></comment></comment><comment><USER22> I've been toying with the idea of promise free async/await lately. I'm interested in feedback anyone would have.

[https://github.com/bessiambre/casync](https://github.com/bessiambre/casync)

<comment><USER23> I have avoided yield() and generators like the plague because they're hard to read and I've never seen them used except in examples explaining how they work. Yield feels like recursion - a neat trick for some corner cases but generally unnecessary.

<comment><USER24> JavaScript syntax for generators is clunky no doubt. But they let you do some things more naturally than anything else in JavaScript. They keep track of state "implicitly" you don't have to do an assignment to 'save a state", you just yield and your state is remembered.

I found generators useful for implementing my home-brew parsers. Parsers must try out all possible combinations of possible syntactic elements before they can say that parse failed. Generators are a good tool for that

<comment><USER25> > Parser in JS

Insteresting ! Would you mind sharing how you did ?

<comment><USER24> The basic idea is that a generator yields one potential parse of a section of input-string. The caller continues checking the rest of the string but if it fails to find all expected syntactic elements it will go back to the generator basically asking it: Your previous suggestion did not work out, can you give me another possibility?

</comment></comment></comment></comment></comment><comment><USER26> As someone who hasn't done much JavaScript since AngularJS in 2014/2015, what is the current state of JS like?

I see there's Angular (not AngularJS that I worked with), React, and some other frameworks. I see there are all kinds of bundlers and plug ins for these things.

When I was doing AngularJS, I'd just link to a few dependencies manually from a CDN. Looks like now there's a bunch more complexity and package management for front end dependencies.

It feels like FAR more complexity, but I'm not sure what has been gained. I also don't know that much, so would love to learn perspectives here from people actively developing in this space.

<comment><USER27> If you're looking for a fully featured framework, Angular is a joy to work with. React is great too, but the configuration overhead is enormous due to the fact that it's mainly a view library. I realize you are pining for the days when you just pasted a CDN link in your index.html, but while those use cases still exist, for the most part users are demanding more native-like web experiences, which requires a bit more complexity.

One of the main strengths (and according to some, weakness) of Angular is that it has everything you might need to create a full featured SPA out of the box, and it's all tightly orchestrated by the Angular CLI. Creating a component or a service is a simple command, and many third party packages leverage the CLI (Angular Schematics) to install and configure themselves in your codebase. Core packages--such as such as forms, router, angular material--are all high quality (by Google), updated together, and work cohesively with each other. That means updating even major versions of Angular is an easy `ng update` command. For me, the minimal configuration overhead is a BFD, as I plain hate that stuff.

The fact that Typescript has been a first class citizen of Angular from its outset makes development pretty enjoyable. I'm so used to exploring APIs using intellisense, leveraging types to figure out what data types can be passed in functions, relying heavily on auto-complete/auto-import to pick up my pieces and finish typing a word for me and importing the corresponding library while I keep going.

Granted, there is a significant learning curve. But once you get over the initial learning curve, you become incredibly productive. Arguably, the learning curve in other frameworks is worse, given that you have to research what libraries to use (e.g., which forms library, with its own set of conventions), configure it, and make sure it plays nice with the other patchwork of libraries.

</comment></comment><comment><USER28> Can anyone recommend reading for the web-related Javascript "API" so that when Javascript is used in the form of generated code, e.g., through asm.js, the "API" can be used by the "generating program" without the need to learn all of Javascript.

Essentially so you could do HTML/CSS/some-other-language (using asm.js, emscripten, or some similar technology) instead of HTML/CSS/JS.

</comment><comment><USER29> Is this worth buying/borrowing if you already know programming languages but not Javascript? Or is there a better approach?

<comment><USER30> IMO, no. It has too much ceremony to demonstrate concepts. It's for absolute beginners.

<comment><USER31> Definitely NOT recommended for absolute beginners. I tried reading this as one of my first programming books and it confused the hell out of me. There are much better introductory books/courses - my recommendation is "Watch and Code - Practical Javascript" if you are an absolute beginner and want to learn javascript.

[https://watchandcode.com/p/practical- javascript](https://watchandcode.com/p/practical-javascript)

Eloquent Javascript is a good book now that I know more about Javascript, but please NEVER EVER recommend it as the first book for an absolute beginner.

<comment><USER32> marked this,thx, btw, I always want to choose head first series to be my 1st book, what do ya think compare with eloquent JS for absolute beginner?

<comment><USER31> I skimmed through head first, it seems pretty good but similar to a lot of other books. The watch and code course is different and I just think it's so on point for the absolute beginner, or at least how I like to learn.

With 20/20 hindsight, what I wish I had done is read through or watch one or two courses without any pressure, just get familiar with the topic, and don't worry if I don't understand things.

things start clicking into place after you're exposed to this stuff a few times. My mistake was that I wanted to understand everything and didn't want to skip ahead if I didn't.

</comment></comment></comment></comment></comment><comment><USER33> I read this book and found that explanations of quite a number of topics were misleading.

<comment><USER34> Do you have examples of this? Perhaps they could be clarified in errata, or future versions.

<comment><USER33> Are you the author?

I'll definitely give it a re-read and update.

</comment></comment></comment><comment><USER35> There is an equivalent for Ruby too in case you're interested.

<comment><USER36> That's by a different author with no connection to this book, though, so calling it equivalent is misleading.

</comment></comment><comment><USER37> this. is. awesome. SO glad this book is being kept up to date

</comment><comment><USER38> Is there an equivalent for php?

</comment><comment><USER39> I always skip to the async part of JS text because explaining it is a bit like handing a shotgun to a five year old. I think the folks over at risingstack have the best explanations, IMHO.

I'm surprised they attempted timeouts in promises with so little text, that's actually pretty dangerous pattern because it glosses over the complexity in actually stopping an in-flight promise. It is VERY easy to end up with hundreds of thousands of unresolved promises with their pattern. Dangerous!

There is a great repo on this issue.... aand I can't for the life of me find it. Basically there's a github project that uses generators and passes an atom down through the call stack to ensure everything below the race promise is aware that it is being halted. And even that doesn't handle all the nuances of this pattern.

And if anyone knows what github repo I'm talking about, I'll give you ... 50 DKP?

<comment><USER24> I used to use more "Promises" but now I mostly code with plain callbacks if possible. It is just simpler, less thinking needed. I spend that thinking- budget on other things.

One thing that is tricky with async is that nobody tells you if the async function never does what it should. I wish they would add some more built-in support for that in the next JS version.

Promises hold promise (pun intended) but they are a bit too complicated for my brain.

<comment><USER22> I also find promises problematic. I do like async/await though, except for the fact that it relies on promises.

I've been toying with the idea of a promise free async/await implementation lately. I'm interested in feedback anyone would have.

[https://github.com/bessiambre/casync](https://github.com/bessiambre/casync)

<comment><USER24> Very interesting. I just don't have time to try it out right now.

Perhaps if you create and publish a simple comparison solving a given problem with Promises vs. CaSync it would show that CaSync takes much less code?

That could convince more people to take the time to try it out.

<comment><USER22> I'm not sure it's much less code. Especially that async/await is integrated into the language now. It's less state, less corner cases, more encapsulation and better performance.

I'm thinking of trying (if I have time) to build a babel transpiler plug-in so you could use it with keywords like async/await instead of explicitly wrapping generator functions. I think the syntax would end up very simple.

</comment></comment></comment></comment></comment><comment><USER40> This is from 2018. The title of the post should be updated.

<comment><USER41> Yeah, people are going to be tempted to think this is brand new without the date of publication.

</comment></comment><comment><USER42> I really like the first edition...

</comment><comment><USER43> Here are the things that I really really hate about javascript:

I find javascript really hard and annoying, even if I have enough experience with JS that lets me build a basic react framework, I still find it hard to use.

On top of that, getting javascript jobs is harder compared to other programming languages. IE: you need 7 years of experience for a company at the same level where they only need 1 year of IOS/Android experience.

You always have to be keep up to date. The popular libraries that you can use changes so fast, and sometimes they don't even work.

Javascript gets a lot of disrespect from beginner engineers. Something about doing frontend work, isn't hard and it isn't software engineering in their perspective

There are so too many ways to do the same thing, unlike something like lets say golang

You always have to learn more than javascript to compete with other javascript developers. IE: dev ops, backend, database, sre, ux design

<comment><USER44> I'm sure you will be downvoted as hell because you're critic and not upbeat, HN just likes everyone saying good words all the time, i.e. stay politically positive. However I strongly believe critic is more meaningful most of the time as long as it does not have bad intention, thus I upvote you.

JS is indeed hard, learning vuejs for the sake of 'it's simpler than react' right now.

<comment><USER45> Client dev was always hard. People just mistake that for Javascript because they don't have any experience building clients.

For example, I'd say JS/React is vastly easier than learning Cocoa/UIKit. Writing GUI code that runs on N user devices is harder than writing headless code running on a single server.

Btw, if they're getting downvoted, it's because "oh, Javascript is in the title? time for me to complain about it like people do in every JS-related HN thread!" is a tired HN comment.

<comment><USER46> I disagree. Headless code on a single server can still be very difficult. For instance, nginx, mariadb, etc, which allow the frontend to function well, are difficult to write. You have to deal with multiple threads, search algorithms, handling tcp/udp requests, and optimizing all of that so it isn't dead slow. Whereas writing GUI in JS/React involves less "computer science" complexity and more compatibility complexity-dealing with things like, what is the screen-size, the locale, etc.

On the note of the HN's perceived hatred of JS, I think its because Javascript has tried to do too many things. Despite its quirks I like Javascript in the context of the web browser, but what I dislike it that it exists in applications and on the server side. The Atom editor should not take up 200 MB and take forever to boot. But it does because instead of taking the time (like sublime text) to write a rockstar system code, they instead used electron. The feeling I get sometimes is that JS developers want to program the same way they do in the browser, everywhere.

<comment><USER47> Are there easy ways to write GUIs without Electron that still can use HTML+CSS for layout and design that allow you to have an identical experience on Windows/MacOS/Linux? I think this is the main thing webdev-land people like (myself included). Also, there are so many npm libraries to handle stuff for you that staying within that ecosystem is enticing.

<comment><USER46> My point was more along the lines of the code bloat that comes from essentially emulating a web browser on system, when in reality you can write much faster code in C/C++ or even C#/Java. But, GUI design for applications can be a nightmare, with QT on the one hand versus fragmented Cocoa/Windows Whatever in C#.

I think Electron was the webdev community's response to this, and we really haven't gotten one on the app/systems developer side besides QT.

Or to rephrase, using Electron to "emulate" a web browser is cross-platform from the perspective of the electron user, while most other gui-ing solutions in C/C++, are not necessarily cross-platform, and therefore this leads to different set of challenges.</comment></comment></comment></comment></comment></comment>


Show HN: InstantSearch iOS, build search UX easily in Swift and Objective-C - <AUTHOR> https://community.algolia.com/instantsearch-ios/ <comment><USER2> Hey there!

My name is Guy and I've been working on InstantSearch iOS for the past few months. I'd be happy to hear your feedback and answer any question you have :)</comment>


Use Google Docs to Manage your Digital Projects - <AUTHOR> http://www.seomoz.org/blog/use-google-docs-to-manage-your-digital-projects-from-freelance-to-large-agency

<comment><USER2> I feel less and less comfortable relying on Google for something this important.

Leaning more towards solutions that I can completely control and host/backup myself.

</comment><comment><USER3> Quite a comprehensive write-up.

</comment><comment><USER4> Yup, I do this. And have done it to manage reporting projects because it helps the researchers realize that there are facets of information that we need to collect for every row. And then creating a visualization or analysis takes little more work than writing a script to loop over every row.

A popular plugin among the data-journalism crowd is tabletop.js...spreadsheet data is uploaded to Google Docs, and data-stories use it to create interactive graphics.

<https://github.com/jsoma/tabletop></comment>


Ask HN: Digital paper money? - <AUTHOR> Is there any way we can use a debit card the same way we use paper money? I can use paper money without having a bank account, but I feel like there is no way I can use a debit card without having a bank account.
Is there anyone here who feels that digital money and paper money should have the same benefits?
I don't like banks. I don't like how they multiply money out of nothing. I don't like how they operate.I don't want my money to be borrowed to others nor being invested in financial products I don't know. I don't want to lose my money if they fail as a company while investing my money.
Is there anyone out there feeling like this? Have you found any solutions to this problem?
Edit: Debit card instead of credit card <comment><USER2> I think this is what's known as a "stored value card," whether it's like a traditional gift card with a number and signature stored on a magnetic strip, or a smart card-based system, where a tamper-resistant cryptographic chip (just like the one in your SIM card) stores and manages a value on it.

[https://en.wikipedia.org/wiki/Stored- value_card](https://en.wikipedia.org/wiki/Stored-value_card)

[https://www.fiscal.treasury.gov/fsservices/gov/pmt/storedVal...](https://www.fiscal.treasury.gov/fsservices/gov/pmt/storedValue/storedValue_home.htm)

</comment><comment><USER3> > I don't like banks. I don't like how they multiply money out of nothing. I > don't like how they operate.I don't want my money to be borrowed to others > nor being invested in financial products I don't know. I don't want to lose > my money if they fail as a company while investing my money.

Some religions don't allow interest to be earnt on loans. You might be interested in their financial products.

[https://en.wikipedia.org/wiki/Islamic_banking_and_finance](https://en.wikipedia.org/wiki/Islamic_banking_and_finance)

<comment><AUTHOR> Thank you for your comment, very much appreciate it as I didn't know any of the Islamic banking finance system. But that's now what I'm worried about.

I don't want a loan. I want my digital money to have the same qualities that physical money has. I'm looking for a place I feel comfortable giving them my money without having to worry about if they loose my money or not while investing it nor deleting me from their db. I don't want them to track my info neither. Just a place where I bring them my money, they save it and they give me access to that money with a debit card.I would pay 10$ a month to have digital money, or something similar to what I describe.

</comment></comment><comment><USER4> If you want to use a 'credit' card then that means your spending money you don't have, so you're spending the banks money, that's why you need a bank account, sort of simple but that's the idea.

A 'debit' card is money you do have, and you don't need a bank account for some of those, for example you can get 'pre-paid' cards, you top them up with paper money then spend them wherever.

There's also bitcoins and all the other digital currencies you can use, I think some places even have Bitcoin ATMS now.

<comment><AUTHOR> You are right, thank you for the correction. Post edited. The problem with prepaid cards is that I don't feel like my money is secure neither. What if visa fails? What happens to my prepaid card if visa/master card fails?

Don't you feel like it has to exist at least one company in the globe that the only thing it does is taking your money, secure it and give you a credit card?

What if any of these companies delete you from their db? It sounds like I'm paranoid but I don't understand why we do trust them at all. In Spain and Italy two big banks have failed this week.

</comment></comment><comment><USER5> (Deleting this, guess I'm wrong.)

<comment><AUTHOR> I'm not an expert and I'm really willing to learn from others in case you know more.

Could you please elaborate more in the matter?

As far as I know, they give credits to people and they invest money to earn more money. That's how banks make money and become profitable. And for what I know they can even operate with more money than they really have.

By the way government just guarantees a certain amount of money, in countries like Spain it's just 100K$/account. In other countries like Portugal I believe it's 30K$/account.

EDIT: Responding to the government protection fact.</comment></comment>


How one little community helped us raise $8M - <AUTHOR> https://www.imzy.com/dan/post/how_one_little_community_helped_us_raise_8 <comment><AUTHOR> Happy to answer any questions about the fundraising process.

<comment><USER2> I don't really get Imzy - it sounds like a more liberal Reddit with more censorship?

Censorship certainly makes HN better than Reddit, so no judgement there. I just don't understand the Imzy value proposition as a user.

<comment><USER3> It looks like you can "tip" communities and users and be tipped yourself for things you post. The incentive to create genuinely worthwhile content is much higher, assuming people actually use the tipping feature.

<comment><USER2> Can't you do that on the rest of the Internet with Bitcoin?

Why would I want to do that anyway?

<comment><USER3> I suppose with Reddit's "flair" options you could put a BTC address next to your username in a lot of subreddits. But BTC is a lot more effort than just clicking a button, unless the site sets itself up specifically to use BTC, at which point why not just use real money?

Take a look at all the "gilded" posts on Reddit. I see dozens of them every day. People love spending a few bucks here and there to show their appreciation for good content, but all of that money goes straight to Reddit rather than the person that created or shared that content. I would much prefer the majority of my "gildings" to go to the user, rather than the site.

<comment><USER4> Reddit has multiple payment bots. See: [https://www.reddit.com/r/changetip/](https://www.reddit.com/r/changetip/)

I believe there are Twitter bots for the same. Any bot should be generalizable to any text medium.</comment></comment></comment></comment></comment></comment>


Profile of Jonathan Sumption - <AUTHOR> http://www.theguardian.com/law/2015/aug/06/jonathan-sumption-brain-of-britain

<comment><USER2> Interesting, if only because it shows what journalists consider the qualities of a "great mind".

If we are weighing British residents by the heft of their brain, personally I would have picked Wiles.

<comment><USER3> I would think journalists' standards of a great mind in this instance pretty much match up with an average persons definition too. His career as a barrister/adviser/judge is achievement enough, and then in between he writes meticulously researched historical tomes and learns languages? The guy basically is Mycroft Holmes only more productive :)</comment></comment>


Show HN: Our new start-up HomeZada - <AUTHOR>

About 7 months in the making, this is our new start-up that we soft-launched last week
http://www.HomeZada.com
We think there is a gap in the market for people wanting to organize their house and possessions online. The mint.com for your home? We're proud of the v1 and have some big plans on what to do next in this space - lots of interesting things to do for sharing info & expertize in this domain.
I've been involved in a few start-ups before and this has certainly been the most fun to get going. We use a Rails 3 stack on heroku, and use S3 for files storage. I plan to write up a blog post on the tech details (gems used, various things we've found along the way). We also had some success on our use of 3rd party designers and the use of an interaction-design style.
We're a four person start-up, with myself and one other on the software/infrastructure side. Would love to hear feedback from the HN community and ideas of what you think works (and importantly doesn't!)
Thanks for any feedback & advice! <comment><AUTHOR> Link <http://www.HomeZada.com></comment>


A Visa for Job Creators - <AUTHOR> http://online.wsj.com/article/SB10001424052748704631504575532243982639322.html?mod=googlenews_wsj <comment><USER2> "Mr. Anderson, a former Immigration and Naturalization Service official, says the U.S. would do better to discard capital requirements and welcome any foreign national who can present a business plan that passes muster with the Small Business Administration."

The part about discarding capital requirements is a clear win, but why not go further and scrap the idea of having the SBA screen the business plans? It's an obvious place for the process to go Kafkaesque, and as step to keep people from gaming the system, it's easy to defeat. How about a visa for anybody who wants to come start a business here, period. (Maybe with the proviso that they're not allowed to draw welfare while on the visa.)

<comment><USER3> Agreed; unfortunately, the people that will immediately imagine hordes of terrorists entering the country pretending to be entrepreneurs form a significant portion of the electorate.

<comment><USER4> I think in this case they're worried less about terrorists (who can be excluded on other grounds) and more about mass immigration in general. Simply requiring that you say you have a business plan is equivalent to having no requirements, since anyone can say that.

I'm pretty pro-immigration in general, but wouldn't it be more direct to just greatly increase the immigration quotas, rather than making people go through the charade of pretending to have a business plan? Either that, or if you want to insist that it be a real business plan and not a charade, you need someone to vet them.

</comment></comment></comment><comment><USER5> "To continue reading subscribe now"

No

<comment><USER2> Full article at the first result:

<http://www.google.com/search?q=a+visa+for+job+creators>

<comment><USER6> WSJ is cloaking

</comment></comment></comment><comment><USER7> why not just let anyone live anywhere?

<comment><USER8> Because that's the wrong kind of "globalization." Investor-oriented globalization is the kind where a wealthy person can move his factory to Mexico and demand many of the same rights he gets in the US; but a poor Mexican can't go to New York and do likewise. For more information:

<http://www.chomsky.info/interviews/2006----.htm></comment></comment>


Linode CLI - <AUTHOR> https://blog.linode.com/2014/01/28/linode-cli/

<comment><USER2> Why not also release to CPAN? It would make managing the dependencies easier for those not installing the packages from homebrew/apt.

<comment><USER3> Lets not forget the benefit of the automated test army known as CPAN Testers. You release to CPAN they test it across many versions of each major operating system Windows, Linux, Mac OSX, FreeBSD, NetBSD, OpenBSD, DragonflyBSD, etc...

<comment><USER4> It definitely would be beneficial if it were on CPAN. However they would need to add tests to the repo first :)

</comment></comment></comment><comment><USER5> > Linode CLI is a simple command-line interface to the Linode platform.

[https://github.com/linode/cli](https://github.com/linode/cli)

</comment><comment><USER6> Linode's shortest billing cycle is one month. If I use the CLI to create a linode and do something computation then delete it, am I still billed for a full month?

<comment><USER7> Linode charges monthly, but they bill daily and credit an account when a linode is cancelled. If you create a 1GB linode on February 1st they will charge you $20, if you then destroy that linode on February 10th they will credit your account with the remaining full days (17) working out at ~$12 account credit.

Also worth noting that if you deploy a linode near the end of a month they will count up the next month and bill all at once, for example if you purchased a linode on the 25th of February they would charge you for the remainder of February and March at once.

<comment><USER8> Yes, but it's kind of silly that they charge you upfront for the entire month when you might only need something for a couple of hours.

Their whole pricing needs a per-hour option, but I guess they are doing well enough off people who use their etnrei virtual machines 24x7.

<comment><USER9> You are aware that most payment processors have a per charge fee? As someone who's also into creating a PaaS I can completely understand why they charge the way they charge, I'd even say it's one of the fairest schemes in the industry. For what you want to do I suggest AWS.

<comment><USER10> Linode could handle that the same way other providers do: bill per-hour, charge per-month.

I love Linode's performance and stability, but not having per hour billing is an absolute dealbreaker.

And it's a shame, because even if they kept the prices the same, they destroy AWS on a price:performance basis.

<comment><USER9> This basically ignores my first point: Per charge transaction fees. As a small(ish) company with not much leverage for big contracts with payment processors, you'll want to have a certain minimum amount you charge to people. With your scheme, they'll still have lots of small charges. Then they have to include those charge fees, which in turn makes people complain again.

Bottom line: It's a conscious business decision to not serve customers for whom it's a problem to once pay 20 bucks or so and then draw from that credit.

Edit: Thinking about it, not even Skype works any different. Why should an IaaS?

</comment></comment></comment></comment></comment></comment><comment><USER11> Why can't they just give SSH access into a chroot'd environment, or something like that? I hate having to add more stuff to address needs which are already met by commonly used software. (SSH client)

I guess that's why I use VPS instead of Linode.

<comment><USER12> The Linode CLI is to manage the VPS node, not to manage your server directly. With Linode CLI you can resize, shutdown, boot up, hard reset, and mirror your VPS. It's basically all the controls you would have from your VPS control panel, but in a CLI.

</comment></comment><comment><USER13> Linode... something that should of died long ago after the first security breach.</comment>


University of Waterloo Students Win Facebook's Hackathon - <AUTHOR> http://velocity.uwaterloo.ca/news/facebook-hackathon <comment><USER2> For the last year I've been aware of the impact of Waterloo in tech and have conducted some research into why this might be so. Two things I've discovered:

1\. Academic staff own any IP resulting from their research, making it very attractive and easy to recruit top academics. Almost all other universities assume ownership of IP.

2\. An intern program that requires students to take an internship every other semester, enabling students to gain valuable experience within top-tier tech companies.

It would be great to hear of any other reasons for their success.

<comment><USER3> I think those are two very strong reasons. However, at the end of the day, Waterloo puts its students through the meat grinder. My nephew studies there and I am blown away by the stuff he is getting taught in first and second year.

The thing that surprised me was when he tried to apply to Silicon Valley start-ups, he got very limited response. I think part of it is that people don't realize how awesome Waterloo is.

<comment><USER4> I agree on the second part, I can get interviews with google/microsoft/facebook, etc, basically the big tech companies. But its far more difficult getting interviews from start ups in SV

<comment><USER5> Not sure what term you're in but startups - particularly the smaller 2/3 team ones, can't absorb more junior developers. But if you're in 3A and above you should be strong enough to hit the ground running.

There's also immigration issues. To get a J-1 visa the host company needs to meet certain requirements.

In any event as a Waterloo alum currently doing a YC-backed startup in SF, we'll be posting jobs in the next co-op round.

<comment><USER6> I thought Canadians could work on a TN visa in the US with minimal complications.

<comment><USER7> To get a TN Visa you need 3 years work experience in the relavent field (there's a list) and it's on the whim of the agent you face.

1.5 years for me to go~ (currently in TO).

<comment><USER8> > To get a TN Visa you need 3 years work experience in the relavent field > (there's a list)

This is completely inaccurate unless you mean without a post-secondary degree. Tons of new grads head south on a TN straight after graduating, even if they didn't do co-op.

<comment><USER9> True, but if you're looking at those co-op/internship terms, the best you'll get is a J1 because you don't have your post-secondary degree yet.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> My understanding is that Waterloo has been a Microsoft and RIM software talent poaching ground for over a decade. The Waterloo Engineering and CS programs are known for their extremely high quality and rigour.

The recent string of higher profile alumni successes reinforces this reputation and serves as a beacon for Canadian high-school graduate intake. Now if only they would do something about the concrete jungle they call their campus :)

<comment><USER11> Waterloo was a MSFT poaching ground when I was an undergrad in 1992... well before RIM was even on the scene. Macleans magazine has consistently ranked it the best engineering school in Canada. They've been winning ACM programming contests since the math building had the dinosaur pit (<http://ist.uwaterloo.ca/cs/redroom/>).

As for campus being ugly... hey, you can't have everything.

<comment><USER12> It has now become a Google/FB/MSFT/Amazon poaching ground.

</comment></comment></comment><comment><USER13> Waterloo seems to be killing it this week (BufferBox acquisition, virtual brain, Facebook Hackathon)

<comment><USER14> Maybe I'm getting old (closing on 30) and nostalgic but the new generation of Waterloo students are making me proud and seem to be going further than my classes.

Although, I'm also gaining a little pride myself. I did was a research assistant at CTN and built the first UI tool for building the brain model. And I just joined Facebook and had the Waterloo students win the hackathon next door on my second week :)

</comment></comment><comment><USER15> If you are interested in browsing the source for our hack it is on GitHub: <https://github.com/sgreenlay/PYLONS>.

</comment><comment><USER16> Congrats on the win, and cool publicity... but how can I get in there at 12k$ a year, plus a rent and food and other expenses. How much will it pay off, versus my education at the University of Ottawa?

Given that I learn much more by myself, reading reference books, taking online courses with coursera, doing projects by myself. Is there any return on investment that I could expect from an education there, instead of my current university?

<comment><USER17> Waterloo has a co-op program where you switch off every four months between working and school. The co-ops can be very well compensated, so many students graduate with little or no student debt.

<comment><USER18> Came here to say this. I finished w/ $40k in the bank but the experiences gave me so much more.

<comment><USER19> How many years did it take for you to earn your B.S. with all the constant co- oping?

<comment><USER20> An example schedule for an Engineering student is:

Year 1: School, coop, School

Year 2: coop, School, coop

Year 3: School, coop, School

Year 4: coop, School, coop

Year 5: School, school.

4 years and 8 months. Order may vary slightly.

</comment></comment></comment></comment></comment><comment><USER21> As someone interested in recruiting from Waterloo, but not from the school/area - where are the best places to make job postings / network?

<comment><USER22> Well if your looking to hire Co-ops from the university here is the link <https://uwaterloo.ca/jobmine/employers>

<comment><USER9> Be wary the CECA has been known to give smaller employers sub-optimal advice. You'll want to get someone who understands the process to help you through it. If top students don't understand the benefits of working for your particular organization it's possible that they'll pick a safe job at a Google or Microsoft over you, and you'll get a mediocre student (or worse, none at all) after the first round of matching.

<comment><USER22> This is very true. The system is not optimal from an employer or employee standpoint. But it is especially difficult if you are not a company with a recognized name on campus. As a student it is difficult to weed through a couple thousand job descriptions accurately.

<comment><USER23> Exactly, I'm a student at waterloo, and there were over 900 job postings for Software/Computer engineers. It's pretty much impossible for a student to read through every one, so you have to make sure yours stands out.

</comment></comment></comment></comment></comment><comment><USER24> "Show me the gender distribution of my friends" - 178.72% Male

<comment><USER15> 178 is the number, and 72 is the percentage. Unfortunately the comma is easy to mistake for a period.

<comment><USER9> Sounds like an i18n nightmare waiting to happen; in some locales, the comma is the period and vice versa.

</comment></comment></comment><comment> j-b I was just in Waterloo at a database technical conference and most of the folks I worked with were very smart people with BMaths from UW. Google, Sybase , SAP, Oracle, Intel, etc.. all have offices to snap up the technical talent there.

</comment><comment><USER25> Winning for Waterloo hackathon or global hackathon? it's not clear in the article

<comment><USER26> Facebook's global university hackathon.

</comment></comment><comment><USER4> Actually facebook has been recruiting a lot too, they had a meetup for facebook interviewees the day before the official interviews, there were 100+ students there, I was really suprised

</comment><comment><AUTHOR> Scott talked about the win on CTV National News tonight, you can watch it here! [http://www.ctvnews.ca/video?clipId=820148&playlistId=1.1...](http://www.ctvnews.ca/video?clipId=820148&playlistId=1.1066270&binId=1.811536)

</comment><comment><USER27> Congrats Jinny, Scott and Fravic!!

<comment><USER28> Hello Melvin.

</comment></comment><comment><USER29> In the US, there is Drexel University which also has an awesome co-op program. Many students here had worked in employers like Fb, Google, MS, Amazon, ... and then have fulltime offers.

So if you want to stay in the US and have the co-op, go to Drexel.

</comment><comment><USER30> U waterloo:Expect my graduate school application in a few weeks time

</comment><comment><USER31> Are there details about how others did etc.?

Regards, Bitter UBC grad...

<comment><USER32> UIUC was 2nd. I was on this team. We did a Street Fighter browser-based game controlled by webcam. You can play against friends over the internet in realtime.

MIT was 3rd with a chrome extension called "minimap" that allows you to scroll in your browser with smartphone or webcam. Also allows you to have a "minimap" next to your scrollbar that shows a preview of the entire webpage

CMU got an honorable mention for a real time strategy (?) game called "The Hackers" that is based on managing a team for a hackathon.

UBC was there, but I've forgotten what their hack was. Sorry! Was really tired and nervous during demos!

Facebook showed me the time of my life. Eager to apply for a job there...

<comment><USER33> UBC made a "pager" for facebook using a LCD display and controlled by an arduino. We built the hardware, case, and were able to push "pokes", wall posts, and messages to the pager. From the pager, we had two buttons that would push back to either dismiss the message or "like"/poke back.

</comment></comment></comment><comment><USER34> Good job Waterloo. Water Water Water - Loo Loo Loo!

<comment><USER4> it's Water Water Water - Wu Wu Wu

<comment><USER35> Proud to be a UW student!

</comment></comment></comment><comment><USER36> What does this have to do with ninjas or quotes?

<comment><USER37> icewater: Ninjaquote was our winning project for the regional Waterloo Hackathon. It was a name chosen at the (nearly) last minute, when the domain with the name that we originally wanted wasn't available. :) -- Jinny

</comment></comment><comment><USER38> as a Waterloo grad this year, gratz!</comment>


Ask HN: Is there software way to disable Nvidia Graphics card? - <AUTHOR> I don't turn off my PC because of Plex and UniFi Network Controller Software. So most of the time my GTX 1080 is simply wasting power. <comment><USER2> It likely already goes into a very low power state.</comment>


Breaking the x86 Instruction Set: how to find undocumented x86 instructions - old-gregg https://www.youtube.com/watch?v=KrksBdWcZgQ <comment><AUTHOR> In case anyone is wondering what the "hidden instructions" he found are, many of them are documented elsewhere:

        0f0d/0-7 were all prefetch instructions, but probably behave like NOPs if not supported
        0f18/0-7 are HINT_NOPs
        0f{1a-1f} are also HINT_NOPs
        0fae is a bunch of assorted instructions (FXSAVE, FXRSTOR, LDMXCSR, etc.)
        dbe0 is FNENI
        dbe1 is FNDISI
        df{c0-c7} are x87 ops
        f1 is ICEBP
        c0,c1,d0,d1,d2,d3 groups have a few aliases (SAL/SHL)
        f6/1 and f/1 are aliases of f6/0 and f7/0
        0f0f are 3DNow instructions and it wouldn't surprise me if there were many aliases there
        0fa7 was briefly used for the IBTS instruction on the very earliest 386s and then CMPXCHG for the very earliest 486s
            (http://datasheets.chipdb.org/Intel/x86/486/Intel486.htm)
            perhaps VIA continued to use it for a CMPXCHG alias

IMHO the 1-byte opcode map has basically been completely explored and documented, perhaps with the exception of some of the x87 stuff. It's the 2-byte (0F xx) ones where things start to get really interesting.

<comment><USER2> I think this is a bit of an oversimplification. I'm seeing some of these appear on sandpile.org, it does look like a lot of them are vestigial/legacy things. But, I think the implied meaning of "documented" for the presentation is "documented by the manufacturer". Just because some of these have been reverse engineered by others doesn't really make them "documented", at least, not in the spirit of what the project is trying to find. He also points out that some of these (0f0d, 0f18, etc) were added to the documentation in the last year - the concern is that they were hidden for years and years before that. 0f0f and 0fa7 look like the most interesting to me - 0f0f is probably 3Dnow, but I can't find any information on the gaps in the 3Dnow set; he says in the presentation 0fa7 is the via padlock instructions, I can't find any references on the gaps in that range either.

<comment><AUTHOR> [http://linux.via.com.tw/support/beginDownload.action?eleid=1...](http://linux.via.com.tw/support/beginDownload.action?eleid=181&fid=261)

Interesting. 0fa7xx is indeed where the VIA Padlock instructions live, but the last byte is probably being partially decoded.

</comment></comment></comment><comment><USER3> "If your processor has an errata in it and you update the documentation to allow that errata, is it still an errata? I think it is, but apparently it's allowed in the newest version of the AMD manuals" [37:48]

I don't understand why more vendors don't do this (if anyone wants to comment to this, I would be interested to get another opinion.) While my experience is admittedly limited to obscure chips that require NDAs for access to the specs, I was always a little annoyed that almost every time there was not even a reference to the errata documentation that the vendor provided when a new version of the spec would come out.

Now in AMD's case, I would argue that they should be more clear that it's an errata, and mention that the updated spec differed from previous versions (which it alluded to by saying "This behavior is model-dependent".) Ultimately, the spec is THE document on how a user should expect the chip to behave. So sue me if I am blurring the lines between an errata and a mistake in the spec, but I just want my documentation to tell me what the chip does without having to refer to a dozen other secondary documents dang it!

<comment><AUTHOR> For that specific case (pagefault vs undefined instruction) I can see why the behaviour difference from the spec, since it's highly dependent on how the processor decodes each instruction; others have noticed similar things:

[https://www.symantec.com/connect/blogs/x86-fetch-decode- anom...](https://www.symantec.com/connect/blogs/x86-fetch-decode-anomalies)

</comment></comment><comment><USER4> Ah, this is the talk behind the sandsifter tool that was making its round a few weeks back. Nice to get the deeper picture.

github: [https://github.com/xoreaxeaxeax/sandsifter](https://github.com/xoreaxeaxeax/sandsifter) white paper: [https://github.com/xoreaxeaxeax/sandsifter/blob/master/refer...](https://github.com/xoreaxeaxeax/sandsifter/blob/master/references/domas_breaking_the_x86_isa_wp.pdf)

<comment><USER5> Sandsifter: find undocumented instructions and bugs on x86 CPU | [https://news.ycombinator.com/item?id=14872418](https://news.ycombinator.com/item?id=14872418) (91 comments, July 2017)

</comment></comment><comment><USER6> heh, by the same guy who made that compiler that translates C into only mov instructions: [https://github.com/xoreaxeaxeax/movfuscator](https://github.com/xoreaxeaxeax/movfuscator)

</comment><comment><USER7> Obvious question: Are there programs with these instructions in the wild?

<comment><USER8> Yes.

This kind of technique, and the exploitation of minor CPU errata, can be used to help differentiate processor models and steppings.

That in turn allows a currently widespread DRM system to download personalised portions of object code that rely on properties specific to the licensed hardware in order to execute properly, in an attempt to counter debugging, emulation and transfer - continuing a tradition practised in copy protection techniques since at least the 6502, maybe even earlier.

<comment><USER9> Is there a term for that, similar to "security by obscurity"?

<comment> Open-Sourcery how does "Identification by exploitation" sound.

</comment></comment></comment></comment><comment><USER10> Can't wait to see what 2017's f00f bug equivalent is after its released. Maybe I should just run his tunneling programs and not wait for the disclosure.

<comment><USER11> He did seem to indicate that was on an esoteric processor though so maybe it's not on an Intel/AMD chip.

I don't know much about CPU internals, but would it actually be possible to 'patch' that through updated microcode?

It's such a clever program, will be intrigued to see what else it can find!

</comment></comment><comment><USER12> To summarize; The guy built a random cpu instruction generator for x86. An instruction can be at most 15bytes long. So, the solution space is quite huge. He cut the solution space to 100k by generating them with DFS style fashion and validating them through cpu exceptions and flags. In the end, there's kind of map reduce style distiller to analyse hidden and valid instructions.

Nice job though

</comment><comment><USER13> What's the bet the really secret instructions are hidden behind special conditional decode logic? I.e. the cpu wont even ask for the next byte if some register value is not set, possibly a secret register that first needs to be set via some other hidden instruction. Make that a sequence of 3 hidden instructions combined with arbitrary register and immediate values, and you won't get close to identifying them in a billion years.

I mean if you worked for Intel and your manager said "make me a really secret instruction" would your best response be "lets just not document it and hopes noone notices"?

What I would give to read the full microcode of the latest Intel processor. I am guessing it is stored in a vault with the real nuclear codes, Alien cadavers and the Holy Grail.

<comment><USER14> You don't really need even that.

You just need a set of magic register values, like how CPUID [0] instruction already works.

[0]: [http://www.sandpile.org/x86/cpuid.htm](http://www.sandpile.org/x86/cpuid.htm)

<comment><USER15> Yup, this was done in this years USENIX with AMD microcode. See the exploits that check for magic register values at [0] and the paper at [1].

[0]: [https://github.com/RUB- SysSec/Microcode/tree/master/updates](https://github.com/RUB- SysSec/Microcode/tree/master/updates)

[1]: [http://syssec.rub.de/research/publications/microcode- reversi...](http://syssec.rub.de/research/publications/microcode-reversing/)</comment></comment></comment>


How to Get a Real Job After Magic (2018) - <AUTHOR> <comment><USER2> I believe the poster meant to link to this:

[https://www.channelfireball.com/all-strategy/articles/how- to...](https://www.channelfireball.com/all-strategy/articles/how-to-get-a- real-job-after-magic/)

</comment><comment><USER3> Warning: The author wasn't a magician but played a game called Magic. (I wouldn't've clicked had I known that.)

</comment><comment><USER4> Mr. David Tango of Syfy's Ghost Hunters, is that you?

</comment><comment> non-entity Was there supposed to be link?

</comment><comment><USER5> Being a magician would definately bump you up the list if I was hiring.</comment>


State of the Haskell ecosystem - <AUTHOR> https://github.com/Gabriel439/post-rfc/blob/master/sotu.md <comment><USER3> For ML and Data Science I'd say very immature. HLearn does interesting things but is far from providing a workable ML or Data Science workflow. We need solid, unquestionable Matrix and Vector libs upon which the ~50 bread and butter algorithms cans be solidly implemented. Then Diagrams needs super tight integration and connections to "big data" systems can be built. Frames is moving in the right direction type-wise but it'd be really nice to get HLists (or even vinyl?) in as representations which can be transparently backed by the aforementioned common matrix libs. Lenses could probably help a lot here and I think Anthony is going in that direction exactly.

Neatly, the GPU story is actually quite strong and could be integrated with this hypothetical ML and Data Science platform I'm describing quite nicely. That'd be a not small boost to its power.

<comment><USER4> What's the difference between ML and data science? ML has more programming?

And what's the difference between data science and statistics? Statisticians try to come up with new mathematics, while data scientists just try to come up with ways to apply that maths?

<comment><USER3> I'll take a brief stab since I think there are important differences but this is also holy war territory so YMMV.

ML tends to be more concerned with scale and computational efficiency as the algorithms used are often (a) heavyweight and (b) less human interpretable. Success is primarily measured objectively but via proxy measures like prediction accuracy. It may require data science efforts behind the scenes in order to succeed.

Data Science tends to be more concerned with interpretation than scale or repetition. It sits somewhere between analyst, sataistician, and journalist. It's also a much more interactive workflow often involving a great deal or successive, simple models and lots of exploratory visualization. Measures of success include discovery of human-relatable inferences from data, substantiation or dismissal of human-relevant experimental hypotheses, and success in communication of those ideas.

Statistics is a field of study of some of the most important mathematical foundations of each of these roles. A statisicians skill is more generalized but also more abstract. A statistician who learns CS and journalism could easily head into either other field.

</comment></comment></comment><comment><USER5> Thanks for this. A couple of points:

1: I'd have rated Haskell's concurrency as "best in class" thanks to its STM implementation. Other languages do have STM, but AFIAK only Haskell provides both efficiency and safety thanks to its type system. Other languages have to choose between tracking every variable (slow) and letting the programmer declare which values are going to be rewound if the transaction aborts (unsafe).

2: Your section on IDEs does not consider Leksah. I've just come back to this after a long time on Eclipse and Atom, and its now a mature IDE specialized for Haskell. You might consider bumping Haskell to "mature" based on this.

<comment><USER6> I agree on concurrency. It is best in class and also offers a lot of choice (which some other popular languages like JS and Go are not providing).

When it comes to IDEs I do think immature would also be my choice. There is a lot of movement on this front so I have hopes this may change soon. My main points are: 7.10 is out for a while but most editor integrations have/had (until recently) some major issues with it. Also Stack is bocoming quite popular, yet most editor integrations are not Stack-aware. Finally the editor integrations are not much plug-and-play. As said, this is changing rapidly with some necessary fixes to GHC/cabal made and projects like stack-ide and ghci-ng.

<comment><USER7> > When it comes to IDEs I do think immature would also be my choice.

If you have not already logged any issues, can you please list the top few things that bugged you about Leksah here and I will make sure they get added to the issue tracker? Even if they are already there it will help us prioritise to know what your pain points were.

Thanks

</comment></comment></comment><comment><USER8> For me, it was (and still is) terribly hard to find libraries that do what I want. Although Hackage has a large database, it's quite confusing and very hard to figure out how a library actually works.

A few years ago, I tried to parse HTML files for a very small thing that I wanted to do and I just couldn't find or understand whether there's actually something out there that I could use. So, instead, I ended up learning Parsec and writing my own crappy parser...

I really don't think that's what it should be like. And maybe it's just my own fault. If not, there should be thousands out there who start their Haskell journey with such a frustrating experience. There's a deep and dark abyss in which beginners fall after an initial tutorial.

I've never had a similar experience with any other language. The upside, of course, is that Haskell is the most beautiful language I know.

<comment><AUTHOR> I think this is because the abstractions are so abstract. When functionality is glued together with very general combinators and operators there's not really much to grab hold of unless you understand the abstractions.

<comment><USER8> Well said. What always saved me is that brave and devoted individuals wrote tutorials and published them to help me peel away the layers of abstractions. There's no way I could have done that on my own.

<comment><AUTHOR> Which is why I view haskell's community as one of its main, less tangible qualities. :-)

 _edit_ clarity - Apparently my brain is too Haskelled today for writing English

</comment></comment></comment></comment><comment><USER9> One point is missing: the state of debugging.

Current state: [https://wiki.haskell.org/Debugging](https://wiki.haskell.org/Debugging)

For comparison (F# and Ocaml):

      https://msdn.microsoft.com/en-us/library/ee241127.aspx
      http://oqamldebug.forge.ocamlcore.org/

</comment><comment><USER10> This is a great and a balanced list. I have definitely enjoyed some time spent programming in Haskell.

One frustration that I have had while dabbling in Haskell is that some libraries in Hackage assume a GNU/Linux kind of system. For example, I was reading Simon Marlow's book and while trying to compile the examples in a Windows machine, a particular library could not be installed because of the lack of 'configure' (GNU autotools? I only use Windows nowadays due to professional reasons and have not used GNU/Linux last 11 years). I hope that library authors do not make such assumptions unless it really necessary.

Is there an opportunity for a company to create an implementation of Haskell which fixes some commonly mentioned problems (e.g. stop the world GC) - <USER2> proprietary JVM vendors? Is it even technically feasible? Of course, such a hypothetical company would also need to spend a lot of time writing useful libraries.

<comment><USER11> I'm a Haskell Windows user (and an Idris developer), and I have little trouble installing most things (except those directly targeted at Linux). That's not because I'm awesome, but because there's a trick to it. The trick is to install msys2 ([https://msys2.github.io](https://msys2.github.io)), and do the installs from there. Set up its libs and include as extra dirs in Cabal's config. When you need some lib or build tool look for it with pacman -Ss and install it. To start with installing make and autoconf helps you over the configure hurdle.

And if you hit Cabal hell now and then, that happens to everybody so it's probably not because you're on Windows, just make a sandbox and see if it works there.

<comment><USER11> My Idris installation instructions: [https://github.com/idris-lang/Idris- dev/wiki/Idris-on-Window...](https://github.com/idris-lang/Idris- dev/wiki/Idris-on-Windows)

It's an example of pulling down build tools and libs (well, a lib) with msys2.

</comment></comment></comment><comment><USER12> Although hinted at in "Mobile apps" and "Package management", I think you might want to add "Deployment" to your list of criteria for a language. It is often overlooked with languages and frameworks, but the ability and method of deploying code (particularly with a running system) should not be ignored.

</comment><comment><USER13> > Haskell is an amazing language for writing your own compiler. If you are > writing a compiler in another language you should genuinely consider > switching.

Uhm, no, thank you, but no. Haskell is poorly equipped for implementing compilers, because of its lack of unrestricted compile-time metaprogramming.

I'm spoiled. This is what I want from a language for implementing compilers:

1) Cheap, boilerplate-free definition for chains of slightly different ASTs and IRs. Haskell and ML are notoriously weak in this area (see the "Expression Problem" thing)

2) Boilerplate-free generation of various (potentially complex) visitors for these ASTs and IRs. For Haskell, Scrap Your Boilerplate library is the closest thing to what I want, but it is still far too clumsy.

3) I need _efficient_ embedded Prolog and Datalog (yes, both, the latter allows some cool optimisations not possible for the former). Not feasible without compile-time metaprogramming. Both are important for simplifying compiler construction.

4) Parsing is not very important. But yet, it is necessary. The best Haskell got on offer is Parsec. Sorry, not good enough for my requirements.

<comment><USER14> So "Haskell is poorly equipped for implementing compilers" because it doesn't fit your bizarro requirements, including "efficient embedded Prolog and Datalog"...

<comment><USER13> Haskell is poorly equipped for implementing compilers because writing compilers in Haskell requires tons of boilerplate, which is not needed in the languages that are a much better fit for this task. Kinda obvious from a definition of what "poorly equipped" means.

And why do you call these basic requirements bizarre? For example, something like a region inference is just a few lines of Prolog vs. dozens or even hundreds of lines of code in Haskell.

<comment><USER14> > _Haskell is poorly equipped for implementing compilers because writing > compilers in Haskell requires tons of boilerplate, which is not needed in > the languages that are a much better fit for this task._

And yet your "much better languages" are even more niche compared to Haskell, and no major programming language has been written in them.

So, it's basically "Haskell is poorly equipment compared to my impossible standards, as implemented by this hodge-podge of Scheme based tools that I alone ever used together for compiler implementation".

> _And why do you call these basic requirements bizarre? For example, > something like a region inference is just a few lines of Prolog vs. dozens > or even hundreds of lines of code in Haskell._

Because no known programming language resorts to "a few lines of Prolog" to save a few tens of lines for "region inference"?

<comment><USER13> > are even more niche

Exactly. Compilers construction is a very specific problem domain, which requires specially tailored DSLs, not a "general purpose" language. Haskell is a way too general purpose for this task.

> and no major programming language has been written in them.

C is even more unsuitable for this than Haskell, and yet most of the compilers are written in C. Technical superiority does not count at all in choosing an implementation platform.

> Because no known programming language resorts to "a few lines of Prolog" to > save a few tens of lines for "region inference"?

JFYI, a prototype implementation of SSA for GCC was written in Prolog (see the Sebastian Pop works [1]). If embedding Prolog in C was technically feasible, it would have stayed this way. Also, to see how much Prolog rocks, check out Harlan [2]

In order to avoid unnecessary flame war: I give no crap to any popularity based arguments. Got any _technical_ , well-grounded, rational arguments? Go on, I'd be delighted to comment. Otherwise I'm not interested. And, btw., you're clutching to just one out of four of my points against Haskell. Nothing to say about the other three?

[1] [http://www.cri.ensmp.fr/classement/doc/A-381.pdf](http://www.cri.ensmp.fr/classement/doc/A-381.pdf)

[2] [https://github.com/eholk/harlan](https://github.com/eholk/harlan)

<comment><USER14> > _C is even more unsuitable for this than Haskell, and yet most of the > compilers are written in C. Technical superiority does not count at all in > choosing an implementation platform._

Or maybe technical superiority is a more varied thing than what you consider (merely a language's features and "expression" capabilities), and includes tooling, portability, speed, direct access to hardware, existing codebase to work upon and lots of other parameters, for which C was king or very near the top for many decades...

> _In order to avoid unnecessary flame war: I give no crap to any popularity > based arguments._

And from my side: I don't give a crap for "technical arguments" that focus only on a very narrow area of technical benefits ignoring lots of others.

Even "familiarity of the team with a language" is a technical argument (in the sense that it speaks to the capability of a teams to practically use something).

I also don't think that "popularity" is just fluff. It might not be a 100% solid proof, but it does point to real, battle proven, results (as oposed to vapour-ware and hand-waving about superiority).

In the end, history and actual results are the only criteria. That's being pragmatic and empiricist -- as opposed to mere beliefs that don't pan out in practice.

<comment><USER13> The features I am talking about are very platform-agnostic. The only requirement for implementing them is a compile-time metaprogramming, which is trivial to add to any language, including C.

The only explanation for not using this approach is a plain ignorance. Majority of people have no understanding of compilers at all. And yet they are writing compilers. In C or Haskell.

And, btw., teams that cannot learn a tiny DSL in an hour (or write this DSL in a week) should not be allowed to write compilers. It's kinda obvious.

<comment><USER14> > _The only explanation for not using this approach is a plain ignorance. > Majority of people have no understanding of compilers at all. And yet they > are writing compilers. In C or Haskell._

That includes people like Lars Bak, Martin Odersky, Anders Hejlsberg, Simon Peyton Jones, etc? I wonder where the burden of proof should be placed in these kind of arrogant arguments -- as if "compile-time metaprogramming" is some magic bullet for compiler design...

<comment><USER13> I am glad you did not list anyone related to GCC and LLVM, because both rely on the static DSLs (and code generation) heavily.

As for the rest - yes, compiler construction is not their main research topic. They can all be great language designers, but their approach to compiler construction is needlessly overcomplicated.

A view of a compiler as a chain of stupidly trivial passes, ideally expressed as term rewriting, is not very common among the researchers, but so far it yields the best results.

<comment><USER14> > _They can all be great language designers, but their approach to compiler > construction is needlessly overcomplicated._

Actually Lars Bark and team are not "language designers". Smalltalk (Strongtalk), Java (Hotspot), Javascript (V8), all have been designed as languages by other people.

They are world reknowed experts in compiler design.

<comment><USER13> JIT is a totally different beast from a simple pipeline compiler. You should have known better. Anyway, you evidently do not know what you're talking about. Consider you trolling unless you can show _your_ compiler code.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> I think the rating difference between sections "application domains" and "common programming" illustrates clearly what is known as "academia language", i.e. advanced, mature features and lack of real application stories and libraries.

</comment><comment> the-owlery I've avoided Haskell, primarily because:

* hearing how difficult it is to learn, and

* recalling C++ & Java, not crazy about the idea of going back to having to specify types for everything.

But Haskell is enticing to me:

* bindings to C-libraries in general (been meaning to try GTK, and wanted to use SQLite for a small project)

* apps start-up quickly

* compiled (good performance)

What's the Haskell community like?

Is Haskell a practical language/ecosystem, or more academic-focused?

<comment><USER16> > * hearing how difficult it is to learn, and

I thought it was pretty straight forward coming from Erlang.

The biggest thing for me was practice thinking in recursion.

edit: Erlang and Haskell was just side hobby. I didn't do anything major with them. But I thought the languages were small enough, Haskell has such a clean looking syntax.

Oh, I think you're trying to say the threshold of being good with haskell is much higher? Cause I see that argument quite and bit.

<comment> the-owlery > > * hearing how difficult it is to learn, and

> I thought it was pretty straight forward coming from Erlang.

> The biggest thing for me was practice thinking in recursion.

I use Clojure, generally like functional programming, and am fine using recursion.

> Haskell has such a clean looking syntax.

I have gotten fond of Clojure's Lisp-like syntax.

> Oh, I think you're trying to say the threshold of being good with haskell is > much higher? Cause I see that argument quite and bit.

Not sure -- haven't spent any time with Haskell. Never tried Erlang either. Do you think it generally takes longer to become productive with Haskell than with other functional programming languages?

</comment></comment></comment><comment><USER17> Trying to get a Haskell application deployed to the web was an exercise in frustration. Somehow my resolution for its important package management and binaries has become profoundly fucked up as well.

<comment><USER18> Really? Deployment has always been a breeze for me. Build on a vm, scp the binary up to my server, profit.</comment></comment>


The Myth of Mummy Wheat (2017) - <AUTHOR> https://olh.openlibhums.org/articles/10.16995/olh.83/ <comment><USER2> People now study the Egyptologists themselves as they had once studied the Ancient Egyptians.

</comment><comment><USER3> tl;dr: A wonderfully thorough exploration of the origins, development, and zombie-like re-animation of a popular myth fed by wild hope and ardent hucksterism through centuries of careful demolition.</comment>


Gore Vidal has died - <AUTHOR> http://www.telegraph.co.uk/news/obituaries/9443260/Gore-Vidal.html

<comment><USER2> One of America's finest intellectuals. He will be missed.</comment>


Comcast gets big tax break that was designed for Google Fiber - <AUTHOR> http://arstechnica.com/business/2016/03/oregon-lawmakers-accidentally-gave-comcast-a-big-tax-break/ <comment><USER2> Reminds me of [http://dealbreaker.com/2013/07/electricity-market-rules- were...](http://dealbreaker.com/2013/07/electricity-market-rules-were-not-a- worthy-opponent-for-jpmorgans-brainpower/)

>FERC built a terrible box, and the box had some buttons that were labeled "push here for money," and JPMorgan pushed them and got money. You can understand the category mistake very easily:

>FERC thought the box was for generating electricity at market prices but with a robust backup system to ensure reliable supply, and

>JPMorgan thought the box was for dispensing money.

>It's a perfectly understandable mistake to make if you have spent your career building and operating boxes that dispense money, as JPMorgan global commodities head Blythe Masters has. What else could the box be for?

<comment><USER3> That was a really interesting read, but I'm not familiar with a lot of the terminology so it was a bit hard to follow. Any chance you might be able to explain a bit more of what was happening there?

I get that they found a loophole that rewarded them for producing more of the less efficient energy, but I'm a bit unclear on what the actual rules were, the roles of the various players in this, and how the transactions were taking place.

<comment><USER2> The rules say that they choose the best rate that satisfies demand, then pays all accepted bids that rate.

But bids change over time, and you can't just buy one hour's energy: plants take time to "boot up" which have costs. So they pay in 3 hour increments. If your bid for time t is accepted, they pay you for t,t+1, and t+2.

JPMorgan set prices at {Good price, outrageous price, outragous price}

JPMorgan got an average of 2/3*outrageous price, which made them an obscene amount of profit.

The stupid system didn't notice.

As I understand it the players submit bids to a central computer that decides who to order from.

<comment><USER3> Thanks for clarifying. Just to make sure I'm following then--the system was essentially looking at the bid price for just the first hour, and ignoring hours two and three despite the fact that time needed to be sold in three hour commitments due to the boot up time, which let JPMorgan jack bids two and three up and have them automatically accepted since the bids for hours two and three were never considered in the bid selection logic?

If so that's one major oversight for whomever built the system. I honestly could see why JPMorgan would be going "so...you're sure these are the rules? Really? Mmmm...ok....well, if you say so." I'm sure they didn't exactly telegraph how they would abuse this, but I find it a bit hard to hold them responsible for what is essentially negligence on the behalf of whomever was in charge of designing the system logic.

<comment><USER2> There's also

>As set forth below, Enforcement has determined that, through the 12 strategies investigated here, JPMVEC violated the Commission's Anti- Manipulation Rule, 18 C.F.R. § 1c.2, by intentionally submitting bids to CAISO and MISO that falsely appeared economic to CAISO and MISO's market software but that were intended to, and in almost all cases did, lead CAISO and MISO to pay JPMVEC at rates far above market prices.

[http://ferc.gov/EventCalendar/Files/20130730080931-IN11-8-00...](http://ferc.gov/EventCalendar/Files/20130730080931-IN11-8-000.pdf)

</comment></comment></comment></comment></comment><comment><USER4> Lawmaker logic astounds me. If they wanted to spur fiber laying in Oregon, why not (wait for it) incentivize _fiber laying in Oregon_. Nah, let's just introduce a wacky indirect property tax loophole.

<comment><USER5> Another article on this actually mentions a bit more detail about the tax break, and the hilarity that ensued. They built the tax break specifically for Google, so Google would build there. Problem is... the law they wrote excluded Google.

So they had to go back and REWRITE the law, to ensure Google, the company they made the break for, qualified for it. And then they're getting upset another provider is trying to get the advantage they wrote for Google to use.

When tax laws are being written specifically for a company, our government has a problem.

Sauce: [http://www.oregonlive.com/silicon- forest/index.ssf/2016/02/o...](http://www.oregonlive.com/silicon- forest/index.ssf/2016/02/oregon_created_a_tax_break_for.html)

<comment><USER6> > When tax laws are being written specifically for a company, our government > has a problem.

The government could've pursued the alternative: build out municipal broadband, and allow anyone to provide you service (competitively) at the CO/meetup room. But that's "socialism!"

The problem is not government. The problem is apathetic, uneducated, uninvolved knee jerk voters. And voters get what that deserve for being so.

<comment><USER7> Voters just don't care as much about wired internet as people on where would like to believe. My parents contemplated getting rid of their FiOS internet and going back to cable because the latter has a better selection of indian channels. Nobody in my building subscribes to FiOS because Verizon doesn't have a TV license here. If you had a rock-solid 50 mbps LTE-A service here in the U.S. that for licensing reasons couldn't access Facebook, nobody would subscribe to it.

<comment><USER6> > Voters just don't care as much about wired internet as people on where would > like to believe.

> Nobody in my building subscribes to FiOS because Verizon doesn't have a TV > license here.

> for licensing reasons couldn't access Facebook, nobody would subscribe to > it.

And that's a damn shame. Let them eat cake.

<comment><USER8> Is it really a damn shame? I can only care about so many things. When it comes to local government I care about crime. I care about taxes. I care about overcrowding on the subway. I care about public schools.

It's hard to care about the policy details of broadband providers. My internet from Time Warner is pretty cheap, it almost never breaks, and it's plenty fast enough for Netflix to work. Why should I care much beyond that?

<comment><USER6> > It's hard to care about the policy details of broadband providers. My > internet from Time Warner is pretty cheap, it almost never breaks, and it's > plenty fast enough for Netflix to work. Why should I care much beyond that?

"I have healthcare. Why do I care about those who don't?"

<comment><USER8> That was the "it's pretty cheap" part. The cheapest service is 15 bucks a month. I don't see affordability as a huge problem.

<comment><USER6> Does Time Warner have a monopoly in your area? What service do you get for $15/month?

<comment><USER8> Honestly I don't know. Goes back to that point about not caring.

$15/mo gets you 3MBPS. $30/mo gets you 10. $35/mo gets you 50.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> Why shouldn't all service providers benefit from the tax break? Is it ethical to give a tax break that unfairly gives one corporation a competitive advantage against another?

<comment><USER10> Not sure you read the article. Comcast as expected created a new tier of service to qualify that was grossly expensive. They abused the system and the intent to spur investment in infrastructure was sidestepped.

<comment><USER11> I have a hard time seeing this as "abuse." If the people who wrote this law were so completely stupid that they didn't even specify a price requirement, well, what did they _think_ was going to happen?

What's more, $300 for 2Gbps is not bad at all. It's not super cheap like Google's offering, but it's about what Verizon charges for 500Mbps, for example.

I propose an alternate headline: "Oregon legislators attempt to spur investment, fail to think through legislation, accidentally grant tax break to incumbent."

<comment><USER12> Right, but you can't really anticipate all the ways that people might _technically_ comply with a law while eviscerating the purpose of it. So let's say they specified a minimum price. And then Comcast "complies" by offering the cheap gigabit service, but in order for it to work more than just on Tuesday and Thursday, you have to pay a huge premium.

Okay, so you say it has to be available 24/7 to comply, but then even Google can't meet that so you add another requirement. Or maybe you have to anticipate legitimate cases of hyperinflation...

At some point you have to just step back and say, "stop being a dick, that's pretty clear not what the law meant and you're just abusing it".

<comment><USER11> You may not be able to anticipate all the ways people might abuse the law, but you could at least _try_.

It's not hard to realize that if you say that a company can qualify for a tax break by offering a service, and you don't say what sort of price that offer must have, that the company might "qualify" without really offering the service by offering it at a really high price. That doesn't require being psychic, that just requires sitting down and thinking like the "enemy" for five seconds.

I agree that at some point you have to step back and say "you're just abusing this," I just think that failing to specify price requirements is way, way, _way_ before that point. And thus I can't agree with calling Comcast's behavior here "abuse." _Especially_ when their price is actually not all that unreasonable.

<comment><USER12> Fair enough, I agree with that.

</comment></comment></comment></comment></comment></comment><comment><USER13> I'm actually quite surprised to read that Comcast's offering is symmetrical: 2Gps upstream and downstream. According to [http://www.xfinity.com/multi-gig- offers](http://www.xfinity.com/multi-gig-offers): "Will this be a symmetrical 2 Gbps service? Yes it will be symmetrical: Up to 2 gig download and up to 2 gig upload speeds."

<comment><USER14> I'd be more than happy to pay for this if it was available in the Bay Area! Instead I pay, what, 1/3 the cost for 1/40 the bandwidth?

<comment><USER3> Is there any good reading on why it isn't in the Bay Area yet? I think Google and Comcast both know a large % of the population here would switch overnight. I'm assuming there's weird laws that prevent progress like most of our other issues out here.

</comment></comment></comment><comment><USER15> Corporation B has stolen the tax break the impartial government created specifically for corporation A!!!

Oh God, why is this happening!? Where is the justice for this foul crime against man and nature!?

</comment><comment><USER16> Comcast residential Gigabit service is basically the same as their Enterprise Metro-E product rather than GPON with Google Fiber, hence the higher cost/install fees. Comcast gives a 10 Gbe fiber hand off at the home.

There's no reason Comcast shouldn't benefit from it.

</comment><comment><USER17> WTF does even Google need a tax break.

We've got to stop corporate welfare in this country, it is getting carried away.

Google can certainly compete against a $300/mo monopoly.

<comment><USER18> It's to encourage Google to build their gigabit service in that area first, rather than elsewhere in the US.

<comment><USER17> If they are giving them taxpayer money, what is the savings then?

Basically everyone is funding it for the percentage of them that will actually use it.

How about telling google, we'll guarantee X $$$ of account from low income people that we'll fund, instead of just throwing them free money for nothing.

</comment></comment></comment><comment><USER19> For the life of me, and for this exact reason, I can't understand the net neutrality movement.

It's a bunch of people arguing that we have a problem and the most likely party to fix it is the government.

But this article is an example of exactly what the government does when you give them power to control things. They write in loopholes, pork, or they just flat out do a half assed job of drafting legislation. And then we see the deluge of unintended consequences

Wake up, People! The government is not here to fix your problems.

<comment><USER20> >Wake up, People! The government is not here to fix your problems.

And private firms with monopoly power aren't either.

<comment><USER19> Private firms with monopoly power never last, unless that monopoly power is augmented by the government.

The Comcast "monopoly" is in the process of falling apart, on one side from Netflix, Amazon, and Hulu and on the other side from Google fiber, 5G wireless, mesh networking, and perhaps even the Elon musk LEO satellite Internet plan.

<comment><USER21> > Private firms with monopoly power never last, unless that monopoly power is > augmented by the government.

Ma Bell was a monopoly long before the government tried to reign it in.

<comment><USER22> The government birthed the Ma Bell monopoly with the Willis Graham Act.

<comment><USER21> You're completely off your rocker.

The Willis Graham Act nullified the Kingsbury Commitment by which the government had tried to stop the unfettered expansion of Ma Bell, since it hadn't actually worked the government shifted to trying to regulate Ma Bell itself through the ICC (and the FCC a few years later).</comment></comment></comment></comment></comment></comment>


Life is Beautiful - <AUTHOR> http://www.zeldman.com/2010/05/11/life-is-beautiful/

<comment><USER2> He's moved on from 2009's year of negativity when the divorce seemed anything but a beautiful dance of protons:

<http://twitter.com/zeldman/status/1558664990> & <http://twitter.com/zeldman/status/12644932699>

And it was only six months ago when he said it's necessary to have been abandoned, betrayed and ridiculed and to have a "restless, broken heart" in order to succeed: [http://www.zeldman.com/2009/10/22/dirty-little-secret-of- suc...](http://www.zeldman.com/2009/10/22/dirty-little-secret-of-success/)

Just his own output seems to demonstrate that maybe it does take some pain to feel truly grateful for what you do have, but, sadly, I doubt most people will appreciate that until, well, they've been through the mill too.

<comment><USER3> This is the social web.

Pain, joy, suffering... all played out on our blogs, in our tweets and ripped to shreds in the comments by a legion of humans dealing with their own issues --all just as real, but not always in sync.

Life is grand--and it can suck.... and it's beautiful and so ugly.

Vote down... I forgive you.

</comment></comment><comment><USER4> I tried. I tried really hard. I really wanted to see it this way. But hey. Sorry. I can't. This is just a mockery to me. I can't stand it anymore, happy faces, banal everyday stories "what are you doing tonight? I am… blah blah!". So you are happy, you are doing fine. Great. I can't help myself. Sorry. I don't mean it, you're fine person, I am sure you are. But I hate you.

(Pardon me, HN. I don't feel good after reading this story and I am trying to help myself a little. I know it's silly. Downote this as much as you like, it's ok, I don't mind it, I just wanted to write this. Sorry.)

<comment><USER5> There are seven billion people on this planet and finite resources. If want you to stay happy long term you might want to lower your expectations a bit.

<comment><USER6> He didn't even say what his expectations are? There are a lot of reasons why somebody might be unhappy. "Don't worry, be happy" is not a magic cure to everything.

</comment></comment></comment><comment><USER7> As the father of a [teething] toddler [with a chest cold] and someone who has to travel with increasing frequency, I completely understand how Jeff felt last night. I'm not sure how he drew a connection between the awesomeness of family and the beautiful proton dance at the office, but if the point was to reemphasize the importance of perspective, it was a good read.

This (posted on HN a few weeks ago), is quite a bit more coherent, though: [http://patterico.com/2006/12/03/putting-things-in- perspectiv...](http://patterico.com/2006/12/03/putting-things-in-perspective/)

</comment><comment><USER8> I love this bit:

"Dad, there are poopy turds on the floor," my daughter said.

"I know, I'll clean them in the morning."

"Dad, there are poopy turds on the floor."

"I'll go clean them," I said.

it reminds me of the Louis Kahn quote:

"And if you think of Brick, for instance, and you say to Brick, "What do you want Brick?" And Brick says to you "I like an Arch." And if you say to Brick "Look, arches are expensive, and I can use a concrete lentil over you. What do you think of that?" "Brick?" Brick says: "... I like an Arch"

Kids (and bricks) have a way of getting you to do the right thing.

<comment><USER9> Sorry to nit-pick, but I think you meant lintel, not lentil. Lentil is the bean-like thing.

</comment></comment><comment><USER10> Is it just me or does it seem cruel to keep this dog alive. If it is having seizures on a fairly routine basis that cause shrieks that "testify to his terror and pain." The more humane thing at this point would be to let this dog go. It's way harder for you then it will be for the animal and at some point is just being selfish.

<comment><USER11> Having been present at my own dog being put to sleep, I can say being put to sleep can be pretty awful for the animal, too. My dog had terminal cancer, and was clearly suffering, but given the choice, he would have chosen to live. He certainly struggled to live as he was dying.

I don't profess to know what the right thing to do in these situations is, and I am not saying that you are wrong, just that it is not so clear cut as that. Especially if the dog is still having good days (which the essay does not say one way or the other).

<comment><USER5> _given the choice, he would have chosen to live_

How would you know something like that?

<comment><USER12> This will not be popular, but people who own animals often project their own feelings onto these animals.

I too would feel far to guilty keeping that poor animal alive, for my own enjoyment, while he suffered so much. This is not a feel good story to me.

</comment></comment></comment></comment><comment><USER13> _Domestic animals give love freely to the least deserving, but their lives are short and their ends are often brutal. And it's worth it. It is all worth it. Every day, even a sad day blurred by headaches and filled with business meetings, is magical and infinite._

I know this is hn, but thanks for the great thoughts.

This is the first time I have talked about this...

On October 8, 1991, we found a box on our front porch containing a kitten and a note, "Please take care of me." We named her Sarah.

Sarah was a cat who acted like a dog. Every time I came home, she came running to the car, screaming for me the whole way. She sat on my lap every single day as I wrote thousands of lines of code. She was my best friend and companion for years, longer than any human.

This past February, Sarah had started walking into walls. My vet thought she was going blind, a different reason for each eye. We started treatment immediately. She didn't sit with me when I worked anymore.

Then on March 8, 2010, I was in the middle of an intense piece of work and took my eye off her for 5 minutes. She walked off the balcony and fell to the driveway below. Her injuries were too much; she had to be put down.

I was surprised at how I reacted, inconsolable and unable to function for about a week. I sat at my terminal, but for the first time in my life, no code came out.

OP was right. Our companions can be magical and mystical. And no matter how much it hurt, it was definitely worth it.

The code is flowing again like it did for years with Sarah on my lap. Except now, it's her urn beside me, between my laptop and my monitor. Tonight was the first time I smiled about it. Thank you, OP.

<comment><USER14> If you haven't already, get another cat straight away. The value a pet adds to your life is unbelievable and there is a tendency (just going from personal observation) for people who do not replace a pet soon after it has died to simply not get another one at all.

My dog died on March 30 and I had a new puppy by April 21, despite the inevitable feelings of guilt from doing it so soon.

Being a puppy he is a real PITA and lots of work but his presence has given me a real pick-up over the last few weeks.

</comment></comment><comment><USER15> "Feeling gratitude and not expressing it is like wrapping a present and not giving it." --William Arthur Ward

Thank You for giving me that present.

</comment><comment><USER16> Yes, yes. Lucky man praises luck.

</comment><comment><USER17> Well done.. even more powerful because this isn't typical fare on this website. If read on a personal development website, it would read like more content fodder. Read here, it reads like amazing.

</comment><comment><USER18> I'm sorry to rain on that parade, but that last paragraph is really glued on there. I don't disagree with the sentiment, but that exposition went straight in to a brick wall.

<comment><USER15> "Where there are no oxen, the manger is clean, but abundant crops come by the strength of the ox." Proverbs 14:4

</comment></comment><comment><USER19> Fluff ? On my HN ?

<comment><USER5> It's more likely than you think

</comment></comment><comment><USER20> My first undeniable indication that HN has "jumped the shark." But I'm relatively new around here. Maybe I just didn't notice the rot before.

<comment><USER21> The adults stepped away for a moment, they will be back momentarily to mop up this mess. At least that's what I'm telling myself...</comment></comment>