APIs as infrastructure: future-proofing Stripe with versioning - <AUTHOR> https://stripe.com/blog/api-versioning <comment><USER2> I work on a SOA team at a large healthcare enterprise. We currently write mostly SOAP APIs (yeah, I know, 2017 and all that...), and follow a typical pattern as what Stripe describes: Whenever we do a version bump (which is extremely frequent, since a WSDL breaks a contract the moment you sneeze at it), we create an XSLT transform from the new version back to the old. So if you're calling version 2, but the current version is 10, there will be transforms back for 10->9, 9->8, 8->7... all the way back to 2. It works well enough.

We're in the early stages of deploying a new RESTful stack, and versioning is a hot topic (along with getting people out of the RPC mindset and into a resource-based paradigm). While version bumps should be much less common, we'll probably end up doing something similar to our cascading transformations. Essentially, the old version becomes a consumer of the new version, and as long as the new version continues to hold to its API contract, everything should work with minimal fuss. Of course, that's assuming that we don't change the behavior of a service in ways that aren't explicitly defined in the API contract...

<comment><USER3> If you can do an XSLT transformation to different versions I wonder how important the change was in the first place?

<comment><USER4> As TFA notes, replacing a boolean with an enumeration is a breaking change, but can be transformed back easily enough assuming the enumeration just increases the granularity of the original states.

And SOAP is usually schema-verified, so adding fields will generally be a breaking change.

</comment></comment></comment><comment><USER5> Always excited to hear Stripe talking about versioning :D

For anyone else who's interested, they've written/talked about this a few times over the years, to fill out the picture:

