Facebook is what happens to the Web when you hit it with the stupid stick - <AUTHOR> http://whatever.scalzi.com/2011/01/19/and-now-for-no-particular-reason-a-rant-about-facebook/

<comment><USER2> _A mail system that doesn't have a Bcc function doesn't belong in the 21st Century._

This reminds me of a comment that we almost always get on HN when Facebook comes up, and its almost always right: it's not for you. If you want Bcc, it's not for you. The millions of people who are younger than you don't think to CC, let alone BCC. They want to communicate, and they want to do it now, and email is just that formal thing Dad uses. That's their terms, and Facebook gives it to them.

The author also discounts Facebook as being some sort of Neo-AOL. It is that, but where AOL faltered was being a completely walled garden. Facebook as a development platform, and, perhaps more importantly, an online identity to all sorts of other sites, makes Facebook use even more in-grained. I would love to see some stats from sites that allow Facebook Connect on how much their user registration went up. Facebook offers a portal, but also a wider identity, and they do it well.

If Facebook isn't for you, then that's that. But it doesn't mean what they're doing is wrong.

<comment><USER3> I haven't used Bcc many times but generally Facebook messages seem all phony to me. It doesn't seem to be a real conversation; I don't "own" the messages the same way I do when I use a real email program. Even gmail offers me tools to work with the messages themselves: on Facebook there's very little I can do with the messages. Basically I can just reply or delete the thread: exactly the same options that I have with a status with comments.

<comment><USER4> Er, what else would you want to do to the message? Or, to put it another way, what else do you think _normal_ people do with the messages? 99.9% reply or delete. Perfect.

<comment><USER5> Forward? Add someone else to the thread?

<comment><USER6> You can do both with the new FB messages.

<comment><USER5> Hmm, guess they've not rolled that out to me yet.

</comment></comment></comment></comment></comment></comment><comment><USER7> I honestly hadn't expected this outpouring of vitriol here against John Scalzi, of all people. The things I'm reading here - that he's "just jealous" or what have you - are frankly blowing my mind.

I thought his point was pretty clear: FB is rolling in cash and is the target of the latest 15-minute hype and 50 billion dollars of Goldman-Sachs paper valuation, but isn't really breaking new ground in providing the best possible platform for the Web, and he predicts that this will cause it to fail, like other non-ideal repackaging efforts in the past, because it is limited. And he has some experience in this, because he was an employee of AOL in the day.

And weirdly, here at HNN, of all places, I am witnessing a deluge of rabid Facebook fanboys, many of whom apparently think he's just an old fogie who doesn't understand the new generation. The world never ceases to amaze me.

EDIT: more words are always good, right?

<comment><USER8> Umm, in case you haven't noticed, HN is full of FB echo-chamber fanbois who have a combined age still in the 2 digits.

<comment><USER9> I don't really think your snarky attitude is adding to the discussion, but, more than that, it's not even correct. The vast majority of replies here are decidedly anti facebook, and the ones that arent tend to be luke warm at best. Additionally, if you look at the front page over the last couple days, he popular facebook related articles have been very anti facebook.

I'm not trying to make any claims about face book's virtue (as a future facebook engineer, I doubt I would have much credibility anyway), but it is unfair to be so dismissive about people who might argue that it isn't completely awful, when they certainly aren't just part of hn groupthink (as you seem to have suggested.)

<comment><USER8> Fine, ill add some detail to my snarky comment. There is so much going on in the valley and in tech right now that frankly has all happened before. Given the market conditions now are far more ripe for all these services, which allows them to be made and more successful now.

The problem I see, and the point of my comment is that we truly aren't seeing too much that is new - but when a company comes along that is hyper successful and full of young talented engineers - people forget history.

That is fine - but I think people need to take a step back sometimes.

Point taken, however. (I'll take my own advice about taking a step back :) )

</comment></comment></comment></comment><comment><USER10> _I wish I could sign on to the damn thing and not have the first thing I feel be exasperation at the aggressive dimness of it UI and its functionality._

People use Facebook because they see past the "website" and read the content. They communicate with their friends and family. How many non-technical people have you ever heard complain about email apps? They don't because they use email to communicate, not to use an email app.

If the first thing you feel is "exasperation at the aggressive dimness of it UI and its functionality" then you need to find some new people to connect with so that you're actually interested in reading what they have to say.

<comment><USER11> > How many non-technical people have you ever heard complain about email apps

You should pick a better analogy. Every single non-technical person I know has complained about their email app. Usually it's some stupid Outlook/Exchange quirk...

<comment><USER10> You're right - my intention was to get simpler than that, and I wasn't thinking about Outlook or Exchange which are filled with problems because I don't use them. I was thinking along the lines of reply, compose, forward, signatures, etc. Simple concepts that people learn and apply with ease.

</comment></comment></comment><comment><USER12> Just for the record, I was uploading my own website back in '93 too, and I use Facebook and quite enjoy it, for the same reason the author does, because not all my friends were in the same boat.

Calling other people stupid for not building and maintaining their own website strikes as bit elitist, just as saying that people that don't design and build their own houses are lazy. We specialize.

To him it is easy / fun / rewarding to build his own blog, photo sharing, thingamabob. Sure, it has been for me too in the past. But it isn't anymore, especially because Facebook wins on the front of notifying my friends of things of mine they might find interesting.

In short, he is really missing the point, that Facebook has allowed millions upon millions of people to participate on the web in a way they couldn't before. Were they the first to try? No, but they are the first to do so so successfully across such a wide strata of users.

I also find it super ironic that he seems to think highly of Twitter (talk about lack of features!!) while gives Facebook a hard time for missing functionality. At least I can comment on 'status' messages on Facebook without changing my own status. :)

</comment><comment><USER13> Clearly someone who "once handrolled his own html code and then uploaded it using UNIX commands" is simply too Awesome for Facebook.

<comment><USER14> Yes, that line came off as egotistical posturing. We got it.

But I don't like that your snarky quip--which distorts the fact that the author continues to use facebook out of a sense of social obligation, and which I don't think adds much to the discussion--is the most upvoted comment here.

Sure, you can be cynical and mock the guy, but I'd rather see you address his arguments. I'm not so much annoyed that you took the obvious potshot, just disappointed that the rest of HN is currently voting this the most important takeaway from the essay.

<comment><USER15> The reason this is the most important takeaway is that Scalzi is calling the people at Facebook "stupid", despite the fact that they are much smarter than him.

      "there's very little Facebook does, either as
      a technological platform or as a company, that doesn't
      remind me that "banal mediocrity" is apparently the
      highest accolade  one can aspire to at that particular organization."

Scalzi has never heard of Hiphop, Thrift, or Haystack. He hasn't heard about them because he is not really capable of understanding the technical problems involved with doing something as hard as Facebook.

It is really hard to make something look this easy.

<comment><USER11> First, he wasn't calling the _people_ who work at Facebook stupid. Second, I have no idea how smart John Scalzi is... and you probably don't either.

He was criticizing the idea of Facebook. Facebook is a very well implemented system. But that doesn't mean that you can't question the validity of the system. Just because it's hard to build doesn't mean that it is worthwhile to use.

</comment></comment></comment></comment><comment><USER16> He's smarter than "normal" people, and jealous that they're making Facebook lots of money.

</comment><comment><USER17> Facebook is top dog right now, so I get that every highly intelligent hacker out there is going to take their potshots at it. I think everyone needs to take a step back and seriously thank Facebook, Myspace, AOL, etc. Why? Because they got normal people to use the internet. Grandma is now a customer for us hackers thanks to Mark Zuckerberg. We can all remember a time when the internet was our personal nerd playground, and yes it was awesome; but it wasn't very profitable. Now, everyone and their mother is on the internet, and their chosen platform of choice right now is Facebook. Yes, things have been dumbed down, yes privacy isn't what it used to be, but us geeks are now pulling down 6 figure salaries for doing the same stuff we'd be doing for fun in our free time anyways. We can't have our cake and eat it too..

</comment><comment><USER18> _Zuckerberg is in fact not a genius; he's an ambitious nerd who was in the right place at the right time_

So the guy who created Orkut must have been in the wrong place at the wrong time. Too bad for him. His Google stock probably only made him a millionaire. Totally uncool.

<comment><USER2> The author thinks that it was just "PR and faffery", while discounting the actual value of PR and faffery. Never discount these things. MySpace was practically built on it.

<comment><USER4> Exactly. "PR and faffery" are the secret sauce that will make or break your business. You can have the best product in the world, but without "PR and faffery" you will never get beyond a handful of early adopters. More than that, any site that looks like it has become successful without "PR and faffery" has just done the "PR and faffery" in a subtle way so that it looks like it has not happened!

<comment><USER19> Tautology? You've just defined a successful site as one that used PR and faffery to succeed (even if we can't see it), making it impossible to argue otherwise.

<comment><USER4> You can argue all you want! I have just expressed my honest belief that all successful sites use "PR and faffery" in some way or the other, even if its not obvious.

