OAuth for Python made easy - <AUTHOR> https://github.com/litl/rauth#rauth <comment><USER2> I wish the author had contributed to existing efforts (<https://github.com/idan/oauthlib>) instead of rolling yet another OAuth implementation. We set out to build a robust, comprehensive, spec-complete OAuth signing logic library a year ago, and today it delivers what it says on the tin, thanks to a lot of work and a raft of dedicated contributors. We have support for all of the OAuth1 spec, and we're working towards OAuth2. The idea is to have one de-facto reference OAuth implementation for python instead of a few confusingly different choices, because the differences are really hard to spot for anybody who hasn't spent some time cuddling up with the RFC.

Doing OAuth signing logic correctly is pretty finicky. Requests is great, and we provide a shim layer for it, but it's silly to reimplement the underlying request signing logic for requests, urllib3 or what-have-you. And what happens when you need a server-side implementation for verifying signatures? It makes more sense to do the tricky logic in a separate, testable library than tying it to one representation of an HTTP request.

Having said all this, anybody willing to wade into this mess and write something is my kind of crazy. Respect.

<comment><AUTHOR> First, I believe rauth existed prior to your library: rauth is over a year old now. (Or maybe existed at around the same time; regardless as you'll see below, contributing to your project wouldn't have made sense for us.)

Second, you're trying to solve a different problem than rauth solves: we needed a library that provided for the practical, de facto implementation of OAuth 1.0/a and 2.0 as well as Ofly which allowed us to consume provider APIs. This is exactly what rauth does. It loosely wraps Requests, which means you get to basically use Requests that also happens to handle real-world OAuth providers as a consumer. I don't think it's really fair to call this "silly": it's clearly filled a hole in the ecosystem for some people.

If you want to consume an OAuth provider, rauth tries to give you a simple interface to do so with. It's almost as easy as using Requests. You might even say, it's OAuth for Humans. (Sorry, Kenneth. :)

Edit: to be clear, rauth is about pragmatic simplicity, about a clean API that's pleasant to work with. It's a client for OAuth modeled around the fact and philosophy of Requests. Vis-à-vis everything else I've seen, this is in pretty stark contrast to existing libraries.

<comment><USER2> Whoops, didn't notice the chronology.

All the same: OAuthLib and its libraries cover the exact use-case you've laid out, just in a fashion that has some architectural benefits on top of the usability goals. The simple "OAuth for Humans" thing you're reaching for exists—it's <https://github.com/requests/requests-oauthlib>. Kenneth and I hashed this interface out before we started out on OAuthLib, and thus far it's the only shim library for OAuthLib I know of (though it's pretty simple to write something equivalent which bridges OAuthLib's domain knowledge and any given HTTP request implementation). I even rewrote Requests' underlying auth implementation to make this sort of thing possible. And now you have:

oauth = OAuth1(client_key=key, client_secret=secret) r = requests.post(url=request_token_url, auth=oauth)

I don't see OAuth1 getting simpler than that, and the underlying signing logic is there for anybody to use in any context—as a provider, consumer, in a stubbing library—whatever!

<comment><AUTHOR> > All the same: OAuthLib and its libraries cover the exact use-case you've > laid out

Nope. They very much do not: your expectation is that your users will roll their own clients or use Requests' shim, which seems a little rough around the edges and doesn't provide for the necessary use cases, e.g. OAuth 2.0 and Ofly. I'm sorry, but this is not providing for the use cases I've laid out by any stretch of the imagination.

Rauth is batteries included, ready to get you up and running in minutes, not hours or days. You won't need to write your own client or patch an existing client to make it work with an unsupported protocol like OAuth 2.0.

> I don't see OAuth1 getting simpler than that

Then you haven't used rauth. The whole auth dance is taken into consideration and various helpers make it a breeze, literally a two or three step process. Further, once you have tokens, it becomes as simple as:

        session.get('me')

Now, that's what I call simple.

I think in your attempts to compare your lib to rauth you're missing the broader thrust of rauth: rauth is a client library. It makes using OAuth (1.0/a, 2.0, even the OAuth-ish Ofly) as easy as we can make it. This is far removed from the goal of some generalized, spec-centric, even idealized, implementation of OAuth as a spec. Rauth isn't trying to do that, it's trying to make it easier for you to connect to Facebook or Twitter or whatever provider you happen to need. I wouldn't really know, but I've been told, it seems to shine in this regard. :)

<comment><USER2> Fair enough. I indeed _haven't_ used rauth, just read the docs. And indeed, OAuthLib's requests shim is a bit rough in terms of tests and docs, but the OAuth1 use-case is quite solid—it doesn't do the dance for you, but every subsequent request is the bulk of the work (in my experience). For that application, the API's seem pretty similar to me—you can instantiate a requests session with a set OAuth auth object and make requests like "session.get(some_uri)" without the magical per-service mapping.

I guess I just feel like tying to one specific service is too specialized. Libraries like requests should be providing you with enough primitives to be flexible and enough abstraction to be "simple," though we clearly disagree on what constitutes the appropriate balance.

</comment></comment></comment></comment></comment><comment><USER3> Just in case anyone is confused, this is a library for _client-side_ OAuth. That said, it's great for quick test scripts — it made my life a lot easier when I was working on a provider implementation.