\- [http://amberonrails.com/move-fast-dont-break-your- api/](http://amberonrails.com/move-fast-dont-break-your-api/)

\- [https://www.heavybit.com/library/video/move-fast-dont- break-...](https://www.heavybit.com/library/video/move-fast-dont-break-api/)

\- [https://speakerdeck.com/apistrat/api-versioning-at- stripe](https://speakerdeck.com/apistrat/api-versioning-at-stripe)

\- [https://brandur.org/api-upgrades](https://brandur.org/api-upgrades)

\- [https://news.ycombinator.com/item?id=13708927](https://news.ycombinator.com/item?id=13708927)

It sounds like their YAML system has changed to be implemented in code instead, which maybe allows the transforms to be a bit more helpful/encapsulated. If anyone from Stripe is here, it would be awesome to know if that's true and why the switch?

<comment><USER6> I built a lot of the new system at Stripe: the old system would set a flag that was globally accessible inside of an API request. This meant that it was impossible to scope down which changes were relevant to which API methods or resources. Now we can statically introspect into changes.

Additionally, devs would need to specify what their changes were independent of where they made the change, which meant that our API reference (which can display warning flags next to changed fields) was missing changes. With the new system we can enforce that the change being made is properly documented, since we know that it's encapsulated inside of the change class itself.

</comment></comment><comment><USER7> I'm working on designing an API now that is based on Stripe's previous post from how they do versioning.

In general, the concepts employed by Stripe really encourage better design choices. All changes, responses, request parameters, etc should be documented and then handled automatically by the system. We took this approach in our design, although we don't do it with an explicit "ChangeObject" like Stripe does; it's a great idea though.

Hoping to be able to put out a blog post once we start implementing the system and getting feedback on what works and doesn't work well.

</comment><comment><USER8> I wrote a library that will assist anyone wanting to do something similar for versioning using Django Rest Framework: [https://github.com/mrhwick/django- rest-framework-version-tra...](https://github.com/mrhwick/django-rest- framework-version-transforms)

</comment><comment><USER9> I think this is one area where GraphQL really excels. It essentially can handle all of this versioning for you (as clients specify EXACTLY what they want) - you just need to make sure that as you evolve your schema that existing fields are left as-is and you only add new fields (not an easy task, but no harder than what you have to do in Stripe's protocol).

<comment><USER10> New fields don't constitute the kind of backwards-incompatible changes mentioned in the blog post (adding fields is just as easy with RESTful APIs). GraphQL does help cut down on payload size (no extra fields for clients that don't need them), but if you're making major changes to the shape of your data, you'll still need to write some kind of compatibility layer.

<comment><USER9> I've done this with GraphQL (major changes to the shape of the data), and I still think it's easier than other approaches.

For example, in those cases where the response object was fundamentally different, I've added a whole new Query field (and Mutation field) at the top level, that returned the new object. Under the covers there was still a bunch of complexity needed to support both top-level query fields, but old clients continued to access the old query, and new clients went to the new query.

Also, two other things I really like: With GraphQL it's trivial to log which clients are accessing which fields (at some point you can just decide to kill old ones). Also, the @deprecated support in the GraphQL schema IDL integrates wonderfully with the GraphiQL tool, so anyone browsing your schema for the first time always sees the recommended latest version that they should use.

</comment></comment></comment><comment><USER11> This is awesome. As someone who's built many APIs, I have always wondered how Stripe managed all those versions. I knew their code couldn't just be littered with if/thens.

This is a really smart way to do it.

One question is, over the years, wouldn't you add a lot of overhead to each request in transformation? Or do you have a policy where you expire versions that are more than 2 years old, etc? (skimmed through parts of the article so my apologies if you already answered this)

<comment><USER12> Assuming that Stripe's userbase grows over time and that their new API versions offer features that are useful to a significant portion of their existing userbase, I would expect the majority of requests at any time to be for a recent API version that needs few (or no) transformations. This is especially likely considering that Stripe provides official client libraries (which are presumably up to date) for a lot of languages.

Stripe probably tracks the relative usage of each API version. If they found a lot of their users were stuck on an old version, that would point to a bigger problem than just some per-request overhead.

<comment><USER13> _Stripe probably tracks the relative usage of each API version. If they found a lot of their users were stuck on an old version, that would point to a bigger problem than just some per-request overhead._

I'm not sure how true that is. In my experience, integrations with online payment services are mostly write-only code: you do it, you test it, and then no-one goes near it once it's in production unless there's some sort of known bug or security issue.

Literally the last thing I want to do with working, tested code integrating with the service that collects money for a business is make unnecessary changes that might break it. I know several businesses that use versions of APIs that are several years old with services like Stripe, because they have no need to change.

</comment></comment></comment><comment><USER14> To me this is one of the best things about the Stripe API. It's basically database migration files but for your API requests.

Does anyone know of packages that do this already? I have been contemplating creating one in PHP/Laravel for a long time but haven't had the time yet...

<comment><USER15> I've been looking for something like this in PHP too. Nothing yet though. Happy to work on something with you though!

<comment><USER14> I'm gonna hack on it a bit tonight before I go to bed. Here is the link: [https://github.com/tomschlick/request- migrations](https://github.com/tomschlick/request-migrations)

</comment></comment></comment><comment><USER10> Does anyone know if there's a publicly-available Ruby gem for doing what's described in this blog post - i.e., cascading transformations with a nice DSL? If someone from Stripe reads this, I think you could count on some decent community interest for this framework if you ever consider open-sourcing it.

<comment><USER16> It's not a DSL, but take a look at VersionCake.

[https://github.com/bwillis/versioncake](https://github.com/bwillis/versioncake)

"Version Cake is an unobtrusive way to version APIs in your Rails or Rack apps."

</comment></comment><comment><USER13> Thank you to Stripe for the efforts they make in this area. If you're building critical infrastructure around someone else's system -- and it doesn't get much more critical than the way you collect money -- then you really want this kind of stability.

I wish other payment services treated their long-time clients with the same respect (looking straight at you, GoCardless).

</comment><comment><USER17> I'd love to see more specifics on the documentation automation. Keeping docs straight sounds like the biggest challenge with a system like this.

</comment><comment><USER18> That's a great system - I'm totally going to borrow that technique when it next makes sense.

Hey, @pc with all the spare time your team has accumulated by using this api model maybe you could put it to good use. Might I suggest it's time to divert most of your tech resources into creating the next Capture the Flag? Because those were just _awesome_!

I'm joking, in case it's not obvious (but I would absolutely love another Stripe CTF).

</comment><comment><USER19> From a Stripe developer perspective this sounds like a really clean way to handle API versioning.

From a consumer of Stripe's API's perspective, doesn't this make debugging or modifying legacy code a real pain? Let's say I'm using Stripe.js API's from a few years ago; where do I go to find the docs for that version? Do I need to look at the API change log and work backwards?

<comment><USER20> From the article:

"We also tailor our API reference documentation to specific users. It notices who is logged in and annotates fields based on their account API version."

<comment><USER19> Thanks for the clarification. I've used Stripe for side projects for over a year now and honestly didn't know about this until now (I haven't made almost any changes since I originally added Stripe integration). When viewing the Stripe API docs there is no sign in option, and only until I signed into my account did the docs provide a banner at the top indicating that I am on an older version.

I opened the docs in another browser to compare the differences and I am indeed seeing my older version when signed in. It's all very behind the scenes...I would have gotten tripped up by this had I tried to make changes to my code, and I wouldn't be surprised if many others have run into this issue.

My preferences would be for there to be multiple versions of the docs and have your version be very clearly laid out to you rather than automagically updating docs based on your pinned version.

</comment></comment></comment><comment><USER21> Versioning of APIs have existed since the dawn of time, or at least the early 90s. ONC RPCs had versioning built-in IIRC for all their XDR structs. We got away from that over the last few decades, and now people run into the same problems that were effectively solved almost 30 years ago, but long forgotten. The more things change, the more they stay the same!

</comment><comment><USER22> I wish every company would be this open on their strategies. Between this and netflix, its great to see the cutting edge in action

</comment><comment><USER23> Most excellent write-up. I used Stripe for inspiration when writing a post that wound up here titled 'Pragmatic API Versioning', since been renamed 'How to Version a Web API'. It felt like the most clever way to reconcile change and stability, when compared to other major APIs.

It was a delight to get a peek behind the curtain. :)

</comment><comment><USER24> Whenever an idea about API versioning springs into mind it is always worthwhile to watch Rich Hickey's Spec-ulation talk, [https://www.youtube.com/watch?v=oyLBGkS5ICk](https://www.youtube.com/watch?v=oyLBGkS5ICk) for an alternative view of the world.

</comment><comment><USER25> Github also versions their API via headers, but uses the `Accept` header instead: [https://developer.github.com/v3/media/](https://developer.github.com/v3/media/)

<comment><USER26> I consider this a misuse of the Accept header. They're defining a bunch of custom media types, which in of itself is pretty weird, but then they're not actually using those media types as the Content-Type of the response. So I can send a request where I say 'Accept: application/vnd.github.full+json', but the response I get back is 'Content-Type: application/json; charset=utf-8', which means the server intentionally handed me a media type that I explicitly said I didn't accept.

I don't understand why they didn't just use the X-GitHub-Media-Type header as a request header.

<comment><USER27> I disagree, if the response body is a valid application/vnd.github.full+json document, then they sent you what you asked for, they just labeled it differently (but still correctly).

Nothing in the spec says the Accept and Content-Type must match.

<comment><USER28> The spec may not mandate that Accept and Content-Type match, but it's still pretty strange. The client is saying "I accept this particular vendor-defined format, with an underlying structure of JSON" and the server says "ok here's a blob of JSON". Nothing in the server's response indicates that the response actually belongs to the specific vendor-defined media type, it could be handing back arbitrary JSON.

I get that from a practical standpoint the server needs to send back a JSON Content-Type, otherwise a lot of clients won't understand that it's JSON and won't decode it properly. But given this, shouldn't they have picked a different header to declare the API version?

What's the benefit of using the Accept header in this fashion? AFAICT there is no benefit at all over just using a custom header.

</comment></comment></comment></comment><comment><USER29> If the API is transforming requests/responses essentially auto-magically behind the scenes, then how would a client know what version to upgrade to, in order to get new desired features?

Say it is splitting of street into street1 and street2 for an address element. How would I know what version to target to get this feature?

</comment><comment><USER30> Considering the popularity of APIs, has anybody felt the need for a _Accept- Version_ header?

</comment><comment><USER30> In our experience, API versioning hits a roadblock in three cases:

1\. Mandatory new field.

2\. Field is split. For example, address field is now divided into street1 and street2.

3\. Change in datatype.

In the above three cases, we had to force users to upgrade their versions.

</comment><comment><USER31> I really like the rolling versioning approach. Makes a lot of sense.

</comment><comment><USER32> Sounds like migration policy on iOS (Core Data)

</comment><comment><USER33> Brilliant article. Whatever versioning schema that you use, you should at least start with _something_ at the outset of an application IMO</comment>


Ask HN: Which Currency to charge in? - <AUTHOR>

First a bit of background: I'm a Canadian, living, operating, and incorporated in Canada who will be charging $X/month for my service.  Monthly expenses such as hosting are all US based and charged in $USD.
When it comes to charging should I tow the GAP and charge in $USD or go for $CAD?  Only advantage to me in charging in $CAD is that I avoid currency fluctuations on the revenue stream as opposed to charging in $USD and converting to $CAD.  For those who do not realize it, the $CAD is around $1.04USD right now whereas it has been as low as $0.65USD in the past decade.  So as you can see, from a cash-flow management perspective, a bad exchange rate could be quite damaging to the business (OTOH a great exchange rate could be a boon).
To other Canadian operations:  What do you do to manage the currency fluctuations? <comment><USER2> Charge USD. Anytime I see a bill in CAD I immediately start worrying about conversion rates and possible customs charges, and if I can get the same thing for within 5% by doing a USD transaction I will.

<comment><AUTHOR> Funny... I live with the conversion issue almost every day. Something we Canadians (and I suspect everyone doing online transactions) have just gotten used to. That said, every barrier to an acceptance is one I want to eliminate. Thanks for the input!

<comment><USER2> I don't mean to say that it's a rational objection! Apart from a couple of annoying customs charges (because the sender didn't fill out a form correctly, forcing me to pay import duties on already-taxed goods bought from Canada), I have never had any actual problems purchasing from Canada rather than within the US. And for that matter, I'm not even American myself, so it's not based on some unfounded fear about the outside world. I've just gotten lazy and begun to assume that there will be some sort of unforeseen additional cost later, or that relative currency values will have drifted since the last time I looked and I will wind up paying more than I anticipated, or...something. If I'm hesitating over it, I'm guessing a good many more are.

</comment></comment></comment><comment><USER3> If you were using paypal then it would allow the user to pay in any currency and in a way increase the target audience and wouldn't possibly put a buyer off.

If you are worried about currency fluctuations, would it be possible to have a US bank account which profit would enter which would then be used to pay for anything US based therefore decreasing risk when converting $CAD to $USD? If so, then you would only transfer money to $CAD when the currency rate falls into a certain range for example 0.95-1.xx

<comment><AUTHOR> So are you suggesting different amounts depending on the currency and the location of the enquiry IP? Example: $30CAD, $30USD, 18EUR, 2600Yen?

That's something to think about. Have you done that or know a service that has?

<comment><USER3> Sorry I have not done anything like this before. Through paypal, I meant that you would charge say $10CAD on your site, when the user logs in to their account, the charge is automatically charged in their currency. But this wont be displayed on your site, only a figure of $10.

It really depends what kind of a service you are giving, in what quantity and how often you need to transfer it back home. For example paypal and many credit card companies take a small percentage of the transaction. Google checkout is another solution to this. If you only transfer the money once per quarter then you may save money when converting currencies

</comment></comment></comment><comment><USER4> I'm operating from Iceland (<http://pagekite.net/>), and decided to simply let the user choose: I offer prices in USD, EUR and ISK. The prices are roughly comparable, but I don't bother making them match exactly - exchange rates fluctuate too much and I figured it was more important to be user-friendly by offering stable, understandable prices in a currency the user is comfortable with.

We launched so recently that most of our users are still working through their trial period, so I haven't actually gotten many sales or much feedback on the system yet. So I can't say how well this is working in practice.

I'd love to know if people here think this is a good or a bad strategy, and why.

</comment><comment><USER5> As someone who lives in the UK, I almost see dollars as monopoly money, I just can't easily interpret the value properly. For example, if something I wanted was $10, I'd snap it up, whereas if it was £5 (~$8), I'd think twice. You'd think it would be the other way around given that each pound is worth more than a dollar, but I guess you just give greater value to the currency you use everyday.

Though I wonder, would you generate more sales selling a product for £6, than you would selling it for $9? And could you switch your pricing from $9 to £9 (~$14.71) and maintain a similar conversion rate?

<comment><AUTHOR> Businesses do that every day. Look at the price of a book which often has two or more currency prices on it. Of course, what happened here in Canada is that stores started offering discounts or "US Pricing" models when our dollar went up. If we're to nitpick we're talking physical items which have associated local costs involved (local staff, local vendor space leases, local energy costs, etc.) whereas here we're talking electric bits and bytes. However, in sales and conversions, it's all the same... no?

I have to admit, I was looking at Grahl Software's PDF Annotator which is listed at $69.95USD but when I went to the site it said C$79.95 (using my IP to give me a price). Did I convert? No. I was turned off. That's 19% more expensive than if I used a US IP. I've a feeling, only from my own experience, that different currency prices in a flat-earth internet environment is a big turn off for consumers.

</comment></comment><comment><USER6> If most of your costs are USD and most of your clients want to pay USD why not open a USD account with your bank and be done with it?

Figure out the most fluctuation you could handle and put a note in your TOS that you will adjust the pricing based on USD/CAD exchange rates if they go outside of a certain window. Alternatively, you could bypass this calculation and just purchase a CAD futures contract from your bank.

Seriously, worry more about getting customers than how the USD/CAD exchange rate will vary over the next year or two and you'll do fine. It's more likely that the CAD will go to .80 than 1.20 because Canada exports 80% of it's goods to the US and a devalued currency is better for exporting countries.</comment>


What Makes Boston's Start-Up Scene Special? - <AUTHOR> http://venturefizz.com/blog/what-makes-bostons-start-scene-special

<comment><USER2> I'll tell you what is and is not special about Boston (I live in Boston). This is the city with the VC community that told Facebook - no thanks, take your app somewhere else. If Facebook had been founded in Boston the entire landscape here would have been different. Instead, we see most of our brightest students go to the valley by default. So the "old" money in Boston is not special and neither is the "old boy's club" often associated with older cities.

What is special about it? Top educational institutions, history of success, and the will (tbd) to compete with the valley.

<comment><USER3> Additionally a lot of the VC figures for Boston count in biotech numbers (as they should) but this often makes it look like we are floating in cash here- which isn't the case. YC also skipped town, which was unfortunate. Thankfully we've got TechStars now handling similar here.

What I think makes Boston special is that we've got some of the brightest students in a very geographically dense area, a great tech community (betahouse, WebInnovators, Sprout Labs), some decent local tech publications (Xconomy, Mass High Tech), coffee shops willing to deal with hordes of laptop users, etc.

Plus while it is expensive here- it isn't so ungodly expensive like having an office in Manhattan. I'm guessing New Work City's (coworking spot in NYC) rent is probably 2-4x that of betahouse in Cambridge. Stuff like that makes startups a bit easier here.

<comment><USER2> Boston VCs should give young hungry startups a chance.

A team of 2-3 brilliant early 20's building the next google is the dream of the valley.

Hopefully some of the successful Boston founders cultivate the talent here and come up with a nice (PR) Boston story.

</comment></comment></comment><comment><USER4> One of my advisors told me that the difference between the MIT style and the Stanford style of startups is:

* MIT style is cover your test sheet so no one copies you.

* Stanford style is go out with your competition and share information so you are both stronger.</comment>


Ask HN: Command Line History - <AUTHOR> In a past HN response to me, someone indicated that they keep a large history file for their shell. I have always set mine to not be created due to privacy concerns but this comment continues to stick with me.<p>For those who like to keep their command history: how much did you decide to keep and do you back it up and/or sync it? <comment><USER2> One of the first things I do on a fresh install is set my history to two million lines:

        HISTSIZE=1000000
        HISTFILESIZE=2000000

I also have a one-line script "did" that searches for a pattern in the recent commands (from previous sessions):

        grep "$1" ~/.bash_history | tail

This is so simple but I couldn't begin to estimate how much time it has saved me over the years.

The history file is saved in my backups of home dir.

For what it's worth I sometimes am concerned with privacy, but it's important to remember that you must specify: _privacy from whom?_

For most cases I trust file permission flags, either only _I 'm_ root or someone else is and it wouldn't be appropriate to hide history from the sysadmin (i.e. on my employer's machines.)

\- - - -

edit: TIL

> In bash 4.3 and later you can also use HISTSIZE=-1 HISTFILESIZE=-1

</comment><comment><USER3> I keep an unlimited amount of my bash history using the method outlined in this stackoverflow answer[0]. I've been doing it for almost 2 years now now and my history file has about 50,000 commands and is under 2MB.

Maybe it makes ctrl-r more useful. Maybe I'll find something interesting to do with this data later, but it's pretty useless. It's a sort of personal diary I might scroll through years in the future.

For privacy, you could add something like this to your .bashrc

        alias forget="unset HISTFILE"

then invoke the "forget" command to stop saving commands in that shell session, including the "forget" command you just typed but not any command before that.

[0] [https://stackoverflow.com/a/19533853/3064538](https://stackoverflow.com/a/19533853/3064538)

</comment><comment><USER4> I have my bash history set to unlimited and there are currently 34489 entries in there. Since this is my development laptop and a machine that isn't normally accessible by anybody else, I don't worry too much about any security implications. And if the machine gets stolen, I'm screwed anyway.

OTOH, I _hate_ knowing that I have used some obscure command or combination of commands and args in the past, and not having it in my history. It was after getting fed up over one such incident a couple of years ago that I changed my history settings to unlimited. I haven't regretted it yet.

</comment><comment><USER5> In the Fish shell, your history feeds autocompletions so you can quickly run commands you ran in the past with a right-arrow keypress.

I personally use both ksh and fish (on different machines) and keep full history on fish and no history on ksh.

</comment><comment><USER6> I keep all of it but I don't back it up. Disk is encrypted. Fancy commands go into Evernote for easier searching.

Also, I use fuzzy finder for cmd+r. Absolutely love it.

</comment><comment><USER7> hi again [https://news.ycombinator.com/item?id=17904390](https://news.ycombinator.com/item?id=17904390)

your disk is probably encrypted anyway, so your risk is small. just be mindful to unset HISTFILE before things like exporting secret keys during development if you're so concerned.

<comment><AUTHOR> Hello again.

I like the idea of unsetting HISTFILE to a avoid saving sensative commands. That probably works on most shells.</comment></comment>


Ask HN: What attire is appropriate for interviewing with a startup? - <AUTHOR>

I have an interview today with a startup for a developer position. I just graduated from college, and my parents are pushing hard for suit and tie today because it's "conventional wisdom."<p>What do you feel is actually appropriate? I don't want to appear as a stiff who won't fit in with the culture. <comment><USER2> There's a spectrum of behaviors I could recommend here with more information on, say, where the startup is located (because your parents totally aren't insane if the answer is Tokyo) or what stage it is at. For a Valley startup, I think a suit _might quite possibly_ say something about your culture fit that will not be judged in a positive manner, and might suggest anything in the middle of the Venn diagram a) makes you look good and b) could be warn in front of a friend's parents without giving offense in spite of having no prior knowledge of their views on appropriate attire.

If you're totally starved for ideas, for guys, khaki pants and a solid shirt, both ironed. I'm even less qualified for giving sartorial advice to ladies than I am to men, so I'll defer to someone else on that.

n.b. I fairly often do meetings with startup folks, including potential clients, in either that or my usual jeans + T-shirt with a track jacket on top uniform, and can't remember feeling conspicuously underdressed recently. (Edited to add: Ahh, forgot a conspicuous exception that proves the rule, but I can't disclose it without violating an NDA. Suffice it to say that if the industry a startup is in would make a blind ferret say "Dude, you should dress up for that" then you should probably dress up for that. Still got the engagement but went shopping before I started showing up on site.)

</comment><comment><USER3> I usually just ask someone from the company I will be interviewing with.

IMO, a suit and tie, especially for a junior developer type position is probably wrong _UNLESS_ you are the sort of person that is 100% comfortable and natural in a suit, and even then I'd skip the tie.

My goal would be to dress 1 step above the people you are interviewing with. Enough that you clothes help convey a sense of elevated status, but not so much they look at you and go "I don't want to work with some guy that wears a tuxedo to work".

Based on my non-scientific observations over the years, the ideal outfit would be pressed khakis, ironed polo or button-down shirt, sport-coat. If the environment is one where the people dress a little nicer, then you fit in well and the jacket probably sets you apart. If it's uber-casual you can leave the jacket someplace and then you'll be dressed nicely, but still a touch above most of the people you're interviewing with.

FWIW, I can't remember the last time I've work a suit to an interview in probably 15+ years, the last 10+ of that I've been working higher-level management type jobs, many times in sales-ish roles/departments.

Also, respect to your parents, but their conventional wisdom is probably massively out of date with current job trends/cultures, especially as it relates to developer positions.

</comment><comment><USER4> It's definitely possible to dress up without looking like a stiff in a suit. Get a decent button down from somewhere like J Crew or Banana Republic, a pair of nice, dark jeans (or khakis) and some dark leather shoes. The key take-away is

      a suit doesn't necessarily = well-dressed
      no suit doesn't necessarily = not well-dressed

Think of your typical office drone (like the guys in Office Space) - they're in crappy suits and don't look that good. Likewise, some of the best-dressed people hardly ever wear strict "suits."

But, I do agree with the poster below: _If a company balks because you overdressed for your interview it's their problem, not yours._

</comment><comment><USER5> I have a rule that I will never wear a suit and a tie to interviews. I don't dress scruffily however nor do I dress formally. Some companies take offence at that and, in some cases, you won't get the job as a result. Those jobs though - chances are you don't want them.

However if in future I am ever struggling to find a job then I will likely have to relent on this rule.

<comment><USER6> I'll have to agree with this. As a programmer, I'm not particularly interested in wearing a suit and tie while working so by principle I wouldn't wear it to an interview.

It really depends on the company, though. If while talking with the company before the interview they came off as lax on their dress code, I wouldn't bother wearing anything fancy. I guess it's about judging the appropriateness for the given situation.

In the end, I'd prefer to wear whatever I'm most comfortable in so I can be myself and show them exactly who I am, as opposed to carbon copy office bitch in a suit.

<comment><USER5> For me it's not about the suit, it's about the rules. If a company requires you to wear a suit (by the way, I'm fine with wearing a suit for client meetings, etc) - chances are they'll be restrictive in other areas too.

<comment><USER6> I agree, plus it just sets a tone and atmosphere I don't want to work in.

Unfortunately, my present employer requires I wear a collared shirt and dress shoes, which I hate. I am much more productive when I can wear whatever I want. It shows, too. Especially when I'm forced to come in on a Saturday but can wear whatever I want; I get so much more done.

</comment></comment></comment></comment><comment><USER7> Your parents are right. If a company balks because you overdressed for your interview it's their problem, not yours.

</comment><comment><USER8> "I don't want to appear as a stiff who won't fit in with the culture."

I do not think that just by wearing a suit, you would give that impression. everyone understands that interviews are always a little more formal than the actual job. Even if the startup company where you will interview has dress code which includes shorts or jeans, I suggest you go in a simple business suit. The worst that could happen ? The interviewers will tell you that they are not that formal but thats ok. If you go without a suit, it may not hurt your chances either especially at a startup but why take a chance. My suggestion: go with a business suit. You have nothing to lose with that.

</comment><comment><USER9> I've interviewed and secured something like five developer jobs in as many years, at both startupish and big-money companies. Jeans, t-shirt and hoodie at each.</comment>


The Frugal Billionaires - <AUTHOR> http://www.forbes.com/2007/11/14/billionaires-walton-buffett-biz-cz_ah_1114frugalbillies.html

<comment><USER2> Hmmm...cutting your own hair to save time. This, I like. But how do they do it? Flowbee? Clippers?

<comment><USER3> cutting hair...seems hobbie more than time saver.. it takes 10-15 minutes if we go on odd time..so, i don't think it is time saver..</comment></comment>


Why One Japanese Company Is Turning Baseball Bats into Chopsticks - <AUTHOR> https://www.youtube.com/watch?time_continue=16&v=Wu4CyBzD8sI <comment><USER2> [video]</comment>


Django 1.7 alpha 1 released - <AUTHOR> https://www.djangoproject.com/weblog/2014/jan/22/django-17-alpha-1-released/ <comment><USER2> > Applications can run code at startup, before Django does anything else, with > the ready() method of their configuration.

I have been waiting for something like this for a very long time. No more wondering where signals should go. [0]

[0][https://docs.djangoproject.com/en/dev/ref/applications/#djan...](https://docs.djangoproject.com/en/dev/ref/applications/#django.apps.AppConfig.ready)

<comment><USER3> God, yes. I even asked for a signals.py so they could be declared there, but this is even better. I'm very excited about this.

</comment></comment><comment><USER4> It's great to see schema migrations move into Django core. South is great, but Django will be much better with schema migrations baked in, especially for newcomers.

For anyone coming to Django from Rails, South seems anomalous. Outside of database migrations, Django is a very battery-included framework, so it's weird that until 1.7 data migrations were handled by third party tools (mostly South) and not mentioned at all in the Django documentation.

This is a big step for Django. I'm excited for the (not too distant) future when 1.7 is the official release.

<comment><USER5> I wonder if there will be a tool to convert (migrate?) South migration data to Django's native format.

<comment><USER6> The recommended upgrade path seems to be:

* Apply all South migrations to all database servers,

* Delete South migrations,

* Create new initial (create table) migrations for the current schema.

This makes sense, as migration code is supposed to be temporary. Migrations should exist in the codebase _until the last database has them applied_. Once all databases are up-to-date, it's better to delete them and "rebase" migrations to the current schema.

Old, fully applied migrations will still stay documented in the version control history, but they shouldn't be part of the master tree, much like obsolete code should be deleted instead of left commented out.

<comment><USER3> This has the added advantage of removing old, crufty migrations. We do this every few months, as there will usually be some problem that will prevent migrations from applying cleanly on new installations (someone made a mistake and reverted imperfectly, something collided and the resolution didn't delete some data, etc).

</comment></comment></comment></comment><comment><USER7> Django's all grown up! I'm pretty psyched about this release. Obviously, the long-awaited migrations functionality is the centerpiece, but for a framework without that many rough edges, they do such a great job of finding the ones that remain and terminating them. Looking forward to the end of magical models.py behavior; to stronger support for apps; easier to use custom QuerySets and reverse relation Managers; and Lookups, Transforms, and custom prefetching in the ORM. This is looking like the most exciting release since 1.4 for tightening up the core of the framework.

Anybody have any insight into what's next?

<comment><USER8> Potential things for 1.8 that I'm aware of are composite fields and improved aggregates. Hopefully, there'll also be some work on .values(), .annotate(), and .order_by() that will allow a much broader range of options, which is part of a larger internal refactor of the ORM. No guarantees on any of the above though.

</comment></comment><comment><USER9> > Additionally, users of South (a popular third-party package for schema > migrations) should note that South is not compatible with the 1.7 alpha.

Is this because of the new migrations built-in module? [0]

[0][https://docs.djangoproject.com/en/dev/topics/migrations/](https://docs.djangoproject.com/en/dev/topics/migrations/)

<comment><USER10> Yes. The author of South is writing the built-in migrations, and keeping a 3rd party migration library would be redundant.

</comment></comment><comment><USER11> Wasn't the "New system check framework" already in 1.6? I remember seeing warnings about BooleanFields without defaults.

<comment><USER12> I wrote that BooleanFields without defaults patch! I'm glad that the warning has been seen by at least one person!

The ./manage.py validate command has been replaced with ./manage.py check in Django 1.7. The new system checks framework [1] is extensible, so third party apps will be able to add their own checks.

[1]: [https://docs.djangoproject.com/en/dev/ref/checks/](https://docs.djangoproject.com/en/dev/ref/checks/)

<comment><USER13> Hello, I'm interested in contributing to django, could you please give me a few pointers ? The django ticket list is daunting for a newcomer, that I don't know what to start with. My email's in the profile, and I'll be checking this comment as well. Thanks.

<comment><USER12> It took me quite a while to find tickets and patches that I could work on. I started with a couple of really trivial documentation fixes, and am building from there. I agree that the ticket list can be a bit daunting, so don't give up!

Searching the tickets that require documentation [1] or unit tests [2] can be a good place to start. It's a sign that a bug or new feature has been accepted, and that the patch can be accepted with some improvement. If a ticket is assigned to somebody, but hasn't been worked on for a few weeks, then don't be afraid to pick it up and improve it.

If there are any sprints happening near you, then go along. Daniele Procida runs a workshop Don't Be Afraid to Commit, which covers a lot of the basics you need to write your first Django patch (git/sphinx/...). The workshop is online [3].

There's a low traffic Django Core Mentorship mailing list [4] that you could join, or #django-dev on IRC might be helpful.

Good luck!

[1] [https://code.djangoproject.com/query?status=!closed&needs_do...](https://code.djangoproject.com/query?status=!closed&needs_docs=1&stage=Accepted&order=priority)

[2] [https://code.djangoproject.com/query?status=!closed&needs_te...](https://code.djangoproject.com/query?status=!closed&needs_tests=1&stage=Accepted&order=priority)

[3] [https://dont-be-afraid-to- commit.readthedocs.org/en/latest/](https://dont-be-afraid-to- commit.readthedocs.org/en/latest/)

[4] [https://groups.google.com/forum/?fromgroups#!topic/django- co...](https://groups.google.com/forum/?fromgroups#!topic/django-core- mentorship/FFLekhwIF1M)

</comment></comment></comment></comment><comment><USER14> The (preliminary) release notes are full of nice things [https://docs.djangoproject.com/en/dev/releases/1.7/](https://docs.djangoproject.com/en/dev/releases/1.7/)

</comment><comment><USER15> Only a week or so after I upgraded to 1.6</comment>


Coda 1.0 - <AUTHOR> https://blog.coda.io/introducing-coda-1-0-88a484851ea9 <comment><USER2> Is it really a 1.0 if there's no pricing available. Would love to use, but can't get started on a product when I have no idea what it will cost our team.

</comment><comment><USER3> SaaS only, a pain in regulated environments...</comment>


How to solve the British maths problem?  - <AUTHOR> http://news.bbc.co.uk/2/hi/uk_news/magazine/7435023.stm <comment><USER2> Is anyone else ever disturbed by the attempts to "make X fun!" by inclusion of cartoon characters and other inanity? I think it's a distraction; the kids just pay attention to the cartoon.

I know that some teachers would disagree, but in my experience, most teachers at the primary level don't really love math. Not the way I do, anyway. At the very best, you get people who liked doing rote problems, and those sorts of people just suck. The rest struggle through the lessons as much as their charges do, and they'd be lost without the teacher's guide.

In my opinion, the way to make math fun is to make the exercise of the skill itself more fun. Make it part of a game. For bonus points, make the game complex enough that multiple strategies can work, estimation or direct calculation or induction. And I'd like some recognition of the fact that some people are insanely good at this and others will always struggle, so create teams where different skills are useful (calculation, problem solving, record keeping, data gathering) but everyone learns the basic lessons.

Sooner or later you're going to be alone with the pencil and paper and Mr. 4 and Ms. 5 are not going to be there to help.

<comment><USER3> "Is anyone else ever disturbed by the attempts to "make X fun!" by inclusion of cartoon characters and other inanity?"

Yes, Mr Lockhart is -

"A similar problem occurs when teachers or textbooks succumb to cutesyness. This is where, in an attempt to combat so-called 'math anxiety' (one of the panoply of diseases which are actually caused by school), math is made to seem 'friendly'. To help your students memorize formulas for the area and circumference of a circle, for example, you might invent this whole story about 'Mr. C', who drives around 'Mrs. A' and tells her how nice his 'two piesare' (C = 2πr) and how her 'pies are square' (A = πr2) or some such nonsense.

But what about the real story? The one about mankind's struggle with the problem of measuring curves; about Eudoxus and Archimedes and the method of exhaustion; about the transcendence of pi?

Which is more interesting? measuring the rough dimensions of a circular piece of graph paper, using a formula that someone handed you without explanation (and made you memorize and practice over and over) or hearing the story of one of the most beautiful, fascinating problems, and one ofthe most brilliant and powerful ideas in human history? We're killing people's interest in circles for god's sake!"

\- <http://www.maa.org/devlin/LockhartsLament.pdf>

(which I originally found linked on HN or reddit, and enjoyed reading ... but then what? Where is a near layperson to find mathematical writing that walks the line between Mr C and his two pies, and the impenetrable mathworld.wolfram.com, neatly skipping the textbooks written to look comprehensive to school purchasers, rather than to be useful? ( <http://www.overcomingbias.com/2007/11/lost-purposes.html> ))

<comment><USER2> That was great. Thanks.

I do, however, take issue with his notion of teaching math for purely aesthetic reasons. That definitely should be part of the curriculum, but I personally feel that only a few students are really attuned to that sort of thing. Others will enjoy the mechanics of calculation, and others will love reasoning and problem-solving. Some won't like any of this, but not everyone is cut out for a life where math is a big part.

</comment></comment></comment><comment><USER4> The problem is demonstrated by the video in the article. Maths? Here, try some Long Division. You could get yourself a _maths degree_ without even touching long division, but it's the example they use to get people to do maths??

<comment><USER5> Indeed. In fact, thanks to this I have discovered that what I was taught as "long division" is not what other people (or, at least, Wikipedia and those in this video) were taught. The method I use still works though, but appears to be more of a dead reckoning system and heavier on the mental arithmetic.

</comment></comment><comment><USER6> A lot of the guys I knew that were good at maths were labelled nerds, so to admit to being good at maths is to risk being labelled a nerd by association. On the other hand, to say that you suck at maths implicity says things about you that avoid this association eg. "I dispensed with my maths education to hang out with the cool kids". I think most people know this intuitively.

The pride of a self-confessed maths half-wit is anchored in implied social standing rather than genuine pride in a lack of ability. I doubt anybody is saying "I can't add or subtract, how awesome am I?"

</comment><comment><USER7> I think it has to be more obvious how to apply maths to everyday life. Not sure if it is very easy to do, though.

One problem that comes to mind is understanding mobile telephony costs. I am amazed how many people really seem to believe that their phone only cost 1€...

Finances (interest rates, economics) would be another area, which could at the same time help prepare people for life after school.

What about games? I just bought "The Theory Of Poker", perhaps stuff like that could arouse more interest about maths in kids? They could even play games at school, imagine that.

Thinking about it, maybe it would be worthwhile to start a web site (wiki) about applied maths problems. Applied as in REALLY applied, everyday problems everybody could relate to.

I have a server and would set it up, could anybody recommend a good wiki package (debian)?

</comment><comment><USER8> I looked at the division problem and guessed 472, and got it right. I think guessing accurately is important. You almost never have time to work things out. The 4 was obvious, and the 2 was probable--they wouldn't likely require a remainder from people. And so that left the 7 to guess.

I mean, given a set of problems requiring such division, most could be acceptably answered by nearly-correct answers. This isn't true in finance, but for most other things it is.</comment>


Show HN: Wallr, use ARKit to put try out having images on the wall - <AUTHOR> https://itunes.apple.com/us/app/wallr/id1278372745?mt=8 <comment><AUTHOR> Hello everyone. Proud of this app since developers can detect horizontal surfaces out of the box, but not vertical ones. It was a fun challenge. With this app you can add your pictures from your phone to the wall to see what size they should be and what position. It gives measurements in inches and meters. It also includes adaptive lighting, and with unlocks you can add a virtual frame and add more than one image at a time, to experiment with gallery walls and such :)</comment>


Writing a full-text search engine using Bloom filters - <AUTHOR> http://www.stavros.io/posts/bloom-filter-search-engine/?print <comment><USER2> I have not yet had the chance to try it out but the acrylamid static blog generator written in Python ships with its own JS search [0] using compressed suffix trees. It's probably inspired by Sphinx, the Python doc generator, which has a similar feature [1].

For static blogs, I think this could be used as a first level of search, instead of directly going to Google first.

[0] [http://posativ.org/acrylamid/static- search.html](http://posativ.org/acrylamid/static-search.html)

[1] [http://stackoverflow.com/questions/605888/whats-the- search-e...](http://stackoverflow.com/questions/605888/whats-the-search- engine-used-in-the-new-python-documentation)

</comment><comment><USER3> An alternative, but related, approach that would eliminate false positives could be to do an N-ary tree instead, where the bloom filter in this solution is just the first level of the tree. You could then download a json document for the child of the matching top level element to narrow it down to specific documents. You could also calculate relevancies this way.

<comment><USER4> I'm wondering why not build a tree of bloom filters with a bit array at each level being the bitwise OR of its child nodes. Hashing only needs be done once, and a comparison happens at each level of the tree, which can be traversed to easily find matches whilst discarding branches that are certain to be fruitless.

A bit of googling shows me this already exists and is called a bloofi tree.

<comment><USER5> Then you are better at googling than I am. Can I enquire for a link?

Edit: nm, it appeared when I searched for bloom trees instead of bloofi

</comment></comment></comment><comment><USER6> This is probably an improvement over the simplest idea I can think of:

        <?php exec("grep $terms *html", $results);

<comment><USER7> The motto of PHP devs is apparently "F __KIN ESCAPING, HOW DOES IT WORK? ". Use escapeshellarg, kids.

<comment><USER8> escapeshellarg misses some cases. You need to use escapeshellarg_fixed.

<comment><USER9> real_escapeshellarg_fixed, you mean.

</comment></comment></comment></comment><comment><USER10> Nice idea :-)

I once wrote a python library for wrapping static content into a sqlite database for full text searching, for roughly the same use-case (static content, but I would like a search system). I just threw it online, if anyone is interested.

[https://github.com/danthedeckie/pagestore](https://github.com/danthedeckie/pagestore)

</comment><comment><USER11> You are not doing full-text search with bloom filters (unless you add all partial words to the filter), only word-search, which is imho the biggest disadvantage (e.g. typos in the index or on the client's side).

</comment><comment><USER12> This reminds me of how Datomic clients download read-only segments and process queries locally. [http://docs.datomic.com/architecture.html](http://docs.datomic.com/architecture.html)</comment>


UBlock Origin - <AUTHOR> https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/?src=search <comment><USER3> From the horses mouth [1]:

Main reason I published on AMO is because a feature which I think is important was removed from uBlock (per-site switches). That both versions diverged significantly enough so soon is not in my control.

When ABP added "acceptable ads" in their fork, they also created a demand for a version uncompromised by the "acceptable ads" principle, hence ABE happened. When uBlock removed the per-site switches, a demand was created for a version of uBlock with the per-site switches.

This is the reality of GPL: anybody can fork and create their own flavor if they disagree with the pre-fork version. This should not be seen as wrong when it happens, it's expected. In the big picture, users win.

As far as trust is concerned, both versions can be trusted -- that should not be an issue in either case: the development and source code is public in both cases (every single code change can be easily browsed on github).

Edit: Notice that I still contribute fixes to uBlock since the fork, and also try to deal with filed issues (those issues which are relevant to both versions), so it's not like I am ignoring uBlock to the advantage of uBlock Origin -- I also want uBlock to work fine for whoever uses it, I just strongly disagree with the removal of the per-site switches feature.

[1] [https://github.com/gorhill/uBlock/issues/38#issuecomment-966...](https://github.com/gorhill/uBlock/issues/38#issuecomment-96618444)

<comment><USER4> Honest question, what's AMO?

<comment><USER5> Addons.Mozilla.Org

</comment></comment></comment><comment><USER6> Is there a good ad blocker that can be set to NOT block by default, and that provides an easy, one button or so, interface to turn blocking on for the site currently being viewed? I want to operate under a policy of giving new sites I visit a chance to show me that they can advertise responsibly and blacklist them if they show that the cannot.

All the ones I've tried so far (AB, ABP, uBlock) are strongly oriented toward blocking everywhere by default and whitelisting sites that you do not want to block on.

I suspect that most people who use an ad blocker do so not because of some moral objection to the very concept of advertising to pay the bills so that a site can provide free content to the general public. They use an ad blocker because they got tired of sites whose ads do obnoxious things like block the content, move the content around [1], make noise, put distracting animation in your peripheral vision, and so on.

By blocking all ads by default, the current ad blockers break the feedback loop that should be pushing sites toward ads that don't have the problems mentioned in the previous paragraph.

[1] moving the content around is what got me to install an ad blocker. Gocomics.com started doing ads that slide in from the left side, pushing the comic you are reading to the right. If you have zoomed in to make the comic more readable, this could push the right panel of the comic off the screen. Since the slide in ads did not run on every page (and when they did run, it was with a delay of a few seconds), you could not anticipate them and position the zoomed comic appropriately.

<comment><USER7> This is how I use uBlock, by disabling all the built-in filter selections and blocking ad providers when I notice them doing something shady/annoying, or going down in a way that hangs site loads.

Spoiler alert: you wind up blocking all ads anyway. There aren't any ad networks that have anything approaching the standards and practices of late night cable. If you don't believe me please run this experiment yourself.

</comment></comment><comment><USER8> Honest question - what business model for free content do you see other than ads? I understand all the privacy and distraction issues related, but increasingly many news sites I read feature only paid content. I suppose it's connected to the rise of ad blocking.

At the moment I'm not hosting any content of such kind myself, but I wanted to publish a game and I'm facing the same question. Should I sell my soul to the devil and work on freemium, coins, exploit OCD and rich-parents kids, or host ads and risk not earning a dime because every single gamer I know is tech savvy enough to have an ad blocker?

<comment><USER9> If you only see a choice between "Free to Play" or hosting Ads then you have a problem greater than choosing your business model. You don't value your work enough to consider it valuable enough to pay for outright. First, ponder why that is, then address _that_ issue.

<comment><USER8> Because:

* it's not what I want - I prefer to deliver it for free and do not plan for it to become any source of income, just to not have costs scaling with popularity

* I don't need to sell it - I'm reasonably wealthy, with a good 40h/week job and salary. This is a side project and will loose it's charm when I convert it to a business project.

* it's hard - I work on a browser-based game (no easy to implement payment options)

In other words, it needs to be free for users and possibly earning just enough to not cost me anything.

<comment><USER10> What costs? Is hosting really so expensive, or is it something else? Obviously you have invested a lot of time. Personally, I wouldn't think twice about spending, say, $10 per month to publish something where I have invested the equivalent of $100000 in unpaid developer time (and yes, I have done that, although it's strange thinking of it in money when I did it for the challenge). Maybe it's more a psychological issue (pay for giving something away) rather than the actual cost?

</comment></comment></comment></comment><comment><USER11> You should all check out umatrix if you have 15 minutes to spare.

Made by the same guy, it's adblocking and noscript done exactly how you want it done. Block pulled-in third-party sites by default, accept all on the primary domain you're looking at, and especially block from domains on a blacklist.

It breaks on a few sites, but it's not in my way as much as noscript and it's a 5 second job to get most any website to work. If you don't know how the web works, you'll be frustrated. If you understand how the modern web works, you'll wonder how you ever did without.

<comment><USER12> _> it's adblocking and noscript done exactly how you want it done._

it's good, but not _exactly_ how I want it done. Namely, it's not hierarchical. E.g. I can say Site A may load frames from site B. But then site B tries to load stuff in its frame and I have to set additional rules for Site B. instead an forward pointer to "Site B default inclusion set" or something like that would be useful.

Basically, hundreds of sites embed youtube. And on some (but not all) I simply want to apply a "load the minimal amount of stuff necessary to embed youtube" rule. If loads are conceptualized as a tree (A loads B loads C) a flat matrix is not powerful enough.

<comment><USER13> All scopes import from higher level scopes. E.g. bl.com imports from * and www.bla.com import from * and bla.com.

I've made soem modifications to the * (global) scope to allow the minimal version of youtube to load. So whenever I visit a new website youtube just works.

<comment><USER12> That's not what I want because I only want to apply that to some sites.

I even wrote _" And on some (but not all) [...]"_ to make clear that global rules are not the same as hierarchical matches.

</comment></comment></comment></comment><comment><USER14> How is this different from the normal / existing uBlock?

[https://github.com/chrisaljoudi/uBlock/releases](https://github.com/chrisaljoudi/uBlock/releases)

<comment><USER15> TL;DR: "uBlock Origin" (or "uBlock₀") is the version you want (maintained by the creator of the project, up-to-date)

The original "uBlock" github repo was created by gorhill. Later, the repo was handed to a contributor of the project (chrisaljoudi) who did nothing good with it. Finally, gorhill forked chrisaljoudi's repo to create "uBlock Origin" and resumed development.

<comment><USER16> I don't think that this is actually true. Yes, gorhill started ublock and then handed it over, but chrisaljoudi just continued development and made some changes (like a call for donations). I'm not aware he did anything bad, and in the video he put up sounded just a bit unlucky, not like planning to do bad things ([https://www.youtube.com/watch?v=_D1TpddtVUA](https://www.youtube.com/watch?v=_D1TpddtVUA)). Or see [https://www.reddit.com/r/ublock/comments/38lf1y/any_differen...](https://www.reddit.com/r/ublock/comments/38lf1y/any_difference_between_ublock_and_ublock_origin/crwhmwt), where a made statement about feature-completeness caused a minor dispute.

Which version to run probably more depends on whether you want that per-site switches feature.

<comment><USER17> > but chrisaljoudi just continued development and made some changes

Yeah, there's more to it than that. Gorhill started it as a free and non- profit solution to help. He gave a lot of the credit to people maintaining the block lists. When he got tired of dealing with it, he transferred maintainership over to one of the devs that showed interest - chrisaljoudi. Who promptly started to monetize it. Like how he stripped out the "No donations sought" part of the readme ([https://github.com/chrisaljoudi/uBlock/commit/f256801344a517...](https://github.com/chrisaljoudi/uBlock/commit/f256801344a5178261cad5130a7f4be1ec061343)). And many of his changes were done to make his own contributions seem far larger than they actually were in order to encourage donations.

The majority of chrisaljoudi's changes are churn to make the project look busier than it actually is. For example, many changes are just committing checksum updates ([https://github.com/chrisaljoudi/uBlock/commit/bb340ac92cc6a8...](https://github.com/chrisaljoudi/uBlock/commit/bb340ac92cc6a823dd0f9187296051941af2c358)). Which is already done internally from uBlock. And then there's the removal of other developer's attribution. Which he thankfully stopped after everything blew up. Or his personal site which initially gave the impression that he was the sole creator of uBlock. There was a lot of online drama following it after the maintainership was newly transferred ([http://www.reddit.com/r/programming/comments/33sl39/maintain...](http://www.reddit.com/r/programming/comments/33sl39/maintainership_transfer_of_ublock_post_mortem/)). I know Reddit's not really an unbiased place from which to review, but there's plenty of links on there.

I'm sorry, but people who ignore the contributions of others and immediately scramble for donations ([https://donorbox.org/ublock](https://donorbox.org/ublock)) the moment they're made lead maintainer don't really give me a good impression. There's been a lot of discussion over the inflated amounts of those donations ([http://www.reddit.com/r/linux/comments/39quzj/chris_aljoudis...](http://www.reddit.com/r/linux/comments/39quzj/chris_aljoudis_ublock_not_gorhills_ublock_origin/)). He's cleaned up a lot of the problems people complained about, but it doesn't change the fact that his first priority upon receiving a position of authority in a large, free, open-source project was to strip out attributions and solicit donations. I'll give him credit for backpedaling and reforming, but not much. It's easy to apologize when you got caught.

<comment><USER16> Sorry, but that looks an awful lot like bad-mouthed rumours I don't like at all. [https://github.com/chrisaljoudi/uBlock](https://github.com/chrisaljoudi/uBlock) mentions gorhill and ublock origin in a positive way and asking for donations is totally fine - it would've been a bit strange if that was the first thing he did after getting the project, in an extensive way, but I did not see that while using the extension. Can't have been too bad. Seeking for donations is especially a good idea since the original developer left the project because it was too much work -> counteract that work with money.

And I saw the offers to give back the project, which does not fit at all to the negative image projected here.

The donations sought are maybe a bit high (which only harms him, since less people might donate), and the one thing that I also don't like. But even that is nothing really bad, setting the current author is what needed to be done, and finding a proper representation of the original author could be in another commit.

There were big expectations that ublock would be totally great, than gorhill left and the new developer (who acted not in a good way to prevent that) got the fallout of the betrayed expectations. And how gorhill acted did not help at all.

<comment><USER17> > looks an awful lot like bad-mouthed rumours

Really? So if we look at the Git repo commit history, we'll see the transition commit on April 1st ([https://github.com/chrisaljoudi/uBlock/commit/bc4b7fc4ea17c8...](https://github.com/chrisaljoudi/uBlock/commit/bc4b7fc4ea17c8221c9c3b25aa621231c443d3e8)). I'm pretty sure we can consider his first commit as demonstrating his intentions if it departs significantly from previous project direction. And it does - the very first commit after the transition was to start soliciting donations ([https://github.com/chrisaljoudi/uBlock/commit/f256801344a517...](https://github.com/chrisaljoudi/uBlock/commit/f256801344a5178261cad5130a7f4be1ec061343)). Git repositories have some reviewable history to them, but I guess that's all just rumours, right?

> Seeking for donations is especially a good idea since the original developer > left the project because it was too much work -> counteract that work with > money.

Perhaps. But in that same flurry of commits on his first day of project ownership, he linked to a personal donation account ([https://github.com/chrisaljoudi/uBlock/commit/31a4a522814f06...](https://github.com/chrisaljoudi/uBlock/commit/31a4a522814f06671e7dfe7bd6950c0ce2c5bbbb#diff-04c6e90faac2675aa89e2176d2eec7d8)). All that's said on that page ([https://gratipay.com/~chrisaljoudi/](https://gratipay.com/~chrisaljoudi/)) is that he works on uBlock. Part of the drama was that it previously implied more than just working on it - it was _his_. His wording has since given more recognition to the contributions of others, thankfully. But Day 1 - he's looking for donations, and its his project. Perhaps not terrible on any other day. But taking an open and free project, slapping personal donation buttons all over it, and removing attribution from other developers by manually committing changes ([https://news.ycombinator.com/item?id=9449876](https://news.ycombinator.com/item?id=9449876)) - this behavior turned a lot of people off to his project and leadership. He's since talked about sharing those donations, which I think is good. I still think it would be better to not solicit them, but I don't personally value his contributions that highly any more. That's probably my own bias.

> > [https://github.com/chrisaljoudi/uBlock](https://github.com/chrisaljoudi/uBlock) > mentions gorhill and ublock origin in a positive way

Those changes are more recent, and came after a lot of public criticism. We can see from the commits that those came in a month and a half after the transition ([https://github.com/chrisaljoudi/uBlock/commit/823778274bfd47...](https://github.com/chrisaljoudi/uBlock/commit/823778274bfd4769af668c9fa5fbc95902680a2c#diff-04c6e90faac2675aa89e2176d2eec7d8)). Roughly 2-3 weeks after the video you linked. His first approach was publicity, and then he took a less aggressive approach. Let's not whitewash things when commit history shows that it's only 19 commits back (three of those from other people) from the current mainline on Jun 7th. Normal procedure when taking over project maintainership is to maintain - <USER2> reinvent the image for donations.

I personally think he saw the opportunity to get some cash for not a whole lot of work, which is a really attractive offer as a high school student. I don't think it was _malicious_ , but I also don't think it was appropriate behavior to take something that was created for free to help others and _personally_ monetize it the moment you got some authority over it. He found out that these things are considered unethical and changed. That's good - and we don't have to lynch him. High school kids do dumber things, and there's still room to learn and grow. But they're not rumours - these things actually happened.

There's a reason people prefer the the gorhill fork. I don't think Ajouldi's a bad kid, but I don't fault people for not trusting him after his very public missteps. I think he'll do much better things in the future - and I think part of that is him directly experiencing the fallout of a poor decision before he's gotten a career that could be affected by it. I won't crucify him, but I won't pretend he never did anything wrong just because he apologized.

</comment></comment></comment></comment></comment></comment><comment><USER18> I've tried uBlock a few times, but it's always been inferior to Ghostery. I want to choose what I block on each page, e.g. sometimes I want to load Disqus, sometimes I don't, etc. uBlock doesn't allow me to do any of that, does anyone know a lighter alternative to Ghostery that will still have sane lists and allow me to unblock elements on a per-page basis?

<comment><USER19> i'm using [https://www.requestpolicy.com/](https://www.requestpolicy.com/) (ghostery seems to phone home, requestpolicy not (afaik))

<comment><USER20> There's an opt-in option in Ghostery that reports usage info, but as far as I know it doesn't "phone home" if you don't opt in to that.

<comment><USER18> Yeah, seconded, AFAIK it doesn't phone home if you disable that.

<comment><USER21> Privacy-advocating browser extension stops violating your privacy if you ask it to.

<comment><USER22> No. Sending of usage info is opt-in, not opt-out.

</comment></comment></comment></comment></comment></comment><comment><USER23> Yes, it's great and I have been using it for quite a while (on Chrome as well), but it's nothing new, unless I am missing something.

It would be helpful if the submitter also wrote a comment about the reasons of the submission, when they are not immediately apparent.

</comment><comment><USER24> Love uBlock Origin. I upgraded from Ad Block Plus to uBlock (and finally uBlock Origin) and was amazed at how much faster it is.

</comment><comment><USER25> uMatrix for Firefox seems to be released as well: [https://addons.mozilla.org/en- US/firefox/addon/umatrix/](https://addons.mozilla.org/en- US/firefox/addon/umatrix/)

Policeman was the closest thing —that I know of— to uMatrix for Firefox users, but —at least for me— Firefox is always complaining that Policeman is slowing down the browser. And also, it's nice that you can easily import your Chrome uMatrix rules to Firefox.

</comment><comment><USER26> If people who made ad blockers were ethical, they would make their software easily detectable by the websites, so those websites could choose not to service those users.

<comment><USER27> If people who run ads were ethical users wouldn't resort to ad blockers.

See how easy that was? It's called bullshit logic.

<comment><USER26> Except that the people who are running the ads aren't hiding that fact. The people blocking them and stealing service are trying to hide behind their ad blocker.

</comment></comment></comment><comment><USER28> The amount of vitriol by pro-advertising forces in this thread are pretty hilarious. As if the planet would stop spinning if people used adblock.

</comment><comment><USER29> It's better to download ublock from their source repo here: [https://github.com/chrisaljoudi/uBlock/releases](https://github.com/chrisaljoudi/uBlock/releases)

> Due to Mozilla's review process, the version of uBlock available from the > Add-ons homepage is currently often outdated. This isn't in our control.

<comment><USER30> Actually, this is about uBlock Origin (by the original developer), so it should be: [https://github.com/gorhill/ublock](https://github.com/gorhill/ublock)

</comment></comment><comment><USER31> The eff released their own ad blocker type tool available here [https://www.eff.org/privacybadger](https://www.eff.org/privacybadger) and it's great. It doesn't come with a singular list of sites to block, but instead blocks domains that are seen across many domains.

</comment><comment><USER32> Why it removing the youtube logo on the top left corner? Just because it's showing that youtube is streaming E3? :/

How do I let the extension know that some adds are part of the page?

</comment><comment><USER33> i know ublock is on safari. but will we see a ublock origin on safari?(specially after per-site switches)

<comment><USER34> Same. I wish we could get a Safari version of uBlock Origin since it does seem like in time it will be the clearly superior version.

Not to knock anyone working on mainline uBlock, but the frustrations of the original developer (justifiable or not) have led him to discontinue contributing code to mainline uBlock.

That's a serious blow to its development . . .

[https://github.com/gorhill/uBlock/issues/38](https://github.com/gorhill/uBlock/issues/38)

FYI, I would just use Chrome if it didn't just kill battery life on OS X. Don't think I use Safari by choice here . . .

<comment><USER35> You're in luck!

[https://plus.google.com/+PeterKasting/posts/GpL63A1K2TF](https://plus.google.com/+PeterKasting/posts/GpL63A1K2TF)

</comment></comment></comment><comment><USER36> I've seen comments on reddit saying that often legitimate "Pay Now" buttons etc. are blocked by this add-on. Can anyone with recent experience weigh in? I don't really feel like switching from ABP which I'm perfectly happy with unless this is 99% kink-free.

<comment><USER37> The add-on shouldn't block anything on its own, so if there's a problem it's probably on some filter list that the user enabled. There's a pretty good way to debug these situations though, the network request log ( [https://github.com/gorhill/uBlock/wiki/The- logger](https://github.com/gorhill/uBlock/wiki/The-logger) ). It will let you see the history of requests for a given page, and one of the colums in the log lets you fine tune what uBlock should do for that particular request - so, if you see that something that you don't want to be blocked is filtered out, you can reverse that and reload the page.

EDIT: in the latest release (0.9.9.0 at the time of this writing) the request log will also tell you which list provides the rule that blocks a particular request, it's pretty handy to debug this kind of issue.

</comment></comment><comment><USER38> Another option for Firefox is the built-in "tracking protection". It is off by default, but can be enabled via about:config (set privacy.trackingprotection.enabled to true). Works on Android, too.

<comment><USER39> And it breaks a lot of web sites.

<comment><USER40> Have you reported those? I've only encountered one and it was apparently fixed awhile back.

</comment></comment></comment><comment><USER41> Heh. Gotta love how the default filter already blocks ||sourceforge.net^

</comment><comment><USER42> I have uBlock installed from Allex Vallat. What is the difference?

</comment><comment><USER43> Relevant: [https://news.ycombinator.com/item?id=9719926](https://news.ycombinator.com/item?id=9719926)

</comment><comment><USER44> This is the main reason I've switched to Firefox on android</comment>


The US tariffs on China have been paid almost entirely by US importers: IMF - <AUTHOR> https://www.cnbc.com/2019/05/23/the-us-tariffs-on-china-have-been-paid-almost-entirely-by-us-importers-imf-study.html <comment><USER2> And for Chinese products to remain competitive, their prices have to drop, cutting the profit margins. It still hurts China.

<comment><USER3> It would seem that you don't do any business with China. Things from China are so cheap that their primary competition is other Chinese manufacturers. When products that I can get from China for $0.65 are >$7 from the US, those tariffs would have to be 1000% for them to make them noncompetitive.

<comment><USER2> Oh, well, then I seem to have totally misread all the opposition to Trump's tariffs on Chinese goods. What on earth are those importers worrying about, anyways? Silly me.</comment></comment></comment>


Peter Thiel Explains Himself on Trump - <AUTHOR> https://www.nytimes.com/2017/01/11/fashion/peter-thiel-donald-trump-silicon-valley-technology-gawker.html?_r=0 <comment><USER2> So, Thiel has done an excellent job of cementing his reputation as a contrarian.

But I'd invite any startup founder to think long and hard about whether you'd want to be associated with him. I read this interview, like many others, and know that we wouldn't get along. So I'm not going to have him as an investor.

I could enumerate reasons why, but here's the bottom line: reflexive contrarianism is just nihilism. Beneath the contrarian tag, I don't see much of substance. And certainly nothing that resonates with me, or that I agree with.

Beyond a certain point, maybe after a certain age, you've got to actually stand for something, not just against things. I don't get any of that from this article, or from Thiel generally.

<comment><USER3> Thiel stands tall for (his own personal) profit. That's one kind of "something".

</comment></comment><comment><USER4> > I note that several Silicon Valley companies have pre-emptively said they > will not help build a Muslim registry for the Trump administration. Will > Palantir, the data-mining company of which Mr. Thiel was a founder, and > whose clients include the N.S.A., the C.I.A. and the F.B.I., be involved in > that? (Palantir's C.E.O., Alex Karp, sat in at the Trump tech meeting.)

> "We would not do that," Mr. Thiel says flatly.

Mr. Thiel, I don't believe you.

</comment><comment><USER5> As someone from post-communist country, I find tone of the article a bit creepy. He has to 'explain himself' to whom? And for what? We had single party system for 50 years, it did not worked out that well.

> _suggest that Mr. Thiel was not even a gay man, because he did not "embrace > the struggle."_

Political preference is more important than sexual orientation, when deciding if someone is gay???? wtf?

<comment><USER2> That sounds logical absent any context, but context matters. Thiel took a very public stance on a very controversial figure. A figure that's controversial for good reasons: things he's done, things he's said, and things he says he'll do.

And Thiel's in a public role. So his actions are advertising for his various ventures. To the extent I'm a 'customer' for his various products and services, I've taken note. This is a very democratic and capitalist response, I believe.

I'm also not sure why you mention a single party system. Asking a political donor and public speaker to explain his position is very democratic, and I'd expect it in a multiparty democracy, not just an explicitly two-party system like ours.

In fact, in a liberal democracy, we should be working to preserve our right to demand those kinds of answers. I'm old enough to remember a time before Citizens United and Super PACs; I believe politics should be conducted in public. Do you disagree?

<comment><USER6> When was any public figure called to explain themselves for voting Obama?

</comment></comment></comment><comment><USER7> > _" When I remark that President Obama had eight years without any ethical > shadiness, Mr. Thiel flips it, noting: "But there's a point where no > corruption can be a bad thing. It can mean that things are too boring."_

..... I literally don't even know what to say to that.

> _" Mr. Thiel says: "On the one hand, the tape was clearly offensive and > inappropriate. At the same time, I worry there's a part of Silicon Valley > that is hyper-politically correct about sex. One of my friends has a theory > that the rest of the country tolerates Silicon Valley because people there > just don't have that much sex. They're not having that much fun."_

People get upset due to a man claiming he can grab women's genitals because he has power and Thiel tries to write that off as "hyper-poltiically-correct"? It's not even a little "political correct". It's common god damn decency to call that behavior sexual assault.

So shameful.

<comment><USER7> I wish the people downvoting this had the courage to say why they think sexually assaulting people is fine. And if you don't, then why downvote?

I'd love an answer to this, but have zero expectation of anyone answering in good faith.

<comment><USER8> It's called context. Surely you've said or done something that others disagree with. I don't think Donald Trump left a scar of psychologically traumatized women across the country as the public reaction to that comment seems to say.

What do you think he did that really caused anyone some real harm?

</comment></comment></comment><comment><USER9> Overlong article that says that Thiel went with Trump because Trump's "stock" was undervalued due to people opposed Trump's behavior and agenda, so Thiel saw a niche were he could get an edge due to lack of competition. Also some shots at Silicon Valley for having too much social principles (egalitarianism / political correctness) that clouds their business sense.

Plus some handwaving that everything bad or dangerous about Trump isn't a big deal.

</comment><comment><USER10> Dupe: [https://news.ycombinator.com/item?id=13378029](https://news.ycombinator.com/item?id=13378029)

</comment><comment><USER11> Peter Thiel is a visionary. His scholarship fund accelerates kids lives into what they're passionate about instead of seeing them waste years in college.

He funds longevity, seasteading, and promotes people being definitive in their goals and working on things no one else is. He also personally funded the hunt for justice against an evil rag hiding behind genuine journalistic protections.

If you're on the wrong side of an issue from Peter Thiel, it's not because he's being reflexively contrarian, it's because he could write a 100 page thoughtful essay on why his position is better than any alternative.

The reason that Peter Thiel seems so contrarian is because so many other people are so cowardly. Shouldn't more billionaires be crushing bastards? Shouldn't more billionaires be funding medical research? Shouldn't more billionaires be publishing books to motivate the masses to create themselves the future that has been only dreamed of for the last few decades?

On the short list of people in this world who are doing a really really great job with what they have, Peter Thiel is at the top of my list.

Now the caveats. Violations of the 4th amendment suck, and if Palantir is part of them, it's not great. Trump is clearly not the best the business world had to offer. Christianity, not so fabulous.

I consider the man a legend and hope to see great things from him.

<comment><USER12> Wow, you've certainly drunk some koolaid.

 _He funds seasteading_

No he doesn't. He's all talk in that regard. What progress has actually been produced?

 _He also personally funded the hunt for justice against an evil rag hiding behind genuine journalistic protections._

He _personally_ funded it, you say, as if it was some selfless act. He _personally_ funded it because he had a very _personal_ grudge. Not because he cares about journalism.

 _Shouldn 't more billionaires be funding medical research? _

Some are. Peter Theil is only funding medical research that has the potential to help him personally though.

You keep talking about this Ayn Randian as an altruistic figure, it's weird.

 _Violations of the 4th amendment suck, and if Palantir is part of them, it 's not great. Trump is clearly not the best the business world had to offer. Christianity, not so fabulous._

Hmmm. Does _If you 're on the wrong side of an issue from Peter Thiel, it's not because he's being reflexively contrarian, it's because he could write a 100 page thoughtful essay on why his position is better than any alternative._ only apply if it's not a position you are personally against?

<comment><USER11> I think seasteading is stupid, however it shows a desire to experiment with governance itself.

Percentage wise how many bastards are crushed out of selflessness compared to vendetta? I think you'll find that the extra satisfaction of a grudge is needed to tip people into the honorable action.

Wouldn't any research Thiel funded that helped himself also help other 50 year old white guys? What's wrong with helping 50 year old white guys? (who will be 60-70 when the therapies are likely available)

If government surveillance is an commonly emerging property of modern governments, it could be said that doing it well instead of poorly may allow us to restrict its scope more. Thus better searching of the already never erasable data is better than gathering more data and searching it more poorly. Thus I have no evidence of Palantir doing anything wrong, however, I'm keeping an eye out.

<comment><USER12> _If government surveillance is an commonly emerging property of modern governments, it could be said that doing it well instead of poorly may allow us to restrict its scope more. Thus better searching of the already never erasable data is better than gathering more data and searching it more poorly._

Wow. That rationalization is worthy of Thiel himself!

</comment></comment></comment></comment><comment><USER13> > If there's no conflict of interest, it's often because you're just not > interested.

The opposite of "interested" in "conflict of interest" is "disinterested", not "uninterested".

</comment><comment><USER14> "On the other hand, I was totally convinced that there were W.M.D.s in Iraq in 2002, 2003" \-- wow i now have even less respect for him. unless he is lying.

</comment><comment><USER15> Thiel's responses communicated that he is beyond the point of no return with the trump problem. He can only say good things, almost like politician himself. Too bad.

<comment><USER16> Had Clinton won I guess countless people would be beyond the point of no return with the Hillary problem.</comment></comment>


Why I walked away from a million dollars - <AUTHOR> http://www.geekwire.com/2012/commentary-walked-1-million/

<comment><USER2> Apparently because it makes a good hook for a PR fluff piece?

</comment><comment><USER3> This is an example of an article that doesn't belong in hacker news. For one, the title is an example of bait-and-switch. The article doesn't explain why the author walked away from a million dollars. Even worse, it's incredibly vague and self-promotional:

 _"Four years ago, I walked away from Amazon and a million dollars. I was a 21-year-old kid running a billion-dollar team, but I wanted more."_

Walked away from a million dollars? How? What is a billion-dollar team?

Flagged.

</comment><comment><USER4> Here I was thinking it'd explain why you walked away from a million dollars.

TLDR: I didn't want a million dollars to sell my company, now here's all the information about my company.

<comment><USER5> What actual million dollars was walked away from? Why is this the lead with no explanation?

Why not take the actual million, then fund this? Or use the million to fund 1538 students? Seems like a waste to walk away from funding 1538 students.

What's the actual "why" of the decision? It's a nice title, but I can't find the "why" anywhere in the piece. The paragraph that purports to answer why reads like a non sequitur: "Why did I walk away from a million? I wouldn't be here without my education." Explain how walking away happened because of this education.

The piece says it's so rare to be given a chance. By whom? And in what way is it rare for 21 year olds "running a billion dollar team" to be given chances? All data suggests these are the exact guys with an embarrassment of opportunities beating down their doors.

Speaking of explanation, what is a $5M organization? Is that revenue, run rate, valuation counting good will?

Agree with ceejayoz, this reads like a "please click and donate stuff and make us a $6M organization" piece, with no substance but lots of "click and give" links, name checking a few known "geeks" (Dave Schappell, Glenn Kelman, Rich Barton, Tim Ferriss, Alex Algard, Kevin Merritt) to encourage other geeks to get named too.

We keep being told if you win, you'll be honored on stage at the GeekWire Gala on December 6. Great motive! (And the karma's good too, adding that makes sure it's not just pure crass self promotion, right?)

The idea's great, the cause is great. A zillion charity startups are doing good work in this arena. Having lived and worked in Africa for a decade, focusing on education, this piece doesn't really persuade me of value other than getting my own name in Geekwire.

I wish the piece had also touched more on the work being done and the percentage of money ending up directly in the hands of those being helped (100% we're told in a diagram, so what's the business model?).

And I agree with you. I wish with this title, the piece had explained _why_ he walked away from a million dollars instead of taking that and then using his own money to get going or fund students rather than leaving it on the table and approaching others hat in hand.

</comment></comment><comment><USER6> way too much self-promotion...</comment>


Mackenzie Scott Gives $1.7B to Historically Black Colleges and others - <AUTHOR> https://www.nytimes.com/2020/07/29/us/mackenzie-scott-billion-fortune-bezos.html <comment><USER2> "He also noted that her donation had no strings attached, an approach he praised as anti-paternalistic."

<comment><USER3> This article[1] talks a little more about Rob Reich's discussion of why large donations to charity can be paternalistic.

From memory, most donations "with strings attached" establish something new (like a new building), but explicitly disallow the donation to be used for mundane (but very necessary) maintenance (eg. heating, electricity, maintenance, janitorial, admin/professor salaries). I think the quote is simply reinforcing the idea that a university probably knows better where the additional dollar should be spent than a wealthy donor who hasn't been on campus in years (if ever).

[1] [https://news.stanford.edu/2018/12/03/the-problems-with- phila...](https://news.stanford.edu/2018/12/03/the-problems-with- philanthropy/)

<comment><USER4> This is true of almost all donations to all organizations, IMO. That's why I like Give Directly. The recipient is the best judge of what they need. There are things that specialist organizations with economies of scale can do, but by far no-strings-attached cash donations are better than most.

</comment></comment></comment><comment><USER5> Off topic, but it's a bit uncanny how her facial features resemble Bezos's in that picture. I could have thought she was his sister.

Does anybody know if there's a name for this phenomenon? That is, selecting partners that look like you? And how common it is?

<comment><USER6> Apparently it's called "Assortive Mating".

<comment><USER5> Wow.

"Males prefer female faces that resemble their own when provided images of three women, with one image modified to resemble their own. However, the same result does not apply to females selecting male faces."

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

</comment></comment></comment><comment><USER7> Maybe let us change the headline to associate the act with Macenzie Scott and not "Bezos' ex-wife".

<comment><USER8> Macenzie Scott? Never heard of her...

<comment><USER9> Now you know.

<comment><USER8> Know what?

</comment></comment></comment></comment><comment><USER4> Please use the original headline, it's much better.

</comment><comment><USER10> Mackenzie Scott has a name, and the title/headline should use it, instead of her "status" as Bezos' "ex-wife".

<comment><USER11> I get your point, and I don't mean to be insulting to her as a person, but the reality is that her name recognition is essentially non-existent compared to Bezos. That doesn't make her less important or valuable as a person, but it's highly relevant to a newspaper headline writer who is trying to orient their reader in as few words as possible.

<comment><USER12> Honestly I saw a headline earlier today using Mackenzie Scott, and I had no idea who that was until I saw this post on hackernews. My only reaction was - "Who's Mackenzie Scott? Well, thats good whoever she is". Now I know who she is

</comment></comment></comment><comment><USER13> While it's always great when people give that kind of money to charity...also understand that she gained $24B in net worth since her divorce from Jeff (18 months). $1.7B is a drop in the bucket for her...so while it's great that she did that, don't consider it profound or anything. She has no problem selling that stock and cashing out...she has no vested interest in maintaining control like her ex-husband.

<comment><USER14> 7% of either 1) my net worth or 2) the increase in my net worth over the last 18 months doesn't feel like a "drop in the bucket" and I definitely didn't donate either amount. So I'm happy to applaud her for doing so.

<comment><USER15> Well, she could downsize to a mere 1% of her net worth and then spend the next 25 years spending _50K per day_ and still have over 100mil leftover for her old age and the kids inheritance.

And that's assuming zero further income.

So there comes a stage where I am not about to pat any billionaire on the back for "a big donation". It might just be good PR and likely will be some kind of tax benefit too.

That said, I'd rather see more of it than less because I don't think any single person is honestly so valuable to society to be worth that much. They honestly shouldn't have that kind of money. The system is broken.</comment></comment></comment>


Ask YC: Impact of University on YC Application? - n-named

I'm curious what impact this has.<p>Is it possible to break down acceptance percentages into YC by Ivy League/University/Community College/No Higher Education? Even as a rough estimate? <comment><AUTHOR> I'm sure PG could break down those numbers for you, but they wouldn't be meaningful. Yes, people from "better" institutions are more likely to be accepted; but that doesn't tell you whether it's the institution which matters or simply that those were the better students to begin with.

<comment> n-named The proportion would certainly be interesting. i.e. 90/5/3/2 wouldn't surprise me but if it was more like 40/30/20/10 I would definitely be interested in knowing that.</comment></comment>


A toddlers guide to memory leaks in JavaScript - <AUTHOR> https://medium.com/@kepta/a-toddlers-guide-to-memory-leaks-in-javascript-d5a592c7bec1 <comment><USER3> This article does a really poor job explaining what memory leak is and barely even mentions JS specific pitfalls (what could be expected by reading a title).

<comment><AUTHOR> It is called toddlers guide for a reason. It's meant to be a very gental introduction and I try to avoid going knees deep into the topic. There are references to other great articles which tell you about pitfalls.

</comment></comment><comment><USER4> This is just "using lots of memory", not a "leak".

<comment><USER5> In the context of a language with a working garbage collector, doesn't "memory leak" just mean "accidentally using lots of memory"?

<comment><USER6> With cyclical references add "freed sometime between now and eternity".

If this is not a definition of a memory leak I don't know what is.

<comment><USER5> Well no, cyclical references only stop the object from being deleted if it's still accessible. That's what the 'mark' part of 'mark and sweep' does - <USER2> marks all objects still accessible somehow from inside the program. Then the 'sweep' bit runs through all allocated blocks and frees the unmarked ones.

Now, if you're merely approximating garbage collection with reference counting then sure, you have a problem.

</comment></comment></comment></comment><comment><USER7> Just monitor your production memory profile, and occasionally run load test on your app. It is fine.

</comment><comment><USER8> All of these issues could've been avoided if we didn't use functional programming. I think imperative languages are better because things like memory leaks and algorithmic errors are easy to conceptualize in the first place, hence less chance of typos.

<comment><USER9> All of these issues could've been avoided if we didn't use imperative programming. I think functional languages are better because things like memory leaks and algorithmic errors are easy to conceptualize in the first place, hence less chance of typos.</comment></comment>