</comment></comment></comment></comment></comment><comment><USER20> As time passes, and the users of the internet get more sophisticated, this wont seem so much like a rant, it'll seem like an opportunity for the next social networking phenomenon. The thing that replaces Facebook wont look much like Facebook. It will need to cater to what today seems like the power user.

Just my .02

<comment><USER21> You think the users of the internet are getting more sophisticated? I'd say the users of the internet are getting _less_ sophisticated. In the 1970s nobody without a PhD used the internet. In the early 90s you still needed a helluva lot of technical skill. In the late 90s the internet was still a bit geeky. Nowadays _everybody_ and _everything_ is on the internet and we've gone from Eternal September to.... some more extreme version of Eternal September (I'm tempted to say Eternal April, but that would entirely destroy the point of the metaphor).

<comment><USER22> There should be some study on this relationship... the more the web gets sophisticated, the more unsophisticated people use it.

<comment><USER23> But that's true of every maturing technology. People who owned cars in the early 1900s had to be able to fix them - they broke down constantly. A hundred years later how many people can do repair work on their own car? I've owned a car for ten years and it's never broken down.

</comment></comment></comment></comment><comment><USER24> Everything is getting more and more simple, isnt that good?

Lots of ranting towards Facebook here of late, I must say. Facebook is a great way of telling your friends that HTML5 has got a logo, for example. Also, this way your friends that arent on sites like linkedin will get an idea of what you're up to.

I'm sure people who are interested in programming and building webpages will go their own way in the end anyway.

Maybe I misunderstood this article and the previous about Facebook rants, in that case I apologize.

</comment><comment><USER25> I don't get this Facebook rage every year. Last year it was about the open social graph API and the third-party like buttons. Everyone was mad at Facebook. Calls for boycotts, mainstream press picking it up, Diaspora, etc.

Then it dies down and everybody seems happy about Facebook.

Until a year later, HN is full of hate-posts again. So, if history is to repeat itself, I'd say that the hate will have died down by June and I'll get my hate-blogpost ready for next year, having missed this years Facebook- hating-season

<comment><USER26> I don't think its all in vain. Each hate-cycle creates some residual hostility towards facebook. When eventually it crosses threshold (and some better option is available), so many people might jump the ship in a short time.

</comment></comment><comment><USER27> More and more I find that for people I see in real life facebook has become fairly redundant. And facebook has just clarified the reason that I don't see most of my other 'friends' in real life; I'm not really friends with them anymore.

</comment><comment><USER28> Some time ago, a friend of mine told me that he had a great idea, something like Facebook, but, you know, for the "geeks" and all ze teknischen peepers, blogging, photo sharing, video, everything. At that point, it had simply occurred to me a very simple (and obvious) question: "Well, isn't that exactly the world wide web?"

</comment><comment><USER29> Facebook is not made for smart people. It's not made for the readers of Hacker News, this guy's blog, or even the throngs on Reddit. It's made for everyone else. I work in a place with some people who will work/have worked minimum wage jobs their whole life (not that there's anything wrong with that). But these same people are on the internet all the time, and you know what they do? Check facebook. Facebook chat. Look through facebook pictures. Maybe browse craigslist for a few minutes looking for a used car or a new job. But 95% of the time? Facebook. I'm not saying this type of person represents the majority of facebook users, but it is this type of internet "familiarity", for lack of a better word, that makes up the majority of facebook users, and the world's population.

<comment> brown9-2 _is not made for smart people_

I strongly disagree with this. I might read HN and reddit for programming stories all day long but I still find Facebook immensely useful for keeping in contact with friends and contacts. I don't see at all how these things are mutually exclusive.

It's made for people who want to connect to other people. Intelligence has nothing to do with it.

</comment></comment><comment><USER30> _Facebook shouldn't be telling me how many "friends" I should have, especially when there's clearly no technological impetus for it._

Does Facebook do that? I get recommendations of people I might know, but I don't recall ever being told how many friends I should have.

<comment><USER31> There's a maximum limit.

</comment></comment><comment><USER32> I don't use Facebook because I think it's social circle-jerking occupied by a majority of people who are only interested in inflating their own perceived image.

</comment><comment><USER26> We had a stream of google-sucks/googles-dead kinda articles everyday just before while now. And now, suddenly all the bad attention turns to facebook since about a week.

I mean facebook had the same UI/policies/uglyness since quite some time, why sudden surge of facebook-bashing articles (followed by google)? I wonder how much of the content from above articles was written genuinely and not with alterior motives.

</comment><comment><USER33> About a year and a half ago, I was thinking the same thing - Facebook = AOL.