EDIT: Although their README only shows an OAuth1 example, check out [https://github.com/litl/rauth/blob/master/examples/github- cl...](https://github.com/litl/rauth/blob/master/examples/github-cli.py) for an example of using it with an OAuth2 provider.

<comment><USER4> So I guess that's the open part.

</comment></comment><comment><USER5> If you're looking for a more full stack framework in python, tornado has had support for oauth since it's release. It's implementation does rely on the tornado ioloop though, so it's not something you can easily just pull and use elsewhere.

<comment><USER6> It's really easy to use too. I recently extended the base implementation for a service that it didn't support and it took me very little time.

<comment><USER5> I put some time into it a couple years ago before my 2nd kid was born. I've always wanted to go back and work on making it a bit easier to use. One of the things I'd love to do is get rid of it being so tied to request handlers so you can use it more seamlessly in apps.

<comment><USER6> Yeah it would be great to be able to make API requests using the helper methods from outside of a request handler. As it is, it isn't that difficult to do it otherwise but it's just more code duplication.

</comment></comment></comment></comment><comment><USER7> to be honest I am currently lost on the state of oauth in python, has sth changed since this post [http://pydanny.com/the-sorry-state-of-python-oauth- providers...](http://pydanny.com/the-sorry-state-of-python-oauth- providers.html)? as OP is a client lib, could somebody with practical experience tell me what's the current best library for setting up an oauth provider? bonus question: should I bother with 2.0 or stick to 1.0 (3rd party apps and mobile) [http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to- hell...](http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/) ?

<comment><USER3> Not much has changed. I'm currently working to open source an implementation I worked on that's compliant with the finalized version of the spec. The most up-to-date implementation I've seen in the open is <https://github.com/hiidef/oauth2app>, which implements draft 16.

<comment><USER7> thanks, looks sane.

</comment></comment></comment><comment><USER8> Thank You, Thank you! After the state of python-oauth2 this comes as the best oauth library to be used in Python. I however I have one query - how would you handle Oauth three-legged requests? [0] This is important for people who do not necessarily build web apps but collect data from Twitter using Oauth (for a higher API limit).

[0] <https://dev.twitter.com/docs/auth/3-legged-authorization>

</comment><comment><USER9> Does it work? I tried to do some OAuth in Python a couple of years back and it was a total disaster; four competing libraries, none of which worked. But that was a long time ago and I don't think this Rauth library even existed when I last looked.

<comment><USER10> Yes it definitely works and does so more easily than any alternative I've tried. I've used it to interface quickly to something like 20 different APIs at this point.

</comment></comment><comment><USER11> Recently I tried doing cas integration for my django website. A colleague pointed to a Rails gem - install a gem, point to the cas url and, poof, done.

For django, I struggled, and struggled. Found a couple of libraries and a number of forks of these spread across github and bitbucket. Got one, but it didn't work. Debugged the code, fixed some stuff in my own fork, and got it working 5 hours later.

The world of python seems to have lots of half-baked libraries that are dead or dying. Makes you miss Ruby / Rails.

<comment><USER12> I couldn't agree with this more. In Rails, I'm used to using omniauth, and plugging in any number of provider gems that deal with the subtle differences between how Dropbox and LinkedIn and whatever implement OAuth...and having them all hook into whatever Rack based framework I use (Rails, Sinatra, etc)

Rauth is a good start, but without a library that couples it to a full web stack, I'm spending a lot of time hooking it into my flask app and trying to make sure I don't make mistakes managing my session variables, etc.

Perhaps I'll start up a rauth-providers repo to catalog this stuff.

</comment></comment><comment><USER13> If you'll allow me a shameless plug...

My company (dailycred) wraps ten OAuth 1 & 2 providers, as well as email & password and Mozilla Persona in a single OAuth 2 call.

(We started this project because even just within OAuth 2, providers break spec left and right and OAuth can be a huge headache, so we manage all of those headaches for our customers.)

<comment><USER14> If you're wondering what some of the discrepancies are, I wrote up a bunch here: [http://john-sheehan.com/post/41653656681/the-good-and-the- ba...](http://john-sheehan.com/post/41653656681/the-good-and-the-bad-of- oauth-2-0-authorization)

</comment></comment><comment><USER15> Does rauth work with Python 3?

<comment><AUTHOR> Not yet.

<comment><USER16> Basically the main reason for python-social-auth (<https://github.com/omab/python-social-auth>) to use oauthlib/requests- oauthlib instead of rauth.

<comment><AUTHOR> We have plans to implement Python 3 support. It's not the highest priority but we want it to happen. I'll probably slate it for v0.6.0. By the way, community participation is more than welcome...there was a pull request that provided support for 3 but unfortunately it wasn't updated to bring it inline with the breaking changes 0.5.0 had to introduce. So, if you have any inclination to hack on a patch that provided Python 3 support I'd be very grateful and could probably even work alongside its development.</comment></comment></comment></comment>


Ask HN: Anyone read The Circle yet? - <AUTHOR>

I'm just starting Book II and I'm wondering if anyone in the community has read or is reading this book.  If so, what do think?<p>http://www.mcsweeneys.net/articles/a-brief-q-a-with-dave-eggers-about-his-new-novel-the-circle <comment><USER2> I read the NYT excerpt. Depressing, as it's not that far from today's reality.</comment>


Anecdotes Aren't Data - <AUTHOR> https://news.harvard.edu/gazette/story/2019/06/focal-point-harvard-professor-steven-pinker-says-the-truth-lies-in-the-data/ <comment><USER2> I'm surprised there's no mention of how anecdotes and rhetoric fit into storytelling. I've found that good, empirically-based historians tend to weave in facts and data through stories.

</comment><comment><USER3> "His Republican predecessor created a massive new federal department and launched two destructive wars to protect Americans against a hazard, terrorism, that most years kills fewer people than bee stings and lightning strikes."

This is glib. Perhaps some of GW Bush's policies prevented a large scale attack such as 9/11 from recurring. Many terrorist plots have been foiled since then.

<comment><USER4> And perhaps this rock keeps tigers away - [https://www.youtube.com/watch?v=xSVqLHghLpw](https://www.youtube.com/watch?v=xSVqLHghLpw) .

A lot of the 'terrorist plots' the government has found seem more contrived than meaningful. Eg, cases where if the government had done nothing, then it seems likely that nothing still would have happened.

Certainly we know that funding was taken away from monitoring and investigating white supremacist terrorism networks in the US in order to look for external ones connected to Moslem. And we know that more people and damage has occurred from white supremacist terrorism.

So, from an equally specious argument, perhaps some of GW Bush's policies lead to more deaths from terrorism.</comment></comment>


What entrepreneurs need to know about founders' stock - <AUTHOR> http://lsvp.wordpress.com/2008/09/15/what-entrepreneurs-need-to-know-about-founders-stock/

<comment><USER2> How do discussions between the founders and VCs about these sorts of issues usually go down? Is it lawyers to lawyers or does everyone tend to get involved?

<comment><USER3> My experience is that the founders are involved, and there are parts of it that can be negotiated. Though as in any negotiation, leverage is a part of it - the more you have to offer the more you can negotiate.

</comment></comment><comment><USER4> Good article - thanks for posting.</comment>


Net Developers - <AUTHOR> https://www.otssolutions.com/dotnet-application-development.html <comment><USER2> Apart from being spam, this site is a whopping 9 MB to load, 3.5 MB of which is JavaScript spread out over no fewer than 35 files. Among the 30 stylesheets there are three separate copies of Bootstrap.</comment>


Incompetence as Encouragement - <AUTHOR> http://www.naftaliharris.com/blog/incompetence/

<comment><USER2> There a couple of ways to look at this. Either incompetent people are successful because the barrier to success is quite low; in which case this is encouraging for competent people.

Or incompetent people are successful because the barrier to success is highly arbitrary and only somewhat correlates to competence which is much less encouraging.

Maybe you lose out on funding to a much less competent crew because you were launching a B2B Web-based SaaS product on a month when everyone was crazy about B2C mobile products for example.

<comment><USER3> > Or incompetent people are successful because the barrier to success is > highly arbitrary and only somewhat correlates to competence which is much > less encouraging.

I think this is the case, which on the surface can be depressing. But it can also mean that if you can just stick it out longer than most other people do, and plant more seeds, it's only a matter of time until you get lucky.

<comment><USER2> Yes, but the question is should you optimise for scattershot by planting many low quality seeds or concentrate on quality?

<comment><USER3> Plant a bunch of high-quality seeds :)

<comment><USER4> The question assumes that it's either not feasible or practical to do that. That may or may not be the case, depending on the definition and context of "high-quality".

</comment></comment></comment></comment></comment><comment><USER5> I used to think this way, to a certain extent. These thoughts go away once you realize why other variables besides skill have strong effects on the success equation. Most are related to emotional intelligence: your ability to convince others, to make them feel comfortable following your lead. Sadly what gets you ahead the most are the soft skills many of HN users lack (stereotypically at least). Remember not everyone has the same perspective: most of your interactions occur with a computer - a machine without emotions. People are different, they have kids, problems, and most importantly, feelings.

I agree, these things are important only because people aren't rational, most times I just call them stupid. There's nothing you can do to change that. You can only learn how to play the game and make sure you promote meritocratic ideals through your work and any initiative under your responsibility. Create a company and engrain these ideals in its culture. Try to be objective. Teach others how to do this.

The most important actionable I think is this: polish your managerial skills. Learn how to deal with people and you will become orders of magnitude more resourceful. Managing people allows you to reap the benefits of becoming specialised in several fields without having to spend the time needed to benefit from such diverse proficiency. Im not saying you dont need a core competence, my claim is that this is the only way to benefit from having 'several' core competencies without acquiring them.

</comment><comment><USER6> Maybe I'm just in an overly defensive mood for no apparent reason, but the hubris in this post is somewhat off putting. Not up to your task does not mean "incompetent." Hell, poorly written doesn't even necessarily mean that.

<comment><USER7> Had the same reaction. A package that doesn't do what you want in exactly the way you'd like it and not coded to youre standards does not signal incompetence. Someone built something that was probably suitable for their immediate needs and shared it in case someone else could use it and perhaps build on it or, gasp, even improve it.

<comment><USER8> > and not coded to youre standards does not signal incompetence.

You are incompetent at making this determination. Dunning-Kruger in full effect, here.

<comment><USER7> Mis-application of Dunning-Kruger.

<comment><USER8> It's turtles all the way down.

</comment></comment></comment></comment></comment><comment><USER9> Your post is arrogant! That's okay though - I used to be arrogant too and assumed my code was "wizard like" while other people's projects were crappy and half-assed.

Quality is often subjective. These days software is scratching an itch and is rarely done to the author's own standards of quality due to personal time constraints!

I would rephrase your thought from: incompetence as encouragement to improvement as encouragement (the desire to improve something as encouragement).

</comment><comment><USER10> _If you think that the world is basically a meritocracy, as I do, then seeing successful incompetents is actually very encouraging. Have you ever seen a startup with the world's stupidest idea raise million of dollars? Well if you have an actually decent idea, then it will be even easier for you to raise millions as well._

I was actually reading a post by Patrick McKenzie the other day and I think his commentary on this was one of the best I've seen. While it's encouraging and optimistic to think like this, the reality is that 90% of the time, mediocrity (or worse) is good enough. One example- most businesses run on poorly-engineered, shitty legacy software systems stitched together over time as a lineage of sucky-to-great programmers have come and gone and inherited each other's garbage amid changing requirements. Early in my career I noticed this and was brazen enough to think that there was obviously a much better way to engineer the software, so why didn't the executives see it? Over time I realized that I was naive- business managers care about increasing revenue and profits. Quality code and engineering doesn't even register on the radar.

Incompetence in engineering is just one area of incompetence. It is important to remember that incompetence in selling or networking, while probably a lot harder for one to see in oneself, can be just as detrimental to one's chances of success (perhaps more so). The point is that a crappy idea getting funding does not in any way indicate that a better idea is more likely to get funding.

</comment><comment><USER11> _> If you think that the world is basically a meritocracy, as I do, then seeing successful incompetents is actually very encouraging. Have you ever seen a startup with the world's stupidest idea raise million of dollars? Well if you have an actually decent idea, then it will be even easier for you to raise millions as well._

If only this were actually the case...

</comment><comment><USER12> I hate the tone of this whole post, for the following reasons:

1\. He contradicts himself: first he says he believes the world is a meritocracy, but then he says it can tolerate a staggering amount of incompetence,

2\. Someone put up their package for free, perhaps it wasn't great, but incompetent?

3\. Startups with stupid ideas still raised capital and are attempting to make money. Not incompetence.

</comment><comment><USER13> Poor attitude from the author. I'm reminded of this incident a while back:

<https://news.ycombinator.com/item?id=5106767>

It's good have confidence in your "competence". It's even better if you can do it without being downright rude to the people who came before you.

</comment><comment><USER14> Agree and disagree.

I worked for a startup once where a mouth-breathing incompetent was promoted to the top of the technical food chain to punish the unofficial VP/Eng with the humiliation of a younger boss. The guy was promoted for literally no other reason and everyone knew it. This made everyone suffer, and his "rearchitecture" almost killed the company. It certainly didn't make me think, "It could happen to me."

When I see idiots getting smothered with praise and rewards while someone like me suffers, it reinforces social status and that I am, for whatever arbitrary and pointless reason, not as high as the smiling imbecile getting showered with gold while the rest of the world gets a golden shower.

That's where I disagree.

Now here's where I agree. I have a lot of performance anxiety and perfectionism. Actually seeing what the state of the art is on many problems _is_ encouraging, insofar as (a) it's not hard to spot improvements, and (b) you feel less embarrassed when you realize that everyone makes mistakes and misses things. I avoided open source for years because I was afraid of showing code to the world, even though I'm objectively a good programmer. I didn't even like to use my real name on the Internet before 25 (although, based on what of my early history _is_ public, that was a good policy.) I'm getting better at that as I get older.

I wouldn't use the word _incompetence_. There are a lot of trade-offs that result in mediocre software or process and that's only one of them. But it can be refreshing to realize that everyone else has warts, too.

</comment><comment><USER15> The world may be a meritocracy asymptotically. But life is a small sample. Sometimes it's better to be lucky than good ...</comment>


Ask HN: What is the single most wanted SaaS based product you want to built? - <AUTHOR> The single most wanted SaaS based product you want to built better. <comment><USER2> Tell me when you find the answer! I'll build it and sell it to those people.

<comment><AUTHOR> Sure :)</comment></comment>


The rich don't like negative interest rates, are pulling cash out of Swiss banks - <AUTHOR> https://www.cnn.com/2020/01/23/investing/switzerland-cash-negative-rates/index.html <comment><USER2> So there are more hoards of cash in the world! Cool! I bet part of why rich peeps feel like this is realistically doable now is because of technology. They have a Nest or something and a smartphone and because they can access cameras at their house anytime they _feel_ like they are more secure.

But what could happen is that an enterprising h4x0r (possibly one who works for one of these IoT companies) realizes that even better than peaking at dick picks, you could have a comprehensive catalog of who is keeping this cash and where. You could then either sell the data (cheap at first, expensive later) or act on it yourself.

My point is that if you're loaded and hiding cash on-site, you probably don't want a normal commercial IoT system. You probably want something built for you by the suitably paranoid people on websites like this one! (I suppose that's another security risk, though.)

</comment><comment><USER3> who would have guessed people don't like it when their money evaporates

<comment><USER4> The same people who are buying property at 40 times the yearly rent, though. I am sure this will work out well.

</comment></comment><comment><USER5> It is darkly amusing that the actions of the wealthy are indirectly causing negative interest rates. Wealth, like fertilizer, needs to be spread around to do its magic. The only known robust solution to this problem is to invest in the general public and only governments are sufficiently large and broad to be able to do that. Neoliberalism is turning out to be yet another economic framework that is simple, neat, and wrong.

<comment><USER6> One would think that the wealthy would invest in markets where they would at least have a return on their wealth.</comment></comment>


Ask HN: How many hours can you productively program a day? - <AUTHOR> I'm just negotiating a freelance job with a company, who want 'day' rate quoted. Being me, I want to define day: usually it'd be 8 hours.
However, I know I cannot program productively for a solid 8 hours.
How many hours do you do, and how do you handle it on such contracts? <comment><USER2> It depends a lot on what I'm doing.

If I'm actively engaged with something, like a new algorithm, or the guts of a system, something really compelling and which is 'solvable', i.e., I've got everything nailed down enough that I can fit it into my head and start figuring out what bits are missing, I can achieve flow pretty easily and get maybe a solid 4 hours in that state, with another 4 hours taken up for less productive work getting into and out of that state, and for periodic breaks when I need them.

If it's defining the problem, exploratory coding to try and figure out how to interact with an external system (and that system is documented and sane), probably 3 in flow, with another 3-4 less productive; I'm nearly as productive as when I've got everything I need in my head, but I get drained faster.

If it's drudge work, or just hitting my head against a wall (anything trial and error-y, like interacting with something undocumented, stupid, inconsistent, painful, etc), perhaps 2 somewhat productive hours, over the course of 6 hours (the other 4 aren't productive -at all-), since every single thing will distract me, and after 6 I'm mentally exhausted.

<comment><USER2> Also, while I have never freelanced, I would define day rate as simply "not to exceed 8 hours". If they want to make it exactly 8 hours, fine, but that's where ethics comes in. For myself, if I'm mentally spent, and recognize I'll do more harm than good if I keep trying to code, I'm okay with simply keeping an eye on email and responding to them (rather than only responding to high importance ones/phone calls), and if any non-mental tasks are available, doing those (documentation, minor refactorings, additional test coverage, etc).

EDIT: foz's comment x 100. Make it clear they're paying for exclusive rights to your time, not 8 hours of programming.

</comment></comment><comment><USER3> Probably not more than 4, but it doesn't matter. Most of your working day at any non-trivial project would be devoted to understanding (reading, communicating) and documenting (writing, communicating) what you're programming about.

After 6-7 hours of programming, my code quality tends to dip dramatically, without me realizing.

With terrible impacts on the next day's productivity, of course.

<comment><USER4> I think this is the right approach, you can't compare programming to working on assembly line, i.e. the more time you spent typing in your editor is directly translated in more goods or value to the customer. Even if you should fill something like hours spent programming, I don't think it should be interpreted that literally. Your customer is buying your overall expertise, not only the ability to translate requirements into machine code.

</comment></comment><comment><USER5> Assume 8 hours * your hourly rate. You won't be programming productively for all eight hours probably, but that's normal. Be sure to point out that the day rate assures that you commit to focusing on them for the entire day, being available, and not working on other client work. This is the expectation of day rates for most clients: predictable scheduling and reachability.

<comment><USER2> This. Resolve any ethical ambiguities by making it clear that they're paying for the exclusive right to your time, not a guaranteed 8 hours of programming.

</comment></comment><comment><USER6> If they want a "day" rate why not just charge them what you want to make per day? Assume you won't work on anything else that day, how much do you want to make in a day?

Does it really matter how many hours you'll be productive? Hopefully this customer is paying for YOU and not your code. If not, how do you make it so they are paying for YOU and not your code?

I'm not a freelancer, I'm in a salary position. But I get the same amount per day regardless of if I write code for 8 hours, write emails for 12 hours, or only spend 4 hours in the office due to a company picnic. If someone asked me what my "day" rate is I'd say around $500, as that's roughly my employer's fully loaded cost for me to be employed for a day that I'm not on vacation.

<comment><AUTHOR> > Does it really matter how many hours you'll be productive? Hopefully this > customer is paying for YOU and not your code.

When sat in their office I am sensitive to the perception that I'm not working hard -- and in normal management style, not worth the money (because I don't look busy).

I guess I also have a strong protestant morality of not overcharging - and if they hire me for an 8 hour day, I'd darn well better give them a proper 8 hours' of work.

<comment><USER6> > if they hire me for an 8 hour day, I'd darn well better give them a proper 8 > hours' of work.

If I was to hire you, I expect I will pay you your rate for the emails you send to me telling me status of your work, for the time you spend researching the problem at hand, and for telling me that if I compromise on one part of the development that I would get $BENEFIT and that I should change my specification to get $BENEFIT. None of this is writing code but all of it is very valuable.

I've come to realize that people who write code are not as valued by those who authorize the writing of checks as people who can communicate and get shit done. It doesn't matter if you write code well, it matters that you get shit done and communicate about it to others.

</comment></comment></comment><comment><USER7> Another interesting question is, given that responses seem to be in the 2-7 hour range, for programmers that report 10+ hour days at your startup, where is that time going? Are you constantly working past the point of exhaustion? I can productively program 4-6 hours a day. In a pinch with rough deadlines I've pulled all nighters (these were for personal projects with hard deadlines of a scheduled event). But if I am trying to put in 8+ hours of programming daily I would be a wreck.

What are 50 hour a week and up programming jobs like? Do you just tough it out and code endlessly?

<comment><USER8> I have always wondered this myself. I find it more difficult to stay focused on a project that is not well defined, but for ones that are well defined and give a clear picture of the expected end result I can get into the flow for hours as I run off the checklist of things that are expected.

I think that ambiguity kills programming production, and in this industry there are copious amounts of horror stories about poorly defined projects. And I don't think that documentation is some sort of mindless work break either, as someone above eluded to. Being able to effectively explain your code from a technical and/or functional standpoint also takes focus and energy.

<comment><USER2> Very much this. I think 'agile' has been abused a lot by product manager-y types (anyone filling the role) to try and excuse nebulous, ambiguous tasks as being okay to work on ("do your best, that's what we're paying you for; figure out what it should do"). They're okay to have ("we're not sure how that's going to work yet"), but they're not okay to start working on until you nail it down, and nailing it down can be as hard or harder than the actual implementation.

Also, as clarification, documentation can indeed be mindless. "This REST API has changed and needs up to date documentation; let me go look at the code and find the new endpoints and write them down and what arguments they take" is a completely menial task.

</comment></comment></comment><comment><USER9> It depends of your health and your sleep quality.

In good condition I exactly say like jos82.

When in pain (I have a back neck pain killing me since 2 weeks and it seems related to my working position) It is unsustainbale to focus even on other tasks than programming for more than 5 hours a day and sometimes less (like 3).

When going into burn-in (like mbenjaminsmith, or Daishiman) I can focus up to 8-10h+ a day, the problem is the burn-out: Months with reduced concentration and almost a negative productivity in quality and quantity some days.

When in good physical and psychological condition, I focus the same amount of time, but quality of code is way better.

At home, the lack of noise and unwanted interruption increases the capacity of concentration and I can code 6 hours with better quality. The lack of social interaction however on a long run however erodes my pleasure of working, so I don't do it too often. (but it should also happen in good working environment or with good mental Daishiman or walshemj).

Stresses debilitates me, so I code way slower and with poor quality during a crunch unless I kick a burn in.

That is the reason I prefer a balanced solution.

It is kind of funny we have the same feedbacks.

I have a theory that the difference between 4-5 and 5-6 is the difference between a crowdy working environment and a quiet one.

Could some of you tell whether you work in a crowded or a calm place too? It would be fun if I was right.

</comment><comment><USER10> I also vote for maybe 5-6 hours on average.

That's "active" programming time, meaning things like designing with software tools or pen/paper, literal programming time where I'm bashing on a keyboard and compiling stuff, and immediate testing activities.

I'm not including things like time for running automated testing suites, making general notes, or overheads like calls, meetings, and reviewing specs. I don't find these activities detract from my concentration on detailed technical tasks in most cases.

I've noticed that if something really grabs my attention -- maybe because it's a very interesting part of the system or maybe because it's an urgent bug fix or a huge deal is riding on it for my client -- I can do detailed technical work for considerably longer without suffering a drop in either equality or productivity, but these are exceptional cases and in short bursts for maybe a day or two at a time. It's not a level I can sustain for multiple weeks.

(Edit: To answer the question about contracts, if I'm billing on a time and materials basis then my contractual wording normally says I can bill the daily rate for any date on which services are provided, without reference to how exactly I will provided the services or any specific hours or number of hours. Sometimes this raises eyebrows when people first see it, usually if they are used to working with other people who bill by the hour. However, my experience has been that no serious prospect objects to the point of losing a deal over it, nor has it created any lack of trust or bad feeling once a client sees how it really works. In practice, I sometimes work only a couple of hours in a day because something has been held up on my client's end, and I think my record was something like an 18 hour day involving significant travel, and I would charge the same for both. At some point you just have to be sensible about these things and trust that it will work out fairly overall.)

</comment><comment><USER11> Most contracts I've been involved with define a day as 7 or 8 hours.

This is almost never going to be solid programming time though, as you will need to communicate with the client, handle documentation and other tasks which legitimately take up part of the 8 hours. Also, you should take at least 1 or 2 breaks during the day which shouldn't be included in the 8 hours.

By the end of the day, you're not going to be programming as effectively as you were at the start. This is just the nature of working 8 hour days; the client won't expect you to be a machine. If you're really concerned about this, try to do all the difficult thinking and planning at the start of the day, leaving more straight-forward tasks for when you're tiring.

In short, say you'll work 8 hours and just do your best.

</comment><comment><USER12> Another way to approach this is to ask what they consider a day to be? Is it sitting in the chair from 9 to 5? Is it just doing a certain number of features in a day? Does it involve doing support after hours? Considering that they are asking for a 'day' rate I'm assuming this is their way of asking if they can retain you for full time work the extent of the contract.

In these situations I make it clear that while I'm willing to make them my primary client my business does require me to attend to other matters such as administration, taxes, billing, lead generation, etc.

I never say they can expect X hours out of me a week because quite frankly I've never been good at maintaining a consistent hourly pace per week. When I was doing hourly I averaged about 20 hours a week of programming (I was pretty fanatical about starting/stopping the clock). When I would get closer to 30 that was when I would be pushing a deadline or getting close to burnout.

What I do now is get a sense of what they expect out of me in terms of reliability and production. This tends to be a lot of work up front because I'm building trust with the client. Such as meeting with them more frequently to get on the same page as them. But that up front work pays off dividends later on when I have to bail to attend to family or business matters. Eventually this settles down to weekly communication to see if you're actually meeting/exceeding the client's expectations.

Again I'd emphasize asking more questions about what they consider a day to be? Who knows it might just mean you working on their stuff for 5 hours a day :)

</comment><comment><USER13> In the scenario you present, I can get 4 hours of programming done in a day. The rest of the time, I'm emailing, thinking, writing, talking on the phone, etc., I'm not just goofing off on the interwebs. Software development isn't just programming, especially as a freelancer.

I don't quote clients based on how long I think it will take, or how long I think I can work. I quote them based on the profit I want to make. And some clients, who have projects I don't want to do, get quoted ridiculous rates. It's been somewhat surprising to see how many have gone even for that.

I charge per-day, not per-hour. I sometimes evaluate quality of life issues around a per-hour basis, but I think the smallest unit of work-time is a day, not an hour, so I charge by the smallest unit. I find this makes me a lot more honest about my time accounting, as there is no temptation to pad time with goofing off.

</comment><comment><USER14> I used to do 8+ but recently I find myself doing 4-5 at most. Maybe I'm burnt out after 10 years at the same job (I quit a few months ago but still I am nowhere as productive as I used to be). I also find it very hard to reach the feeling of flow without being distracted.

</comment><comment><USER15> As others have pointed out a programmer's day does not involve only typing keyboard. If you do that 8 hours straight without thinking, it'll be as good as a pianist randomly typing keys for half of the time.

A good programmer should think forward in time and type rather less, coming up with a good logic and analysing problems take as much time as coding that thought into programs.

Also, when you do think for a long time, brain naturally needs rest, so if you're like me who can work alone, you can find out your best pattern, such as work a few hours then throw yourself on the bed, play with your phone etc and come back when your mind feels straight.

This makes me think the other thread with a poll mentioning how people are only productive for 2-4 hours a day kind of makes me wonder... Sure you may have to be at office for 8 hours and you could be productive for less than half of the time being there... But right now when I'm behind schedule from multiple clients, I work the whole day, even splitting the sleep time into 2 times for 4 hours, working only when my mind feels straight, I can definitely do 8 hours plus of decent quality work and do that for days until maybe once every 10 days I'm used up for most of that day.

It's definitely not easy for office workers to do same.

I work alone at home against multiple clients I know locally and if I'm assigned a whole project, obviously I quote for the entire project, so I may get lucky and go well as hourly basis pay but for assignments that are only tasked to fix small problems, I just give them quote of roughly $300 a day.

Try to think how worth your day can be when giving them quotes. If you're inexperienced and needs lots of time googling around, you should lower it and consider it a good chance to learn, not earn but if you're very effective against their problem for most of the day, give them a good one.

Also, don't start from lower point, because raising later considering it just won't cut it will raise their eye brows. If you ever feel you quoted too high, it's a good motivation to work more as well and make up for it.

</comment><comment><USER16> Maximum 10 hours, but I'm usually drained afterward. That's only if I'm in the middle of a big push, like for an MVP or something. Average is probably 6 hours, assuming the requirements are well defined and I know the language and system well.

For poorly defined requirements, a language I don't know, or any other "bullshit" variables, tack off two hours per bullshit variable. Hence if there are 3 or more bullshit variables, my productivity effectively goes to 0. (A bit tongue in cheek of course; really one should take responsibility for one's productivity no matter how much bullshit.)

