Why do we keep using Facebook? - <AUTHOR> https://hackernoon.com/why-do-we-keep-using-facebook-ee59ded4602d <comment><USER2> Full disclosure up front: i work for a company which sells ads based on user behavior.

I get that it's creepy, "spying" on users, but really, would you rather have ads from services which know nothing about you? Companies want to buy ads that users are interested in, obviously. If I have a company selling vegan food i would optimally only buy ads shown to people who are already vegan, right? And they probably don't want ads from your local butcher, but might be interested in my new awesome vegan food.

Again, i get that it's creepy, especially on Facebooks scale, but I feel the discussion gets lopsided sometimes. I don't use Facebook much, but I'm fine with that my browser behavior is tracked.

<comment><USER3> > would you rather have ads from services which know nothing about you?

Yes, absolutely. Advertisements are not something I seek out. In fact, I do my best to minimize any exposure to them. If they know about me, they are more effective.

I understand that I am not immune to the ability of advertising and marketing to influence behavior. I'd rather start a purchasing decision with zero information than from a biased position because of brand familiarity or other psychological tricks.

If you consider advertising to be the commercial implementation of psychological tactics designed to manipulate your behavior based on decades of data and research, why _would_ you want to provide advertisers with greater ability to manipulate you?

If it's just "show vegan ads to vegan people" why is advertising such a cornerstone of modern infrastructure? I trust the big advertising networks less than a sleazy used-car salesman.

<comment><USER4> Advertising is part of the modern infrastructure because almost every service charges zero dollars for use. So you're asking the wrong question: why won't people pay for social networks?

<comment><USER3> That's a non-starter. There hasn't been a large social network with an ad- free, analytics-free option you could pay for.

</comment></comment></comment></comment><comment><USER5> Based on the other comments so far, it sounds like HN'ers mostly don't use facebook and don't miss it. Fair enough, but I'm in the same camp as the article's author, and looking for a way out. I might be unique, but I didn't really have much of a social life before facebook. That's not causal relationship - before 2007ish I was a very introverted kid who didn't know how to make friends or form strong relationships. All of my good friendships came into existence after about 2009, when I started to learn how to socialize better, and for the most part, facebook is my main contact point with all those people. That's only because facbook was the dominant communication method during that time. But there it is, and I'm stuck with it, and I can't seem to get unstuck. I want to hear about the new babies, jobs, city moves, projects, and parties that people have going on, and facebook is the best way to get that info. But 90% of what you get there is political garbage, pointless memes, MLMs, and facebook's own "manufactured content". It's frustrating and it's making me unhappy too.

<comment><USER6> > Based on the other comments so far, it sounds like HN'ers mostly don't use > facebook and don't miss it.

Let's just say that the "sour grapes" crowd are much more likely to pile on to stories like this.

Facebook provides me and my friends with immense value, I'm a very happy user, and as long as that value is higher than the annoyances of using Facebook, we will keep using it.

The reality is that Facebook's DAU numbers and engagement metrics just keep on rising. A bunch of disillusioned users on this forum is not a negative trend. Facebook's biggest enemy is themselves, because the corporate machine pressures everyone there into change for change's sake, which fuels user fatigue, which in the end will lead to some sort of exodus.

<comment><USER7> It's not like having and using Facebook is necessarily unfeasible for people who aren't crazy about it, which makes that a bad metaphor. Having a case of "sour grapes" over Facebook makes as much sense as having a case of "sour grapes" over pie. Just go out and buy some if you want. But what makes it a _really_ bad metaphor is that the likelihood of someone using Facebook or not on a daily basis depends on how much value they attach to it. But why would anyone resent others for doing stuff that they don't care about?

Now, if you think Facebook provides with you with something of value, good for you. You're using a service and you're happy about it. But that says nothing about the preferences of others.

<comment><USER6> > But that says nothing about the preferences of others.

That was exactly my point. OP claimed that it seemed like people on HN weren't using it based on the comments to this thread so far.

I'm claiming the opposite, that a majority of HN users are also relatively happy Facebook users, but that those users won't comment on threads like this. Because these threads always attracts the contrarians and turn into a pissing contest about who deleted their FB account first.

</comment></comment></comment></comment><comment><USER7> How much does the average user actually use Facebook, specially nowadays?

I'd be rather surprised if the total amount of time spent on Facebook didn't have something like a power-law distribution. The only reason I have an account at all is so that, in the unlikely event that I might be notified of something that I actually care about or that someone might try to reach me, I'll know it. And I'm sure that is true of at least a portion of other users.

Having Facebook today is like having a landline seven years ago. I wonder if in seven years Facebook will only be used for marketing, too.

<comment><USER8> Zuckerberg and Facebook are smart. They know FB isn't for everyone, that's why they have Instagram and whatsapp.

</comment></comment><comment><USER8> Facebook says that 5.5%-11% of accounts are "fake". I'd guess the number is higher. There is so much spam, fake friend requests, and general internet hucksters on FB, that I've lost trust in the platform.

Real-life people send me friend requests a few times a week, but I easily get 5-10 spammer friend requests a day. I don't know if stuff I'm reading is (1) just there; (2) put there due to an algorithm trying to cater to my tastes; (3) inserted by spammers; or (4) paid for by god-knows-who.

Every time I log into FB, I feel like I'm stepping into a room with people I sort of recognize but don't know. On the internet, I rather make conversation with true strangers on Hacker News than these quasi-strangers on FB.

<comment><USER9> I don't know what the average person's FB experience is like, but yours sounds very different to mine. I rarely get fake friend requests.

<comment><USER8> Not sure what I'm doing, I got 6 requests in the past 2 days. As far as I can tell, all but one are fakes. Sometimes it's hard to tell if it's a fake or a person who I met only briefly.

</comment></comment></comment><comment><USER10> I stopped logging to Facebook years ago. I also haven't had much any interesting long-form online discussions in years and I miss them. Several people I know say Facebook comment threads and a curated friend group are just the sweet spot for them now. Still not going to log into Facebook, but I think there's an axis where my life is worse for that.

</comment><comment><USER11> It's been 2 years that I have deleted both my FB accounts (one for family and friends, the other for business), my IG account and my Twitter account. All accounts had many years of activity and substantial following. I never looked back and I am very much happier.

What made me decide is that I realized that I had become an self inflicted obligation to create content to feed my online personas every days. Basically I was doing things in my real life that I did not want to do just to feed a virtual person's life (mine) on other people's websites to impress my friends and contacts. This is insane.

<comment><USER9> I've heard other people make the same point, and I don't understand it. Why did you feel obligated to create content? A lot of the time I've used it, I've personally been happy just seeing what other people have posted.

<comment><USER12> I've slowed down a lot lately in my posts to FB and IG. I think the turning point for me was when I saw a friend at a party (someone I don't see often and don't have much of a one-on-one relationship with), and she told me something to the effect of "I decide where to eat based on the photos you post on IG". I'm sure she was exaggerating, and certainly didn't mean to imply any sort of obligation on my part, but it hit me... why am I posting all this stuff?

I've never had any burning desire to be some sort of "online influencer", so what was I really doing? Either I'm bragging about all the cool places I've been to (which I think would be pretty lame of me), or I'm in effect advertising for the restaurants I visit (which isn't too objectionable, but certainly isn't my job). If I were posting things for artistic or comedic value that I wanted to share, or posting actual photos that illustrated what's going on in my life, I'd feel better about it.

So I post less.

And as for FB, my feed is overloaded with politics and social justice posts. Both of which are important, but it gets to be too much, very quickly. And it's not what I want to use FB for -- I have news aggregators for those sorts of things. I used to have pinned tabs in Firefox open for FB and Twitter, but upon closing them a couple months ago I find I'm much happier. I can still manually navigate to FB when I need to, and I still have the mobile app, but I think I'm starting to find the right level of engagement with FB that makes me happiest and gives me the most utility.

</comment></comment></comment><comment><USER13> The blog poster seems to be missing the critical point - maybe he's never smoked. It's an addiction.

To your phone, to social response, to 'new'. The way way to give up is to treat it like an addiction.

<comment><USER14> Actually, I would say that you were missing the critical point that he is making in the article. It's not an addiction in this case, I also would like to get off Facebook, and I am certainly not addicted to it since I check in on it maybe once a month. But I stay for the same reason the author does, which is that everyone I know is on there, and I don't have an easy way to stay in touch with them otherwise.

</comment></comment><comment><USER15> I haven't used FB for years, I don't even have an account, and don't miss it at all.

When I want to connect with my friends I use WhatsApp, for brainless time passing I use Reddit and I use HN for stimulation and discussion.

<comment><USER12> And that's why FB's acquisitions of Instagram and WhatsApp were so brilliant: Zuck recognizes that he's going to inevitably lose some people from FB, so he's diversified.

</comment></comment><comment><USER16> As a counter point to the article and most of the comments on HN, I like Facebook don't find it makes me feel bad. I suspect that in the studies showing a correlation between feeling bad and using Facebook the causation goes the other way. People who don't have enough friends and social life in the physical world both feel bad and go on Facebook as a substitute. This would be a simpler explanation for why they have 2bn users and growing - people like the service.

<comment><USER17> Like in so many situations, causality is more likely to be cyclical than linear. That's how malignant habits work: they appear to easily alleviate a symptom, but thereby prevent actual recovery or growth.

</comment></comment><comment><USER18> Unfortunately, FB is about the only way I can keep in contact with a lot of my old friends since they don't use any of the alternatives and are also scattered all over the world.

What is really creepy though, is signing up for a new account, on a new device, using a fake name, and a different email address, and having FB immediately start suggesting people you've know IRL for 20+ years. I get that there's a million ways they could work out who I am, but the fact that they go to that extent from the get-go is a more than a bit creepy.