I did make a cute graphic out of it, if you want it: [http://jaysonelliot.com/blog/2009/06/13/what-does- facebook-r...](http://jaysonelliot.com/blog/2009/06/13/what-does-facebook- remind-me-of%E2%80%A6/)

</comment><comment><USER34> _But the idea that it's doing something better, new or innovative is largely PR and faffery._

Facebook is incredibly innovative at growing its user base. No other social network has concentrated on and succeeded at this like Facebook.

</comment><comment><USER3> Sounds like he uses Facebook mainly to stay in contact with his friends but hates that Facebook doesn't do everything he needs. Facebook doesn't have to do that and the rest of the internet is still there.

<comment><USER23> I think it's more that he feels like he _has_ to maintain a presence on facebook because everyone else does. And it galls him because he can't stand facebook.

</comment></comment><comment><USER35> My favorite quote:

> Its grasping attempts to get its hooks into every single thing I do feels > like being groped by an overly obnoxious salesman.

</comment><comment><USER36> No, Facebook is what happens when you make something easy for Joe Public to grok.

</comment><comment><USER37> I just delete all my information (which wasn't lot!) last night! and I wrote my email on first page so if anyone really wants to contact me there is a way!</comment>


Instagram is Down - <AUTHOR> https://instagram.com/

<comment><USER2> Because part of EC2 is down because of a storm in VA... supposedly.</comment>


Show HN: PaperSurvey.io – Effortless paper survey solution - laurynas-s https://www.papersurvey.io/ <comment><AUTHOR> I was looking for something like this about a year ago. The use case was to survey folks in jail and prison, since you can't bring in tablets, etc. But the nonprofit doing them didn't do it on a regular basis, so a monthly fee would've be tough.</comment>


In Europe, cars automatically call for help if they crash - <AUTHOR> https://unlikekinds.com/article/ecall-eu-cars-emergency-call-privacy <comment><USER2> Step by step towards 1984.

This should be optional, not mandatory technology for new cars. I don't want a cellular module that reports its location in any of my cars, new or old, so why is this being forced through?

The argument of improved safety is a poor one. You could use the same argument to make 8 air bags mandatory minimum, demand that only 5-star rated cars can be sold, that cars have ejection seats, tow a mobile clinic with a doctor and a nurse, or about a million other things that would objectively improve car safety but also make cars further unavailable to many people.

And this will get misused too. Today it may send location after a collision; tomorrow's firmware update can easily change that. And once users have the hardware, software features will follow.

<comment><USER3> Merely playing devil's advocate here but I'm not entirely sure that a cellular module that knows where you are is really any worse than having your mobile phone in your pocket pinging off local cell towers or your number-plates being seen by ANPR-enabled cameras road-side (of which there are probably a lot more than we realise).

<comment><USER2> Everyone who has watched an episode of CSI: Anywhere knows this about mobile phones. While you can turn off the phone or leave it behind easily, the same cannot be done with a module built into the car.

<comment><USER3> That's a fair point, yeah.

</comment></comment></comment></comment><comment><USER4> Last year, there were 25,700 fatalities on EU roads and motorways. eCall is expected to reduce emergency response time by 40 percent in built-up areas and 50 percent in the country, and it's believed the system could save as many as 2,500 lives each year. Sehnalova said eCall would also benefit tourists in the EU, because "when you cross a border you have a language problem and often do not even really know where you are." The vehicle's location is established using satellite navigation systems such as Galileo — the European equivalent of GPS.</comment>


Ask HN: How can I create an RSS feed for any website/url? - <AUTHOR> I've been using feedly.com to track websites and curate content for a newsletter. Certain websites that used to offer public RSS feeds no longer have them, two quick examples: https://genius.com/articles + https://daily.bandcamp.com/latest.
Feedly says they are not in the business of creating RSS feeds, only plugging them into their reader.
Im wondering if there are any good free/reasonably priced solutions for being able to create RSS Feeds of urls that do not offer them?
It seems to me that the web is becoming increasingly private, with devs purposely disabling RSS feeds or making it hard to create them for their web pages. Would love to hear thoughts on this topic. <comment><USER2> There are 2 services I use. feedfry.com and rss.app. RSS.app is the paid one, and feedfry you can use for free if you don't sign up with an account.

</comment><comment><USER3> [https://feed43.com/](https://feed43.com/) : a bit technical but the free version is sufficient for most sites

All other solutions are quite limited in their free version (5 news per day and feed deleted if nothing happens during 1 week)... and quite expensive in their paid version. FetchRSS Feedity Feed Creator

This last one have a inexpensive "to host" version.

<comment><AUTHOR> I have come across feed43 but have not tried to test it with some of the links im looking to create rss feeds for. At a quick glance, it didn't seem user friendly but if you vouch for it ill have to check it out.

</comment></comment><comment><USER3> If ever you read french, here is my tuto on Feed43 [https://rsscircus.com/transformer-une-page-dactualites-en- fi...](https://rsscircus.com/transformer-une-page-dactualites-en-fil-rss-un- tutoriel-complet-avec-feed43/)

<comment><AUTHOR> I unfortunately don't speak french but ill try to use English translation for this.

</comment></comment><comment><USER4> Syndicating someone else's content without their permission seems dodgy, if not illegal.

<comment><AUTHOR> I have heard this argument before. Personally i don't agree. If you are a content creator and your content is available for free online, is it not your goal to have the content shared as widely as possible?

A lot of tools/services we use today (eg: Google, Facebook, Reddit) were built without asking for permission. Reddit co-founder Alexis talked a lot about this in his book [https://withouttheirpermission.com](https://withouttheirpermission.com)</comment></comment>


Show HN: UX review helps us both - <AUTHOR> http://theuxden.tumblr.com/

<comment><AUTHOR> Hi,

I put my startup aside and getting into UX, I know everyone needs feedback so let me give you one about the UX of your site, it would be a great help for me cause we could see if I have any usefull insights.

(just drop a link and I publish my insights, in order of submission) Have a productive day!</comment>


Ask HN: Where are resources on the implementation and design of DRM? - <AUTHOR>

Does anybody know any good resources on the design and implementation of DRM? I've tried to find information online but there's a lot of noise (sales pitches, rants.)
What are the fundamentals?
Are there specs that should be read?
Are there any lighter resources that will give me as high-level understanding? <comment><USER2> DRM is mostly marketing BS (target -> content providers). For example it takes less than 10 seconds to remove the latest Adobe DRM from an epub file once everything is set up (max 5-10 minutes).

Use plain XOR, ROT13 or RC2/RC4. Strong crypto might get you into trouble/extra paperwork later (iOS, US export regulations). And lie if you have to, because that's how it actually works! Security through obscurity! But it should be good enough to stop "casual" pirates/hackers/wannabes.

</comment><comment><USER3> Could take a look at OMA DRM

[http://www.openmobilealliance.org/Technical/current_releases...](http://www.openmobilealliance.org/Technical/current_releases.aspx)

Was on a team that implemented it before.

I'd leave it alone though unless you are being paid by someone that has already made the decision to use it.</comment>


Show HN: Our Red Dot Design Award submission (from 2014 and no, we didn't win) - <AUTHOR> https://bvckup2.com/design <comment><AUTHOR> I originally posted this on Dribbble, but I think it might actually be of more interest here. This was ultimately an experiment in software marketing, so what follows in as a postmortem for others to learn from. Hope you, guys, find it useful.

      <cite>

A couple of years ago I had a weird idea to try and enter our software product into the Red Dot Award [1] competition. Somehow a thought of being able to stick that swirly red sphere on our website was highly appealing, so I emailed them and asked if there was a way to enter with a software product.

Surprisingly, that exact year they decided to start collecting money on that front as well and included the Interface Design sub under Communication Design category. For mere few hundred euros one could submit their work for their expert analysis on condition that they were prepared to part with additional 1.5K upon obtaining an award.

Long story - short, we applied, paid the fee and I then killed a couple of weeks of drafting this presentation. Mind that there were absolutely zero guidelines on what they expect from it except that physical products should be shipped well in advance. One of the options was to submit a link to the presentation (rather than a PDF), which is what we ended up doing.

Being expertly versed in modern web technologies we added a couple of lines of Javascript to report some events from the page when it was viewed.

The judgement time comes and we get a page hit.

Very exciting as you can imagine, but then we look at details and see that they read through about 1/3 of the application, looked at one animation, scrolled to the bottom and left. And that was it. In and out in two minutes.

You'd imagine that judging an Interface Design competition entry would involve, you know, trying out said Interface or perhaps reading through the actual application, but I guess that'd be setting the plank too high. So needless to say that was quite underwhelming and as you can probably guess we won a nice round zilch.

In any case, here's our application in all its three-color glory. I still like it and I still think we did a pretty good job with this particular piece of software, Interface Design included.

      </cite>

[1] [http://www.red-dot.de/](http://www.red-dot.de/)</comment>


Show HN: Freeciv HTML5 web client - <AUTHOR> https://play.freeciv.org/?webclient

<comment><AUTHOR> Hi! A new version of the Freeciv HTML5 client has been released today. I'm the developer of the Freeciv HTML5 web client. I would be very interested in hearing suggestions about how to improve this open source strategy game. How can I make this game better?

The source code can be found on github: [https://github.com/freeciv/freeciv- web](https://github.com/freeciv/freeciv-web)</comment>


Internet Freedom in Malaysia #stop114a - <AUTHOR> http://stop114a.wordpress.com/

<comment><USER2> e27 did an article on this a while back. Very good read: [http://e27.sg/2012/06/01/darker-internet-days-for- malaysians...](http://e27.sg/2012/06/01/darker-internet-days-for-malaysians- as-government-amends-evidence-act-shifts-burden-of-proof-to-website-owners/)

<comment><USER3> Is this akin to Thailand's lese-majesty or more broader? Seems backwards!

<comment><USER4> My guess is that lese-majesty is already illegal in Malaysia. The issue as I understand it is that this changes the burden of proof and broadens responsibility for such crimes and this is the big issue.

Imagine if someone accessed your unsecured wireless network and downloaded child pornography, and that absent evidence that you never did it, that was considered sufficient evidence to convict. That's the concern I see on this web site and it is scary. I hope it doesn't pass.</comment></comment></comment>


Learn Apollo: Build GraphQL Apps with React, React Native or Exponent - <AUTHOR> https://www.learnapollo.com/ <comment><USER2> All these GraphQL solutions seem to focus on the frontend and assume there's a magical GraphQL server somewhere. But GraphQL Just shifts the hard work from the client to the server and I haven't seen any good solution towards security (except storing all the possible queries a user may access, which kind of defeats the purpose of GraphQL in the first place) and performance (a large query is usually resolved to thousands of database fetches, instead of 1 optimized one) on the server side.

What we really need is a decent GraphQL server. The client isn't difficult anyway.

<comment><USER3> In addition to graph.cool, there's scaphold.io. has any body used these two and can share their experience?

(I'm not affiliated with either of them. Just wanna know)

<comment><USER4> Hey there, I've used both Scaphold and Graph.cool and I would thoroughly recommend Graph.cool.

To understand why, I recommend you have a play with them yourself. It is immediately clear, in my opinion, that Graph.cool is a much better designed product in every aspect. Graph.cool's UX exudes refinement and quality that Scaphold's does not.

An example of this is the fact they invite you to their Slack team automatically when you sign up (i.e. use the email you sign up with to invite you, you don't have to do anything). They really care about their customers, and the Slack community around Graph.cool is much more active than Scaphold's. In fact, it's mostly the community that is buzzing around on Slack, and it's about people learning GraphQL, not necessarily learning how to use Graph.cool. The Graph.cool team seem to be really motivated to help everyone learn to use GraphQL, not just their service. This is also evident if you get in touch with the founders of Graph.cool - they are just nice people to talk to.

Any feature distinction that Scaphold may have over Graph.cool is quickly disappearing. I can only think of one, subscriptions, and Graph.cool has that on their roadmap to be released very shortly. On the other hand, Graph.cool has plenty of features that Scaphold does not, such as Auth0 integration, Relay AND Apollo support (from the same schema), a much better permission model.

Oh, and it's free (for now) :)

<comment><USER5> This is incorrect on several points. Scaphold supports relay and Apollo out of the box and integrates with auth0 (per their docs; I've used neither feature).

Subjectively, having played with both, I chose scaphold (over graph.cool and reindex) for a few reasons:

\- pricing model makes a lot more sense to me. Graph.cool tiers their pricing on user counts, which makes very little sense to me for a product the cost drivers of which are storage and throughput. They also apparently count a user once they register, with no clear way of handling inactive users (can't be good for your LTV calcs). Reindex was also suboptimal imo, with steep jumps from free tier to paid. They also charge based on 'operations,' which, while less so, also seems strangely divorced from what I imagine their cost drivers are. Scaphold seems to have taken firebase's pricing model, which was a smart move

\- storage. Graph.cool has really low storage per tier. Reindex bills storage separately from 'operations' and only charges in $50 5GB chunks (5.1 GB last month? Sorry!). Scaphold again copies firebase's pricing with small, inexpensive increments.

\- ui. I didn't use graph.cool's ui too much, but I'm very happy with scaphold's. Afaik reminded didn't have any ui to speak of--someone correct me here if I'm wrong. You can build your entire schema in scaphold's ui (with very helpful tool tips most of the time) , manage integrations (which, generally, just make certain queries/mutations available), and view some pretty thorough analytics on your app. Coming from firebase, which has been really neglecting web app users in favor of mobile lately (imo), this was really nice.

Lastly, I'm new to graphql, but as I understand it, scaphold has added some nice features on top of the API. It seems to mirror PostgraphQL (a postgres <-> graphql utility), and adds pretty robust support for relationships (1:1,1:many,many:many). My schema is highly relational and, so far, it's a breeze.

I will note that graph.cool seems to have much more newbie-friendly docs, and maybe more comprehensive docs over all. Scaphold's docs are okay: they're wider than they are deep (maybe a paragraph for every feature w/ an uncommented snippet), there are some obvious mistakes, and some parts of the docs are scattered between the docs page and the UI's tool tips. When I had problems, though, their team got back to me w/in minutes (on email and slack).

To be clear, I'm not affiliated w/ any company discussed here--I'm just a user shopping for a firebase replacement.

That said, if you're considering the product, here's a ref link--$10 for you & $25 for me [https://scaphold.io/referral?ref=99XXP3](https://scaphold.io/referral?ref=99XXP3)

<comment><USER6> Thank you for going so much into detail.

Our pricing structure has been like that since we started a year ago. We have learned a lot since then and you touch on some important points. We have put of updating the pricing model because we have been busy improving docs and working on the product, but expect a complete revamp early next year.

If you want to talk more you can always reach me on email@example.com :-)

</comment></comment></comment></comment></comment><comment><USER6> Hey :-) we just announced this. Happy to answer any questions. Here's the accompanying blog post [https://dev-blog.apollodata.com/learn-apollo-build- graphql-a...](https://dev-blog.apollodata.com/learn-apollo-build-graphql-apps- with-react-react-native-or-exponent-4787269a4747)

<comment><USER7> Can you give a comparison between Apollo Client and Relay? And if you know about upcoming Relay 2 features, I'd like to hear about it too in the context of Apollo Client.

If you have time, I would love to hear about your (and everybody else) opinion/prediction where we're going with client data management/server communication in the future. What's your take on client databases?

Thanks!

<comment><USER8> (I work on Apollo)

It's hard to know exactly what will be included in Relay 2, so we'll have to wait to make a comparison. Apollo came after Relay 1, and so has been designed with a few key differentiators: (1) flexibility, since it's built in a modular way and has a lot of hooks into internals, (2) less opinions, because it works with any GraphQL server and doesn't require a particular type of schema, and (3) optimized for devtools, since it doesn't generate dynamic queries on the fly and is built on top of Redux. You can see the new dev tools we launched yesterday here: [https://dev-blog.apollodata.com/apollo-client-developer- tool...](https://dev-blog.apollodata.com/apollo-client-developer-tools- ff89181ebcf)

As for client/server communication in the future, it seems there are two main camps right now:

1\. Lossy APIs - this is if you use a REST API or GraphQL to send data to the client. The server knows a lot more than the client does, and the API returns only what the client needs to know at that moment. This has the advantage that it doesn't impose any limitations on your backend schema or storage, so you can put a REST or GraphQL API on top of literally any backend.

2\. Database replication, like Meteor or Realm. In this case, the client asks for objects and they are replicated to the server via some kind of push mechanism. In this case, the client has a much easier time predicting server operations and achieving consistency. On the other hand, the server has to be much smarter and this places a lot of restrictions on what kind of database you can use. For example, Meteor essentially requires MongoDB, Realm has its own database.

With Apollo we're trying to build towards the best implementation of approach (1) because our main goal is to enable decoupling between the client and server.

</comment></comment></comment><comment><USER9> I came to the comments to point out that I didn't know what Apollo was. Most of your long term traffic will come from Google searches but early on while it's being shared around places like Hacker News, it's probably a good idea to add a link to [http://dev.apollodata.com/](http://dev.apollodata.com/) to the intro.

</comment><comment><USER10> Because they don't tell you on the site:

Apollo Client is a Javascript library that can be used in any front end where you want to use data from a GraphQL server.

It's incrementally adoptable, so that you can drop it into an existing JavaScript app and start using GraphQL for just part of your UI.

It uses TypeScript.

</comment><comment><USER11> From the creator's of Meteor. What kind of long-term commitment plan do you have for Apollo?

<comment><USER12> Thanks, I didn't know that. That certainly explains the high polished look of Apollo combined with the seemingly non-existent business model.

I tried Apollo Optics - horrible brand name BTW, everyone I mention it to here in Germany thinks of the eyeware retailer - and while it was easy to integrate and nice to look at, it provided little actual value compared to existing tools in the same space of performance monitoring.

<comment><AUTHOR> Would you mind sharing what metrics and analysis are the most important for your GraphQL API? (Or what you would find most valuable if you could get it?) What tools do you use today?

[I work on Optics.]

<comment><USER12> The most important metrics are the traditional ones that Optics focuses on like latency percentiles and throughput. We are currently using NewRelic and Loggly. Since both the NewRelic agent and our logging system allow us to tag requests, the grouping by query structure that Optics provides, doesn't really add value. (EDIT: Further, both NewRelic and Loggly provide a better interface for zooming in on interesting areas in time.) From a operations perspective a GraphQL and a REST API aren't that different from each other that they warrant the usage of another tool.

When I tried it, the query execution view also wasn't aware of DataLoader usage. That meant, that once we started optimizing our queries, it looked like many slow parallel queries, which meant that you had to guess what was already optimized, and what wasn't.

</comment></comment></comment></comment><comment><USER13> If you want a pretty terse way of defining a GraphQL API, Apollo works very well (with mocking, too).

<comment><USER8> Here's the documentation for graphql-tools, Apollo's API definition package: [http://dev.apollodata.com/tools/graphql- tools/index.html](http://dev.apollodata.com/tools/graphql-tools/index.html)</comment></comment>


Show HN: A pure Go library for interacting with LLVM IR - <AUTHOR> https://github.com/llir/llvm <comment><USER2> LLVM IR is being changed at a high rate. While there are some weak backward- compatibility promises (older, but not too much old, bitcode can be read by newer official IR readers), new features are introduced overnight. I expect this project to be a high maintenance job to keep up with the LLVM trunk.

<comment><AUTHOR> @krasin The LLVM IR assembly language does change with a rather high rate. Not too often to be unfeasible, but an external project definitely needs to make sure it can keep up with maintenance to remain useful. Since the llir/llvm project started back in 2014, the LLVM IR assembly language has had one major change, and that is the new metadata syntax introduced in LLVM 3.6.

To facilitate maintenance efforts over time, a BNF grammar for LLVM IR assembly has been written, from which the lexer and parser are generated [1,2,3]. The intention is for this BNF grammar to eventually become the basis or starting ground for an official BNF grammar of the LLVM IR assembly language (but that's a different project altogether, and a huge effort in itself).

[1]: [https://github.com/llir/llvm/blob/master/asm/internal/ll.bnf](https://github.com/llir/llvm/blob/master/asm/internal/ll.bnf)

[2]: [https://github.com/llir/grammar](https://github.com/llir/grammar)

[3]: [https://github.com/goccmack/gocc](https://github.com/goccmack/gocc)

<comment><USER2> @mewmew, have you already added support for .bc files which have multiple bitcode modules (aka merged modules)? These are used in the work-in-progress ThinLTO.

Merged modules were a major change to LLVM. And this part is still evolving. Like, the last breaking change was 16 days ago: [https://github.com/llvm- mirror/llvm/commit/e74c64e05ab257c37...](https://github.com/llvm- mirror/llvm/commit/e74c64e05ab257c37a743e1f5bcb27445aa8fc7e)

<comment><AUTHOR> @krasin Thanks for the input. From my understanding ThinLTO is intended to bring compilation speed of LTO builds closer that of non-LTO builds. Prior to the change you are referring to with merged modules, it seems this was achieved by optimizing multiple .bc modules in parallel during link time (using summery information from thin-link) [1].

Is there any high-level information of the design behind merged modules? Are they simply a concatenation of .bc files with a table of file offsets for each module?

I am new to ThinLTO and the work related to merged modules, so any information providing insight would be appreciated.

As for the llir/llvm project. It includes a .ll parser, but relies on the LLVM toolchain for converting .bc files into .ll; i.e.

llvm-dis -o foo.ll foo.bc

This decision has been taken so that we can focus time on maintaining good support for one of the isomorphic LLVM IR forms.

Any application which requires good performance should definitely make use of the official LLVM C++ library for interacting with LLVM IR.

The llir/llvm project is intended for those who wish to write tools in Go which consume, produce, process or manipulate LLVM IR.

Future releases of llir/llvm will try to get closer in performance to the official LLVM C++ library, but at this point of the project the aim is to iron out a good API for interacting with LLVM IR, and to have fun coding :)

For those interested, the llir/llvm project was born to support the requirements of a decompiler project [2] which decompiles LLVM IR to Go source code. The llir/llvm project has since become a general purpose library, and is now looking for anyone curious to try it out at this early stage to provide feedback on its API and design.

[1]: [http://blog.llvm.org/2016/06/thinlto-scalable-and- incrementa...](http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental- lto.html)

[2]: [https://github.com/decomp/decomp](https://github.com/decomp/decomp)

<comment><USER2> @mewmew generally, the .bc files with multiple bitcode modules existed for a while (almost a year now). The change I referred was just an incremental (breaking) improvement of that scheme.

I don't remember a good doc on how it's implemented. Last time I tried to understand it was early February and things had been changing at crazy speed. Your best bet is to ask on llvm-dev mailing list or #llvm IRC channel. Either tejohnson@ or pcc@ will know for sure.

<comment><AUTHOR> @krasin Thanks! I know I'll continue to play around with LLVM on many levels in life. Just recently an LLVM Socials meetup has started in Sweden, and it feels great to get a chance to meet other people excited about exploring these topics :)

</comment></comment></comment></comment></comment></comment><comment><USER3> Maybe this would lend itself well to parsing bitcode slices (serialized LLVM IR). I've often wanted to diff bitcode produced by different compiler versions.

<comment><USER4> What's wrong with llvm-diff [1]? Is it that you want to compare across bitcode versions that weren't backwards compatible? (so the current llvm-diff won't parse an old old bitcode)

[1] [http://llvm.org/docs/CommandGuide/llvm- diff.html](http://llvm.org/docs/CommandGuide/llvm-diff.html)

<comment><USER3> llvm-diff is indeed pretty great, but having the IR structure as an AST that you could programmatically access and manipulate would allow more semantic diffing, or integration into workflows that would benefit from structured representations of a diff.</comment></comment></comment>


Christie's $432K AI Art Sale – Interview - <AUTHOR> https://www.artnome.com/news/2018/10/13/the-truth-behind-christies-432k-ai-art-sale <comment><USER2> > So we think he deserves something in this whole situation. And then, I > considered even more. What can we really do?

Maybe give him a part of the $432k?

</comment><comment><USER3> My hot take is that the market exists for AI art. And if you were truly able to generate "Computer Art". Something that at first glance 100% of rationally thinking humans would deem a work that no human were capable of creating. It's value could be tremendous.

<comment><USER4> Maybe to photoshop who could implement a brush, or some app maker for ios or android who could take a stick figure and make into an Impressionistic painting.

I don't know. Throw out the old rules, if visual art was already tough to earn a living with before, it just got a little harder.

I haven't seen how they created a physical painting out of it, that part interests me more.

<comment><USER5> >I haven't seen how they created a physical painting out of it, that part interests me more.

I don't know about this specific one, but Dafen, China would probably blow your mind:

[https://www.artsy.net/article/artsy-editorial- village-60-wor...](https://www.artsy.net/article/artsy-editorial- village-60-worlds-paintings-future-jeopardy)

And the YC backed middleman, InstaPainting: _Upload a photo and we 'll get an artist to meticulously hand-paint it on canvas. Ready to ship in as little as a 7 days._

[https://www.instapainting.com/blog/company/2015/10/28/how- to...](https://www.instapainting.com/blog/company/2015/10/28/how-to- paint-10000-paintings/)

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


The rise of artificial intelligence DDoS attacks - <AUTHOR> https://www.networkworld.com/article/3289108/network-security/the-rise-of-artificial-intelligence-ddos-attacks.html <comment><USER2> Well it's nothing new, if running a script an DDoS websites pretty heavily, then making it more powerful with the AI, you can bombard the website with requests even more. Scripts were already made in a pretty smart way though</comment>


Clone Wars: Rise of the Fast Follower Startups - <AUTHOR> http://www.betabeat.com/2011/09/02/clone-wars-rise-of-the-fast-follower-startups/?show=all

<comment><USER2> "We launched first, so they must have copied us." - I really wish I'd quit hearing this.

Just because you wrote code fast and launched fast doesn't mean someone else did. It could be they took their sweet time and had actually started first, but you beat them to market.

It IS possible for 2 people to envision the same concept in the same way. It's actually quite likely, given how imagination works.

Having said that, I also don't think there's anything wrong with seeing something and thinking you can do it slightly better. That's the nature of capitalism.

<comment><USER3> Yeah I had a reaction like this in the past, but I got to meet the people who worked on a similar project as mine and they did their thing completely independently. I can't say the same of another group who took my css files for their site. Can't be anymore obvious than that. I'm pretty sure they died off anyway.

</comment></comment><comment><USER4> "Last week, two ads appeared from the other side of the fence: a programmer- for-hire looking for something to build who claimed to have built a Facebook clone in four days, a Flickr clone in three days and a Google clone in two weeks. He noted that he'd also created a Craigslist clone, adding, 'but no one visits it so we are posting this ad to Craigslist.'"

The former ad is Ted Dziuba's troll post, so not serious: [http://teddziuba.com/2011/07/the-craigslist-reverse- programm...](http://teddziuba.com/2011/07/the-craigslist-reverse-programmer- troll.html)

Someone might want to let the journalist know that he got trolled. :)

</comment><comment><USER5> _Mr. Furman gets waves of clients who ask him about patenting the same thing. "In a month, six or seven people come to me with virtually the same idea!" he told Betabeat._

The way that certain ideas are "in the air" is fascinating to me. Presumably a lot of this is taking a logical next step, or combining ideas that have just been discovered/talked about.

<comment><AUTHOR> There's a great book by Steven Johnson called "Where Good Ideas Come From" that talks about a lot about new ideas being the logical next step or a combination of ideas that have just been discovered/talked about. I'd highly recommend it.

</comment></comment><comment><USER6> My father has saying: running business is a marathon. So from that perspective first 100s of meters (cloning the initial version of a web site) means nothing.

</comment><comment><USER7> A friend recently told me he would no longer pursue his personal original ideas, but rather find a recent YC company whose idea he could get behind and create a clone.

It feels a little dirty, but the idea of tackling a problem vetted by YC and closely watching to learn from their problems is fascinating.

<comment><USER8> I was talking with a friend about how, if we were just starting out, our best strategy would probably be to pounce on the market abandoned by an acquisition, particularly a talent acquisition.

For example, after Fflick got bought by Google early this year, they closed their site up. But they clearly had decent traction, users and press interest. And if it's a straight-up talent acquisition, that's a reliable signal the opportunities in that field of technology are substantial.

Doesn't it make sense to have another startup (a re-startup?) steal the ball and kick it down the field when it comes to something like Fflick?

There are abandoned users who you can court right away. They've already paved the roads as far as publicity and how to sell the idea. And it's not like the game is over once Google buys a company. Finally, if Google turns this technology into a hit product, you know their competitors are going to be envious.

It made me uneasy to say but couldn't find much fault with this line of thinking.

<comment><USER9> This strikes me as a perfectly reasonable course. If people want something that isn't for sale, for heaven's sake, find a way to sell it to them!

Edit: anyone ever see the movie _Robots_? "See a need... fill a need."

</comment></comment></comment><comment><USER10> >web ecosystem rather than contemptible parasites.

That's because they're competitors. When you find a market, don't expect to own it forever.

</comment><comment><USER11> Can someone point to an example where a website where a clone was more successful, or even on the same level of success as the original? To be clear, Facebook was not in any way a clone of Myspace or Friendster. I'm talking about someone who posts a request saying "I want a clone of X website" and then proceeds to turn that into a successful business.

</comment><comment><USER12> This seems natural. The same things reducing the cost of first movers also apply to second movers. The only way to win is to provide better value, either through getting network effects quicker, or innovating more.

For better or worse the half life of competitive advantage is shrinking.</comment>


Another big chapter from web 1.0 is over - <AUTHOR> http://help.yahoo.com/kb/index?page=content&y=PROD_MSNG&locale=en_US&id=SLN8407

<comment><USER2> This was destined to happen sooner or later. Sooner it now seems. I spent a lot of time in those chat rooms, but they have more than been proceeded by the webs current offerings.</comment>


Vladimir Vapnik Joins Facebook Research - <AUTHOR> https://www.facebook.com/FBAIResearch/photos/a.360372474139712.1073741828.352917404885219/372090452967914/?type=1 <comment><USER2> Am I the only one assuming that this many excellent scientists moving from academia is a loss for science in general? Will they really publish research in the same way they did before?

(Make no mistake, I can fully understand them, professors paid 80k per year, lacking resources, fighting bureaucrats, it is a great thing that they are recognised and at last paid what they deserve for devoting their lives to science.)

<comment><USER3> While I am curious too about your question, Vapnik was previously working in industry at NEC Labs in New Jersey.

<comment><USER2> Good point. But I do wonder about Facebook's journal publishing policy.

</comment></comment></comment><comment><USER4> This is another great example of the unreasonable effectiveness of data. LeCunn, Hinton, Ng, Vapnik were all recruited on the basic fact that there is simply no way to do cutting edge research today without access to the data and computing resources of Google/Facebook/Yahoo/Baidu.

Edit: "No way" is inaccurate. I should have said it is much easier to do at these companies. Also it is inaccurate to imply this is the only reason these great minds have joined these companies.

<comment><USER5> There is great, big data driven research coming out of Stanford using Common Crawl. For example, see [http://www- nlp.stanford.edu/projects/glove/](http://www-nlp.stanford.edu/projects/glove/) . They successfully train an 840 billion token corpus.

Vapnik is a big theory guy. Though I am not sure he has done anything of big practical importance recently, his immense contribution to ML (the SVM) was done at a time when machines were many orders of magnitudes weaker than they are now.

<comment><USER6> "In writing this book I had one more goal in mind: I wanted to stress the practical power of abstract reasoning. The point is that during the last few years at different computer science conferences, I heard reiteration of the following claim:

      Complex theories do not work, simple algorithms do.

"One of the goals of this book is to show that, at least in the problems of statistical inference, this is not true. I would like to demonstrate that in this area of science a good old principle is valid:

      Nothing is more practical than a good theory.

\-- From Vapnik's preface to _The Nature of Statistical Learning Theory_

 __*

Vapnik is not well-described as a "theory guy". That implies that he's not interested in connections between theory and practice, and this is most profoundly not the case. He has arguably been the most successful ML researcher ever as far as connecting abstract theory to real-world outcomes.

Besides the SVM: the VC dimension started out as a lemma regarding set counting, and he pushed it to the surprising (even shocking) conclusion of universal consistency for very general classes of estimators.

<comment><USER5> I guess it depends on what kind of semantics you apply to "theory guy". In my mind it's not at all dismissive.

I mean it in it a foundation sense, rather than an applications sense. He has done great work with a whiteboard and pure thought, without the need for terabytes of data and thousands of machines.

<comment><USER6> Remember, though, that the AT&T group Vladimir came from, and that informed his work, was much in the mold of linking theory and practice. Where "practice" (at that time) was working on the handwritten digit problem -- the now-cliche NIST dataset.

</comment></comment></comment></comment></comment><comment><USER7> I'm probably not the only VR nut who confused the person in the title with Vladimir Vukićević, the Director of Engineering of Mozilla who has done worked on some Oculus-centric web vr stuff for Mozilla.

[http://blog.bitops.com/blog/2014/06/26/first-steps-for-vr- on...](http://blog.bitops.com/blog/2014/06/26/first-steps-for-vr-on-the-web/)

</comment><comment><USER8> A few weeks ago an article on Nautil.us about innovations in machine learning. Vladimir Vapnik was mentioned, specifically how he used poetry to teach a machine handwriting. Very fascinating article in general:

[http://nautil.us/issue/6/secret-codes/teaching-me- softly](http://nautil.us/issue/6/secret-codes/teaching-me-softly)

</comment><comment><USER9> Never heard of the guy. Who?

<comment><USER10> "The original SVM algorithm was invented by Vladimir N. Vapnik" [http://en.wikipedia.org/wiki/Support_vector_machine](http://en.wikipedia.org/wiki/Support_vector_machine)</comment></comment>


Bill Gates is funding new factories for 7 potential coronavirus vaccines - <AUTHOR> https://www.businessinsider.com/bill-gates-factories-7-different-vaccines-to-fight-coronavirus-2020-4 <comment><USER2> The Gates Foundation still has a bit to go before it surpasses the Rockefeller Foundation (which funded Norman Borlaug) but its working on it. I'm glad to see someone taking such a forward looking view in this crisis. The people keeping us alive now and the people hammering away at cures are doing phenomenal and necessary work but it's also good to have people asking "What _unusual_ thing would we wish we had done 6 months out" and then doing it.

</comment><comment><USER3> All his investments are sensible and can actually help humanity.

Is the only person from Silicon Valley trying to make nuclear happen and happen cheap.

<comment><USER4> Microsoft nor Bill are from Silicon Valley.

</comment></comment><comment><USER5> SARS 1st emerged in 2002.

18 years passed without a vaccine.

Was there a recent breakthrough in medical science.

Which now makes a vaccine plausible?

<comment><USER6> The greater panic creates bigger revenue this time.</comment></comment>


China and the Difficulties of Dissent - <AUTHOR> https://quillette.com/2019/08/05/china-and-the-difficulties-of-dissent/ <comment><USER2> > _A bill was brought forward by Hong Kong's legislature which would allow > suspected criminals to be sent to face trial and imprisonment in mainland > China._

Shouldn't that be "people suspected of having committed a crime in mainland China", not just "suspected criminals" in general?</comment>


Show HN: Review my new app grndctrl - the dashboard for your wallet - <AUTHOR> http://grndctrl.com/

<comment><USER2> Looks pretty :) Conceptually it's decent. However I don't think I'll be able to keep up with adding all my expenses.

What you really need is some sort of import function. My internet banking lets me export csv files (in many flavours). Importing these once a month would probably be ok.

My csv files also have a text for each transaction (also from my visa card). Being able to group transactions based on this text would be nice. Eg. all transactions with Coop, Kiwi, Meny or ICA should be grouped into groceries.

<comment><AUTHOR> Thanks very much - I didn't know that banks did that (I'm pretty sure the ones I'm with in the UK don't), but that does sound pretty useful - I'll look into it.</comment></comment>


Ask HN: Should I put my github profile on my Resume? - <AUTHOR> I don't have much stuff on github, and all (2) projects are just things i did for fun just out personal interest.<p>But nonetheless i am somewhat proud of the little bit of work of mine that is up there.  Should I put the url in my resume?  Does anyone else do this? <comment><USER2> Yes. That is how I got my current job, and exactly how freelance hirers decide they want to work with me.

My theory is that for a developer, a LinkedIn profile is less useful because it basically just states who you know and what you focus on. Twitter accounts show nothing other than that you exist. You likely want to hide your Facebook - my boss was not my friend until after he hired me ;)

A github account is so much more than a blog. A great one need not have many repositories, nor many followers. It just needs to show that you:

\- Can Program

\- Document your code

\- Use version control well (or at all)

\- Love to program

A github account is an easy way for non-designers and non-frontend developers to have a portfolio of their past work. It's also a great way to exercise your mind outside of work.

Nota bene: Make sure you legally can write open source. YMMV, but state law might actually back that silly form you signed when you were hired. It helps when your open source code has nothing to do with your actual job.

</comment><comment><USER3> Yes! And there are other HN threads with similar questions:

<http://searchyc.com/github+resume>

</comment><comment><USER4> Sad but true: Simply demonstrating you know what Github is would put you ahead of half the people who apply for our Rails jobs.

</comment><comment><USER5> Definitely. Many professions have some kind of portfolio of previous work to demonstrate to a potential employer. Since it's common in the development field to not be able to show any source code you have written from a prior company, any kind of visible open source code you might have should definitely be on a software developer's resume.

</comment><comment><USER6> Let me piggyback on this one, as it's something I've thought about for a while. I am a committer for an Apache project. Not a major one, but I have the email address to prove it. This happened because I submitted a small patch for a new feature and asked some good questions and they asked me if I wanted to be a committer. Since then, I haven't had much to do with the project (no fault of my own, it's just a solid code base that isn't too popular)

Do I put that on my resume? At what point do OSS contributions become too small to mention?

</comment><comment><USER7> Any contributions to Open Source Projects, your own projects that you've released, and notable contributions should be shared. Similar to how a designer has a portfolio. If you have a tech-related blog you might want to include that as well (but not your personal ranting and raving blog about how sad you are and that your kitty is ignoring you again.) That's just creepy.

</comment><comment><USER8> For hiring, sometimes I just want to see the candidate's github account and tech blog. That will say more than the old school resumes.

</comment><comment><USER9> Absolutely. Github profile (or even knowing what Github is) puts you way ahead of many resumes.

</comment><comment><USER10> Absolutely. At worst it adds another dimension to who you are and what you can do, at best it might let you sail past tedious technical quizzing.

See also: <http://news.ycombinator.com/item?id=1708328>

</comment><comment><USER11> The company I work for is currently looking for a Rails developer, and I'm first-line in the screening process. A Github profile is a huge plus, and if there's good code in there and/or decent open source activity, it's a major, major bonus.

</comment><comment><USER12> Definitely. If you have one on your CV I'll check it out, and it gives me things to discuss with you in the interview that you'll be more comfortable with.

</comment><comment><USER13> For sure, I did : www.metalcat.net

Even though I've just opened an account and there is nothing on there yet, though I link to all things that are _me_

</comment><comment><USER14> If i were a prospective employer, i would definitely find that a plus.

</comment><comment><USER15> It depends on how good your code is ;)</comment>


Alan Kay's list of recommended reading - <AUTHOR> http://www.squeakland.org/sqmedia/books/book_list.html Something I find fascinating about this list is how diverse it is.  Out of 100 or so books, only five relate directly to computers.  The others come from a multitude of fields. I suspect such breadth is common amongst most of the greatest software innovators - people like Engelbart, Kay, etc.  Knowing how to program is useful, but without breadth (and some depth) in other areas, your innovations are unlikely to have depth of their own. <comment><USER2> John Walker, founder of AutoCAD and programming demi-god, has a reading list that will blow your mind: <http://www.fourmilab.ch/fourmilog>

I've been tipped off to several good books here.

<comment><USER3> Not to mention this...

<http://www.fourmilab.ch/hackdiet/>

</comment></comment><comment><USER4> No Aristotle in the philosophy section?

<comment><USER5> Wow, I can't believe this is here! I was just thinking that and then I thought "No one is going to care" and there you were, caring. Thank you!

<comment><USER4> As a programmer I especially care as the epistemology in Aristotle's Organon lies at the core of how our startup models concepts and logical relations between them. Fred Sommer's work on extending that is also extremely helpful, not to mention H. W. B. Joseph's incredible book on logic, the best I've ever read (and I read many) _An Introduction to Logic_.

</comment></comment></comment><comment><USER6> He's read his share of books...

<comment><USER7> of highly theoretical books..

<comment><USER6> about a wide variety of topics...</comment></comment></comment>


Closure Compiler: a tool for making JavaScript download and run faster - <AUTHOR> https://developers.google.com/closure/compiler/ <comment><USER2> The title of this submission omits the best part; closure provides static type checking. That is more valuable to me than the dead code removal & minification.

I just discovered an amazing and nearly undocumented feature of the Closure Compiler: the --module flag.

One of the most inconvenient parts of using closure is having to compile each page separately. That's what the Closure docs say to do: [https://developers.google.com/closure/compiler/docs/api- tuto...](https://developers.google.com/closure/compiler/docs/api- tutorial3#separately)

That means if you have 10 pages, you have 10 compile passes, even if 95% of your code is shared. But, it turns out you can run a compile pass and output multiple compiled .js files simultaneously! This has cut my build times by 10x.

So, anyone with long build times due to multiple separate builds, poke around and find out how to use --module!

<comment><USER3> I think it's likely that long-term, the approach FB took with Flow (or more general Abstract Interpretation methods) should be able to handle more cases with less effort on the developer's side (albeit with increased computational costs).

The modules/"code motion" is a bit strange at first glance, but definitely a huge boon for building debuggers/admin interfaces/etc. that you don't want included in your main application. David Nolen wrote about this earlier this year when support started landing in ClojureScript [http://swannodette.github.io/2015/04/07/in-stillness- movemen...](http://swannodette.github.io/2015/04/07/in-stillness-movement/)

Edit: wrt Flow, specifically referring to FB's approach to retrofitting type- checking into a largely dynamic language. Thanks to swannodette for pointing out the ambiguity.

<comment><USER4> It's not clear what you're referring to wrt. "the approach FB took with Flow" and Abstract Interpretation. Type checking? Dead code elimination? In anycase, Google Closure Compiler also leverages Abstract Interpretation.

<comment><USER3> Thanks for pointing out the ambiguity.

Closure would probably be the most interesting (or close to the most interesting) project to work on inside of Google-proper, for me personally. That said, Google's approach is very much on the opposite side of FB's, in that Google expects the vast majority of code to be written for it. FB is dealing with a legacy codebase and has fewer engineers, so has to strike a different set of tradeoffs - less up-front work to integrate their tooling for potentially less benefit than something like Closure can deliver. It's interesting to see the two different approaches.

Anyway, this thread is about Closure, which enables ClojureScript, which is my go to language these days. The developers working on the compiler and the stdlib (which is amazing) should feel proud about all the people they've enabled.

</comment></comment></comment></comment><comment><USER4> Google Closure is not only a useful tool at the command line, it's also an incredibly powerful framework for manipulating, analyzing, checking, and producing JavaScript in a dizzying number of ways. And now thanks to Java 8's Nashorn you can skip the Java and script it quite productively with JS, [https://gist.github.com/swannodette/aad077de18309a08cff3](https://gist.github.com/swannodette/aad077de18309a08cff3)

</comment><comment><USER5> Having used both this an Uglify... I can't recommend this.

It's slow. Like... really slow to build. Uglify takes ~10seconds on my code whereas CC took around 10 minutes. Plus the performance benefits - while real - provides very little useful speedup that the V8/whoever JIT won't do anyhow. Even in tight loops.

It's VERY cool, but will add minutes to your deploy/compile time for very little practical benefit. If you're doing a ton of data processing on the client (WHY??) then I guess it might be useful... maybe.

That said - I'm glad it exists. It's a technological benefit even if it's not practically that useful. Those who compare it to the C++ optimization flags are being hyperbolic however: C++ isn't a JIT compiled language so it's Apples to Oranges.

<comment><USER6> I work on Gmail/Inbox and not even our codebase takes 10 minutes. Closure Compiler does not need to be constantly run in optimized mode during development. Type-checking only mode is faster, and engineers at Google typically develop code in uncompiled mode, and let the continuous integrations server run the fully optimized build + integration tests.

Secondly, this isn't about strictly speeding up runtime performance, but startup latency. The biggest use of Javascript compilers is shrinking download size. The effects of even a 10% code size reduction are readily apparent in 95%tile latency graphs. On mobile web, it's even more of a benefit.

Third, on a large codebase, like Gmail, Docs, Maps, etc the type checking provided by Closure is invaluable.

Forth, Closure provided a good module system for JS for far longer than any alternative, and like GWT, it's over 10 years old. That module system allows for cross-module code motion optimizations, that make it easy to structure your code for maximum readability and productivity, but to ship it down the wire in a way that only the code that is needed immediately is retained, and "dead code" is moved into late loaded modules.

Have a look at [https://photos.google.com/](https://photos.google.com/) Most of the files loaded are tiny. Why? They're globally optimized, uglified, and dead-stripped together, but code is moved around between fragments depending on when, not if, the code is needed.

Soap Box Time: The way your message goes over the top reminds me of a frequent irritation I have with part of the JS community, I guess I'd call it the "tools derangement syndrome". People who chafe at any structure imposed, be it optional types, syntactic-sugar Classes in ES6, IDEs, build processes, dismissing the benefits, or overplaying the downsides.

That's fine if you don't have a lot of code, but if you have a big enough project that Closure would take a long time to optimize, you are exactly the kind of scale of project that needs a type checking globally optimizing compiler.

Closure compiler is extremely practically useful. Without it, Gmail, Maps, Docs, et al would be far larger applications that consume more resources. It's simply the best Javascript optimizer on the market by far.

<comment><USER5> > I work on Gmail/Inbox

Hi there, love the work you guys do. For perspective: I used to be the Closure cheerleader in our company. You don't have to sell me on it, I know it has very good features.

> not even our codebase takes 10 minutes

It's probably better than ours. Not going to argue that. I think if our codebase wasn't a giant legacy beast it would perform better. It doesn't though :(

> engineers at Google typically develop code in uncompiled mode

Well we did that too, but when we had to bundle everything and compile.. it sucked. We managed to get it down to about ~3 minutes with less advanced options but at that point Uglify was on par with it size-wise so... _shrugs_

We took development time over a minor (basically insignificant) startup latency improvement.

> on a large codebase [..] the type checking provided by Closure is > invaluable.

I don't disagree with this but I find it best to separate the two out (for example, with something like Flow, etc) rather than have the whole bundle/compile step fail. But it's a good feature.

> Closure provided a good module system for JS for far longer than any > alternative

True, but if you're using ES6 you get a better one now so I can't really say this is a _plus_ anymore. If anything it's bloat now.

> The way your message goes over the top reminds me of a frequent irritation I > have with part of the JS community, I guess I'd call it the "tools > derangement syndrome". People who chafe at any structure imposed, be it > optional types, syntactic-sugar Classes in ES6, IDEs, build processes, > dismissing the benefits, or overplaying the downsides.

That's not what I'm doing. I'm saying _in my experience_ and _on our codebase_ it's not been worth using. I'm sure it will be for many people but I can't recommended right now. That's a personal perspective sure; never claimed it wasn't.

Ironically I'd say you're doing the exact thing you're arguing against - getting massively riled up over criticism of your favorite tool chain.

> That's fine if you don't have a lot of code,

Yeah, I do. A lot. Like... a lot. Like... over 3,600,000 LOC. It's just it's clearly not the kind of code and/or project that CC is fast at optimizing _right now_. That's on the project: it's very legacy and bloated tbh. I'm working to fix that as we speak ;)

> Closure compiler is extremely practically useful.

For projects that it's useful for, yes. It's a tautology. However for my project: wasn't at all. For projects that really just want minification and obfuscation: it's also total overkill.

I'm not saying its bad, GOD NO! Not at all, just that it was - for the large codebase we have - really not the best choice. That may change as our project gets cleaner, better organized, and less legacy. Right now though we're not there.

I'm not attacking that CC exists, I was providing an alternative perspective from the love-fest in here: where I've found it lacking. Blind devotion isn't good for any project. It's a good project but it doesn't help _everyone_.

<comment><USER6> If you just want minification/obfuscation (not dead code stripping), sure, CC is overkill. But if you've got a 3.6M LOC shipping to consumers and not a B2B/intranet app, I can't believe you wouldn't care about an extra 10-20% dead code stripping, that's a non-trivial improvement.

Also, have you tried it recently? AFAIK, there was performance work done on it over the past year or so, speeding up the type checker and other parts of the compiler.

My view is generally, it's better to spend time at compile time. Even if a fully optimized build took 10 minutes, it's not a big deal. Even in an uncompiled mode, presumably your integration tests on a large app can take minutes to run anyway, and with such a large app, you may have a Q/A process as well. That is, your releases will be gated by other factors, not compile times, and so a few extra minutes to save 100k downloads * number of users is a big benefit for your user base and a few minutes of your time.

I would say that if you have any deferred loading, CC's cross module code motion is a fear that all of the other existing tools lack and it can get you far far more than 10% reduction of your initial load depending on how your app is written. Generally the larger the app, the more likely transitive dead code will be pulled into the initial download without something like CC.

<comment><USER7> Since we're reasoning about a concrete case (abrinthebay's codebase): Wouldn't the amount of code-stripping benefit be directly proportional to how much unused code the codebase has?

It's possible in abrinthebay's scenario, they simply haven't crammed in so many Javascript libraries that the code-stripping can find 10-20% unused code.

(I'm also having a hard time avoiding calling "the code stripper yanks 10-20% of my code" an indicator that one's choice of libraries is wastefully large, but that's a separate thread of debate).

<comment><USER6> It's unavoidable in a large project unless your build dependencies are down to the method level. Typically library targets don't supply a single method, they supply a file which has a number of methods, and not all of them are used.

But even in the case where you don't get dead stripping, you'll still get deferred code motion. And even if you don't get deferred code motion, you'll still get better renaming, because with type analysis, you can know which properties are disjoint from others.

At some point the argument gets into the "I don't need a C compiler, because I already write fast, efficient ASM code" territory. If your code base is perfectly gardened, ok, you don't need any compiler tools. The statistically likelihood of that situation remaining stable as your project ages and adds more developers approaches zero IMHO.

</comment></comment></comment></comment></comment></comment><comment><USER8> How can it determine dead code for such a dynamic language like JavaScript?

Is it limited to obvious stuff like things after a "return;" statement that cannot run? Because I don't see how it could remove unused functions when you can invoke them in such indirect ways: myobj['f'+'oo']();

<comment><USER9> Have a look at the advanced compilation option: [https://developers.google.com/closure/compiler/docs/api- tuto...](https://developers.google.com/closure/compiler/docs/api- tutorial3?hl=en)

Basically when enabled it will rewrite normal property access, e.g: `myObj.foo` to something like `a.b` but wont shorten string literal access, e.g `myObj['foo']` just becomes `a.foo` which you would use for any API's you want to export.

For a real-world example I use string literals for declaring jquip's public API:

        p['removeAttr'] = function(name){
            return this['each'](function(){
              if (this.nodeType == 1) this.removeAttribute(name);
            });
        };

Which closure advanced rewrites to:

        q.removeAttr=function(a){return this.each(function(){this.removeAttribute(a)})};

Original: [https://github.com/mythz/jquip/blob/master/dist/jquip.all.js](https://github.com/mythz/jquip/blob/master/dist/jquip.all.js)

Compiled: [https://github.com/mythz/jquip/blob/master/dist/jquip.all.cl...](https://github.com/mythz/jquip/blob/master/dist/jquip.all.closure- advanced.js)

<comment><USER10> How did it know it could leave out the `this.nodeType` check?

<comment><USER11> If it can prove that it will always be 1 (ie by code not shown) it will be removed.

<comment><USER10> Yeah, I was curious how it could prove that in this specific case. Very neat, in any case.

</comment></comment></comment></comment></comment><comment><USER12> I've been using Closure Compiler with ADVANCED_OPTIMIZATIONS (which does the dead-code removal) for soundslice.com for several years. It is truly awesome!

Check out 39:30 in my 37signals talk at [http://37signals.com/talks/soundslice](http://37signals.com/talks/soundslice) to find out more about it.

The downside is that, in order for the dead-code elimination to work properly, you need to make sure to "export" things that aren't explicitly called in your JS module. For example, if your JavaScript module just provides some functions that are called by a web page, you'll need to make sure those function calls are "seen" by the compiler so that it doesn't delete them. It just takes a bit of time and thinking to set this up; I believe it originally took me a day to do so for Soundslice.

</comment><comment><USER13> Why is the closure library not as popular as other alternatives (ex: jquery)? It looks like a solid library, used by gmail, google docs and other google apps, I'm guessing is the java requirement for the compiler.

<comment><USER14> Because really taking advantage of it (enabling advanced compilation options) requires using a fairly specific subset of the language otherwise it will DCE half the project. Integration with "regular" javascript libraries can also be annoying.

ClojureScript uses Closure as an optimisation backend, since the primary cljs compiler is already in java.

<comment><USER15> FYI - I'm fairly certain that CLJS does not use Google Closure because it is "already in java", but rather because of it's maturity and awesome features like DCE.

[https://github.com/clojure/clojurescript/wiki/Rationale#goog...](https://github.com/clojure/clojurescript/wiki/Rationale#google- leads-the-way)

<comment><USER14> This and that are not exclusive. There are good reasons to use closure, but would integrating closure and the tooling it requires even have been considered had the cljs compiler been in anything but java?

How many alt.js languages implemented in !java use closure?

</comment></comment></comment></comment><comment><USER16> I keep trying to use closure on my projects but it doesn't compile jQuery to working code. I always get errors after concatenating and using it on my sources and this always just brings me back to uglify.

<comment><USER17> [https://code.google.com/p/closure- compiler/wiki/ExternsForCo...](https://code.google.com/p/closure- compiler/wiki/ExternsForCommonLibraries#jQuery)

</comment></comment><comment><USER18> I have used the Closure Compiler for years (and contributed too!).

It is really a fantastic tool (along with the Closure Library and other members of the Closure family) for anyone that values maintainable, solid JS.

I can understand why it's not more popular; it feels a lot like Java -- industrial strength, non-flashy, and perhaps a little boring. It's also a little hard to setup for a real project (tutorials could be better).

It has been around since the creation of Gmail, and will be around to stay for years to come. (Though it has improved substantially over the years.)

</comment><comment><USER19> Babel is working on minification[1] /dead code elimination [2] as well now

[1]: [https://github.com/babel/babel/issues/1828](https://github.com/babel/babel/issues/1828) [2]: [https://github.com/babel-plugins/babel-plugin-dead-code- elim...](https://github.com/babel-plugins/babel-plugin-dead-code-elimination)

</comment><comment><USER20> Anyone wants to compare this with TypeScript?

I'm using Visual Studio for the backend, in case it matters.

</comment><comment><USER21> with haxe you can have the same effect but with:

\- a better dead code elimination thanks to Static Type System,

\- code generations with macro functions,

\- inlining of functions, constructors, and objects

\- static code analyzer

all this things for all the haxe targets(javascript,flash,php,python,java,c#,c++,neko and work in progress lua)

<comment><USER22> But, for what it's worth, without a "seamless JS interop" \- and without Haxe _being_ JS.

For me these are of no concern and I'd probably use Haxe had I the right project for it, but for most JS-and-only-JS people it's a deal breaker. I will never be friends with one of those programmers.

</comment></comment><comment><USER23> how does this compare to uglifier?

<comment><USER5> Different beasts. A direct comparison is unfair to either of them.

Uglify does minification and dead code removal. That's really it.

Closure does a lot of type checking, code _rewriting_ , and has a very specific subset of JS that you'll have to use if you _really_ want to get the best performance out of it... _and_ does minification and dead code removal.

If you just want minification/dead code removal then Uglify is waaay faster, javascript native, and almost as small (105-120% of the size of Closure compressed code, depending on the code). It also doesn't use the JVM so that can make dep management/ops simpler if you don't already have java in your stack. YMMV.

If the advanced stuff sounds like something you'd want/need (if you have a large project and don't mind writing to the Closure optimizations) then Closure is certainly worth looking at. It's very good at what it does.

Choose the right tool for the job and all that.</comment></comment>


UK Customs drilled holes into my hand-carved table imports... what should I do? - <AUTHOR> I recently exported 4 beautiful, hand painted end tables from Pakistan to the UK, sent by courier. The packages were perfectly fine when I shipped them form Pakistan but when I received them in London, the tables had numerous holes drilled into them; holes the size of a ballpoint head.
The tables are completed ruined, and there's no way I can use them now. GBP 400, down the drain. No one from Customs called me to notify me, nor did they leave a slip with contact information.
This is really pissing me off. I assume they were doing a drug check, but surely there has got to be a better way to do this. Do I have any recourse to get UK Customs to compensate me? How can they just get away with this?
The tables are items that I was importing to sell on my e-commerce/ home decor website, www.relovedapp.co.uk. <comment><USER2> They may not necessarily have been checking for drugs - Customs may have been checking for bio risks. For example, here in Australia, only treated wood may be imported to prevent the introduction of pests and diseases. Unfortunately, treatment quality isn't easy to check and if the treatment is suspect, then Customs will drill to see if there are bugs etc.

A quick Google search ("Importing wood to the UK") confirms that UK Customs do the same.

</comment><comment><USER3> Really ? A hole the size of a ballpoint head ruined the table ?

It's a £100 table after all, not some old, 300 years plus table. So I think your clients won't expect them to be that good in the first place considering the price and quality.

<comment><USER4> I wouldn't buy a $50 table from Ikea with a hole in it.

You spill anything in that hole and the wood will start to warp.

OP could use a cheap filler and hope nobody notices.

</comment></comment><comment><USER5> Get a lawyer.</comment>