</comment><comment><USER17> Here is a recent poll asking a similar question:

[https://news.ycombinator.com/item?id=7657502](https://news.ycombinator.com/item?id=7657502)

The most popular answer was 2-4 hours.

</comment><comment><USER18> A day rate means a day's worth of your time, not necessarily of your code, and a standard workday normalizes to 8 hours. Don't sweat time on keys and be as productive as you'd normally be. If you'd normally take periodic breaks, take periodic breaks; the same goes for other work habits. If you can't code continuously for 8 hours (and most people can't), find other ways to contribute your skills. I believe this is fairly standard consulting practice.

</comment><comment><USER19> In an 8 hour day I can do 5 hours productive programming, using the pomodoro technique in 4x30min blocks followed by a 30min break. Keeps my head focussed and fresh all day, and I'm not wiped out at night. There's a huge difference in my productivity on days I strictly follow pomodoro and days I just continue programming until I literally need a break.

Edit: I charge 1 day for these days. I get more than a days work done compared to other people in the office, so I feel it's fair.

</comment><comment><USER20> I would (and do) avoid defining a day with the client - much better to leave it slightly nebulous. Internally, I use 6 hours of actual typing and thinking.

<comment><USER21> Yeah this guy knows what's up.

Bill based on the value you bring, not the time you spend heads-down.