I'm actually tempted to do a bit of an experiment next time I go overseas - buy a brand new device, with cash, on the other side of the world and sign up for email and then facebook using just that device and see if they can work out who I am. I'd half expect to see someone in a FB t-shirt lurking in some nearby bushes whispering into a mic...

</comment><comment><USER19> Ok, I am not be the "usual" reader of Hacker News (HN). I am reading HN since 2012 for disclaimer.

So basically, Facebook (FB) is for socializing in real life. Since I am currently in exchange, It is useful to create parties and to invite people to them. It is also useful to talk with your friend on the other side of the earth (more than Whatsapp), to keep up to date with them. And it is also the best way to get into groups, to exchange ideas, or into the group of your university.

So basically, FB is my social life. Do I like that ? No. But would i have a social life without FB ? No. Most of the people here are seeing FB as the devil, but it helps me to invite to parties girls I want to hang out with or get invited to parties, and since everyone (or most of the people, more most of the people) are looking for raising their number of friends on Facebook, it is really useful to connect with new peoples. But, yes, I am invited to parties without FB, but not as much.

Also, for group projects, it is the closest thing to Slack for College students.

So as much as I hate FB, it is really useful, sadly.

<comment><USER8> Have you tried dropping FB? Relying on old-fashioned txt message to ask your friends whatsup?

<comment><USER9> As an aside, it's funny that text messages can now be considered "old fashioned".

</comment></comment></comment><comment><USER20> I removed my account a few months back (you have to request that, you can't delete it on your own, which I think sucks). I did it because I feel that they betrayed our democracy for profit and I do not want to support an organization like that. And that was the feedback I gave them. I do not miss it one bit.

<comment><USER21> If you think companies like facebook can manipulate democracy, you have problems with open democracy, at least information-age democracy, not facebook in particular.

Undergirding democracy is the idea that citizens are intelligent and trustworthy enough to deal with yellow journalism, propaganda, etc. Or, at least, that is a downside of the least bad approach to governance so far.

<comment><USER12> > Undergirding democracy is the idea that citizens are intelligent and > trustworthy enough to deal with yellow journalism, propaganda, etc.

The Nov 2016 US election, and the investigations into news propagation on sites like FB, is outright proof that citizens are in fact _not_ intelligent enough on average to deal with this.

I'm not trying to shit on people or be flippant, but... it's not looking good. Certainly censoring people or legislating FB into oblivion isn't the answer, but I'm not sure what is. "Educate everyone better" seems like a catch-22 at best, likely destined to fail.

And I don't think this is an example of a company influencing elections. FB was pretty unwitting there. Others found creative, unintended ways to use the platform to do their dirty work.

<comment><USER21> There are serious implications to that conclusion. The citizens _are_ the watchers in a democracy. If they can't be trusted to come to reasonable conclusions on their own, there is no other authority qualified to ensure they are properly informed and vetted.

It is circular, to say the least, to have the government regulate how to educate citizens about how to pick the next government.

<comment><USER12> Yep, and that's one of the main reasons I'm finding the political climate in the US so depressing. The answer would seem to be "marginalize people who lack critical thinking ability", but... that's not really a solution.

</comment></comment></comment></comment></comment><comment><USER22> It seems like people becoming increasingly physically isolated and not connecting even with neighbors makes online connections valuable. It's pervasive and avoids moving physically. And of course, the network effect of others being on Facebook.

<comment><USER23> >It seems like people becoming increasingly physically isolated and not connecting even with neighbors makes online connections valuable.

This kind of thinking never held much water with me. You don't get to choose your neighbors, the odds that they'll be compatible with you in the way that might lead to meaningful friendships is extremely low.

None of my parents friends are former neighbors. Lots of them are former church-goers from the various churches they've attended though. I think that shows that you really only need one thing in common to help filter out the majority of the population. If you like bowling, take up bowling, and I bet you'll find quite a few people you get on with quite well. Ditto paintball, and obviously ditto friday night drinking.

But the idea that Facebook is "ruining the connection we used to have with the people around us" is pretty much nonsense. We never really cared that much about the people around us, neighbors were always just acquaintances.

<comment><USER12> Very much agreed. I've lived in the bay area for 13 years, in apartments with at least 20 units in them (usually many more), and I have not known even one of my neighbors. Beyond that, I have a very healthy in-person social life filled with people I've met through other avenues. Even though you'd think it'd be easy to do so, I just don't have much interest in meeting the other people who live in my building.

This isn't universal, of course -- one of my good friends lives in a building with 4 units, and he knows everyone who lives there. Diff'rent strokes, I guess.

I wonder if knowing your neighbors is more of a suburban/rural/family thing? When I was growing up (suburbs of NJ and later MD), we always at least knew the people who lived on our block, even if we weren't close friends with them.

<comment><USER23> >I wonder if knowing your neighbors is more of a suburban/rural/family thing?

Mutual self-interest brings neighbors together. The further out in the sticks you are and/or the lower income your neighborhood is, the more you get out of a firm working understanding with your neighbors.

</comment></comment></comment></comment><comment><USER24> What I have found that everyone uses facebook to post stuff about themselves and voice their "important" opinions on stuff.

Nobody uses it to "connect". Or for sure maybe sometimes but surely it's not the only way that people can connect in these days. I can connect with people in a myriad of ways, as always, even before facebook. I have seen absolutely no change in how "connected" I am after facebook has taken over.

Anyhow if it so important for "connecting" then how come I, without facebook, still am very much connected with my friends and family.

<comment><USER25> > What I have found that everyone uses facebook to post stuff about themselves > and voice their "important" opinions on stuff.

I have got the very same impression. It ended up like a huge ego driven circle jerk. Most "communication" happens passively (likes, post emojis, passive comments, shares). And barely anyone is even interested in provided OC.

Its a sad place these days

</comment></comment><comment><USER26> I don't know about others, but I use it primarily to keep up to date on bands I like, and because it's a convenient way to manage an event and invite people.

<comment><USER27> >keep up to date on bands I like

Specifically for this use case I like Songkick [0]. Lets me know when anyone I'm following is touring near me. Lets you import artists from Spotify too.

0: [https://www.songkick.com/home](https://www.songkick.com/home)

<comment><USER26> I used Bandsintown for the same thing for a while. But neither gives you updates straight from the bands, about contests and other stuff that isn't directly tour-related.

</comment></comment></comment><comment><USER28> I use Facebook essentially as a RSS feed for bands I like since a concert I missed of one of my favorite band in 2007. They were playing in my town and I wasn't aware of it. Since then they split so I'll never see them live.

So I started subscribing on my bands Facebook pages to never miss anything again.

Also using it to comment sometimes.

</comment><comment><USER29> I am in a weird situation where I have to teach people about Facebook, pages and ad campaign while I myself haven't logged (not even for a sneak peek) or posted in a year. That thing is a cancer and one of the aspects of my job is basically to be a Facebook evangelist.

</comment><comment><USER30> In my observation, unhappiness leads to more social media use, rather than the causal arrow going the other way. It's not that Facebook makes people unhappy, but unhappiness that drives many people to post prolifically on Facebook.

</comment><comment><USER31> Unfortunately the amount of groups on Facebook is nowhere else to be found, especially important for people who move/travel a lot. Not to mention the majority of events & co often only is posted on FB.

<comment><USER25> I travel a lot plus mostly live in a different place than i originally grew up with, so moved quite a few times, so have plenty remote friends.

Still i dont miss it and i never felt i should get another FB profile. Even thought i dont had one the last 4 years.

What i am trying to say is that you most likely wont even know how irrelevant FB is for you life as long as you hold on to it for whatever reasons.

</comment></comment><comment><USER32> At the heart of it? The need to connect with others.

(Not saying that Facebook satisfies this need, but it is a need.)

</comment><comment><USER33> Focus on friends that only share memes and Facebook makes you feel awesome

<comment><USER34> During my last days, I spent my time on Facebook for the memes. But I still deleted it anyways

</comment></comment><comment><USER35> I don't use it a ton. I prefer Twitter.

</comment><comment><USER19> Ok, I a

</comment><comment><USER36> Please people stop it. They will inject they agenda on everything.

Trying push they political agenda.

They steal your private information and sell it.

Follow, locate you with they mobole apps.

Prosecute you for liking anything, expose your information to government / CIA officials..

Just take a moment and listen all CIA whistleblower statements..

Alex Jones have been talking about this now over 10 years and still.. there people who just follow the mainstream liars.. quite unbelievable

Why people ? I really wonder so many times the ethos of these companies.. google, facebook, twitter .. all just same big brotherhood company ..</comment>


Julian Assange 'fears for safety of family' - <AUTHOR> http://www.bbc.com/news/world-latin-america-27932384 <comment><USER2> This is our Achilles heel, that we love our families so much. It's tragic that Julian's plight could keep some people from stepping up and doing something they believe is right to do. I admit I have mixed feelings about WikiLeaks and Julian; I'm a patriot before anything else, and have not yet come to grips with whether I believe people like Manning did the right thing. But the shame is that nowaday, hacktivism is a single person's game if you want to step forward. The enemy does not play nice, and fear for family is a valid concern.</comment>


Google is locking people out of their documents - <AUTHOR> http://mashable.com/2017/10/31/google-docs-locking-people-out/ <comment><USER2> The main issue isn't this particular lock out; it's that Google feels it's correct to police documents and lock out users in the first place. Honestly, at this point, if you're using cloud products and lose your data, the fault is solely your own. People should know better than to use tools like this for important data. For example, as a writer of fiction, Google makes it abundantly clear in their Google docs terms that fiction is simply not allowed based on their random criteria (see article for details). My point is that technical people have various solutions to this problem while non technical people are generally left behind. Even emailing a copy to oneself is not always a good backup solution (especially if Google is you email provider). As the world gets more digital, I see only regulation by law that can prevent companies like Google from being judge, jury, and executioner of their users' accounts.

</comment><comment><USER3> This is an old issue from October, Google stated their systems detected false positives. Google claims they're not data mining personal information but using systems to prevent spam, piracy, terrorism, etc. The big issue here is business interruption and I agree with the other poster it's better to run your own NAS. Synology has decent NAS systems which even the lower end systems can run Synology Office, similar to Google's offering.

</comment><comment><USER4> Run two sync'd NAS' in separate locations and run your own cloud.

<comment><USER5> Absolutely. I used to be a great believer in the Cloud until I ran into file- loss problems with Dropbox while travelling in a foreign country where I had a very small monthly internet allowance (2 gig per month).

Since then I have run my own internet file server over the last 5 years. It's not liable to 3rd party terms of use, and it's more secure from unwanted 3rd party access.</comment></comment>


How Font Awesome 5 Became Kickstarter's Most Funded Software Project - <AUTHOR> https://articles.fortawesome.com/how-font-awesome-5-became-kickstarters-most-funded-software-project-4a63c035e84 <comment><USER2> Honestly I've gotten so much value from Font Awesome over the years that it was great to finally support the project – I have a feeling others felt the same way.

<comment><USER3> Same. Backing the pro-version was a no-brainer given how much I've used the icons in the past. It's such a good product I _want_ to give them money even if it was free.

<comment><USER4> I love this. This drives me to do my own thing - a small thing - but I know that if I build it for _the right people_ , some of those people will feel compelled to give me money for it.

Not all, I know, I know, but some. Some is enough. Some is _marvellous_. Some might be all I need to quit my regular day job, which is all I want.

</comment></comment></comment><comment><USER5> Font Awesome was already well known to developers and designers before Kickstarting, so it's no surprise its campaign is a success. If Bootstrap made a crowd funding campaign for instance, it would be as the same level if not more as Font Awesome. Obviously one wants to launch a campaign when a project has some big momentum, not when it's declining.

<comment><USER6> Already well known and they're able to push people to the Kickstarter from their site: [http://fontawesome.io/cheatsheet/](http://fontawesome.io/cheatsheet/)

<comment><AUTHOR> That's another one of the big things. We didn't talk about this one specifically, as it's not as common for folks to have. 1.5M uniques a month has come in handy, that's for sure.

</comment></comment></comment><comment><AUTHOR> Hey folks! I'd love to answer any questions folks might have about running the Kickstarter or Font Awesome in general!

-Dave Gandy

<comment><USER7> How much did making the video cost?

When I first saw it I thought that commercial itself must've cost around the ballpark of the amount you were trying to raise (30k) and can't possibly be worth it. But turns out it was a brilliant move!

<comment><AUTHOR> So first, we got an absolute steal for what we paid for Knox Avenue ([http://www.knox-avenue.com](http://www.knox-avenue.com)). For something similar from Sandwich Video, prices _start_ at $250k. We paid 1/10 that. But again, we got an absolute steal. Knox isn't as famous as they deserve yet. They're ridiculously talented.

Edit: fixed URL

<comment><USER8> Wait so you paid around 25k in hopes of raising 35k, were you expecting to raise significantly more?

edit: apparently they paid 15k in hopes of raising 30k, which is still a lot.

<comment><AUTHOR> Admittedly, we've been a bit light on specifics for price. But that's only because I'm worried it will undervalue Knox Avenue. Those folks can get by with charging a LOT more than they charged us.

Sandwich Video (a much bigger name in this space) starts at $250k for a video. And if you have the budget, they're worth it. Knox Avenue is ridiculously awesome and we were excited to be able to still afford them!

<comment><USER8> Thanks for the reply. Great product and you deserve your pay day. So good job! And as I said can't wait for the release. Going to be a lot of icons that will be put to good use by millions of sites. All the best! Maybe throw a bit of that scratch at the company that made the video. I think that helped you guys out quite a bit.

</comment></comment></comment></comment></comment></comment><comment><USER9> > Those icons are Font Awesome 4.7, which is completely open source so you can > do almost whatever you want with them.

Pro vs Free still bothers me. Couldn't one of the stretch goals been to make all fonts free and open?

<comment><USER10> I wasn't aware of it before your comment, and now I'm confused, just sounds like buying 'Pro' would damage workflow.

Say I have a project on Github, and I want to add some of the new icons I buy - I have to leave the icons out of the repo, and deal with whatever that means for deployment?

<comment><AUTHOR> If you're talking a private repo, that's no problem at all.

As for a public repo, the same applies as to commercial typography. Don't make it available for download.

This is part of why we're doing Font Awesome Pro CDN. Choose your options and icon packs and we'll serve them up for you. And we're making this free for open source projects. It also means you can upgrade to a new version without pushing code if you like.

<comment><USER11> Wouldn't the end-user be able to download it from the cdn anyway? Would an alternative not be to allow them in an open source repo provided that the owner adds a readme to the folder in which the font resides, telling the end- user to refrain from downloading?

Edit: what about an open source non-electron web application? How would they use the font?

<comment><AUTHOR> If someone can see a font, they can pirate it. We just don't want to make it really, really easy.

</comment></comment></comment></comment></comment><comment><USER12> $15K to make a proper video for kickstarter?

This is kind of defeating the purpose?

I mean - there's prob. another $5K in expenses + all the work ...

That's a lot of risk - which is what it takes to be competitive?

<comment><USER13> I think they knew going in from the survey's they did there was going to be huge support. The excellent and slick video they shot lends a perceived value to the product. When you need to capture the viewer's attention for a few minutes, it pays to hire some pros.

<comment><AUTHOR> > it pays to hire some pros.

It certainly does. Arguably the best money our company has ever spent. (Okay, salaries. Because we have a ridiculously amazing team.)

</comment></comment></comment><comment><USER14> This is interesting:

> _believe it or not, trolls are a sign you're onto something. You've upgraded > from indifference to dislike (or outright hate)._

Things that are new and useful create resistance, which is actually a sign there is _something_ instead of nothing.

<comment><USER15> Ehh. Assholes use this logic all the time.

</comment></comment><comment><USER16> I'm curious where the costing came from (since $30k barely pays a good designer for a few months). The reason for asking is that I'm wondering why the original goal wasn't higher? Is it really that you didn't forsee that level of support? This is a common reaction from startups that are amazed that their $10k goal suddenly spiraled into millions. Often the reaction is to add lots of unrealistic stretch goals which delay the project.

As for most backed, I think relaxing the early bird deals clinched it for a lot of people (including myself). I have a lot of respect for Kickstarters that offer a flat pricing for the base product.

<comment><USER17> It's a kickstarter goal, it doesn't have to be all of your funding and why not set the goal low?

Think of it more like a minimum to make the effort worthwhile. If you can get $30k on kickstarter you can probably get a lot more from other channels.

What value do you get from setting a high goal?

<comment><USER16> Seems like pretty sound logic.

Though to answer the second question: there are plenty of cases (usually hardware) where people really underestimate how much things cost to make. I've lost count of the number of stories where startups said "We messed up our mold/printer/fab order which cost us $20k to redo, and then we had no money to make t-shirts".

<comment><AUTHOR> Estimation is key on a Kickstarter. We've got a team of 4 of the best designers and developers I've ever worked with who can deliver beautiful, usable products on time.

It's the highest compliment I can pay them professionally.

</comment></comment></comment></comment><comment><USER18> Either I'm missing something (not uncommon) or, whoever claims this is the most funded software project seems to believe video games aren't software.

Star Citizen ($2,134,374) and Double Fine Adventure ($3,336,371) leap to mind.

I'm actually very slightly surprised to hear that there's no non-game software kickstarter that's raised more than $891,989.

<comment><AUTHOR> Fair enough! We're going by Kickstarter's definitions:

\- Most funded: [https://www.kickstarter.com/discover/categories/technology/s...](https://www.kickstarter.com/discover/categories/technology/software?recommended=false&sort=most_funded)

\- Most backed: [https://www.kickstarter.com/discover/categories/technology/s...](https://www.kickstarter.com/discover/categories/technology/software?recommended=false&sort=most_backed)

I'll link those up in the article. Good point.

<comment><USER19> That's just in Tech -> Software category, not all of Kickstarter.

The most funded projects can be found here:

[https://www.kickstarter.com/discover/advanced?recommended=fa...](https://www.kickstarter.com/discover/advanced?recommended=false&sort=most_funded)

Pebble Time = $20.3M

Coolest Cooler = $13.3M

Pebble 2 = $12.8M

Pebble e-paper = $10.3M

Baubax Travel Jacket = $9.2M

And if you look at the software

\</comment></comment></comment><comment></comment><comment>--

Shenmue 3 = $6.3M

Bloodstained = $5.5M

Torment = $4.2M

Project Eternity = $4.0M

Mighty No. 9 = $3.8M

Double Fine Adventure = $3.3M

<comment><USER20> I think you missed the part where they said "most funded software project", not "most funded project", and that they're using Kickstarter's category's definition of "software".

</comment></comment><comment><USER21> The best part about webfonts is you can block them, glad they decided to do SVG.

>900 requests blocked on [https://articles.fortawesome.com/how-font- awe....](https://articles.fortawesome.com/how-font-awe....). and rising by 1 every second. Quite aggressive font fetching script doesnt seem to get the hint.

</comment><comment><USER22> Glad to see SVG is an option. The icons are great but icon fonts are dead at my shop (mostly for the reasons Github abandoned them).

<comment><AUTHOR> Great that you're excited about the SVGs! We wanted to add more formats so as many folks as possible could use them. For a lot of folks, icon fonts are the way to go. But other folks want SVG. We get that, so we're adding them!

</comment></comment><comment><USER23> I bet they did something besides this. How did they get people to VISIT THEIR PAGE on kickstarter? Were they featured on KS front page? Featured elsewhere? How did the word of mouth spread? THAT IS WHAT I WANT TO KNOW

<comment><USER24> They promote the campaign on their site ( [http://fontawesome.io/](http://fontawesome.io/) ). A lot of people (including me) already visited the site occasionally to take a quick glance on the cheatsheet. I think that's probably where the most traffic originated from.

<comment><USER23> How do you know? Why is their site so heavily trafficked?

<comment><AUTHOR> We posted the info he's referencing elsewhere in the thread. We're used on roughly 1 in every 3 new websites that gets made.

<comment><USER25> So you're like the Wordpress of icons.

</comment></comment></comment></comment></comment><comment><USER26> Wow, I would have backed this. There's much useful insight in the article I wish other KS would heed - especially regarding stretch goals; I've seen soo many KSs derail because they, in desperation, added stretch goals that they could execute. (But I'm done done done with KS; I've suffered too many burns and scams).

</comment><comment><USER27> At the bottom of the kickstarter they have a link to Jellop, they run ad campaigns to boost kickstarter projects.

This might be the real story, but not sure since there are no metrics on how much they've helped.

[http://www.jellopcrowdfunding.com/](http://www.jellopcrowdfunding.com/)

<comment><AUTHOR> We tried doing some Facebook advertising ourselves, but it didn't go so well. Jellop has done better, but they're REALLY great for products that have mass appeal.

With our narrower audience, the Font Awesome website has been the biggest driver.

<comment><USER27> Same. We just failed big time on running our own ads for pre-orders for our product[0] on Facebook.

Our take away was just keep doing what works: Engage with our community and keep showing proof of progress and milestones met.

So now that we have our first basic lesson down in connecting products to the right audience, what do you think really activated the majority of purchases?

[0] [https://getasteria.com/](https://getasteria.com/)

<comment><AUTHOR> Three things come to mind right away that seems like contributed to folks pulling the trigger and buying:

1\. Pent up good will from using Font Awesome over the past 4 years.

2\. The product was something folks actually wanted and the price was a great value.

3\. A video that makes folks laugh. Even if just a bit.

</comment></comment></comment></comment><comment><USER28> The video is kinda similiar to the Dollar-Shave-Club commercial ;-) [https://www.youtube.com/watch?v=ZUG9qYTJMsI](https://www.youtube.com/watch?v=ZUG9qYTJMsI)

<comment><AUTHOR> Yep, we definitely took inspiration from there!

</comment></comment><comment><USER29> My understanding is that best-practice now is to use SVG instead of icon fonts.

<comment><AUTHOR> Somewhat surprisingly, I've normally found this view to be more common with US based folks. I personally prefer icon fonts for a large swath of reasons, but other folks prefer SVG. So we're making both. :)

<comment><USER30> github found that SVG is better:

[https://github.com/blog/2112-delivering-octicons-with- svg](https://github.com/blog/2112-delivering-octicons-with-svg)

</comment></comment></comment><comment><USER31> You killed VideoPixie. Bad time to be down.

<comment><USER32> Yeah, terrible timing. A CNAME record conflicted with our new SSL cert - renewing the cert forced us off VIP on to SNI (per GAE's deprecation schedule for VIP) and the CNAME we had in place for VIP then prevented DNS from resolving properly - at least that's what I think happened ! (videopixie engineer :)

</comment></comment><comment><USER33> Can someone pls explain the difference between personal and student licenses? They're both $20.

<comment><AUTHOR> Yeah, it shouldn't be confusing! We extended early backer pricing for the whole Kickstarter, so the Personal / SMB license would have been $40.

Only difference is who can use the license. Student license is for students only. But I'm recommending students just get the full Personal / SMB license since it's more flexible in the end and a better price.

(Non-profits should ABSOLUTELY get the Student / NP license as it's good for any organization size and just $20).

<comment><USER34> Students eventually stop being students (i.e. graduate), so doesn't that conflict with the licenses being perpetual?

<comment><AUTHOR> They can always gift it to another student. :)

</comment></comment></comment></comment><comment><USER35> FontAwesome is amazing, so useful

</comment><comment><USER13> Just got a email from the A5 campaign asking for help to get over the $1M hump.

</comment><comment><USER36> Some people think making a font is boring and senseless, but I think it is character building...

</comment><comment><USER37> How can one wisely use $ 900K to maintain an open source icons rendering in a font format?

This seems to me as a total waste of money.

Too much money will ruin creativity processes, and so it did in most of the cases I have observed.</comment>


Perl 6 – Getting beyond static vs. dynamic [pdf] - <AUTHOR> https://fosdem.org/2015/schedule/event/perl6_beyond_dynamic_vs_static/attachments/slides/724/export/events/attachments/perl6_beyond_dynamic_vs_static/slides/724/2015_fosdem_static_dynamic.pdf <comment><USER3> This is the best part of Perl 6. I am not familiar with the terminology, but it seems "not just" gradual typing to me.

I always it puzzling that to avoid the tedious parts of static type systems, people throw away static checking entirely. As demonstrated by Perl 6 and other gradual typing systems, the whole dualism is imaginary.

I wish that the "runtime dynamicity with as much compile-time staticity as possible" idea will be the norm in the dynamic language community. I wish that someday when we talk about the days of 100% dynamicity with no static checking, we can remark that we have luckily passed that dark age.

<comment><USER4> I always find it puzzling that people throw away dynamic typing entirely. You can't make decisions about what's best for me based on rules of thumb like "as much static typing as possible," your use cases probably don't match mine if you don't understand why anyone would want dynamic typing.

<comment><USER5> The reason is simple: Using a statically typed language (particularly one with reflection capabilities), it's trivial to do pretty much anything a dynamic language is capable of doing without extra tooling, perhaps with just a bit more verbosity in code. On the other hand, attempting to simulate static typing with an entirely dynamic language doesn't happen without extra tooling around the compiler.

Even languages with strict type systems like Haskell don't entirely throw away dynamic typing. It has `unsafeCoerce` which can attempt to cast a value at runtime, and fail if it's not the right type like any dynamic language would. However, when combined with Data.Typeable, storing type information in addition to the values you're interested in allows you to turn `unsafeCoerce` into something much safer: `fromDynamic`, which doesn't cause the runtime to fail, but instead returns a Maybe type - one that either contains a successfully coerced value or Nothing - and the language forces you to check this before you can use the value. You have the best of both worlds now - <USER2> ability to write whatever dynamic typed code you want, but with the ability to fall back to a strict type system to keep things in check.

<comment><USER6> > unsafeCoerce

This is the exact opposite of dynamic typing. Dynamic typing doesn't throw away type information, it uses it to perform _safe conversions_ , not _unsafe coercions_.

<comment><USER7> Haskell does safe coercions. That was the point of the op's argument, actually, but he mistakenly introduced it first through it's implemenation which, after confirming safety, uses a function called 'unsafeCoerce'.

The module is called Data.Dynamic and it is a complete dynamic type system embedded inside Haskell at runtime.

It's not very popular. Read into that whatever you like. There are some reasons to use it, perhaps, but most, to my understanding, see it as opaque and difficult to reason with.

</comment></comment></comment></comment></comment><comment><USER8> Every time I read something like this about Perl, I'm amazed at how much it got right.

</comment><comment><USER9> It might be worth mentioning that I'm working on a similar type system for perl5 for quite some time, which is efficient like perl6. In contrast to Moose, which is inefficient and more about the MOP. Types there are only used to slow things down, not to speed it up. All these things were developed around 2002, just forgotten and then partially destroyed with 5.10 and ongoing.

Perl5 hates it, but they haven't seen it and they have generally no idea. It is entirely doable in perl5 only. I got 2-6x speedups in prototypes. But then, perl6 has so much more features worth switching over.

</comment><comment><USER10> Questions ? Projects[1] stepping onto Meta-Objects territory, why not using Common Lisp ?

[1] There were a few talks on youtube about "advanced python programming" who were about similar ideas.

<comment><USER11> How about _why_ use Common Lisp? Lay out some reasons and convince us. That sounds like an interesting discussion.

<comment><USER10> Because they've been investigating MetaObjects (and MetaObject Protocols) since the 80s. Sorry for the smugness, my argument boils down to "Don't reinvent the wheel too much".

<comment><USER12> FWIW the Perl 6 MOP is heavily inspired by the Common Lisp MOP. Or to put it another way, it steals the good parts.

But for many people, it also has nicer syntax :-)

<comment><USER10> They forgot to steal the syntactic part then ;)

Do you have links about influnce of CLOS MOP in Perl6 ? For what it's worth I do love Perl6 efforts like first class grammar/rules.

<comment><USER11> I can't seem to locate definitive sources at the moment, but it's mentioned often[1]. My general understanding of it is that the MOP is heavily influenced by CLOS, and the object system heavily influenced by the Smalltalk traits paper, which may itself have heavy CLOS influences. The easiest way to figure out just how similar they are may be to look at the Perl 6 docs on both the MOP[2] and Objects[3]. There's also the synopsis[4] documents which guide the design.

In addition, Perl 5's Moose[5] object system (and relatives Moo, Mouse, etc) are also heavily influenced by Perl 6, CLOS and Smalltalk.

1: [http://irclog.perlgeek.de/perl6/search/?nick=&q=clos](http://irclog.perlgeek.de/perl6/search/?nick=&q=clos)

2: [http://doc.perl6.org/language/mop](http://doc.perl6.org/language/mop)

3: [http://doc.perl6.org/language/classtut](http://doc.perl6.org/language/classtut)

4: [http://design.perl6.org/](http://design.perl6.org/)

5: [http://moose.iinteractive.com/en/](http://moose.iinteractive.com/en/)

<comment><USER10> Ha.. googling perl6 mop never led me to doc.perl6.org. Thanks a lot for the history!

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> This looks awesome!

</comment><comment><USER14> Seems kind of sweet. Except for the prefixing symbols.

</comment><comment><USER15> I can see how he can be amazed by simple stuff, like typos etc. The moroning example would be catched by python tools like pyflake, or compilers in case of C or rust or whatever... Still he reserves several slides for something i consider most basic, even in other dynamic languages through tooling (truth be told it wouldn't be caught by the interpreter at "compile time"). It's likely such a surprise for him because perl5 was pretty much not even parseable to tell such things..

<comment><USER16> A number of IDE's these days have spell checkers (JetBrains comes to mind).

<comment><USER17> Those spell checkers are easier to make if the language already includes tooling to support that functionality.

<comment><USER9> Exactly. Normally the debugger or repl provides reflection capabilities to be used by the editor to support warnings, errors and hints, and restructuring tools.

Such a typo catcher would be a written (I'm thinking of a lisp or lua here) on the editor side, having the information about the variable and being able to query the namespace or locals visible or not visible. The things jonathan did was just to put this into the compiler for the thrills, but it can be easily extracted, extended and customized from the outside, in emacs, vi, eclipse, ... such as jonathan did with his perl6 debugger.</comment></comment></comment></comment>


Show HN: Tabule, a social student planner - <AUTHOR> http://tabuleapp.com

<comment><USER2> The 2 "sign up" at the bottom of the page do nothing :\

<comment><AUTHOR> Hmm which browser are you using? It should take you the sign up page.

<comment><USER2> Firefox 15 on Ubuntu

<comment><AUTHOR> You're right, looks like Firefox 15 broke it. It was working fine in Firefox 14. Thanks for letting me know!

<comment><AUTHOR> Fixed!</comment></comment></comment></comment></comment>


Ask HN: What project did you tackle to learn C? - <AUTHOR> <comment><USER2> @zabana what goals do you have in addition to learning C?

As you can see, the answers are all over the map. Nothing wrong with the question, nothing wrong with a discussion, but "write a program of some kind" might not help you at all.

It's worth asking why learn C, because the answer depends on what you want to do. I like C over C++ for various reasons, but I would still recommend C++ unless you have a reason. I like C++ but I would still recommend starting with Python or JavaScript unless you have a reason. C & C++ are for high performance. Do you need high performance for sure? C is harder to learn, use, and practice well, and slower to develop in than today's scripting languages.

<comment><USER3> I did every problem in the K&R C book and wrote a small program like a unit test demonstrating every function in the standard lib. The biggest gain I got was learning how to use Make to compile and run my suite of examples.

</comment></comment><comment><USER4> I had a class in high school that mostly covered the basics, though I wouldn't say I "learned" it. It wasn't until around 15+ years later and after I started working as a programmer and decided to work through a Programming A Chess Engine In C [1] youtube series that it finally really clicked.

[1][https://www.youtube.com/watch?v=bGAfaepBco4&list=PLZ1QII7yud...](https://www.youtube.com/watch?v=bGAfaepBco4&list=PLZ1QII7yudbc- Ky058TEaOstZHVbT-2hg)

</comment><comment><USER5> A webserver. Not fully compliant, but enough to show you how much you can accomplish in a small amount of code. Then a proxy server with compression. Used prhreads. Helped learning about race conditions, threading, mutexes, semaphors, etc.

<comment><USER6> A complete tangent: I wondered if "prhreads" is a typo of "pthreads", or an actual thing. A quick Google query led me to discover that in Google Books' version of "Applied C++: Practical Techniques for Building Better Software", OCR must have confused 't' with 'r' :).

[https://books.google.pl/books?id=xzbRQXXsy6UC&pg=PA130&lpg=P...](https://books.google.pl/books?id=xzbRQXXsy6UC&pg=PA130&lpg=PA130&dq=prhreads&source=bl&ots=VUKSQ_nmzP&sig=6h9sMBdpD_3HVGAHEiohl2_4-jM&hl=en&sa=X&ved=0ahUKEwjKurLm6ZvZAhXI16QKHbNTAeYQ6AEIKzAA#v=onepage&q=prhreads&f=false)

<comment><USER5> Sorry. Typo.

</comment></comment></comment><comment><USER7> I've learned C (after knowing Turbo (Borland) Pascal, and Apple Basic) by simply getting a book, and reading it for a year (I must've been in 10th or 11th grade, and that was way before any internet, and I had no access (or idea) of BBS). It was a bulgarian version (I don't think it was translation), and I remember being it a very solid and good book - I was able to use printf/scanf right after I've read the book.

Btw, I've switched to "C" for a stupid reason. I was writing a File Manager for DOS in Turbo Pascal (like Norton Commander, but single pane), and I got stuck how to move a file from one directory to another. The builtin Pascal function only renamed a file, couldn't move. I was told that "C" can do anything, so I started deep into it. To be honest, while the book taught me things, at first I was putting everything in .h files, as I was so much used to the much superior (even today) Unit system in Turbo/Borland Pascal.

Then some months after, getting Ralph Brown's interrupt List, and finding that I can just call a specific interrupt in assembly to rename a file (and that's what the "C" library had implemented), Pascal was no longer limitation...

But haven't touched Pascal since 1999, and moved to C/C++ since then. I still miss the Units (.TPU files).

<comment><USER8> _Then some months after, getting Ralph Brown 's interrupt List, and finding that I can just call a specific interrupt in assembly to rename a file (and that's what the "C" library had implemented), Pascal was no longer limitation..._

I really loved SWAG, which was basically a collection of 'how do I?'-questions with answers in the form of Pascal sample code. Interestingly enough, it seems that someone converted it into a website:

[http://swag.delphidabbler.com](http://swag.delphidabbler.com)

As a kid I went through and studied many of the SWAG snippets.

 _But haven 't touched Pascal since 1999, and moved to C/C++ since then. I still miss the Units (.TPU files)._

Also, the compile times and the debugger were awesome. The Turbo Pascal IDE was still better than many current environments. I stopped using Turbo Pascal when I switched to Linux more or less full-time (near the end of the nineties), though I did use FreePascal on Linux a bit.

</comment></comment><comment><USER9> I re-implemented lots of basic unix tools. What I would do is go for a command, and just look through OS api references seeing if I could implement it. Once I got basic functionality, I would go look into the source code and check I did against the standard. I found it super-helpful.

</comment><comment><USER10> My first big C program was a full screen editor. I wrote it for the Atari ST using the (excellent!) Mark William C compiler. It still works today 3 decades later on Linux.

</comment><comment><USER11> I join the robotics club at my college. My team competes in national dancing robot competition. I help write the software to control the movements of 25 servos in humanoid robot using microcontroller (Teensy).

Coming from webdev and python background, i learn many things from it. Data types, pointer, byte shifting, serial communication. The most exhilarating part is when you have to optimize your code in every corner to fit in the small memory of the microcontroller.

</comment><comment><USER12> I would recommend 2D graphics with a framebuffer. Drawing sprites, scrolling, drawing lines. You get to play with loops, pointers etc... Plain C, no extra library besides initializing a window and copying the buffer into a displayed window (SDL for example), a few calls. You could also save to a simple graphic format. Learning the standard library would come next, you could save to a file etc...

<comment><USER13> I second this. Write a basic game with 2d graphics, use SDL, and save and load the state to file. To take it a step further and write a networked version with your own basic byte encoding if each move and game state to keep in sync. This would teach you a ton of various topics.

</comment></comment><comment><USER14> I read a fantasy/computer crossover series (Wizard's Bane) as a teen and remember a mention of the IOCCC. it fascinated me and I decided to enter. I spent most this and made a Mandelbrot fractal generator. I didn't win or get any recognition, but I still remember the code fondly. The source was in the shape of the fractal, used recursion, and was very ugly with ?:s everywhere, strange pointers and other ugliness. It could zoom and scroll. I was very proud of myself and always have kept C around. It's still my go to for little projects.

</comment><comment><USER15> I think my very first C program was a vga graphics demo. I used Borland Turbo C, and this was probably 1989 or so. I was transitioning from a mix of Turbo Pascal and 80x86 assembler, and had fallen in love with Borland's whole toolset from the IDE to Turbo Debugger, which was a revelation for me. And I'll note that this was back when the only way to get a copy of these tools was to go to Egghead or another software retailer and drop $100+.

</comment><comment><USER16> Games. But this was back in the DOS era, when you could just treat the screen as an array and write directly into it, and many of today's languages weren't available.

I would suggest looking at the classic "Programming in the UNIX environment", which is dated in detail but very good on the UNIX/C design philosophy.

But as others have said, you need a specific reason to learn C now, rather than more modern languages.

</comment><comment><USER17> I had a course on computer and network security at the Vrije Universiteit Amsterdam. One of its prerequisites is that you need to know C. I didn't know any. I told myself: I am language agnostic, I can learn a programming language on the fly.

The first assignment we had to do was bruteforce passwords on a Linux machine. There was a user text file and an encrypted password textfile. This was supposed to be easy, I barely passed it.

The second assignment was to simulate an attack that Kevin Mitnick did on a supercomputer. We had to spoof TCP sequence numbers from a computer that we didn't control, but back in the day TCP sequence numbers were guessable and in this assignment they made the guessability a bit easier. I think I used libraries such as libpcap and maybe anhoter one. I did a bit better than just barely passing.

Assignment three was looking at binaries with source code in C and find the vulnerability and exploit it. I nailed it.

That's how I 'learned' \-- got some inkling of workable knowledge -- on C.

I'm a bit more mild on how easy it is to be language agnostic from the get go though.

</comment><comment><USER18> A mimic OS GUI (a couple of windows, buttons, wallpaper changer, etc). It was really fun to code it... over 2 decades ago.

</comment><comment><USER19> Wanted to try to create a NES game on a game jam, so I started to create a bootstrap project for creating a NES game in C: [https://github.com/jehna/nes- bootstrap](https://github.com/jehna/nes-bootstrap)

</comment><comment><USER20> A simple database. Not useful, just as a learning exercise while in school many years ago, but it was written completely from scratch, even down to the physical read/writes from the disk.

I don't recommend doing that in a real app. But it was a good way to learn.

</comment><comment><USER21> Brute force solutions were becoming too slow for [https://projecteuler.net](https://projecteuler.net) in Python, but with C I could put off being clever about the math

</comment><comment><USER22> When I first learned C, I wrote a program to check the Goldbach conjecture (every even number >= 4 can be shown to be the sum of two prime numbers). For a while this was the first nontrivial program I would write in any programming language I learned, but in retrospect it was pretty pointless on several levels.

It is a good project though, to learn about high performance arithmetic, data structures and has good potential for parallel implementations (I eventually rewrote it on top of PVM to run on a cluster of computers).

</comment><comment><USER23> My Numerical Methods class in college, in the mid-80s.

C was not an "approved language", but I was told that if the grad student who was actually grading all the papers agreed, then I could use it. I went to talk to him, and turned out that he also wanted to learn C. So, he approved my request.

Because I was happy learning a new language, I made sure all my programs executed correctly, were written in what was then the correct style, and I still managed to turn in my homework before anyone else, for every single assignment.

Motivation matters.

</comment><comment><USER24> I would advise that you do something that requires networking, a database (probably SQLite), maybe some ncurses graphics. A minimal cli Bittorrent client is a great idea.

</comment><comment><USER25> A summer internship, writing a USB driver for a CPAP device. Parsing XML strings in pure ANSI C without any external libraries was a challenge, but I learned a lot.

<comment><USER26> Sounds like a vulnerability waiting to happen.

</comment></comment><comment><USER27> Guess I'm getting old. C used to be _the_ language for game development.

I learned it from the book "Programming Linux Games" by Loki Software (remember them?).

</comment><comment><USER28> A followed the crafting interpreters series but reimplemented the python in c. Really gave me an appreciation for high level languages...

</comment><comment><USER29> I wrote a toolkit for stochastic differential equations, but I got bogged down trying to emulate virtual methods and inheritance, badly.

</comment><comment><USER30> My first C project was on a microcontroller (ATMega architecture/AVR-GCC) 12 years ago. I think a lot of people get in contact with C with Arduino these days.

My first real C project on x86 was a graphical user interface with Gtk+. However, I soon switched to C++ using Gtkmm, then using Qt.

</comment><comment><USER31> I modified an embedded application for my then-employer's customer while I was working in product support. It made them really happy, and probably solved other customer issues as well.

</comment><comment><USER32> I learned C over 1990 Christmas break from university. At home, I programmed my father's Mac Plus and wrote a game similar to Light's Out but on a playfield not a square grid.

</comment><comment><USER33> Scientific instrument device drivers and software with network and data reduction libraries to coordinate their activities and data collection in different locations on the planet.

</comment><comment><USER34> First went through the K&R text book then made small nginx modules and python extensions as well as random little Unix tools to replace built in tools that were slow

</comment><comment><USER35> A robotics operating system for the Z80 ~32 years ago!

</comment><comment><USER36> A microcontroller with temperature, humidity, pressure, dust and light sensors, and an ethernet web interface. I learned a lot!

</comment><comment><USER37> I created an inventory database for my dad's hardware store by in the late 1980s. It was on an Atari 520ST via Lattice C.

</comment><comment><USER38> Lisp interpreter.

Writing a GC and tagged values in particular are where pointers and memory management finally really clicked with me.

</comment><comment><USER39> I ported V6 Unix to another platform ..... first I had to port the compiler ....

</comment><comment><USER40> tsearch.c [https://searchcode.com/codesearch/view/20342823/](https://searchcode.com/codesearch/view/20342823/)

</comment><comment><USER41> Writing a GUI version of PGP 2.6 for RISC OS, back in the day.

</comment><comment><USER42> Text Editor in College

</comment><comment><USER43> You don't need a project to tackle C. Start with "The C Programming Language" and do the exercises or "C How To Program" by Deitel & Deitel which also has plenty of exercises.

<comment><USER44> I think the post is more asking "If you learn through projects, what project..."

Personally my attention span got completely shot once I graduated college and I can't learn for the sake of learning like you're suggesting anymore.

</comment></comment><comment><USER45> RSA implementation for school science fair.

</comment><comment><USER46> doom and quake level viewers, texture extractors, etc. c compiler in one hand and specs in the other

</comment><comment><USER47> Wrote an in-memory compiler

</comment><comment><USER48> a truly weird data munger that had to run on VxWorks.

</comment><comment><USER49> IRC

</comment><comment><USER50> OpenSSL

<comment><USER51> I teach security, and that story (about EAY using OpenSSL as a project to learn C, because what could go wrong?) comes up every time.

For those who don't know the backstory (many here will) -- crypto is hard to implement correctly; protocols are hard to implement correctly; and C isn't the easiest language to use. [Disclaimer: I've used C "since forever", love it, and am pretty decent with it, but I've made my goofs. I've also implemented crypto & protocols myself, neither probably very well...]

Apparently in ~1995, Eric A. Young ("EAY") decided to implement his own SSL stack (called "SSLeay"), at least partially with the goal of learning the C programming language.

At some point, SSLeay became OpenSSL, EAY moved off the project, and OpenSSL went on to become a staple of network computer security (and insecurity).

I can't find a reference to back this up right now, but I know I've seen it in the past somewhere credible enough that I'm here repeating the folklore.</comment></comment>


Ask HN: where is a good part of the world to become a hunter-gatherer? - <AUTHOR> http://www.quora.com/Living-Abroad/Where-is-a-good-part-of-the-world-to-fly-to-and-become-a-hunter-gatherer

<comment><USER2> The interesting part of this question are the bits that aren't asked.

I see this when selling software. Prospective clients focus completely on what isn't working in their existing system. If a potential customer asks me "do your reports contain graphs?" then I know their current system can't, and it's an issue. But they assume we can do everything their existing system does well.

Back to this question. Nothing asked about medical facilities (doesn't everywhere have practicing dentists, doctors and an optometrist when my glasses break?)

What about education, internet, transportation? What about housing, roads, running water or electricity?

Clearly the answers to the above will make a huge difference in the location he finally ends up in. I really hope he gets some answers to the post, because it makes a rear analogy when talking to clients about software. It's helpful for them to understand that while its good to know what you want, it's also good to articulate the things you want, but which you take for granted.

That which goes without saying, goes better with saying.</comment>


Ask HN: Starting indie game dev.  need advice - <AUTHOR>

So I've decided to start in the game development field.  I am a programmer, and I have 2 friends with skills I need, graphics and audio.  I love both of them dearly, but they have their flaws.  I am concerned about several of these flaws and how they will apply to our project. I am not really sure how to bring them up to them, or if I even should.  does anyone have any advice on how to constructively bring it up in a conversation and address my issues?  the issues include, laziness, smoking too much pot, and general lack of ambition, among other things.  After watching the indie game dev documentary on netflix, I know what it is going to take to make this dream of mine a reality.  however, i cannot do it by myself.  I am personally willing to put in the time and effort necessary, but how do I inspire them to want the same? <comment><USER2> The time to have the difficult conversations is now - before you start anything. You'd rather put all your cards on the table including what you see as obstacles (include some of your own challenges/deficiencies in that mix).

A good way to start such a conversation is to assess if to get a sense of whether everyone shares the same goal and what they are willing to do to get there. If that alone is something where everyone is not on the same page then there is no point in getting into conversations on personality etc.

If everyone is on the same page, that naturally will lead into talking about challenges of achieving the goal.

You can google things like "how to handle conflict" or "how to have difficult conversations" etc to see which specific strategies/tactics for handling such a conversation could work for you given your temperament and the group dynamic in general.

If you don't do this now, it will be 100x harder later and likely cause a lot of friction/ill-will and possibly even cost you your friendships.

If having the conversation means that your friends don't land up wanting to work with you, that's fine. They are likely not the only 2 people on the planet with those skills.

If this is something you are serious about then you cannot let anyone else hold you down. If they can't/won't be inspired to work with you then you've gotta do what you gotta do to move forward.

Hope that helps.</comment>


Kurzweil in the Lyons' Den - <AUTHOR> http://singularityhub.com/2009/06/16/kurzweil-in-the-lyons-den/

<comment><USER2> I read an enjoyed Lyons' article on Kurzweil last week. Despite its critical bent, found it to be quite even-handed and informative. I did not, however, notice that the author was Dan Lyons of Fake Steve Jobs fame.

Lyons clearly has a knack for turning personality defects into leads to stories. His article is as much about the eccentricities of Kurzweil as much as it is about his theories themselves. Also, journalism is not the same as philosophical discourse, one should include character details as context for the ideas. One need not study the ideas in a vacuum. In all honesty, that makes the stories all the more enjoyable.

</comment><comment><USER3> This analysis of the newsweek article is spot on. Lyons is an entertainer and Kurzweil is a prophet. Throughout history, visionaries of the future have been attacked. Kurzweil is no exception.

These attackers profit because many people choose to disagree and we select opinions that agree with ours. The future Kurzweil describes _is_ coming.

The only thing that could stop it is an all out war on technology, but technology itself is _used_ in that war, so it's a bit of a paradox... or I don't know what you'd call it exactly, but the only thing that could defeat the singularity is that which is causing the singularity to ... _evolve_.

It's like we are witnessing evolution in process. like the telescopic evolution scene from Waking Life: <http://www.youtube.com/watch?v=saxX-Z6w3p4>

<comment><USER4> _Throughout history, visionaries of the future have been attacked._

So have a lot of crackpots. Being attacked is no proof of being right.

You do nothing but preach to the quire: those that already agree will nod in agreement, those that disagree read nothing they could possibly be persuaded by. What is the point of your comment?

</comment></comment><comment><USER5> _Still, I'm tired of being sold the story of someone's life, when it's their work that will impact mine._

This sentence did it for me - I definitely agree. There's a tendency to focus on life stories these days, and they're given the same importance as the accomplishments of the people whose stories they're looking at, which doesn't seem right.</comment>


Best Practices for Designing a Pragmatic RESTful API - <AUTHOR> http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api <comment><USER2> I think I've said this before, but the caching advice:

> HTTP provides a built-in caching framework!

Conflicts with the authentication advice:

> each request should come with some sort authentication credentials

One of those gotchas in API design and implementation is how to provide good performance against authenticated resources.

My personal take on this is to _not_ follow the standard HTTP caching patterns as this encourages the cache to be external - browser, proxy - to your authentication.

Instead I choose to cache behind my authentication layer, and this either means:

1\. I use a plugin to Nginx or Varnish to call the authentication check before serving a cached resource.

or

2\. I put my resources in a memory cache within the application.

The former has the advantage of being as HTTP pure as possible, but the disadvantage of maintaining the server extension/plugin.

The latter has the advantage of code maintainability (just the stuff in your app) but the disadvantage of not using existing tools for the caching.

Either way, if you are mixing authentication and caching the rule should always be that you cache behind your authentication layer and everything that passes through the authentication layer is explicitly marked as not-cacheable.

</comment><comment><USER3> Previous discussions/submissions: [https://www.hnsearch.com/search#request/submissions&q=vinays...](https://www.hnsearch.com/search#request/submissions&q=vinaysahni.com&start=0)

</comment><comment><USER4> Awesome points; didn't know about the Link header (RFC5988).

Regarding pagination: a few years ago I switched to using "skip" and "limit", instead of "page" and "per_page" or a variation of the two. Instead of thinking about pages (an abstract idea) it forces me to think about the concrete list of objects being requested from the resource, how many of those I want and how many to skip from the start; making it easier to reason about pagination (at least for me).

<comment><USER5> (original author here)

I thought about this one when writing the post. Although I think the differences between the two are marginal, my conclusion was that it's "simpler" to increment a page number by 1 in code than incrementing by the page size.

<comment><USER6> Dealing with pages can get trickier if you allow the user to change the number displayed per page when not on the first page. It's not particularly hard to figure out, but what the right thing to do when the boundaries don't line up is a question that needs to be answered, as well, as well as dealing with user confusion about what page they are then on. Dealing with number ranges instead of pages solves these problems, at the cost of some readability.

</comment></comment></comment><comment><USER7> This is a great resource. Feels like the next step after Matt Gemmell's post "API Design" ([http://mattgemmell.com/2012/05/24/api- design/](http://mattgemmell.com/2012/05/24/api-design/)) where he called APIs "UX for developers".

</comment><comment><USER8> A topic I rarely see (at least in depth, or in discussion) in stories/blogs about APIs is ID generation, i.e. best practices for creating access_token, resource ID and especially handling collisions.

The Flickr blog post [1], which featured a simple implementation of a ticket server, is so far one of the easiest and most secure to use.

Personally I don't feel comfortable using "hash of i++", "hash of ...", "i++", as they all "fall apart" when you need ids of different specifications (e.g. a 8-char ID, a 24-char token ID).

Anyone have two cents on this? I have a difficult time imagining that larger APIs just "live with" the chance of collision (even though it can be very low) - they must mitigate it somehow, right? combined probability (such as the nonce check and tokens on oauth1 requests)?

Actual ticket servers (e.g. [2], [3]) either introduce added complexity (and possibly latency) or needs a secondary code base. Regardless, _the issue of scaling and latency is rarely touched upon_ , so if anyone have some input here, I'd greatly appreciate it.

EDIT: I've found two interesting links on the problem, [4] [5] (snippit'ed here [6]).

[1] [http://code.flickr.net/2010/02/08/ticket-servers- distributed...](http://code.flickr.net/2010/02/08/ticket-servers-distributed- unique-primary-keys-on-the-cheap/)

[2] [https://github.com/twitter/snowflake](https://github.com/twitter/snowflake)

[3] [https://github.com/boundary/flake](https://github.com/boundary/flake)

[4] [http://boundary.com/blog/2012/01/12/flake-a- decentralized-k-...](http://boundary.com/blog/2012/01/12/flake-a- decentralized-k-ordered-unique-id-generator-in-erlang/)

[5] [https://blog.twitter.com/2010/announcing- snowflake](https://blog.twitter.com/2010/announcing-snowflake)

[6] [https://github.com/antirez/redis/pull/295#issuecomment-46734...](https://github.com/antirez/redis/pull/295#issuecomment-4673460)

<comment><USER5> I like how MongoDB does this:

[http://docs.mongodb.org/manual/reference/object- id/](http://docs.mongodb.org/manual/reference/object-id/)

They start with a timestamp and are fully distributed. In the official linux client library, the "3 byte machine id" is the first 3 bytes of the md5 hash of the hostnames. As long as you can guarantee uniqueness there, there are no collisions.

For a large API, one could generate their own machine ID's and provide a strong guarantee on uniqueness.

The one criticism with MongoDB's approach is that the ID is 12 bytes and doesn't fit very well in column types offered by other DBs

</comment></comment><comment><USER9> This is probably my favourite talk on the subject : [http://www.stormpath.com/blog/designing-rest-json- apis](http://www.stormpath.com/blog/designing-rest-json-apis)

</comment><comment><USER10> This too is a must read for REST API builders from one of the founders of the django project: [http://jacobian.org/writing/rest-worst- practices/](http://jacobian.org/writing/rest-worst-practices/)

</comment><comment><USER11> My opinionated design principle for RESTful APIs is to keep in mind that REST is just a style sheet of good practices and patterns as in, do not apply it blindly and just use whatever makes sense.

From there, I have conflicting emotions with this:

        Although the web generally works on HATEOAS type principles (where we go
        to a website's front page and follow links based on what we see on the
        page), I don't think we're ready for HATEOAS on APIs just yet.

I do not think "being ready" is an argument to use or not use HATEOAS. Sure, HATEOAS as defined by Roy Fielding contains a lot of clutter, but there's nothing bad if it makes sense to assume a client that does not know how to construct URLs. Generally I find it nice to have something similar to:

        GET /fooes

        {
            "fooes": [
                "foo": {
                    "bar": {
                        "some": "baz"
                    },
                    "name": "The Mighty Foo",
                    "id": "the-mighty-foo",
                    "href": "/fooes/the-mighty-foo"
                },
                ...
            ]
        }

<comment><USER7> There's a sliding scale of HATEOAS-ness. I've seen a much more extreme form of it described elsewhere. Mark Seemann ([http://blog.ploeh.dk/2013/05/01/rest- lesson-learned-avoid-ha...](http://blog.ploeh.dk/2013/05/01/rest-lesson- learned-avoid-hackable-urls/)) describes an approach that encrypts all URLs so that clients have _no choice_ but to follow links because generating URLs from templates is impossible.

So instead of

        http://foo.ploeh.dk/customers/1234/orders

You'd have

        http://foo.ploeh.dk/DC884298C70C41798ABE9052DC69CAEE

And you'd have to get that URL out of the response to another request you'd already made. I never liked this idea, and the linked article provides a really strong counterargument to this approach to HATEOAS.

        When browsing a website, decisions on what links will be
        clicked are made at run time. However, with an API, decisions
        as to what requests will be sent are made when the API
        integration code is written, not at run time. Could the
        decisions be deferred to run time? Sure, however, there isn't
        much to gain going down that route as code would still not be
        able to handle significant API changes without breaking.

<comment><USER11> About the counterargument, yes, it does raise a good point (in fact, one that I skimmed through). Specially about changes and breaking. For instance, in the following document, what is to change in the href attribute?

        GET /fooes
        ...
            "foo": {
                "id": "the-mighty-foo",
                "href": "/fooes/the-mighty-foo",
                ...
            },
        ...

Surely, not much. Either /fooes/ changes to /foos/, in that case, the call to /fooes is broken anyway, or the id has changed, and needs to be handled with an HTTP 301 anyway. So no, there's not much to gain.

But then again, I was just saying that the href attribute might make sense in some cases, with not much extra effort. Nobody is asking the clients to consume the href attribute, it just makes understanding the whole API easier.

As of images, what would make more sense, to add an endpoint /images/10/view or directly use an href attribute pointing to [http://s.foo.bar/1337.png](http://s.foo.bar/1337.png) ?

My point is, in some cases it makes sense, just use it when it does. Just as one should not be encrypting URLs just because Mark Seemann feels it is within the holy grail of the Level 3 API as defined by Leonard Richarson [1], we should not be avoiding to make our APIs navigable.

[1]: Don't get me wrong. What they say might make sense in non-trivial APIs, as always, REST is not an specification.

<comment><USER12> I think we spend too much time trying to craft beautiful, descriptive URLs, where we should be spending our time crafting beautiful, descriptive responses. We try to make the URL describe to the developer what is being returned, when in reality, this should be dictated by media types and link relations.

Take for instance the example above. Whether the URL is /images/10/view or /images/10.png, the developer has no idea what kind of resource that is without any media types or relations (the file extension != to the media type). In other words, you could use both URLs to return the same exact resource, and the client shouldn't care. You could even change back and forth between those URLs and the client should never flinch.

This is actually a good example. Say you are serving a static PNG file at /images/10.png, linked in your server response (i.e. in some href like above). Say you want to change things up to do some type of logging on how many times the image has been viewed, so you write some code, create a response at /images/10/view, log views, and return the image with an image/png media type. You just did a really big API change and the client didn't have to be changed.

Now if your client was dumber, and was crafting URLs as /images/{id}.png, you would break all of your clients if you did the above changes. This of course is really just the tip of the iceberg of what flexibility HATEOAS can bring.

</comment></comment></comment></comment><comment><USER13> This feels like a good place to get some opinions out there about an app I am working on.

Some team members are advocating a very dogmatic approach to our eventually public facing REST API design where each REST end point of /foo results in a response of a list of some ids; each url can then be hit to fully populate the list.

eg

/foo returns something like [1,2,3,4]

I then have to do 4 more http requests to /foo/1, /foo/2, /foo/3 and /foo/4.

Further, if a /foo/1 model contains for example a user, then /foo/1 would additionally contain userid of eg 101.

I would then have to do a /user/101 and ensure the foo model was populated.

This can mean a simple list page with 10 on screen list items can easily create 1 + 10 + 10 = 21 http requests at a minimum. This is starting to add a lot of code complexity to managing the lists for sorting/filtering/updating purposes and managing the async requests in our AngularJS application.

The way I have worked before is to build a single end point of /foo with a paginator offset, and then that would return the entire object in an HTTP request, eg

[ {fooid : 1, user : {id : 101, name 'bob'}, orders : [{id: A},{id : B}]}, {fooid : 2, user : {id : 102, name 'alison'}, orders : [{id: C},{id : D}]} ]

This approach is less RESTful, but presents fewer issues when writing the API consuming code and is much more responsive from a latency point of view.

What does HN think about these contrasting approaches?

<comment><USER14> I don't see why would the latter be any less RESTful than the former; as long as the "foos" still have their canonical URL, I don't see any constraint being bent or broken by having their representations be sent in another request/response.

In fact, I'd say the latter approach is actually more RESTful, since the former requires the client to build URLs, which breaks if the server changes them.

<comment><USER15> +1

</comment></comment></comment><comment><USER16> * document your media type: [http://www.iana.org/assignments/media-types](http://www.iana.org/assignments/media-types) * document link relations: [http://www.iana.org/assignments/link-relations/link-relation...](http://www.iana.org/assignments/link-relations/link-relations.xhtml)

the rest is usually using HTTP properly.

</comment><comment><USER17> I stumbled upon this post recently and I love it. It summarises very nicely my own feelings.

I went down the path of exploring HATEOS and Collection+JSON and it all started to feel like enterprise architecture style over complication for very little benefit.

<comment><USER12> I believe it's actually the other way around, where HATEOAS is the least "enterprisy" of the options. When I think of enterprise or over-complication, I think of a system where logic is so deeply embedded in the server and client that if the client or server changes in any way, everything breaks. REST was designed to better handle changes between a client and server. For instance, if you built your API to use something like Collection+JSON, then it could be instantly read and understood by any Collection+JSON client (much like in the way the HAL browser works [1]). You could change things, move things, even redo URLs, and the client will still work.

If, on the other hand, you don't conform and use HATEOAS, you have to go look at the documentation on how to build the URL to make a call to the API. Your client can never explore an API, but must be built to make certain calls to certain URLs that are built a certain way.

True REST with HATEOAS was what HTTP 1.1 was built around. It may take some extra work to implement, but it was designed to make communication over the web simpler (and it's worth the trouble). Unfortunately, this article is not really endorsing what REST is, but rather a very common RPC that has been popularized by Rails and labeled as REST.

[1] [http://haltalk.herokuapp.com/explorer/browser.html#/](http://haltalk.herokuapp.com/explorer/browser.html#/)

</comment></comment><comment><USER18> Great ideas and tips. As I read through it, I found myself mentally saying "yep, did that" for most of the sections. One thing I disagree with was what to do when a new resource is created. I think the Location header is a great idea (which I'm not doing) but I also think returning the new entity in the body is a good thing in that it saves another request.

The new tips for me were the Link: header for pagination and using 422 Unprocessable Entity for validation errors. How did I overlook 422 before? I've been using 400 for validation problems, which I wasn't very happy with but didn't know what else to use.

</comment><comment><USER19> of course 'dont use xml'; unless your data mainly looks like documents, needs to handle mixed content, need to represent richer types and/or if you already have a robust, full featured, stable XML toolchain.

<comment><USER20> XML gets a lot of flack, and I think part of it is that "enterprise" solutions have mis-used and abused it so much (and part of it might be that people started out with only DTDs for specifying schemas).

Today, I think it's obvious that xml shouldn't ever really be written by a human, it should be used for machine generated interchange of data, much as html -- markdown and rst are reasonable languages to write in -- html "requires" a gui/wysiwig editor -- just as it really isn't pleasant to work with eg: xml config files directly. Or ant-scripts. It just isn't. Yes, you can hide the ugly with a smart editor, but it's still pretty ugly.

Now, html might be pleasant compared to writing in Postscript -- but it's not really pleasant to write (hence things like sparkup).

<comment><USER21> The strength of xml is xsl. The ability to declaratively transform the content into another form. I'm not aware of any way to do this with json other than by hand-rolling code.

<comment><USER20> I'm not entirely certain that is a plus... Is writing a compiler/translator in xsl really more pleasant/easier to maintain than writing it in a "proper" language?

That said, I really enjoyed: [http://www.amazon.com/Program-Generators-Java- Craig-Cleavela...](http://www.amazon.com/Program-Generators-Java-Craig- Cleaveland/dp/0130258784)

edit: for example: you _could_ transform an ant build.xml file -- but _should_ you?

</comment></comment></comment></comment><comment><USER22> Following your examples, one of the ways of searching is by issuing a GET to /search?params. The problem with this, is that is easily to reach the maximum size of the url. For example, if you want to know the data of your facebook frriends you will issue a GET /data?user[:fb_id]=123&user[:fb_id]=534...

There is a solution for this less ugly than using POST, is to sent data in the GET request. This is not forbidden by any RFC. Is just not so common. Most of the client libraries supports that.

<comment><USER14> Why not:

      > POST /search
      > #query data
      < 201 CREATED
      < Location: /search/2324242
      > GET /search/2324242
      < 200 OK
      > GET /search/2324242?page=2
      < 200 OK

(hopefully the representation would be an implementation of a standard paged format, like RFC 5005, but I'm not holding my breath)

<comment><USER22> Because if you are not changing nothing on the server, you should not use POST requests.

</comment></comment></comment><comment><USER23> That's Best Practices for Designing an HTTP API. Of 22 points, the author deals with HTTP implementation details in 14, and REST is supposed to be protocol agnostic and leverage on the standard. In 6 points he goes directly against the REST principles, and in 2 other points he directly contradicts them.

Sorry, but if you follow his guide, you won't have a RESTful API at all. I don't understand how can someone sell that as a "best practices" manual.

</comment><comment><USER24> Another interesting resource: list of best practices on [https://blog.apigee.com/taglist/restful?page=5](https://blog.apigee.com/taglist/restful?page=5), with comparisons of big names such as Twitter or Facebook

</comment><comment><USER25> One thing the (otherwise thorough) article doesn't mention is whether to provide a machine-readable schema for the API or not. Some integrators do seem fond of being able to generate stub client code automatically ...

</comment><comment><USER26> Is there a good way to declare a REST API and automatically have a cli created from it? Having a simple GUI would also be great but that seems like a much less likely chance.

<comment><USER5> We don't have enough standardization for that yet.

Old enterprisey API's had things like WSDL[1] which made auto-generated clients possible. But added their own overhead and complexity. REST API's tend to be much simpler and don't have anything like this at the moment.

[1] - [http://en.wikipedia.org/wiki/Web_Services_Description_Langua...](http://en.wikipedia.org/wiki/Web_Services_Description_Language)

</comment></comment><comment><USER27> Honest question. Do people actually use PATCH and for what?

<comment><USER28> In a standard CRUD application, PATCH _should_ be used for "U"pdates. So you should be able to change attributes of a resource without having to send all parameters to it. It gets a little confusing when you think that most people use POST to create resources, and PUT to do updates (partial or not) and leave PATCH without too much practical use.

So, if you want HTTP purity, think of PATCH as "the verb to use for partial updates without having to send all parameters in the form".

</comment></comment><comment><USER29> Umm... this has been in the top Google results for "api best practices" for months. I use it all the time.</comment>


Zed's Reply To HN Concerning Feed Readers - <AUTHOR> http://www.zedshaw.com/blog/2008-08-01.html

<comment><USER2> Sorry, but if you have to defend a rant (and this within a relatively short period of time) then you've officially jumped the shark on being a "rantor".

Hopefully we can see some more substantial articles from such a brilliant individual sans obnoxious attempts for attention.

That said, I hope Zed doesn't knock me out if I ever run into him in real life (unlikely, but still a consideration).

<comment><USER3> I was struck by this quote:

"... just generally being dickheads with their own self-importance."</comment></comment>