<comment><AUTHOR> Unfortunately clients don't seem to think that way. This particular client has told me "I know everything", that they want my skills and my brain to provide input as they get their startup going - but they still want to bill based on days, and set a day rate.

I've read enough by @bdunn, @patio11, @tpacek et al to know that billing based on the value I bring is the best way to bill. Getting to a position where clients will consider it is... not happening though.

How do I break this blocker?

<comment><USER20> Billing on a day rate is a _good_ thing, just don't define day too carefully.

The other alternative is billing on a per-project basis; that gives you precisely no protection against clients wasting your time, or changing your mind, or any number of other things.

<comment><USER21> Yeah I wouldn't be too bogged down in day vs. week billing. Obviously, a larger scope is preferable, but it's much better than simply billing by the hour.

</comment></comment></comment></comment></comment><comment><USER22> In project planning I would plan for 5 hours per day per developer, even if they were going to be onsite for 8 hours per day. My experience with freelancing/contracting though is that you're generally expected to be onsite or to be available 7.5 or 8 hours per day, even if you're only productive for 4 or 5 of those hours...

</comment><comment><USER23> 4 on a good day; very rarely 6, but that's often more repetitive refactorings or a very quiet, distraction-free day. Usually though it's either I get disturbed in one way or another and have to do the whole restarting / getting back in the zone rituals, or I'm mentally beat after a good bout of programming.

</comment><comment> andrey-p 4-5 hours on a good day. I normally quote a day rate for 6 hours / day, but this can vary depending on where I work.

I tend to be more productive if I work at a client's office rather than my usual coworking space. I assume that's because of feeling pressured to look like a good freelancer, but it makes me enjoy work a lot less.

<comment><AUTHOR> > I tend to be more productive if I work at a client's office rather than my > usual coworking space. I assume that's because of feeling pressured to look > like a good freelancer

Same here - on those days I fly, I look like a genius.

Unfortunately, the next day I'm burned out, and the one day they paid me for turns out to have to cover 2 days.

</comment></comment><comment><USER24> You'll likely only program 5-6 hours per day, unless you're super excited for the project. I'd still quote 8 because while you'd only program for 5-6 hours, you still have to deal with email/phonecalls/text messages as part of your job, which are part of your work for them.

</comment><comment><USER25> I can do 8 or 9. I can do more than that but not for sustained periods.

If I'm programming 10++ I'll usually burn out after a month or so. Burn out usually means that I don't have the focus or will to get in a solid 8, more like 4 - 6, for a period while I reset (whatever it is that gets reset).

</comment><comment><USER26> For freelance work I take the number of hours I will likely sit and then multiply by 75 - 85% depending on if I feel good about the project (can I enjoy it). That way I account for random Reddit/HN checks, email reading, TV watching, and any other distractions.

</comment><comment><USER27> Probably no more than 3/4 hours. After that, I find that the quality of code goes down significantly. Of course, this would be different if this 3/4 is spreadout throughout the day with other "filler" jobs in between.

</comment><comment><USER28> About a half hour to two hours really productively, and maybe 6 hours in a somewhat productive way.

It varies a lot with the amount of sleep I got the night before, which again varies a lot, having two small children :-)

</comment><comment><USER29> I can probably program productively for about 1.5-2 hours a day, all in 10-20 minute bursts. Right now, I'm a student and focused on learning languages rather than completing projects for money.

</comment><comment><USER30> Mine would be 4 to 5. But on average I can get done more than most people in that amount of time.

But for freelancing I do quote 7-8 hours. I just program slower during that time, do easy tasks if any (css/html)

<comment><USER31> > I can get done more than most people in that amount of time.

Not challenging you, just curious - how do you measure this?

<comment><USER30> I haven't timed anything, but just by working with other people in different environment, I seem to always get things done faster.

Or comments like "are you chatting or are you working ? Why are you typing so fast".

My issue is that I sometimes jump into something too fast. I don't over think projects, and sometimes it leads to me making mistakes. But I am working on it.

</comment></comment></comment><comment><USER32> It shouldn't be more than 5 or 6; you still need time to arrange the rest of your business. Plus, you're not wasting it around with meetings and other nonproductive, non-billable stuff.

</comment><comment><USER33> That would be 6 hours. Over here, on a 7.5 hours shift, we are expected to spend 6 hours actually programming. The other hour is there so you can take breaks, have meeting, etc.

<comment><USER34> What do you mean when you say "programming"? Sitting in front of the keyboard and typing? When I do "programming" I spend at least a third of the time with a pen and pencil and thinking about the structure or algorithms.

Without sitting down and thinking I just don't have enough good ideas in my head which I could type in for 6 hours straight.

<comment><USER33> I mean everything that is typing on the keyboard or at maximum a step away from it. Thinking about the code would be included in that.

That being said, we do have a around 6h a week of Agile meetings. Usually split into 3 x 2h meetings. Depends on how each team wants to proceed.

Of course, if I have to attend meetings, talk to clients or work on the structure of a project, I'm not expected to do that in overtime. I cut in the 6 hours. But on a 7.5h shift, we are expected to spend 6 hours on average typing on the computer.

It's not like anybody is looking over my shoulder however. If you work faster by making pseudocode on paper before you start working, you would be allowed to.

</comment></comment></comment><comment><USER35> For me, it'll be around the 80/20 rule. Meaning that, 20% of my working time will most likely end up being useful to 80% of my work.

</comment><comment><USER36> My Wakatime reports about 4 hours of Xcode per day.

<comment><USER37> This is interesting. I'll generate some stats on the average time [https://wakatime.com](https://wakatime.com) users program each day.

</comment></comment><comment><USER38> 5-6 Hrs is good for programming for a day, productivity goes down if we stretch.

</comment><comment><USER39> I estimate 5 hours is my max without quality loss.

</comment><comment><USER40> 5/6 hours max on a good day.

</comment><comment><USER41> a really good day with no outside interruption interruptions 5 hours would be my guess.

</comment><comment><USER42> 5-6 hours I think ?

</comment><comment><USER43> 20 minutes.

<comment><USER44> 20 minutes is what I realistically achieve, with the amount of interruptions and stuff I receive. I used to get most of the 8 hour day being productive a long time ago (when the organization was just being set up)</comment></comment>


Harvey Mudd College Attempting to Address Tech Diversity Issues - <AUTHOR> http://www.latimes.com/local/lanow/la-me-ln-harvey-mudd-tech-women-adv-snap-story.html <comment><USER2> While they have the best intentions, these kinds of initiatives can backfire badly. 2 years ago, I was partnered on a project with a woman who did not how to code a single line of C++ in a senior-level computer science course. Whenever I would arrange for us to work together in lab, she would call in sick. This happened about 3 or 4 times. I told this to my professor, who was a HUGE social justice guy, and after investigating our version-controlled project he found that I had written 98% of the lines. I got an A on the project, she got a B, so she still passed, but the whole time I'm wondering: _is this really helping her_? Is it really going to help her in her long term career to push her through the classes without learning anything to push a statistic that the college can later brag about. Of the couple girls I know who graduated in my class, one works at Google, but none of the rest of them are working in a remotely computer science job. I think the proportion corresponds to the ratio of girls who would naturally take computer science (the one that works at google now and perhaps a few who just preferred other things) vs. the people that were pushed through (the rest).

This also causes problems for the whole school as well: I learned through a friend that a google recruiter was talking about how students from my school often have great resumes and then fall apart during technical interview questions. So I think it is plausible that these kinds of initiatives hurt EVERYONE from the school in question.

This is all anecdotes, but I'm convinced this is a real problem, causing REAL harm, all for the college to look better in social justice statistics. This is why I'm writing about it instead of just shrugging my shoulders.

<comment><USER3> I went to Pomona College, which is next to Harvey Mudd, with cross-enrollment and some shared CS classes.

I think the experience you are describing is not applicable here, because Pomona and Harvey Mudd are both highly selective schools. Nobody who can't code is graduating with a CS major. Mudd in particular is pretty hardcore. When I worked with other students in CS classes at Mudd, I was always impressed by their intelligence and work ethic, that goes for any gender.

My graduating class of CS majors had more women than men, and both men and women are developers at top companies, getting PhD's from top programs, etc.

<comment><USER4> Doesnt everybody mostly think this about their school ? No one wants to be known for graduating from the school that pumps out frauds.

Thats why alot of companies prefers ivy leagues, mit, other top schools etc.

</comment></comment></comment><comment><USER5> I recently talked to a friend (who, yes is female) who took a required programming course. She is an English major, but she found python fun and she's planning to take another course on it next year.

While everyone here is discussing SJ vs not SJ[0], I think this article is another data point in my belief that a _liberal_ arts education, or one that requires a number of pre-requisites across fields, is so beneficial. Being well rounded and schools requiring general ed's across the spectrum helps people discover interest in things they never thought they would be interested in.

I am on my way to a Physics Ph.D., but next to my undergraduate QM courses, I am most thankful for my undergraduate's German classes, philosophy, and a history course about the US Presidents (this one required us to read primary sources, letters, unedited tape transcripts, tedious for someone who had other commitments like studying for the Physics GRE, but it was super enlightening). At the time, I railed against general ed requirements and I considered them as a waste of my time, but they do well to expose you to more of the world and round you out as an educated person.

[0]"not SJ" is the only term I could come up with.

<comment><USER6> I'm glad this article mentions improving the compulsory classes, in my experience the compulsory classes were the worst because people couldn't not take them if they sucked.

I'm still bitter about the bullshit requirements my uni thrust on me. The patronizing "we know better than you" schtick gets old real fast.

</comment></comment><comment><USER7> So How did they get to 55%. Are they just refusing to admit more than a certain number of men? Or is the a more organic shift through staffing and support changes?

<comment><USER8> That was stated in the article: Organic shift through curriculum redesign and change in teaching methods. Staffing probably also played a part, although that wasn't mentioned in the article beyond Klawe.

Note that students at Harvey Mudd are not admitted to any particular major or program, they are admitted to the college in general and don't declare a major until Sophomore year. An increase from 10% to 55% is at least partially a result of more female students taking interest in the subject, not a result of admissions. Matriculation of female students to the college as a whole also rose over the past decade, but that went from ~35% to ~50%, so it accounts for less than half of the change in CS.

(Disclosure: Harvey Mudd alumn, class of 2008)

<comment><USER9> Can you elaborate on the change in teaching methods? I don't understand how CS101 could be gendered in a way that Math or Physics isn't.

<comment><USER10> (Mudd alumni, class of 2011)

One big thing is splitting the intro CS course into different sections based in previous experience. Folks with a ton of experience end up one section, and those who are new to the subject in another.

The two sections cover the same material, but with different lecture styles, and people don't end up discouraged because their labmates cruise through exercises that they find challenging.

This isn't explicitly gendered, but pre-college exposure to CS and programming could well be correlated with gender...

The course website is here, and shows the Gold / Black sections: [https://www.cs.hmc.edu/twiki/bin/view/CS5](https://www.cs.hmc.edu/twiki/bin/view/CS5)

</comment></comment></comment></comment><comment><USER11> Previous discussions:

[https://news.ycombinator.com/item?id=11182080](https://news.ycombinator.com/item?id=11182080)

[https://news.ycombinator.com/item?id=6531251](https://news.ycombinator.com/item?id=6531251)

</comment><comment><USER12> I wouldn't want my daughter working in technology for the same reasons I wouldn't want her to be a professional boxer or a coal miner. I'm a pretty tough guy, I've hunted and fished out of necessity and have had to deal with the hard consequences of a childhood lived in poverty and despair. Drug addiction, jail, recovery, I've had my fair share of time in life's gutter. Scumbags like Trump don't phase me, as I understand it's just on par when dealing with the phony tough.

But with all the thick skin even I have been blown away at the ruthlessness and lack of empathy our industry mandates in a person for them to achieve the upper echelons, much like other male-dominated industries and endeavors.

If there are women out there ready, passionate, ambitious, and intellectually up to the task of really ushering in the future then all the power and over 9000 blessings to them. But if they or anyone else expect me to treat them any differently than my all-male, all-star engineering and design teams then they'd be sadly disappointed. The truth is I'd hire a paraplegic transgender janitor with no high school education if they were able to somehow prove to me they could run with the all-stars or at the very least support us in our cause. Race or gender is really never a factor for a _true_ leader looking to build an all-star team.

My advice to my daughter, if it was true in her heart, would be never to join them - but to instead run over them like an old greasy tank. Don't even need a degree in Computer Science to do that.

<comment><USER13> oh horsecrap, stop with the theatrics.

You've been a drug addict who's gone to jail and had a hard time, but even you've never seen anything as horrible as white class workers presumably looking down on other white class workers?

Is there anyone who actually buys that?

<comment><USER14> As soon as I got to the "over 9000", I knew it was 4chan nonsense. I stopped going to reddit to get away from that crap.

</comment></comment></comment><comment><USER15> Wow so many negative comments on this thread.

I hope that any stereotypically white/male whatever technology professionals reading this remember back to the scorn and ridicule that many of us faced in our formative years due to our interest in technology. Many women, minorities, etc have had similar interests to yours but had few or no peers who shared them. You may have overcome hurdles but now imagine doing it alone or worse never knowing that it was even a possibility for you.

Programs like this are designed to make up for the numerous biases in our culture that stand in the way of equality. I think it speaks to the fragility of your egos that you find the idea of giving someone else an opportunity threatening. Especially when it costs you essentially nothing to be supportive.

I think one of the very worst sins is to rise to a position of power and use it against others who haven't had the advantages you've enjoyed. This is one of the thousand reasons I am deeply troubled by our near term political futures. A feeling which is more exacerbated every day by level of vitriol projected by people with the "I've got mine" mentality. Yes I've struggled, but I work to make things better so that others can avoid going what I went through. It sure beats maintaining a status quo that makes us pay our dues in futility.

<comment><USER4> It sure feels like you are arguing a strawman here.

From reading the comments, its seems alot of people want to help but have legitimate, well reasoned and valid concerns.

<comment><USER15> You make a good point.

I guess what I'm arguing is that the forces against equality are so large that it would take a great deal to shift things into balance in anything short of decades. I feel that taking an opposing or even neutral stance against active measures is a vote of support for inequality.

If anyone is going to take a stand, I would think it would be people who have experienced being ostracized. But reading some of these comments has been an eye opener because they use seeds of truth to support what is unavoidably a position of ignorance.

That trend is appearing all over the media right now and it's a very dark think IMHO.

I admit that it may be the effect of controversy generating conversation that pushes the comments to the top but it makes me uncomfortable that even Hacker News isn't immune to such things.

</comment></comment></comment><comment><USER16> For the people who are interested in this topic, Google has a training video that talks through some interesting psychology research that ties to hiring / performance reviews -

[https://www.youtube.com/watch?v=nLjFTHTgEVU](https://www.youtube.com/watch?v=nLjFTHTgEVU)

I haven't been able to locate many similar good talks, so if anyone can point me to speakers / talks I'd appreciate it.

</comment><comment><USER9> > She expected the class to be full of guys who loved video games and grew up > obsessing over how they were made. There were plenty of those guys but, to > her surprise, she found the class fascinating.

So many of these articles seem incredibly sexist to me -- they all boil down to "women are too ignorant to realize that computers are fun".

<comment><USER17> What if that's where we're at right now? Ignorance is correctible. It's not bad if corrected (they could be part of the lucky 10,000 [1]). Perhaps woman are under a false perspective that the material is boring. With time, and experience, this might change.

1 - [https://xkcd.com/1053/](https://xkcd.com/1053/)

<comment><USER9> Hypothetically, if you really believe the majority of women eschew computer science out of ignorance, why do you believe we should correct it? Here's how I think about it: if I invited a male acquaintance to go to a ballroom dancing class and his response was "no way, dancing is for pansies" \-- should my reaction be to try to make the lessons a more comfortable environment for him? Absolutely not. If anyone were to avoid learning to program because they believed the field is full of sweaty nerds frankly I'm of the opinion that it's their loss.

<comment><USER17> The article was a little hand-wavey on the details about comfort. But to you hypothetical. Say that instead you tell him (assuming a straight guy), that it's great way to meet women and, oddly enough, get exercise. That might convince him to attend at least one. After auditing, he might like it.

The field has an old rep. Some of it's earned. It's changing now. People are operating from old information. Correcting this information, by means of targeting marketing, might be a good thing.

Now I do see benefit for keeping the view around if it means less workers and therefore a higher wage for me, :).

</comment></comment></comment></comment><comment><USER18> Every diversity-related topic makes me wish that HN discussions weren't branched/fanned out.

The problem isn't politics. The problem is that the exact same argument replicates itself and occurs about a dozen times in different leaves, and it becomes extremely tedious to pore through it multiple times.

Maybe branching comment forums are a good idea for certain topics, but topics that require an in-depth back-and-forth like this one, are much better served by a single chronological pipeline.

</comment><comment><USER19> So you're suggesting sexism as a solution.

<comment><USER20> I suppose the argument you're making is that, if society is treating one sex differently on the basis of sex, _ending that different treatment_ also counts as treating them differently on the basis of sex, and leaving that different treatment in place does not. For instance, if men can vote and women can't, giving every woman a vote and not giving every man a second vote would be a sexist change.

If so, yes, I am in favor of that sort of sexism.

<comment><USER19> No. You failed to prove that society is indeed making it more difficult for women to join computer science education and jobs.

<comment><USER21> That's my main gripe. Treating people differently based on gender is simply wrong. The default should always be to treat people the same.

If you are going to commit sexism with the purpose of "reversing the patriarchy", you first have to prove and quantify the effects of the "patriarchy". Only then can you justify using sexism. Otherwise, you are committing a definite wrong, sexism, to reverse the possibility of sexism, which is something that could possibly (but hasn't been proven) to be wrong.

I have the same viewpoint about affirmative action in general. The default, preferred state is an absence of racial/gender based discrimiation, aka affirmative action, unless an imbalance is properly proven. Affirmative action is something that not only needs to be justified once but also continually and repeatedly justified throughout time. Simply disproving arguments for affirmative action should be enough to stop it.

<comment><USER20> But that's a losing strategy, in a game-theoretic sense, if your goal is to end sexism/discrimination/bias.

It is fine if your goal is upholding a moral code where _you personally_ actively committing an act of discrimination is unacceptable, but even unintentionally; you personally passively upholding discrimination is fine; and other people actively committing discrimination and you failing to stop them is not a thing you're super morally culpable for. That's certainly not my moral code, and I think even among the crowds that believe in intrinsically evil actions regardless of context (e.g., Catholic moral theology), they wouldn't agree that passively upholding evil or failing to stop others from doing active evil is fine (e.g., "I have greatly sinned ... in what I have done, and in what I have failed to do"). If we're making a deontological argument, we should nail down what we think about passive wrong or allowing a wrong to continue, and if we're making a consequentialist argument, we're not worried about intrinsic wrongs along the way to a right.

It's a losing strategy because everyone who actively supports sexism, racism, and other forms of discrimination have plausible reasons why their discrimination is justifiable. Even the white-nationalist types these days hesitate to say that the white race is _superior_ ; they just say they want protections for the white race in white countries (whatever those are). And most of the discrimination in today's society doesn't come from people who are nowhere near as overt as white nationalists. The colleges say, "Oh, we're just trusting these test scores." The standardized test companies say, "Oh, we're just trusting past performance at college." And if anyone had previously introduced bias into the system, they've now successfully _laundered_ the bias; there's a feedback system that keeps whatever biases were present when it was created, and you can quite genuinely say, "Oh, I'm just following this system, which on paper should be a perfectly objective system" and there's no proof that you're actively and intentionally discriminating. But you're upholding discrimination, all the same.

If you want to see this sort of bias-laundering in practice, my favorite recent example is the voting laws in North Carolina that were recently struck down by their Supreme Court:

[http://www.chicagotribune.com/news/nationworld/politics/ct-n...](http://www.chicagotribune.com/news/nationworld/politics/ct- north-carolina-voter-id-law-20160902-story.html)

Every restriction, on the face of it, was defensible. Voter ID in the abstract is a good idea. Eliminating certain parts of early voting seems fine. But the courts looked at the emails behind this law, where legislators asked which particular voting mechanisms were used by specific demographic groups, and eliminated those mechanisms "with almost surgical precision". You couldn't prove from the text of the law that there was any intention at bias, which was the entire point; it wasn't supposed to look like a discriminatory law.

We don't have the benefit of seeing those discussions most of the time. So waiting until we have a proof of a wrong to fix that wrong is a losing strategy, one that is easily exploited by people who want to discriminate, and one that people who want to discriminate have _demonstrated_ their willingness to exploit.

</comment></comment></comment></comment></comment><comment><USER22> We already have a very accurate system of privilege in 'parental wealth'. It has always puzzled me why people refuse to use this instead of relying of race/sex ect .

wtf. why is this downvoted?

<comment><USER21> My theory is that affirmative action gives colleges an excuse to bump up rich, "underprivileged" minorities over poor, "privileged" races so they don't have to give as much financial aid

<comment><USER23> That's certainly a valid suspicion, given the mercenary nature of university management these days, but is it actually borne by facts?

<comment><USER24> This question nerd sniped me quite hard, and I'm unfortunately having trouble answering it. I figured a first step would be to look at aid as a portion of cost of attendance over time, tracked against affirmative action endeavors. The problem I'm having is finding consistent measures of both aid and COA, let alone over time. If anyone knows a data source that proffers this I'd be quite curious.</comment></comment></comment></comment>


Show HN: trendingpeople.com (Built and launched entirely last weekend) - <AUTHOR>

It's a site for posting a picture + link + blurb about people who are trending in media now.  It's absolutely BMVP.  Ugly forms, indescript error messages, etc, but I'm proud for throwing it together in only a weekend.  It was written in python and uses Durus as the datastore (completely underrated object db btw).
Criticism and suggestions welcome.
http://trendingpeople.com/ <comment><USER2> You picked a bad time to post as it's after 2am on the east coast. I know the HN community spans the globe but your project has an North American bent. I bet you'll get more feedback if you repost in an evening before 8pm here/5pm west coast time. That aside...

Not bad for a weekend project! Good name. Smooth and predictable functionality. No bizarre usability things that surprise or confuse and a generally interesting concept. For simplicity's sake I would make the entire images clickable, but that's my only nitpick. I think the site is neat and appeals to everyone's inner Perez (in a _good_ way).

<comment><AUTHOR> Good idea with making the whole images clickable. Thanks for the feedback!

I didn't really think about the posting time...d'oh</comment></comment>


Ask HN: Will the next Berlin Wall be digital? - <AUTHOR> It's been 23 years since China announced its intention to launch a national Intranet. [1] In 2019, Russia publicly initiated plans to follow suit. [2] [3] [4]
Where do we go from here? Is the world's next Berlin Wall destined to be digital?
Consider the following excerpts from a Nov. 2019 speech given by Ian Bremmer [5]:
"[The global market for data and information] is breaking in two. It is no longer global. In the beginning, the internet—the Worldwide Web—was driven by a single set of standards and rules. With very few exceptions, one consumer had virtually the same access as another. No longer."
"Today, China and the United States are building two distinct online ecosystems. That's true for the transformation of today's internet, but also for the construction of the new internet of things. The American tech ecosystem, with all its strengths and shortcomings, is built by the private sector and (loosely) regulated by the government. The Chinese system is dominated by the state. That's also true for big data collection, for development of artificial intelligence, for the rollout of 5G cellular network technology, and for defense and retaliation against cyberattacks."
"This leaves us with a big question: Where exactly will the new Berlin Wall stand? Where will we find the boundary between one technological system and the other? Will Europe align with the United States? Or will the EU fragment into individual decisions within individual European countries? How will India position itself? And South Korea? And Brazil? What pressures will even Japan face?"
[1] https://www.cnet.com/news/chinas-national-intranet/
[2] https://www.theregister.co.uk/2019/02/12/russia_disconnect_internet_intranet/
[3] https://www.bbc.com/news/technology-50902496
[4] https://techcrunch.com/2019/12/26/russia-starts-testing-its-own-internal-internet/
[5] https://www.eurasiagroup.net/live-post/end-of-american-order-ian-bremmer-2019-gzero-summit-speech <comment><USER2> I don't have the answer but wanted to share a recent observation:

I have been noticing and huge increase of viral videos comming out of China recently, I'm guessing this is a result of China's growing middle class that now own cell phones.

Having lived through the last couple decades of the cold war, I can assure you, no amount of censorship will keep media and the ideas it carries away from a nations people. If anything it will make it more appealing.

</comment><comment><USER3> I've noticed that those in power are adding more and more regulations to businesses. This sounds good on the surface, but the end result is that small companies don't have the money or the attorneys to handle the red tape involved in keeping up with these regulations and big companies love it because it shuts the door on future competition.

If the EU doesn't break up completely in the next decade, I predict that European websites and web-related businesses will be a thing of the past for startups and small companies, unless they have the backing of a huge conglomerate/mega corporation or the government. Maybe this was the intended plan?

I, for one, don't want a future where governments and large corporations control the Internet</comment>


My Steve Jobs lunchbox, circa 1988 - <AUTHOR> http://imgur.com/srb63

<comment><AUTHOR> Steve was my idol as a child of the seventies growing up in the '80s. I was so angry at Apple after they got rid of Jobs that I vowed to never buy another product from them. And of course I dreamed of being able to have a NeXT.

So I occupied my lunchbox in protest. Along with a list of my dream cars.

Thank you, Steve, for helping to make being a computer obsessed dork socially acceptable.</comment>


A news app for JavaScript developers build with Telescope and Meteor - <AUTHOR> http://dot-js.com I know Telescope form Hacker News last time: http://news.ycombinator.com/item?id=4840032<p>Then I create Dot-js.com with Telescope in a weekend. <comment><USER2> Hey, that's awesome, how can I get in touch in you?

<comment><AUTHOR> email: firstname.lastname@example.com</comment></comment>


Ask HN: Top stories and best stories in the HN API? - <AUTHOR> So I am building this toy app, and I was wondering if anyone knows the difference between top stories and best stories in the HN API[0], which one we see on HN front page ?<p>[0] https://github.com/HackerNews/API#new-top-and-best-stories <comment><USER2> Asking the HN moderators using the |contact| link is probably the best way to get technical details.</comment>


Show HN: A Chrome extension to manage hundreds of tabs - <AUTHOR> https://www.thetabdestroyer.com <comment><AUTHOR> Hi all! I made tab destroyer with my business partner because he's kind of an information addict and always drowning under hundreds (sometimes thousands) of tabs. It turns your new tab page into an overview of all your open windows and tabs that's searchable and organizable. It lets you close tabs, save tabs, and drag and drop tabs between open windows (and also saved windows, which we call "bundles").

It's very, very alpha and still has some bugs—but I'm working real hard on it.

I actually just rewrote it in react and am adding a bunch more features, but I thought I'd show it to the world now to see if anyone else is looking for something similar. He's now running with no more than 3 open windows at a time, with an average of 20-40 tabs total.

Questions and feedback are greatly appreciated :)</comment>


Fuzzing a DNS parser written in Go - <AUTHOR> https://blog.cloudflare.com/dns-parser-meet-go-fuzzer/ <comment><USER2> CloudFlare has a constant stream of quality articles about Go, I've really been enjoying them.

<comment><USER3> They are probably pushing more traffic through Go than any other group on the planet. It's nice of them to share what they come across, and it's also good PR for them. Hell, even I want to work for them now.

<comment><USER4> We're hiring in San Francisco, London, and Singapore:

[https://www.cloudflare.com/join-our-team](https://www.cloudflare.com/join- our-team)

<comment><USER5> On that note:

Hypothetically speaking, what would take for a wanna-be candidate that knows Go but doesn't have relevant work experience on CloudFlare's area of expertise to get up to speed?

<comment><AUTHOR> Apply. We have a very diverse team of backgrounds. Getting up to speed isn't a problem.

<comment><USER6> Hi. Could I speak to you about this?

</comment></comment></comment></comment></comment></comment><comment><USER7> I'd also recommend introducing mutation testing in addition to fuzz testing.

There is some overlap between the two techniques, but they approach the problem from completely different directions. Fuzz testing randomly generates inputs and uses that to find bugs where the input is improperly handled. Mutation testing randomly changes the code to make sure the tests themselves cover all the code that is written.

A good approach is to use mutation testing to make sure the existing code is fully covered by the tests. Then use fuzz testing to identify new failing test cases that need to be written. Once the implementation handles the new test cases, mutation test _that_ code to make sure there aren't any untested code paths.

I used this same approach on an Relational Algebra + SQL generator lib I wrote a while ago and the result was something that was very stable -- the only bugs were due to flaws in my own understanding of the specification, not bugs in the implementation.

<comment><USER8> I'd be interested to read a more detailed write up of the process.

</comment></comment><comment><USER9> It's amusing that one of the bugs they found and fixed was a buffer reuse bug -- similar to what caused heartbleed -- will help in my 'memory safe languages are not magic bullets' rebuttals.

<comment><USER10> So is your rebuttal that since there are some reuse bugs, reading out of bounds is ok?

<comment><USER11> How does one go from "memory safe languages are not magic bullets" to "reading out of bounds is ok"? That's not a type safe argument.

<comment><USER12> I think the point is just that "memory safety is a magic bullet" is a straw man version of the actual argument, "memory safety improves security significantly over not having it".

<comment><USER13> I've seem people believe that memory leaks can't happen in programs written in garbage-collected programs. So, yeah, the belief that garbage collection and/or bounds checking is a magic bullet really needs to be addressed.

<comment><USER8> They are damn good bullets. Just not silver bullets.

Restricting mutability would help somewhat. (Another bullet.)

</comment></comment></comment></comment></comment></comment><comment><USER14> Never listen to anyone who tells you that parsers are easy.

Parsers that work on simple input are easy. Parsers that get all the edge cases and diabolical input right are stupidly difficult.

<comment><USER15> > Parsers that work on simple input are easy. Parsers that get all the edge > cases and diabolical input right are stupidly difficult.

Not to mention parsers which work on a vague and totally unspecified grammar - like "real world" HTTP and HTML parsers, which have to account for misbehaving clients and servers or malformed web pages (is this what you meant by 'diabolical input'?).

<comment><USER14> > is this what you meant by 'diabolical input'

Not exactly what I meant, but that's a good point too!

By diabolical input, I mean things specifically designed to stress the parser, like ("{" * 100000) in JSON.

</comment></comment></comment><comment><USER16> For dnslib [1] I use a much simpler fuzzer as part of the test suite [2] - this is nothing like as sophisticated as afl-fuzz or go-fuzz in terms of understanding and exercising code paths (just takes a DNS record and randomly mutates it - though still found a number of bugs).

Does anyone know if there is anything similar to afl-fuzz/go-fuzz for python?

[1] [https://bitbucket.org/paulc/dnslib/](https://bitbucket.org/paulc/dnslib/) [2] [https://bitbucket.org/paulc/dnslib/src/22cff0cd3e13098c00107...](https://bitbucket.org/paulc/dnslib/src/22cff0cd3e13098c001076cbb5cdcfa0a08d9c3f/fuzz.py?at=default)

<comment><USER17> [https://bitbucket.org/jwilk/python-afl](https://bitbucket.org/jwilk/python- afl)

</comment></comment><comment><USER18> There really aren't many freely available DNS servers that have seen serious production usage - I'm really excited to see RRDNS open sourced as previously hinted at, does anyone know if there is a timeline for this?

</comment><comment><USER19> A Prometheus contributor also fuzzed our query language parser using go-fuzz and amongst other things discovered a really interesting Unicode-related parsing bug:

[https://twitter.com/PrometheusIO/status/626187068356624384](https://twitter.com/PrometheusIO/status/626187068356624384)

</comment><comment><USER20> Is there anything available to fuzz parsers written in JavaScript? (I found tunz/afl-fuzz-js and some others but they seem to be for fuzzing parsers _of_ JavaScript.)</comment>


Show HN: Sssaving – Are you gaining or losing money each month? - <AUTHOR> https://www.sssaving.com/?ref=hn

<comment><USER2> What is it that gets people to give details about their bank accounts to just about everybody that asks politely enough? Am I paranoid or is it really this easy to get people to give up their financials that the drop of a hat?

<comment><AUTHOR> I understand your concerns. But let me clarify that this is a secure service. All sensitive information is stored encrypted, all traffic runs entirely over encrypted SSL and all goes through Plaid Technologies, one of the most prominent service provider of banking data. If you would like some more info, you should check: [https://plaid.com/security/](https://plaid.com/security/)

<comment><USER3> ....yeah.

SSL libraries never have bugs.

Its a great idea _if_ it could be done without giving you any of my bank credentials beyond what is on a check and basically public knowledge.

[https://plaid.com/docs/#add-user](https://plaid.com/docs/#add-user)

That right there is why I won't use it regardless. No offense to you or Plaid's security. Just the idea I'm going to hand over the same credentials that let me transfer money out of my institution isn't an acceptable solution.

<comment><USER4> Zach here from Plaid (a bit late in responding). I understand the hesitations around privacy here; however, there's a difference between sharing credentials and account/routing number. SSSaving is using a read-only data feed that is authenticated by username and password. The app has no access to your account/routing data and cannot debit your account.

Your account and routing number are all that's needed to move money in or out of your account. SSSavings does not get these, nor should any application you don't want to debit you. Unfortunately, these numbers cannot be changed without shutting down the account (whereas credentials can be changed quickly).

<comment><USER5> Account numbers are usually hidden when logging in but are almost always available by downloading a statement or looking for any recently posted check images.

Same with routing numbers, though finding the routing number of a Bank of America account opened in CA, for instance, is just one google search away.

That said, I'm stoked about checking out Plaid sometime soon especially after reading the Yodlee docs (yikes!)

</comment></comment></comment></comment></comment><comment><USER6> > You needed to be a spreadsheet junkie to be able to get some good insights.

> So we built a service that automatically analyzes your bank accounts

So, what kind of insights does SSSavings provide? What is it going to tell me? How is this more useful than looking over everything manually?

I also have most of my budget in a custom ODS spreadsheet. I'd love to be able to pull real-time data about current balances, number and type of transactions, etc. from some sort of API. That would be BOMB.

<comment><AUTHOR> Well, the service is intended for people who don't do it manually. People who are lazy about their finance.

And the goal is for them to get automatically an email every week or month with basic information about:

— How much did they spent or win last month? — How much savings do they have in all their bank accounts? — How did their finances progressed in the last months? — How much do they normally spend each month? — For how long could they live with their current savings?

About having an API. You should check: plaid.com. That's the API service I am using on sssaving.com to get all data.

</comment></comment><comment><USER7> I'm impressed that it does 2-factor authentication. Mint has been dragging its feet on that for years.

Too bad there's no Vanguard integration. Can you add an input for monthly autodeposits?

<comment><AUTHOR> Yes, we might explore the option to add autodeposits. Moreover the idea is to run autonomous.

</comment></comment><comment><USER8> Trust is lacking. I like the idea, but aborted the getting started process once I realized the app needs access to my bank.

<comment><USER9> I agree and did the same thing. I think it would also help if there was a sample "update e-mail" so users can get a feel for what value the site adds (e.g. vs Mint's e-mails). Otherwise, I'm hesitant to link my accounts without knowing what I'll get out of it.

<comment><AUTHOR> That makes sense. We will add that. Thanks for the feedback.

<comment><AUTHOR> We added tha sample: [https://www.sssaving.com/sample](https://www.sssaving.com/sample)

</comment></comment></comment></comment><comment><USER10> I like this idea and I was able to successfully sign up and link my bank account.

My only suggestion would be to give me a better idea of what to expect when I receive my first email. Right now all I know is that I'm going to get an email in X days and that email will tell me something about how well or poorly I'm doing.

I like the site design too. Nice job.

<comment><AUTHOR> Thanks for the feedback. The idea is to provide more information as the service grows.

</comment></comment><comment><USER11> Tempted. But I just got Mint recently and I really like it. What does this do better than Mint?

<comment><USER12> I second this. Mint gives me a clear perspective into all of my accounts. I don't really need the monthly reminder to check my bank accounts. I do it almost weekly.

<comment><USER13> When you check you accounts what are you looking for? Just balances? Or whether transactions have hit? Suspicious activity?

<comment><USER12> All of the above. Look over transactions, check balance, check trends. Honestly I do it as just something to do at times.

</comment></comment></comment></comment><comment><USER14> I might add more info about supported banks before users start to expend effort on signing up. As soon as I saw that my bank wasn't supported, I lost interest.

<comment><AUTHOR> Sorry about that. Can I ask you which is your bank?

</comment></comment><comment><USER15> I don't want my bank accounts analized.

Sorry had to say it. There is a typo.

<comment><AUTHOR> Typo fixed. Thanks.

</comment></comment><comment><USER16> I was a mint user for quite some time until I switched over to personal capital several months ago, was interested in trying this.

However once I signed up and went to add one of my bank accounts I noticed it was listed among the 10 on banks in the select dialog, but greyed out, showing "institution not supported" on hover. CapitalOne 360, Fidelity, and charlesschwab all appear this way for me. Does this mean they'll be available in the future?

Hope that helps with any troubleshooting.

</comment><comment><USER17> Intriguing font choice and design! I like it. Unfortunately I'm hesitant on giving my bank credentials.

Big banks should step up and offer APIs via OAuth or the likes

<comment><AUTHOR> I agree. But probably banks will never get into that business. Meanwhile some companies, like the one I am using for this service, are helping the banks to get this functionality. You should check them: [http://www.plaid.com](http://www.plaid.com).

</comment></comment><comment><USER18> Is support limited to the 7 banks on that screen? Couldn't find an "Other" option.

<comment><AUTHOR> Yes, sorry about this. Currently it just works with the 7 main banks in the United States.

</comment></comment><comment><USER19> US only?

<comment><AUTHOR> Yes, sorry about that.</comment></comment>


Testing HTTPS Logic in Web Apps Locally with Nanobox - <AUTHOR> https://content.nanobox.io/testing-https-locally-with-nanobox/ <comment><USER2> Please don't hesitate to let me know if you have any feedback on this! (Author of article; don't work for Nanobox, though.)</comment>


Show HN: 18 months ago I quit my job and made a meme maker - <AUTHOR> https://metameme.app/ <comment><AUTHOR> Programmer here, i built this app in my spare time, then went full time on it in Sept 2018 after quitting my full time job. Been doing a little contracting on the side but this app has grown quite nicely and now has more than a thousand subscribers. Doing mid 4 figure monthly revenue, which is more than I ever expected from an app of mine.

<comment><USER2> Thanks for sharing your figures. What is your most lucrative revenue source for you? Subscriptions or one offs?

And Google store just shows 5000+ installs, I thought you'd have a lot more. Is the Android version new perhaps?

<comment><AUTHOR> The Android version is developed by a friend of mine who has a full time job, and is really lacking all the features, marketing, etc of the iPhone version. Quite unfortunate.

Most lucrative revenue is subscriptions by far. I ran one time purchases for a long time. First it was a single one time fee to unlock each feature (there were three.) Then a single one time fee to unlock all features. Then subscriptions. I hate to say but I wish I went to subs a lot sooner.

</comment></comment></comment><comment><USER3> Haha, nice one! BTW, nice blog too. Loved this post: [https://metameme.app/15-funny-gym-memes/](https://metameme.app/15-funny-gym- memes/)

</comment><comment><USER4> How are the unit economics of using Apple Search ads for you? I've run some paid ads with projects but am wondering how you're approaching it in terms of ROI. I also have found that Apple Search Ads are better for apps because they also boost search rank in the App Store.

<comment><AUTHOR> While some people might scoff at this, I'll be honest and say I don't know the exact unit economics off the top of my head, but my cost per install hovers around 30-50 cents. The way I do it is whatever money I made the previous month, I set my ad budget to a little more than half of that amount. I always tell myself I'm going to boost it more, but I don't login to the ads manager too frequently to be honest.

<comment><USER4> That CPI seems low for the App Store, which is awesome for you. Did you do any Apple Search optimization or just took the suggested keywords in Basic Search Ads? I ask because I'm running some basic Search Ads with my own voice app right now.

</comment></comment></comment><comment><USER5> Out of curiosity, at the risk of sounding off-topic and irrelevant... but are you an Emacs user?

<comment><AUTHOR> No, i mostly use VS Code, or Xcode.</comment></comment>


The AI Misinformation Epidemic - <AUTHOR> http://approximatelycorrect.com/2017/03/28/the-ai-misinformation-epidemic/#more-231 <comment><USER2> Some strident Singularitarians have joined the comment thread.</comment>


WTO swats down India's massive solar initiative - <AUTHOR> http://grist.org/climate-energy/wto-swats-down-indias-massive-solar-initiative/ <comment><USER2> Offtopic: currently, anyone can make their own solar panels for around $450 for 2kW of PV cells (Amazon, eBay, AliBaba) plus another $50 for busbars and diodes; bonus points for using recycled glass and other free "junk."

If folks require cheap solar at scale, PV cell and panel mfgrs need much more automation... which sucks for most workers but is "good" for the planet, because PV cells are easy commodities (ask Elon Musk or anyone in that market)... durable PV panels are labor-intensive (as I can attest). Maybe an union shop can deliver quality for value panels at huge volume and have employees with a decent standard of living.

</comment><comment><USER3> This is such a hit piece of a article.

If India wants to install solar cells they can, if they want to compete globally for solar cell production they can. Contrary to the false claims in the article nothing is stopping them.

On top of that requiring a percentage to be produced locally is just asking for trouble in a country with as much corruption is India.

> Said Cossar-Gilbert: "Trade policies are preventing a sustainable future."

Oh please. It's not solar power at any cost, that will just cause more problems than it solves.

<comment><AUTHOR> > On top of that requiring a percentage to be produced locally is just asking > for trouble in a country with as much corruption is India.

Not sure that I understand the reasoning behind this. Are you saying that if a country has corruption then it shouldn't manufacture? If that's the case, you have excluded 90% of the countries including China from manufacturing.

<comment><USER3> No I am not saying that.

I am saying _requiring it_ is the problem. Requiring is another word for saying "at any cost", or in other words "with lots of bribes".</comment></comment></comment>