Ask HN: Using a side project at my day job - <AUTHOR> I've been working on a side project for a while. My current main job is looking to add this ability into their application, and it seems obvious that we could use some the work that I've already done. It's not anything that's specifically tied to what our company does, it's more of a general-purpose tool that anyone with an app could benefit from.
I'm not interested in charging anyone for anything, but I would like to retain the IP rights to my software. My employment contract is relatively lenient in this regard - anything done on my own time, with my own equipment, unrelated to our business I still have rights to.
Some questions I have:
1. What do I need to watch out for from an IP perspective? If using this means that I spend some work time working on it, would getting something in writing acknowledging that this is my IP be enough?
2. Has anyone done anything like this in the past? How was it receieved by your employer? I don't want to give the impression that I'm planning on quitting and pursuing this anytime soon, and being labeled as a flight risk, but on the other hand I don't want to throw away the rights to something I've spent a lot of time on. <comment><USER2> One thing to consider: if the capabilities of your side project would be useful to $dayjob, a sufficiently aggressive company lawyer would be likely to argue that that makes it "related to our business". (And most of the lawyers I've met would be at least that aggressive, if the company was their client.) If you wind up using that code on the job, the case becomes even more clear cut.

So, if you want to keep releasing this code on the side, having something from them explicitly disclaiming (i.e., renouncing) exclusive rights would be very good to have. You've gotten some suggestions about things to look at. There are also open-source projects whose contributor paperwork includes standard employer disclaimers. As to which of these (if any) best fits your situation, you'd probably be best consulting a lawyer of your own.

</comment><comment><USER3> License it to them. Have a legal contract drawn up that says they are licensing it from you for a fee. The fee can be nominal, $1 even. But that is the most formal way to protect your IP.

<comment><USER3> I'm going to expand a bit on this. I am not a lawyer, but I see 2 possible scenarios:

1) You want to retain sole the rights to the IP and possibly license it for money to others some day. In this event, you should license it to your employer for a fee. However, this presents quite a tricky proposition of how you allocate time to spend on the tool vs time on your other work. If there is work to be done on the tool, you'd have to completely separate that from normal working hours, which may be impractical once the company is relying on said tool. The best way I can see to do that would be switching from employee to some kind of contractor role, where you could allocate time spent separately. As you can see this gets complicated.

2) You just don't want to give up the ownership completely to your company, but have no interest in ever charging for the tool. In that case, I'd suggest releasing it under an open source license prior to using it in your work. There are a variety of open source licenses available, and I feel like the pros and cons of each are well-worn territory already which can be examined with a simple Google search.

It seems like open source might be the way to go from your description above. In any case, you definitely need some kind of legal license in place, be it paid or open source.

<comment> alok-g Great points.

I would add to #1 that since the tool is clearly related to the line of business of the company, even working on it outside the work hours may not be enough to keep it isolated.

So if some agreement is worked out with the employer on use of this tool, the same agreement may further include provisions for keeping it isolated.

For #2. Not sure how this would help, but it is also possible to release the source of the tool while still retaining full rights to it (i.e., release without a FOSS license). This can prevent the third parties from using the tool, and "may" provide some protection from the employer as evidence of what was developed before using it for work.

Note: IANAL.

<comment><USER3> #2 is mostly in case you want to make sure the tool is released to the general public and not just absorbed by the employer into their own IP.

</comment></comment></comment></comment><comment><USER4> You have very specific legal questions. You absolutely 100% need to talk to a lawyer.

</comment><comment><USER5> I'd worry that your side project is indeed free of work IP. If you have been working on something that ties directly into your work project, but on your own time, your workplace has a pretty strong claim to at least make you not distribute it.

But if it is indeed completely stand alone, and you would be comfortable publishing it open source regardless, do that, then convince the team to use your project. This happened at a previous job with no problems.

<comment><AUTHOR> It doesn't really tie directly into it, besides insofar as the company I work for builds a web application and this thing would be directly useable by a web application. Think of something like analytics services - they're useful to a wide variety of companies but not to any one specifically unless they're involved in analytics.

Put it this way - my company would be a great client for this tool, but would never want to sell it themselves.

</comment></comment><comment><USER6> At the end of the day, it's all about the trust between you and your employer. Unless you know the people well, I won't be mixing code this way - with or without a written permission. Just too much hassle. Even if your direct manager approves it, the legal team etc. might have a different view.

<comment><AUTHOR> Related question: If I choose not to license / sell / whatever this code to my company, they're going to build it anyway. We're a small team and I'm in a fairly senior position - it would be impossible for me not to be involved in those discussions. Does that create legal issues if I continue to hold onto my side project (and potentially develop it further?)

<comment> alok-g It would most likely create legal issues [1]. Start by reading the employment agreement contract you signed with them when joining. More likely than not, and depending on where you are located, you already have an issue now since your side project is related to the employers line of business.

If the side project is of significant value to you, I would recommend pulling out your employment agreement, reading it yourself [2], and consulting a lawyer.

I think a win-win situation here would be for you to license the project to the company, where the license terms specifically limits their rights to what they need to solve their current problem at hand, and allows you to continue working on it. This can also save them time and effort.

[1] Note: IANAL, though am generally very aware of IP issues. Have read two books on the subject.

[2] These agreements are notable for using very long sentences, but are always very well crafted to be precise. You should not have an issue interpreting them right if you are a good software developer. They also use some specific terms though that you may need to learn. Wikipedia does a good job of explaining all of these. A term "related to the business" is amongst ones that are relatively undefined, i.e., it remains unclear from the agreements what is related and what is not [3].

[3] The term may be used in a much broader way than you think. Everything computers and electronics may be considered related as it all falls under the same trademark code. Yet, related may be used to imply only that that competes with the business.

</comment></comment></comment><comment><USER7> You need to take your employment contract to a lawyer and get legal advice before doing anything. Depending on the contract, you may or may not have rights to what you developed in your side project, especially if you are a salaried employee. In my case, my employer owns all IP I develop while in their employment. Happily, my employer has no commercial interest in the code I develop to automate my data analysis and management permits me to distribute it under an Open Source license. They understand the value both they and I receive from a collaborative community of analysts. By the way, each year I must sign a statement that I have no conflicts of interest and if I suspect I might have one, I must disclose it to management.

</comment><comment><USER8> I was in a similar situation at a previous company - they knew of my side project, and wanted to use some of the concepts of it in the work I was doing. As karterk mentioned, it really came down to trust - I explained that I would not be signing over rights to my software and that I would continue selling it on the side, without the modifications being made to it for them. They were fine with this and it never became an issue. I don't think a simple handshake would be sufficient in most cases, but I was trusting enough of my manager (I was there for over 4 years) and went that route. If you are truly concerned about the IP, then you should get both your manager, but also legal to approve it in writing.

<comment> alok-g Note that some employment contracts already say that if you use any of your own IP at work, then the employer gets full rights to that IP including ability to use it in any way they want, sell it, or sub-license it.

Trust does go a long way though.

<comment><USER9> Is that valid without assigning copyright or otherwise formally licensing it?

<comment> alok-g You are formally licensing the employer of this when you sign the employment contract (assuming it includes such a provision; each one I have seen does).

</comment></comment></comment></comment><comment><USER10> IANAL so take the following advice with a pinch of salt: get a lawyer.

Another alternative: if your company can work with GPL or other viral licenses, you could GPL your software and let them work off that. Then you still retain full rights to the code.

</comment><comment><USER11>
      I'm not a lawyer and the advice listed below is just my common sense, I would advise you to consult with a lawyer regarding your question.

In your case I would just license it - you can either put it under any of the open source license out there or use a commercial license generator - [http://www.binpress.com/license/generator](http://www.binpress.com/license/generator) (I'm one of the founder at Binpress).

By the way you mention having an employment that is relatively lenient which is good.

As an employer I would still advise you to either include an appendix or send an email to your legal department listing your side projects, open source projects you contribute to and/or anything else you think should be included there. It is probably being over cautious on your side but remember than employment is like a marriage; everything is fine and nice when they get you to sign on that contract but you never know what will happen when you leave your job to seek your next opportunity.

Additionally if you are in the US, you probably signed on some sort of PIIA (ROPRIETARY INFORMATION AND INVENTIONS AGREEMENT) which will assign anything that you've developed or invented back to the company, some will make it lax and some will be stricter, I would guess most employers will be stricter in order to avoid any potential IP problem in the future.

However if you are in California, know your rights. There's the California Labor Code Section 2870 which states the following:

      (a) Any provision in an employment agreement which provides that an
      employee shall assign, or offer to assign, any of his or her rights
      in an invention to his or her employer shall not apply to an invention
      that the employee developed entirely on his
      or her own time without using the employer's equipment, supplies, facilities,
      or trade secret information except for those inventions that either:
      (1) Relate at the time of conception or reduction to practice of the
      invention to the employer's business, or actual or demonstrably anticipated
      research or development of the employer; or
      (2) Result from any work performed by the employee for his
      employer.
      (b) To the extent a provision in an employment agreement purports to require
      an employee to assign an invention otherwise excluded from being required to be
      assigned under subdivision

<comment> alok-g On the California Labor Code:

Note that this specifically mentions "inventions". Inventions are clearly distinct from copyrights, to which software is subject to. It is unclear if the labor code was intending to mean all forms of IP including copyrights.

Also, in this case now, the side project is clearly related to the employers line of business.

Note: IANAL

</comment></comment><comment><USER12> Prior to starting work, there should have been a document signed whereby you listed all pre-existing IP. Mingling this code with the employer's app does indeed make it theirs, but not _exclusively_ theirs.

If possible avoid any cut-n-paste mingling, incorporate your IP as a separate re-write, and maintain a github history of your own IP for future reference to prove ownership.

</comment><comment><USER13> Make sure to double-check your contract with the company to make sure there is no clause stating that any work created (in the office or not) belongs to them; if so, double-check to ensure your project was listed as prior art.

If the contract has something along these lines, you're in a tough position.

</comment><comment><USER14> The simple solution can be the permissive license. You may give him the code on the bases of MIT or Apache license. another good option can be give him code and have signed the work done in office as WTFPL license(you will have all rights on the code).

</comment><comment><USER15> Perhaps an option, if it's not something you're planning on selling, would be to open-source it, and then let the employer use it like any other user.</comment>


Ask HN: Opting out of arbitration agreement? - <AUTHOR> I'm starting work at a new company, and they're making me sign the usual arbitration agreement. However, they're also offering a fairly simple opt-out if I e-mail them within 30 days of signing. What are the pros and cons of sticking with the default arbitration agreement versus opting out? Is there any good reason not to opt out?
Thank you! <comment><USER2> Having worked for an industry-specific arb forum in the past, I'll take a stab @ this.

Assuming that the contract specifies the forum, you'd want to look into how 'fair' the past decisions for matters relating to whatever it is you'll be doing have been.

You'll also want to get a sense of what the forum's arbitrator pool is like, i.e. who are the arbs and how qualified are they to actually sit on a panel.

Additionally, look for language that specifies where hearings must take place, and/or forum rules/policies on specifying hearing locations (or _actually how the process works in general_ ). The last italicized bit is quite important because contracts can say just about anything, but fora often have rules that can void contract language that is deemed unfair, unethical, etc.

Other considerations: up-front and long run costs, turnaround times, ability to receive explained decision and to _appeal decisions_ , ability to forum to _enforce decisions /judgements_... Probably forgetting some things, but those are the major ones. Oh, yeah, _precedent_. At my forum, past panel decisions had _zero_ bearing on other cases. I mean that literally.

Possible reason not to opt out: you might fair worse trying to go to court, based on costs, turnaround time, precedent, or some other factor. Also, your company may view you as a troublemaker if the typical behavior is simply to sign the agreement

Honestly, based on what I learned, whether in the court system or the arb system, people lacking access to significant resources are at a disadvantage in either.

W/o knowing the specifics, it's difficult to provide a definitive answer. Finally, _IANAL_.</comment>


Kookaburra Copyright Causes Trouble 'Down Under' - <AUTHOR> http://www.npr.org/templates/story/story.php?storyId=120984958 <comment><USER2> This is one reason I'm afraid of improvements in automatic music transcription systems. Once it becomes easy to search any voice of any piece of music ever recorded, lawyers will be trawling music search engines day and night looking for common subsequences.

This is also another example of why I think laches _should_ be a defense against copyright infringement. If it takes you _three decades_ to realise your copyright is being violated by someone in the same country as you ...

</comment><comment><USER3> I was watching that show when that question aired. At the time I thought it was a joke, because the flute sample didn't sound like that much like the original kookaburra song. But if the information came from the songwriters themselves, well...

Personally I hope this fails. And I regret now having that song stuck in my head.</comment>


Does Google crawl dynamic content? - <AUTHOR> http://www.centrical.com/test/google-json-ld-and-javascript-crawling-and-indexing-test.html <comment><USER3> We built our site, [https://appapp.io](https://appapp.io) (a search engine for the App Store) as a one page app. It serves no dynamic content in html from the server, so we were unsure to what extent google would spider/index it.

As far as we can tell, it makes no difference from if it was generated server side: [https://www.google.com/search?q=site%3Aappapp.io](https://www.google.com/search?q=site%3Aappapp.io)

So yes, Google definitely does index dynamic content. I would love to know if it ranks it equivalently.

Also, Bing does not: [http://www.bing.com/search?q=site%3aappapp.io](http://www.bing.com/search?q=site%3aappapp.io)

(apologies for the minor self-promotion)

<comment><USER4> If you do a search with 'site:site:[https://appapp.io'](https://appapp.io') and go to the last page of results, you'll see Google indexed officially approximately 120 results. For example, this request does not return any content: 'site:[https://appapp.io](https://appapp.io) "Release notes for version 6.6.0"'. It should return the page /<lang>/app/we-heart-it/539124565.

<comment><USER3> Yes, we have more work to do to get Google to index all our content. It's still a bit of a mystery to us (Google webmaster tools tells us about 2500 pages are in their index)

Our goal is not to have every app indexed (as that will by definition be non- original content), but to have our app category pages indexed, e.g. [https://appapp.io/gb/genre=Games;has_iap=false;price=Paid/se...](https://appapp.io/gb/genre=Games;has_iap=false;price=Paid/search)

<comment><USER4> Moreover, note that in the SERP, you can find some pages with the good title but with the wrong description, cf. the 2 first results for example here [http://imgur.com/cOV85UJ](http://imgur.com/cOV85UJ).

BTW, if you don't want every app to be indexed, I would recommend you the tag <meta name="bots" content="noindex"> in the app pages. Alternatively, you could define the canonical URL as the URL of the original content.

<comment><USER5> We have a ReactJs application served from S3 with dynamic content on [https://teletext.io](https://teletext.io). All content (eg texts) is loaded asynchronously from a CloudFront distribution and I can confirm this is indexed properly by Google (see [https://www.google.com/search?q=site%3Ateletext.io](https://www.google.com/search?q=site%3Ateletext.io)).

The only thing we cannot seem to get right are the meta title and meta description. If you set that asynchronously based on the React page you are rendering, Google only seems to pick it up in about 10% of the pages. So the SERPS doesn't look as pretty as you would like. I didn't found a solution for that yet. :-(

</comment></comment></comment></comment></comment><comment><USER6> I suppose this explains all the times I've seen a promising search result with the words I was searching for prominently highlighted, then visited the page to find what I was looking for is no longer there. Sometimes the cached, text- only version has it, and sometimes not. Alternatively, I'll see search results with _none_ of the words I was searching for, yet perhaps they did sometime in the past. Rather annoying.

<comment><USER7> This is a problem with a lot of paginated sites, such as Tumblr, various forums, and comment pages. Anything that's ordered from newest to oldest won't have a constant correspondence between URL and content.

<comment><USER8> That's why pagination (when newest to oldest) should be designed as something like "after_id=x". Sure, there is some implementation complexity, but your users will love you if they can actually find the content they searched for.

<comment><USER9> What about the frontpage which is usually page 1 of the pagination?

Google should give the actual article URL a higher score and pagination pages a lower score. So that in their search results I see the content first and the "dupe content" on pagination pages not at all (or way down). (at least for common blog software)

<comment><USER10> What about a redirect from your home page to whatever page 1 is at the moment?

<comment><USER9> Imagine a blog. On frontpage example.com/ (= example.com/?page=1) it shows the newest 10 articles, on example.com/?page=2 it shows the next 10 articles, and so on. Every article has the actual URL in its headline hyperlink (e.g. example.com/?article=123)

Now imagine that Google links to example.com/?page=2 as it found the search phrase also there (at a given time only Google knows). So when the user clicks on the search result link that leads to example.com/?page=2 NOW should the blog software know what Google or the user wants?

One thing that comes to my mind is to use the referrer and if it's a common search engine parse the s=SEARCHTERM string and use an internal article search to find the best matching article.

<comment><USER11> I think you missed the part earlier in this thread about using ?after=id rather than ?page=n. See Reddit for an example.

<comment><USER12> You can see it here on HN as well. Click "new" at the top of this page, then "More", and see the "next=" parameter in the URL.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> I have modified wikipedia pages, then googled it, to see search result "instantly" updated.

Also, sneaky web sites often give different results to the googlebot user agent than to a non-google firefox user agent

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

[https://addons.mozilla.org/en- GB/firefox/search/?q=user+agen...](https://addons.mozilla.org/en- GB/firefox/search/?q=user+agent&cat=all)

<comment><USER14> Google deliberately crawls in a non-Google looking way to try and detect "masking".

<comment><USER15> Yeah, that expert sex change site used to bug the hell out of me for that reason... scroll forever and a day after loading.

</comment></comment></comment><comment><USER16> I'd _really_ love it if you repeated the same tests for Bing, just to get coverage. (Yahoo/Baidu would be the other big two.) Historically, Bing hasn't used fully functional headless browsers to crawl, which has limited its ability to index dynamic content like this.

Google has "only" 70% market share, so it seems irresponsible to make engineering decisions without testing the others. Google+Bing+Yahoo+Baidu get you to 98%.

<comment><USER17> I just did this page. The page is indexed. When I look for the search term "Update this was posted to Google on Friday the 17th of July, 2015. Monday, the 20th" the page is shown.

Trying to find any of the other search strings in the article for the different loading variants does not return any results. So no variant of javascript injected content is working on Bing currently.

</comment></comment><comment><USER18> The post author writes:

> So, very soon, the days of pre-rendering PhantomJs snapshots and serving > shadow content to spiders will be over.

To be clear: webmasters of sites with dynamic content should not celebrate yet. There are still influential spiders other than Google's that do not parse JavaScript (for example, Facebook[1] and Twitter[2]).

[1] [https://developers.facebook.com/docs/sharing/webmasters/craw...](https://developers.facebook.com/docs/sharing/webmasters/crawler)

[2] Can't find an official statement on this, but [https://twittercommunity.com/search?q=javascript%20crawl](https://twittercommunity.com/search?q=javascript%20crawl)

<comment><USER19> And, of course, there are still all the other reasons why you shouldn't be serving static text via javascript; I wish the article had included such a caveat.

</comment></comment><comment><USER20> I'm curious how google strongly penalizes SPAs for being slow to load.

The content may be indexed, but if your visitors are on a mobile network, that initial visit (or a visit with stale cache) is going to be crappy. It's great that they can read in they content (though bing cannot), but if it's buried on page two, does it even matter?

As someone who is a proponent of web perf, these kind of articles make me worried that server side rendering will be ignored because "SEO works now for Javascript", even if it's slow and google is only 70% desktop & 80% mobile search.

<comment><USER21> SPAs should not be slow. If they are, they haven't been designed properly, I think.

</comment></comment><comment><USER22> My theory is that the Google crawler is a modified, headless version of Chrome. These results seem consistent with that hypothesis.

<comment><USER23> Are they also using people's browsing history to 'find' content? E.g. from their safety filter?

Though I don't think it's happening, I've thought it'd be very clever if users became the search spider for Google, telling them when content had gone stale and/or doing the spidering on Google's part. Just by using Google's browser.

<comment><USER24> I can confirm that is not the case. I've had a canary page for that purpose set up for years and it never fired. If it ever does you can expect a blog post. I have another one that is set up to fire if google ever uses gmailed links to crawl, that one too never fired.

Now, that's only one bit of data but if you want to be sure you can set up a trigger page of your own.

<comment><USER25> Have you tried accessing the site through Google DNS? 188.8.131.52 and 220.127.116.11.

<comment><USER26> DNS only sees the host name, so it can't be used to see what URLs are being accessed.

<comment><USER24> I think that was the test case that he intended. So set up a domain that is otherwise unknown and then use google's DNS and see if the domain is hit by the search engine.

</comment></comment></comment></comment></comment></comment><comment><USER27> Probably relevant: [http://googlewebmastercentral.blogspot.com/2014/05/understan...](http://googlewebmastercentral.blogspot.com/2014/05/understanding- web-pages-better.html)

</comment><comment><USER28> Crawling JS content, yes. But does it _rank_ for that content in the same way it would if the whole document was generated on the server?

</comment><comment><USER29> I wonder if you could use this to find information about the google crawler. Inject system and browser info into the page. Then you can find out what kind of browser engine it runs, with which settings etc.. If you wanted, you could use this information to do undetectable masking (I don't think it would work in the long run, though)

It would be also interesting to see what timeouts it still allows. I wouldn't be surprized if the modified browser "virtualizes" time and runs window.setTimeout immediately. Maybe you could make a busy loop and find out what the real timeouts are. It seems there got to be some, otherwise this would open a way to DOS the crawler (not that I'd do that).

</comment><comment><USER30> Google may be indexing dynamic content now, but the question I'm curious about is how it affects crawl efficiency. I can't imagine indexing JS content is as efficient as indexing content returned from the original HTTP request.

<comment><USER31> They just wait around for the page to change a bit and once it's done (after some timeout) then it takes what's currently on the DOM as being the actual page. This is then sent back, analysed and parsed as the content. Similar to how phantomjs does page rendering with timeout..

</comment></comment><comment><USER32> Related comment from an HNer who worked on this at Google (from 2006 to 2010): [https://news.ycombinator.com/item?id=9531344](https://news.ycombinator.com/item?id=9531344)

</comment><comment><USER4> Regarding SPA-based websites, as long as your site has only a few pages, these results are relevant. I would like to see the same kind of test on a site with 1000+ pages for example. I already did this kind of test in the past and it was failing miserably (i.e. only a dozen of pages were correctly indexed).

</comment><comment><USER33> The next test could be: Does google crawl hidden text (display:none, very small, very transparent colored text)? My guess is they do crawl it because it can have legitimate uses, but if there is to much of them on a page then they give it a lower ranking.

<comment><USER34> Hidden text can be problematic as it's often a form of cloaking as can hiding text off the page using css positioning.

</comment></comment><comment><USER35> This article is from May.

[http://searchengineland.com/tested-googlebot-crawls- javascri...](http://searchengineland.com/tested-googlebot-crawls-javascript- heres-learned-220157)

</comment><comment><USER36> I am sure that google "discovers" javascript/ajax content. They also mention this on their guides several times.

But are there any experiments/results related to SEO impact/crawl frequency etc?

</comment><comment><USER9> Offtopic: "Google search results on tablet"

Recently Google changed their search result page for tablets. First it looked fine, and useful.

But many times the first result page is now completely full of advertisements, only the second page now shows usual links to websites like Github, Wikipedia, Youtube, etc. of a common search term. Very annoying! And the Youtube link is broken on iPad (it tries to link to a non HTTP address). I am just unlucky to be part of an AB-testing?

An news article about the changes: [http://searchengineland.com/google- launches-new-search-resul...](http://searchengineland.com/google-launches-new- search-results-interface-for-tablets-235340)

</comment><comment><USER37> centrical.com is blocked where i work by mcafee web gateway due to GTI reputation identifing it as malicious and high risk

<comment><USER21> Ha! Interesting. It is my personal website since 2001 or so, and has never been compromised. It is a flat file website in S3 with Cloudflare on top - <USER2> much to hack. I think mcAfee is a tiny bit too strict ;-)

</comment></comment><comment><USER38> iirc this is why they originally started development on what is now Chrome.

</comment><comment><USER39> TL;DR: Yes, most of the time.</comment>


Why Events Are A Bad Idea (for High-concurrency Servers) - <AUTHOR> http://www.usenix.org/events/hotos03/tech/vonbehren.html <comment><USER2> This has been posted to HN a bunch of times over the years:

[http://www.hnsearch.com/search#request/submissions&q=Eve...](http://www.hnsearch.com/search#request/submissions&q=Events+bad+idea&start=0)

What I said about it last time:

The problem with the article is that it's superficial. At its core, it's premised on the idea that threads are inherently easier than events, because they produce straight-line code and automatically handle tracking the state needed across a transaction. If that's true, then the article says threads are just as good as events once we solve all the problems that make threads dangerous or slow.

But it's not a given that threads are easy. In particular, as anyone who has spent time doing high-performance threaded code will tell you, there's the effort you have to put in to make sure your threaded code is correct, and then the 2x more time you have to put in to make sure that it's efficient; in particular, you have to do synchronization without effectively serializing all your threads. Which is a huge pain.

I think this is gradually becoming a moot point, as modern languages --- all of which have some kind of anonymous function and some approximation of closures --- allow us to write evented code that looks and feels like straight-line code. jQ callbacks in Javascript are the most vivid illustration of this idea (I suppose the node.js people are carrying that even further; I haven't played with it).

<comment><USER3> I've written both kinds of code and I like threads better. With threads there's an abundant literature about the problems you'll run into. With events I often feel like I'm on my own.

Back in 2002 I did an evaluation of all the open source event-based web servers that were out there for Linux and found that all of them had issues with data corruption. You just couldn't expect to download a 100MB file and get it right every time. Things are better now, but process and thread-based web servers got mature by 1996 if not sooner.

<comment><USER4> Link, please?

</comment></comment></comment><comment><USER5> They acknowledge that shared mutable state is (very) problematic in conjunction with preemptive multitasking, so they're actually arguing for cooperatively-multitasked threads as opposed to events. In both systems, shared-mutable state is being used between the concurrency code units.

I think they're neglecting a third option: Shared-immutable state, with very little, explicit, shared-mutable state. This is the model used by Haskell threads, and Erlang processes. Like Events/Cooperative-threads, it does away with the horrible semantics of shared-by-default, and gives the parallelism benefits lost when switching to cooperative multitasking.

But I think there are still 2 crucial differences between event-based systems and cooperative threads that I did not see in the paper:

* Events make it clear where context-switch/reentrancy points are. When I call a library function, then I generally have a very good idea if it could "call me back" (have I given it callbacks to call me back?) and if not -- I know it is safe to call it and do not have to reason about my internal state in every given call. Even with cooperative threads, a "yield" point may be lurking in any library you're calling. This effectively means that any library call can potentially do anything, including switch to "higher-level" code that may re-enter your own code. This makes re-entrancy considerations far more complicated. It is solvable, though, if you make sure that yield-points are "tagged" with some token that must be passed as an argument. Then, a function signature and call pattern tells you whether or not it can yield to anywhere.

* Implementing user-level threads may be very cheap, compared with standard posix threads. But it is still many times more expensive than using explicit data allocations as in event-based programs. Even if using "split stacks", a user-level thread is still going to pay with around a 4Kbyte stack. 1 million threads thus take 4GB of memory before they even do anything. This means that you _still_ have to be wary of creating threads as freely as you would register callbacks -- and requires mixing in event-based programming, or manual event loops, into your threads. This mixture is worse than uniformity of any method.

<comment><USER6> You make some good points, but why would every lightweight thread require about 4k of memory? I know for a fact that the Haskell runtime doesn't need that much; it allocates a starting stack (default size 1k, but can be lower) and grows it if necessary. I imagine the techniques here would also apply to other languages.

<comment><USER7> 4k is the paging granularity of x86, so if you want to be able to use hardware-assisted guard pages to know when to grow the stack, you have to allocate in multiples of 4k.

</comment></comment></comment><comment><USER8> This paper is one part of the long-running threads vs. events debate, and it probably isn't that helpful to read it in isolation. Erlang, JRockit, and Go implemented the kind of scalable green threads proposed in this paper, although I don't think they were inspired by it. Most programmers who care about high concurrency (other than Erlangers) decided to just bite the bullet and accept the difficulty of writing event-driven code rather than try to make threads scale. The fact that people prefer to struggle along with events doesn't negate their difficulty, though.

</comment><comment><USER9> That paper is also 8 years old (or at least the timestamp on that page is way off) -- which was before node even existed.

If it was so easy to implement their proposed high performance thread system (disclaimer: haven't read the paper) -- Why don't we see it in production 8 years later?

I'd argue that we don't see it in production, because it lacks some of the advantages they propose in the abstract.

<comment><USER10> In this case, as someone who actually has built one of these efficient threading models (and studied, while in academia, these results), I believe it is only because the larger engineering community has incorrectly associated "threads" with "slow", and refuses to even though them anymore, especially if it involves modifying the compiler to make the stack ripping efficient (I did not modify the compiler, and instead required the developer to occasionally manually rip the stack). The result "events == threads" is introductory CS material at this point, and was largely established in 1978: this paper only claims to "refine" that result.

Frankly, the event/thread duality result is actually pretty trivial to grok if you bother to look at it. Hell: with only minimal overhead (due to having started with events and having to adapt up), you can use a continuation passing transform on JavaScript and have a threaded node.js (and some people even do this): you'll have roughly the same concurrency and roughly the same memory usage (and the "roughly", again, only comes from the fact that we are building the threads on top of events with an adapter that will be forced to slightly inefficiently store and access its state).

<comment><USER11> I've run some benchmarks while developing Common Node, which is my stab at implementing the synchronous CommonJS proposals on top of Node using node- fibers. Take a look at <https://github.com/olegp/common-node> and scroll to the bottom to see response time distribution graphs.

The node-fibers version has roughly 70% of the throughput of node. Memory consumption was on the order of 28MB for node and 32MB for node-fibers. This is more or less unoptimized code with room for improvement.

</comment></comment></comment><comment><USER12> Also good readings: type in google search:

      threads +posix +signals

      threads +stack +usage

      thread +safe +function

</comment><comment><USER13> Circa 2003. fast forward to 2011... Youtube, Facebook et al seem to have refuted this. Tornado/epoll + nginx ftw

<comment><USER14> How much of that is inertia is anybody's guess.

<comment><USER15> I dont think it is inertia, it is just that making stacks small enough is a harder issue than just making a fast evented system. More to change. Will take longer or involve more radical change, like shifting to Erlang say...

<comment><USER6> Fundamentally, this is a compiler and runtime issue. If they guys behind some mainstream programming language wanted to, they could go and add lightweight threads that people could just use. It would take a lot of engineering effort, and there would be some compatibility edge cases, but it could definitely be done.

(In the meantime, I'm happily using eventlet in Python, and some people swear by gevent. These have their shortcomings, but they're worth the trouble, easily.)

<comment><USER16> Ruby 1.9 has lightweight threads built-in (fibers) but you have to write and manage the scheduler on your own. That also means you can't use any existing IO libraries that already know how to yield back to the scheduler, but it's only a matter of time before that's a solved problem.

<comment><USER6> Nice! The big caveat here is that they're cooperatively-scheduled, and they've left the I/O stuff up to libraries. In other words, they look exactly like Python's greenlets, which are very useful when you add the appropriate libraries on top.

Edit: the other big issue here is that blocking operations (e.g. anything in libmysql) are not automatically deferred to a thread pool -- that has to be done manually. Ruby's fibers and Python's greenlets are magical, but not magical enough that you don't occasionally get tackled by fantasy creatures materializing from the aether. If that makes sense.

</comment></comment></comment></comment></comment></comment><comment><USER17> Interesting.. just when I was about to pick up on Node.js too.

<comment><USER18> I wouldn't use this to NOT give Node a try. It's a great system for teaching yourself event-driven execution. The scale at which this paper is talking about won't be hit by most people playing with Node (from how I've read the paper so far).

Being familiar with thread _and_ events makes you a better programmer, so go forth and learn! As I see it, scalable concurrency is far from a solved problem, so it's good to see people pushing both sides of the equation.

<comment><USER6> Plus, node is fun, and has a very nice community. I've been pushing threads in this discussion, but don't let that discourage anybody from playing with node.

</comment></comment></comment><comment><USER19> Anyone from the Node community care to tackle this?

<comment><USER16> What makes you think that the node community has a well-thought-out rebuttal to a mostly academic debate about whether ideal threads could perform as well as events?

<comment><USER6> The great thing about this paper is that it goes beyond academic debates over ideal threads, and actually writes code and runs benchmarks. The debate here is practical.

<comment><USER20> I realize that for most people, "academic" is synonymous with "moot," but all systems papers have experimental results.

</comment></comment></comment></comment><comment><USER21> This paper has been proven correct, if you replace the word "threads" with "processes" and note that erlang has provided a solution with the compiler support they advocate. Outside of erlang, (and some equivalently obscure environments) little attempt has been made to make concurrent processes manageable, and this is why you see the predominance of event-based systems. We're in a multi-core era and and you can't really say you're "concurrent" when your event model only runs on a single core.

While I think, if your choices are the typical thread support and its problems and an event based system then events are the way to go... I believe the great majority of developers have decided to use node or twisted, et. al, either because they'd never heard of erlang, never understood its strength, or weren't willing to deal with the initially alien looking syntax.

I think this is a mistake, but rather than fight it, I'm working on a solution that allows coffeescript to run within a distributed system based on erlang. I've had to provide some work arounds and conventions for the coffeescript developer to follow a sequential programming style, but have the ability for coffeescript to really run concurrently on multiple CPUs or multiple machines, with a common shared state.

(I described some of this here: <http://news.ycombinator.com/item?id=2906290> and went into the architecture a bit more here: <http://news.ycombinator.com/item?id=2848647> )

Granted, it is easy for me to say it should be done a different way, and until I publish code it is all talk. I'm very aware of this... but I would like to suggest that there really is a difference in erlang, and that events are a compromise that don't inherently actually allow for concurrency. Concurrency is a better solution, isn't that hard to do now (if you write straight up erlang) and I'm working on making it even easier (if you're willing to be constrained a little, bit, but I think the popularity of node.js shows people are willing.)

If it seems I'm shilling for my project, I am a little bit, but I'm also wanting to get it out there so that if I'm making a mistake maybe someone can identify it... or be inspired to build a better way on top of it.

If you want updates, I have a twitter account @nirvanacore that only talks about this project.

<comment><USER22> If a function call is asynchronous, you can say you are "concurrent", because whatever that function is doing -- I/O, or something else -- is being done concurrently while you are handling another event. Usually Node.js spawns threads to do whatever it has to do, or the operating system does it asynchronously (e.g. using DMA and interrupts).

<comment><USER21> Right, and that is an improvement. But you don't have a set of V8 virtual machines all running your javascript in parallel. This is what I'm doing (though may not use V8).</comment></comment></comment>


Ask HN: What internal tools have you built to make your job easier? - <AUTHOR> <comment><AUTHOR> More specifically, I'm looking for what you've built to make your job more efficient as it relates to engineering job functions.</comment>


Indie no-go: only one in ten gets fully funded on Kickstarter's biggest rival - <AUTHOR> http://www.theverge.com/2013/8/7/4594824/less-than-10-percent-of-projects-on-indiegogo-get-fully-funded <comment><USER2> I'd rather see stats on projects that have delivered, not just ones that have achieved their funding goal.

I think Kickstarter also is more constrained on what kinds of things you can raise money for, which may help its percentage of projects that reach their goal metric.</comment>


Rethinking the way content is distributed and experienced - <AUTHOR> https://beta.emlen.io/en/register/ <comment><AUTHOR> We are building world's first content engagement software to leverage existing content to maximize engagement. We just launched our free beta and looking for early adopters to test and shape the product with us! Thanks for your support!</comment>


No Free Lunch Theorems for Optimization [pdf] - <AUTHOR> https://ti.arc.nasa.gov/m/profile/dhw/papers/78.pdf <comment><AUTHOR> For any algorithm, any elevated performance over one class of problems is offset by poor performance over another class.</comment>


Ask HN: Where can a side-project startup find a side-project designer? - <AUTHOR>

I'm the cofounder of myscribr.com.  We're a web app that aggregates your lifestream into a journal-style view, gives you tools to explore and augment that content, and allows you to preserve it in the form of a real, physical, color book.  </pitch>
We're 4-people strong, all working on this as a side project.  We're going for a slow ramp-up and we're self-funding as long as possible.  We have developer, bizdev, support and finance talent, and our codebase is 95% complete.  What we're lacking is a designer.  In our opinion, this is a product that needs to be design-heavy, something beautiful and touchable.
We'd like to find someone who can act as part of the team, someone who's passionate about our product, involved in our brainstorming sessions and has the occasional burger + beer with us.  Someone who would be personally interested in the project, and who'd be open to a combination of equity and cash, or other unconventional compensation arrangements.  We're in the valley.
So I turn to you, HN, in my time of need.  Is there anywhere a founder can look for a designer like this?  Somewhere that freelancers post their interests / availability?  We're aware of dribbble and will probably post a freelance gig there, but we're looking for more of a "designer personals" site. <comment><USER2> Heya, there are many available if you google hard enough.

From the search phrase "best personal portfolio sites", you can find a couple.

here's one that you might find useful: [http://www.tripwiremagazine.com/2011/05/showcase- of-30-singl...](http://www.tripwiremagazine.com/2011/05/showcase-of-30-single- page-designed-personal-portfolio-websites.html)

</comment><comment><USER3> forrst</comment>


Ask HN: Do you make physical prototypes? Of What? - <AUTHOR> I am very visual and prototypes help me design things. For largeish projects I have been having trouble finding material; most recently to model a small building and roof redesign.
I was thinking about how great it would be to have home Depot materials at 1/8 scale but have only found pretty expensive balsa wood at local craft stores.
Is there a Lego type product that is meant to be representative of real world materials? <comment><AUTHOR> I'm curious if anyone would actually be interested in 1/8 scale:

\- plywood

\- 2x4s and 1x3s

\- currogated metal

\- PVC Piping

\- roofing material

\- garage door & track

I am thinking about biting the bullet and buying materials and milling my own as well as experimenting pouring concrete in small amounts and maybe making a drywall type material. Idk if other people would even want this, or similar stuff; but it's like $100 for some lousy balsa wood stuff and for that money; I'd rather cut and mill wood myself w/ calipers for proper scale

Edit: I also mean a bulk set to actually make something large. The bulk orders I have seen of full sized material go to a job site are for example; 2x4s arriving as a pallet of 104 pieces of lumber (stack of like 13 8 beams high) which could lay a lot of 16" on center walls. Each piece at AC Moore/hobby lobby is at best about 0.50 so just that is like 50 bucks!

</comment><comment><USER2> I know a good number of designers that will print out 2D elevations of their design (at scale), then spray-tack* it to 1/8" or 1/4" foam core.

Use an exacto knife to cut the shapes out of the foamcore, then assemble with glue, small tacks, paper hinges, etc.

* [http://www.homedepot.com/p/3M-Super-77-16-75-fl-oz-Multi-Pur...](http://www.homedepot.com/p/3M-Super-77-16-75-fl-oz-Multi-Purpose-Spray-Adhesive-77-24/100067550)

<comment><AUTHOR> You don't have a pic or link to a design by any chance? Curious what they built and how it came out

</comment></comment><comment><USER3> You can use foamcore ,or isolation foam from Home Depot</comment>


Leapfrogging to Solar: Emerging Markets Outspend Rich Countries - <AUTHOR> http://www.bloomberg.com/news/articles/2015-11-23/leapfrogging-to-solar-emerging-markets-outspend-rich-countries-for-the-first-time <comment><USER2> The headline only works at all because they're pretending that China is an emerging market. That's incorrect, China has already emerged, and is already suffering from all the typical post boom hangovers including rapidly slowing growth and vast amounts of debt. It'd be like pretending that Japan was still an emerging market in 1992.

Remove China from the emerging market list, and the premise of the story unravels entirely.

Further, the projections in the story include China in the emerging market category to 2040. Comeon, that's a joke.

<comment><USER3> You're about 10 years ahead of yourself on your China prediction. Also, it's critical to remember metrics like GDP per capita. China still has a very long way to go.

This is the classic "disruption" model. The incumbent nations have the $$'s to invest in infrastructure but in turn become dependent on that way of thinking. Emerging nations don't have the same legacy so can adopt very modern solutions. Solutions which also tend to be much cheaper and scale better. The developing world is further ahead in areas like solar, mobile phone (network), mobile payments etc. It's exciting to see them actually get some advantage from their otherwise disadvantageous position.

<comment><USER4> The real issue is US's electricity usage is declining. Replacing a working coal power plant with a wind farm is very different from building a wind farm instead of a coal power plant. That said, power plants only last so long, and existing capacity the trend is very different than this article suggests.

      US:
      2010 Coal Power Prod: 1,994,000 GWh
      2012 Coal Power Prod: 1,643,000 GWh

      China:
      2010 Coal Power Prod:  3,273,000 GWh
      2012 Coal Power Prod:  3,785,000 GWh

PS: 2013 China produced 45.5% of the worlds coal, the US produced just 11.6%. [http://www.sourcewatch.org/index.php?title=Existing_U.S._Coa...](http://www.sourcewatch.org/index.php?title=Existing_U.S._Coal_Plants)</comment></comment></comment>


Ask HN: How are you doing performance appraisal at your startup? - <AUTHOR> Are you with a job at a startup or currently running a startup.
Do you do any form of employee performance appraisal? (either once a year or multiple times a year).<p>What format (top-down, 360 Peer Review) and tools do you use to facilitate that? Has it been effective? <comment><USER2> I've seen a bunch of performance assessment systems, most of them being pretty bad.

The worst ones tend to boil down to: "As your manager, here is my subjective view of your performance over the last N months." which essentially rewards high visibility and self promotion rather than actual performance.

Second worst is: "As your manager, here is my subjective view of your performance plus 360 input from peers" which rewards your ability to join cliques and alliances.

Sadly in almost all jobs I've ever had, it was one of the above.

Sometimes the company would throw in a "self assessment," purpose unknown to me, which is likely not even read.

The ideal (in my view) performance assessment would be: "Here are the numeric metrics we agreed N months ago to measure your performance by. The data (collected neutrally and transparently throughout those months) show you met metric 1, 2, and 4, exceeded 3 and 5. Based on the transparent and mutually agreed upon formula, your raise and bonus this year are X and Y". Measurable and objective: Clear goal posts for you to aim for throughout the year. I've never seen this anywhere. I understand some sales roles get something like this.

VCs and shareholders don't come to shareholder meetings and say things like "CEO, I subjectively feel in my heart you are not doing a good job!" No, they look at the company's measurable, numeric results and judge by that. Why should it be any different with employees?

Obviously the hard part is coming up with those metrics so you're rewarding the right behavior and performance, but I'd much rather see companies put effort into coming up with those metrics rather than crafting the world's best self-assessment question or wasting everyone's time on 360s.

<comment><USER3> Like CEO pay, purely metrics driven performance reviews lead to gaming the metrics. Maybe you wouldn't do it, but how would you feel if your peers were getting better raises and bonuses than you because they file and close more do-nothing bugs, or ship more features because they wrote fewer tests.

<comment><USER2> This would be a problem with the choice of metrics, and I've already conceded that coming up with the right "un-gameable" metrics is a tough problem indeed.

<comment><USER4> At Pixar they concluded that all metrics would be gamed eventually. So, they responded by changing up the metrics on a regular basis.

</comment></comment></comment></comment><comment><USER5> I've been on both ends of the performance appraisal spectrum; from ultra formal annual appraisals to nada.

Each and every time, the biggest predictor of a successful outcome was how well I was prepared. If i could articulate in a concrete, detailed way how much value I'd added.

It's not easy to do this. It takes time and effort to prepare. I used to search old emails, IMs, run user metrics, check old Microsoft Project charts, ask coworkers, reread all appraisals. [Shameless plug incoming] That's one of the reasons i built JobRudder [1] to help me keep track of all that stuff.

One other constant among the decades worth of performance appraisals. They're very messy. Feelings, first impressions, unconscious biases, stereotypes, cliques, politics etc etc etc. It's not particularly data driven or even objective. Be prepared.

[1] [https://jobrudder.com](https://jobrudder.com)

<comment><USER6> I started keeping a daily list of my accomplishments. I read about this technique somewhere. I haven't seen how it has worked out yet but I think it will help a lot with preparation.

Interesting site. I signed up and will give it a try. Very well done landing page.

<comment><USER5> Thank you for giving JobRudder a try (and for the kind words).

I'm (obviously) a big believer in achievement/accomplishment tracking. I think it's the best thing anyone can do for their career, outside of the work itself (and doing good work is not enough these days).

I had a streak of bad performance appraisals/interviews going before I started tracking my achievements. It's made a world of difference.

Even if you end up not using JobRudder long term, I'm excited for you. I hope it's as helpful for you as it was for me and others.

PS. If there's anything I can do to make JobRudder work better for you. Please don't hesitate to reach out (email in profile).

</comment></comment></comment><comment><USER7> TL;DR: If you decide you need a process, keep it very simple. If your company is small, trust that you likely already have a pretty good idea of how any one person is contributing. The faster and larger you grow the less likely this is. Either way, it can often help to make these thoughts and conversations accessible somewhere, especially when you want to recognize someone for their achievements.

In a 20 person company we focus only on 360 Feedback as needed throughout the year and set quarterly Objectives, while having regular 1:1 meetings.

Through our own personal experience, we've learned to keep it as simple as possible. Using only three questions during 360's (What did you do well? What could you improve on? and Is there anything else you would like to mention?) - we show the author of the feedback, but many also keep the author anonymous. It's personal preference, there are pros and cons to both.

Objectives make it easier to align with others and observe your team's progress over time. Regularly updating these saves a lot of energy when providing feedback to others if/when they're asked to provide more formal feedback. If feedback is actionable it's more likely to be useful and the smaller the company the more informal you should make the process. Small teams often already know what needs to improve intuitively, but it can help to record this somewhere so you remain aware of what you're working towards.

Most important though is recognizing and celebrating the successes of your team. It feels good to be appreciated for the work you do and encourages you to do more.

Disclaimer: I'm a developer for Small Improvements, a feedback tool. We work specifically with startups and medium-size businesses.

<comment><USER8> I don't think 360 feedback is ever really anonymous. I worked for a place that did that, and it was always obvious from the writing style who wrote each comment, since you typically also get emails from the same people.

<comment><USER9> A possible fix for that is to hire a writing service that rewrites all feedback.

</comment></comment></comment><comment><USER10> On timing, I like our approach: initially 9 months after joining, then yearly after. A year after joining for your first salary review is too long.

Our strongest tool for performance "reviews" are 1:1s. Weekly/bi-weekly with your direct manager, typically monthly (or more) with your business unit's engineering lead, and about bi-monthly with the head of engineering, though newer engineers have 1:1s with me more often at first [0].

Some of this is covered in our manager's faq [1], specifically about performance reviews, score cards, ranking, etc, and why we think it's utlimately harmful, as it benefits the insitution more than the unique employee.

[0] This is tough to do as engineering groups scale, but critically important.

[1] [https://blog.esharesinc.com/a-managers- faq-35858a229f84#.tqb...](https://blog.esharesinc.com/a-managers- faq-35858a229f84#.tqbgbn7ag)

<comment><USER11> +1 to "A year after joining for your first salary review is too long."

We have tick-tock reviews at the end of the year then mid year and people who start in the fall aren't eligible for the end of year. If we didn't have the mid year, I can't imagine the restlessness.

<comment><USER12> I joined my company on June 1st. At the end of the year, I was told that I performed well and would be getting the typical 2.8% raise, but divided in two because I had only been there six months.

</comment></comment></comment><comment><USER13> * 360 Peer Reviews in winter and summer

* 1-1 with manager and peer twice a month

* 15five once a week as a mental health check for the employee

It's not a perfect system, and it's ever evolving, but it the best I've experienced so far.

The 360 system is great for highlighting projects and contributions a top-down review might miss, and also gives the coworkers a chance to call out areas for improvement. Employees can game the system by exchanging positive reviews, but that is easy to spot. An honest review with proper critical feedback is valuable to an employee's progression.

The 1-1's work for general sanity checks, but require preparation from the manager to have an impact. Too many managers show up with without preparing and expect the employee to do all the talking. I use 1-1's to discuss career progression, establish SMART goals, and ensure that my report is happy with the work they're doing.

15five is still a relatively new process for us, but the perceived anonymity of a form allows employee's to more direct with their feedback. A report is a great indicator for what to discuss in a 1-1.

<comment><AUTHOR> > The 360 system is great for highlighting projects and contributions a top- > down review might miss, and also gives the coworkers a chance to call out > areas for improvement. Employees can game the system by exchanging positive > reviews, but that is easy to spot. An honest review with proper critical > feedback is valuable to an employee's progression

The 360 review as i understand can be quite a complex flow ie. reviewer nomination, anonymity, ensure everybody answers the review, releasing the questions. Are you using a software for this or straight up google forms or paper?

With these 3 different flows, do you tend to get push backs from teams? How did you overcome that?

</comment></comment><comment><USER14> We just did a round, very simple: both of the founders sit down with each and every employee individually and ask a couple of questions:

\- what was the thing you did last year you have been most proud of \- what is the thing you did last year you have been the least proud off \- what did we do as a company that you think was great \- what did we do as a company that you think was bad

We got great feedback and engagement on these sessions.

Now obviously this wont work if you have a decently sized head count but in our case it worked just fine over the course of a week or so.

<comment><USER15> I think what you're doing is a great exercise, culturally, but I wouldn't use it to assess anyone's performance objectively.

What happens if you have a great employee who finds it difficult to articulate on these points? Would you have to hear through the grapevine that they were doing great things? What if you have someone who is a poor employee but can talk the talk?

<comment><USER16> That's a good point - what you'd be evaluating there is how good people are at _talking_ about their performance rather than their actual performance.

A lot of excellent developers I've known (in fact I might say particularly the excellent ones) were rather modest and often rather hard on themselves.

</comment></comment></comment><comment><USER17> Formal appraisals are a waste of resources in a startup.

Focus on addressing issues as they come up as a team or let them go.

<comment><USER18> I work for a company that doesn't do performance reviews. Thus, there is little incentive to perform well as nobody will even notice. Everyone just works hard enough to keep their jobs.

<comment><USER15> Maybe the lack of performance reviews and lack of motivation are probably causatively linked to a wider, underlying issue?

<comment><USER18> I think it's management that thinks an attaboy can pay a mortgage.

</comment></comment></comment></comment><comment><USER19> The study below has an adequate analysis and conclusion about politics in performance appraisals:

[https://www.tamu.edu/faculty/payne/PA/Longenecker%20et%20al....](https://www.tamu.edu/faculty/payne/PA/Longenecker%20et%20al.%201987.pdf)

Politics being "My appraisal is more to achieve an outcome in the self- interest of the person reviewing me, than it is to accurately assess my performance."

<comment><USER20> Thank you! This study was very informative!

It would seem that the Performance Review is less a measurement to be taken accurately, and more a Tool to be used to subtly move people.

The study you cited provides a useful enumeration of why. And if you read carefully you can begin to see that the perception of the tool is likely to be incorrect. (that of a measurement to be taken accurately).

To quote the end of the study: " The goal then is not to arbitrarily and ruthlessly try to eliminate politics but, instead, to effectively manage the role politics plays in employee appraisal."

</comment></comment><comment><USER21> We use our own tool internally ([https://www.intuo.io/](https://www.intuo.io/)). It works pretty well I'd say. What we do is basically:

* Continuously give each other 360 feedback

* Each manager does a monthly one-on-one with all of their teammembers

* We have quarterly objectives, on a personal, team and company level (using OKRs)

* Apart from that, we do continuous pulse surveys, measuring the happiness and engagement of our people

</comment><comment><USER22> I really like the 5-word review described here:

[https://www.fastcompany.com/3019036/dialed/simple-direct- hon...](https://www.fastcompany.com/3019036/dialed/simple-direct-honest- personal-and-blunt-how-the-5-word-performance-review-works-wonde)

Having been on both sides of the review process, this form of review is not as time-sucking for the manager and can elicit good conversation.</comment>


Compiling Dark to SQL - <AUTHOR> https://medium.com/darklang/compiling-dark-to-sql-bb8918d1acdd <comment><USER2> Author here: let me know if you've any questions!

<comment><USER3> must feel bad not getting a response on this thread! crickets</comment></comment>


Code Golf - Perl, PHP, Python, Ruby - <AUTHOR> http://codegolf.com/ <comment><USER2> Also see Project Euler:

<http://projecteuler.net/>

<comment><USER3> Some of these problems are straight from Project Euler, but there's much more competition I feel with these. It's not just getting it done.

</comment></comment><comment><USER4> It goes by keystrokes? APL would win!

<http://en.wikipedia.org/wiki/APL_>(programming_language)

</comment><comment><USER5> From the article: Based on the original perl golf, Code Golf allows you to show off your code-fu by trying to solve coding problems using the least number of keystrokes.

I'll be a pedant and note that Code Golf is based on Perl Golf, which is based on the obfuscated Perl contests, which are based on the IOCCC. The major differences are implementation language, specified problem and a hard limit on submission size.

</comment><comment><USER6> What, no Java?

<comment><USER5> The constraint to be optimised is code size, not readability or speed. A strongly-typed language would be at a disadvantage if casting between datatypes was required.

<comment><USER7> In Java, at least, you'll probably have exceeded the total character count of the 10th-place entry by the time you've opened stdin and parsed the first line of input.

Even the single-character type sigils in Perl tend to make solutions longer than the Ruby or Python equivalents, much less full StudlyCaps signatures.

</comment></comment></comment><comment><USER8> I don't get it, shortest how? When converted to machinelanguage?

Here is my code in Erlang, using factorial(which is not recommended by the site): nCk(N, K) -> fac(N) / (fac(K) * fac(N - K)).

what´s wrong with that?

<comment><USER4> APL would win, hands down, especially if you allowed specialized APL machines with all of the symbols available from the keyboard.

APL was the original language for entire systems implemented in two lines of code that you had no hope of understanding after you wrote it.

</comment></comment><comment><USER9> I hope they include JavaScript...</comment>


Some thoughts on incumbents - <AUTHOR> http://cdixon.org/2011/04/04/some-thoughts-on-incumbents/ <comment><USER2> Interesting perspective on twitter as an incumbent in this paragraph:

       Incumbents that don't yet have a successful business model (e.g. Twitter)
       might *think* they have a strategy, but expect it to change as they figure
       out their business model.  An incumbent without a successful business
       model is like a drunk person firing an Uzi around the room.

</comment><comment><USER3> Cdixon doesn't go quite this far, but I think he's suggestively wagging his eyebrows at the notion that "If you're using their API, they're an incumbent"

This notion changes things dramatically for smallish young startups and personal projects.</comment>


My own thoughts on Scala (scala-debate) - <AUTHOR> https://groups.google.com/forum/#!msg/scala-debate/153H3Ya4Nxk/lSOgWy6pCTsJ

<comment><USER2> I think Martin's post has a very interesting point about the "Scala tribe" and its inherently rootless nature. I don't really think he is entirely right about it, but he is onto something with the notion that Scala has something for everyone to hate. It helps explain how such a low-quality post could make it to the FP.</comment>


Study questions widely-used ADHD drugs - <AUTHOR> http://news.smh.com.au/breaking-news-national/study-questions-widelyused-adhd-drugs-20100218-oe4f.html

<comment><USER2> "This effect was present even after researchers accounted for the fact that ADHD children with the worst symptoms were most likely to be prescribed the drugs."

How do they account for this? "Professor Ian Hickie from the Brain and Mind Research Institute says it's possible that those on medication didn't perform any better because their condition was more serious to begin with."

<http://www.abc.net.au/pm/content/2010/s2822748.htm>

</comment><comment><USER3> I've known adults who take stimulants for ADHD. None of them are 'high performers', in fact, most of them are disabled or otherwise unable to hold a job.

I'm sure that counterexamples exist, but I've only seem them turn a person who is completely hosed to a person who is completed hosed and has high blood pressure.</comment>


Critical Race Theory - <AUTHOR> https://en.wikipedia.org/wiki/Critical_race_theory <comment><USER2> Does not need to be this complicated. It is pretty simple. There is one human race and in that there is human caste system (HCS). Its (extremely fickle) purpose is to divide/group peoples and create a power stack. Those at the top control those at the bottom. Heck, its also just tribalism.</comment>


I'm young and I'm already burnt out on tech work. Could I get some life advice? - <AUTHOR> https://medium.com/@axselgit/im-young-and-i-m-already-burnt-out-on-tech-work-could-i-get-some-life-advice-530a1568197e <comment><USER2> If that's your definition of 'burnt out', join the club of just about everyone with a job ever. Although most won't admit it. Working for other people does suck and yes it is inherently unfair. Despite all of the progress we've made, there are still some fundamental aspects of the average human condition that are not so great.

At least it's better than it used to be. Used to be quite common for people to work for zero dollars or very close to zero. In other words outright slavery.

But yes, it absolutely is a goal for most businesses to just use their employees to make as much money as possible, while the owners take in as much cash as possible for as little work as possible. That it the reality and it is quite unfair.

It is confusing as a young person when everyone accepts this situation and won't complain about it. But you will learn, complaining about a common problem will often just make you a target. Even if it's a common problem that other people could use help with. Get with the program -- pretend you are a happy little worker and shut up.

The solution is to get yourself into the ownership class, either by actually building a business or some social manipulation (easiest is to convince someone who likes you to give you money to invest in your idea). Then it is your job to pay as little as possible and get the most out of your employees so that your friends can get the most out of their investment.

<comment><USER3> A young person who has heavily invested in an activity throughout their youth discovering that the activity is no longer pleasant and enjoyable when performed at some higher level is actually and exactly what burnout looks like.

Burnout is realizing that "this thing that once energized me, now makes me unhappy." It's not the same as the apathy of just going to a job to pay for a data plan. Or the same as a bad job which was bad the first day.

</comment></comment><comment><USER4> if you can afford it take a step back. Take some time off.

Startups and those fancy big corporations imo are full of bullshit and are built around bullshit. I am in Berlin where having drinks and a football table are perks to be advertised but when asked to pay your bus ticket they are like 'ohh that actually needs effort from our accounting side'.

Take some time off, do research on the company you want to work for, find something that they do and you like. Be it eCommerce/AI/ML/Data Analysis or whatever, do research find a company that is not too small not too big and go check them out.

Learn not to give a fuck. Honestly, I used to be so stressed with all the bullshit that go inside the company, and if you see too much BS flying around, go to the next company. Programmers/Developers are essential (Disclaimer I dont know how is the employment in your area) you will get another job.

I could go on, but to sum it up, dont give a fuck, do your job well, speak your opinion. It might get you fired but then you know you shouldnt actually work for them.

</comment><comment><USER5> @anonymouskid, I'm 31 and have been working since I was 16. From 16 to 25 years old I did various construction jobs (tiling, roofing, etc) and always worked for peanuts - many times I wouldn't get paid on time and sometimes they wouldn't pay me at all. Including the US, I have lived in three countries and had to learn the language and adapt at each country from scratch.

As a self-taught programmer in the Bay Area (no college degree) I made around 145K at my last job - my dream job! Yet I quit and went on a trip for a few months to refuel. Now that I'm back in the Bay Area, I'm trying to start from scratch once more and it's scary. However, I have faith in myself that I-will- figure-it-out! I don't know how yet, but I know I will. After all, that was the whole point of the refueling, to put myself in uncomfortable situations and see if I can figure it out!

Sometimes you might feel burnt out, scared, angry, or confused. It's totally normal - all these feelings are as important as happiness for a diverse life. I have found that sometimes all I need is some refueling. Other times I've needed to make drastic changes in my life - for example starting a new career, moving to a different country, or committing to a hobby that has nothing to do with programming or computers.

Life is all about trying different things. The other option is that it happens on its own. When I complained to a manager once about a task, she reminded me that "It's not rainbows everyday"... and indeed it's not.

</comment><comment><USER6> Can someone just say it? Programming as a hobby is great but as an assembly line low level programmer, it just SUX!! I think this kid just found that out. Good for him. Maybe he'll find what he loves.

</comment><comment><USER7> >the more I have a realization that a lot of the corporate speak they're telling us at these companies is for the company's interest.

Are you joking? Who's interest would it be in? Do you think the world revolves around you?

>in reality they're just using me for money

Not to sound pedantic, but... why do you think they pay you?

>But I'm just really good at this

Citation needed. You said you get fired every 3 months. If they don't hire you back, you're not "really good".

<comment><USER7> > I've been working and adulting for years

Also, lol, you are in your teens (17-19) and are tired of "adulting". Let me laugh a little more

<comment><USER8> It is no point to laugh. It is much more difficult to be adult if you are not used to it.

</comment></comment></comment><comment><USER8> It seems like a major personality crisis for me. Any crisis makes you feel bad and personality crisis all the more so. But there is a bright side, personality crisis is a chance to grow above your head. I agree with existential psychology on it.

I believe that you can help youself by learning some bits of development and existential psychology. Development psychology describes some common kinds of personality crises, and it helps to understand what going on when dealing with concrete life story. Existential psychology can give advice what to do.

So my advice is don't start making abrupt changes in your life right now. I think that your last failures can make anyone to feel depressed and to lose faith in himself. You can stop trying to find your place in tech, but it not be good to do it just because you feel depressed.

Give youself some time to learn youself, at least half a year. Read some books or talk with psychologist -- some kind of existential psychologist will do, I believe. As for books, I personally greatly like Kegan.[1]

If you see that "kicked in three month" is a pattern, and you don't understand what precisely causes it, I believe that it needs some research. It is hard to do such a research without external help, it can take years of struggling to understand is cause external or internal, if it is some of your psychological traits causes it or something else. You need someone with whom you will be able to discuss this topic honestly. Again psychologist is one of the options. The others is some close relative, it is better if she thoughtful person and about thirty or older.

There are two opposite possibilities for you, either take sharp turns on your life path, or try to adapt. I assure you that in either way this is not the last time when you face such a choice in your life. So right now the most important goal is to learn how to deal with it. How to make conscious decision that will lead you to success and happy life. It is impossible to master this, but nevertheless it becomes easier with practice.

[1] [https://vividness.live/2015/10/12/developing-ethical- social-...](https://vividness.live/2015/10/12/developing-ethical-social-and- cognitive-competence/)

</comment><comment><USER9> Welcome to life. Be glad you get to work full-time in tech in your teens instead of retail, service or hospitality like many others.

Your quality of life will likely improve when you're old enough to enjoy the autonomy and independence having an income gives you which you can't fully realize as a minor (assuming you're 16-17 or your blog post makes 0 sense to me).

Make friends the same age who have a similar lifestyle to you (working, not fully absorbed in school).

</comment><comment><USER10> That's not burn-out you're describing, it's disillusionment of the engines of business and the bullshit of companies presenting themselves as forces for good when they are anything but.

Welcome to adulthood. You arrived early, so take that opportunity to get a head start.

</comment><comment><USER11> Learn a skill. Find a job doing something you want to learn. With 2 or morevaluable skills, you will have an easier time of life than those who rely on only one.

</comment><comment><USER12> Wait, you get fired after three months of every new job? Why? Do they give you a reason? This is not normal, even when you're a teenager.

<comment><AUTHOR> My internships end and I have to go back to school

</comment></comment><comment><USER13> This thread was a truly depressing read. Someone is fed up with the bullshit and has the courage to speak their mind, and the best you can manage is throwing stones to protect your own miserable bubbles. Here's some constructive advice: Find something you love to do, then give it your best against any odds and ignore the stones that will inevitably be thrown; you will have to do it sooner or later anyway, or die regretting a wasted life. And forgive them, for they know not who they are.

<comment><USER14> One possibility is that everyone in this thread has been that 19 year old at one point or another, and they know where it leads.

Ultimately, there's a reason they pay you to work.

<comment><USER13> Keep telling yourself that; first impressions are vital, you go numb from forcing yourself to conform. I too was 19 years old back in the days, I'm 40 now and I'm more certain than ever that doing my own thing is the only way forward. In-between, I spent a long time playing your game; trying to talk others out of rocking my boat.

<comment><USER14> I would ask you to consider the dangers of trying to fit everyone into your existing narrative and the limiting effect it can have on your mental flexibility.

<comment><USER13> Very good, now go write that on the blackboard until you understand who is who in that sentence.

</comment></comment></comment></comment></comment><comment><USER15> Email me</comment>


http://jsonip.com - Get a visitor's IP with js - <AUTHOR>

I wrote a node.js app today that lets you get a client's IP address as either a json object, or with with a jsonp callback.
json example, http://jsonip.com {'ip':'<client ip>'}
jsonp example: cb({'ip':'<client ip>'});

    <script type="text/javascript">
        cb = function(obj){
            console.log(obj);
        }
    </script>
    <script type="text/javascript" src="http://jsonip.com/cb"></script>
 <comment><USER2> Someone beat you to it: <http://jsonip.appspot.com/>

[http://stackoverflow.com/questions/391979/get-client-ip- usin...](http://stackoverflow.com/questions/391979/get-client-ip-using-just- javascript)

[http://stackoverflow.com/questions/102605/can-i-lookup- the-i...](http://stackoverflow.com/questions/102605/can-i-lookup-the-ip- address-of-a-hostname-from-javascript) (2 years ago)

Quick googling returned this, unless you are Zach?</comment>


Elixir Design Goals - <AUTHOR> http://elixir-lang.org/blog/2013/08/08/elixir-design-goals/

<comment><USER2> I just started playing with Elixir this weekend, and it was a ton of fun. Ruby syntax + macros + Erlang semantics + UTF-8 strings is a great combination. And the _Programming Elixir_ book from Pragmatic Press was a good introduction, too.

But I especially enjoyed Erlang's concurrency model and OTP. In a few hours, I was able to go from basic message passing, to a simple OTP server, to distributed processes communicating between multiple VMs, and finally to a supervised OTP server with automatic restart on crash. Erlang provides an awful lot out of the box, and Elixir makes it quite friendly-looking.

However, it's not a mature environment yet. The tools are pretty good for a young language, but the ecosystem is still small. Nonetheless, there's some cool stuff out there already:

Experimental web framework: [https://github.com/elixir- lang/dynamo](https://github.com/elixir-lang/dynamo) Mnesia distributed DB wrapper: [https://github.com/meh/amnesia](https://github.com/meh/amnesia) Heroku buildpack: [https://github.com/goshakkk/heroku-buildpack- elixir](https://github.com/goshakkk/heroku-buildpack-elixir)

I'll need to build a larger system in Elixir, but the my initial impressions are good.

<comment><USER3> Can I ask you, where did you learn OTP? Did you know it from before, did you follow a specific book/tutorial? I've been interested about OTP, and would appreciate a good starting point.

<comment><USER4> The Learn You Some Erlang tutorial[1] gives a good introduction. There's also Erlang and OTP in Action[2].

[1]: [http://learnyousomeerlang.com/content](http://learnyousomeerlang.com/content)

[2]: [http://www.amzn.com/1933988789](http://www.amzn.com/1933988789)

<comment><USER5> Erlang and OTP in Action goes pretty deep into it.

</comment></comment></comment></comment><comment><USER6> Oh man, I love BEAM VM's design. Just looking at memory allocators, handling iolists, binary blob referencing, schedulers spread over all the CPUs, async IO threads. Just discovering that I found myself nodding my heading often say "aha, that's a really good way to do it".

It is good to see Elixir work on it alongside Erlang. I don't think everyone will jump ship to Elixir. For example I like Erlang's syntax (I might be in the minority) but meta-programming and ease of access to BEAM for newcomers is great.

</comment><comment><USER7> Having been a bit of an 'Erlang is quite good enough' purist, I am becoming increasingly tempted to give Elixir a whirl.

I am a long term hater of Javascript (global state, aargh!) and I have been giving coffeescript a whirl (no global state, yay!).

One of the (unexpected) side effects is that I appreciate the readability of coffeescript vs javascript much more than I expected.

Jose Valim is also giving a talk at a conference I am organising next month ([http://mostlyfunctional.com](http://mostlyfunctional.com)), so I am tilting heavily at the moment...

<comment><USER8> I think you meant ClosureScript. CoffeScript is mostly a syntaxic decoration over JavaScript and doesn't remove mutability.

<comment><USER9> Pretty sure he meant CoffeeScript. It doesn't remove _mutability_ , but it does do away with default-global variables.

<comment><USER10> So does javascript unless you forget `var` _and_ you refuse to `"use strict"` and lint.

<comment><USER11> That's not really 'by default' then, eh?

<comment><USER10> True, it's not the language's default, just the default your environment should have (and the default of any sane IDE).

Which is less work than adding coffeescript to your toolchain.

</comment></comment></comment></comment></comment></comment><comment><USER12> I couldn't be more excited about elixir, personally. All the power of erlang plus metaprogramming. To me elixir is the spiritual heir to Ruby

<comment><USER13> As someone who's just started with Ruby/Rails what are the benefits of switching to Elixir?

<comment><USER14> If you're going to write websites, stay with Rails. I'm a long time Erlang developer and even today there is no good web framework (sure, a few exists, but none of them make it as pleasant to develop websites as Rails).

If you're going to write a server application, even REST and HTTP, Erlang and Elixir is a superb choice (I would argue better than Ruby with Sinatra, for example) because of the concurrency model and the ability to handle protocols and binary data.

There are also a few nice template libraries for Erlang (for example [https://github.com/mojombo/mustache.erl](https://github.com/mojombo/mustache.erl)) so if you just need some templating and don't mind writing some glue yourself it could still be a good option.

<comment><USER15> In terms of frameworks, no, nothing competes with Rails because Rails is simply too big an ecosystem to compete with on even terms for a relatively niche language. Chicago Boss is pretty nice, with a very friendly community, though. It's worth a look.

</comment></comment></comment></comment><comment><USER16> To be honest, I got very interested in Elixir myself. However, as I am trying to learn any Lisp, I am surprised LFE (Lisp for Erlang) or Joxa has not taken off, as the one thing missing from a lot of Lisp and Scheme languages seems to be a thread-based concurrency, specifically for multi-core processors having become ubiquitous.

<comment><USER17> There's always Clojure for that.

<comment><USER16> "Why do Erlang and Elixir have the same 'semantics'? The reason has to do with the underlying machine. The garbage collection behavior, the non-shared concurrency model, the underlying error handling and code loading mechanism are identical. They must be identical: they run on the same VM. This is also why things like Scala and Akka will never be like Erlang. Scala and Akka run on the JVM so under the covers, things like garbage collection and code loading are fundamentally different." [0]

It goes without being said, but the choices the VM make will ultimately impact what is or is not possible for the languages on top of it. I have never taken the time to investigate JRuby or IronPython, but I have imagined this is a reason why few people love the original and VM-ported editions: one must assume Ruby code becomes less Ruby, Python less Pythonic, once moved to different VM architecture.

[0] [http://joearms.github.io/2013/05/31/a-week-with- elixir.html](http://joearms.github.io/2013/05/31/a-week-with-elixir.html)

</comment></comment></comment><comment><USER18> I've spent the past few weeks writing quite a bit of Elixir, and I have to say that I haven't had this much fun with a programming language in a long time.

</comment><comment><USER19> Finished writing my first elixir library a few days ago [https://github.com/rramsden/scribe](https://github.com/rramsden/scribe)

The language source code is incredibly clean and well documented. It's been a joy to work with so far.

<comment><USER16> Seems like some cool, clean code, and I understand without having examined Elixir too much, less than two or three hours of doc scanning. But I guess familiarity with Ruby does make a difference.

Out of curiosity: if you are doing DB migrations, what are you running on Elixir that requires it? You building web apps or just utilities running on top of a DB?

</comment></comment><comment><USER20> I'd love to know what James Hague ([http://prog21.dadgum.com/](http://prog21.dadgum.com/)) thinks of Elixir. Erlang is one of his stronger languages, and he's written a lot of articles in the past that I really enjoy.</comment>


How Google Stole My $3800 - <AUTHOR> http://vgvr.svbtle.com/how-google-stole-my-3800 <comment><USER2> Why is everybody too focused on the "public domain" part? I do not see any statement regarding the public domain books on Google Policies, unlike Amazon.

[https://support.google.com/books/partner/answer/166501?hl=en](https://support.google.com/books/partner/answer/166501?hl=en) [https://kdp.amazon.com/help?topicId=A2OHLJURFVK57Q](https://kdp.amazon.com/help?topicId=A2OHLJURFVK57Q)

Bookstores, not only the digital ones, are full of public domain books. What do we want here? Publishers not to publish those classics or to publish them but give them for free?

Why is this any different for companies who fill empty pets with natural water and sell it to people? Isn't that public domain too? Don't they just wrap the "water"? Do they say that indeed they simply put the the free water in those fancy plastics?

Beyond all my subjective views, there is one thing objective that it's not fair for Google to keep the money for themselves when there is no policy for it.

</comment><comment><USER3> Quote: "I was told that the reason [for being suspended from Google Play] was that I had been selling public domain books."

This should have been the title of the submission.

<comment><USER4> I thought selling public domain content is legal.

<comment><USER5> Sure.

So what? That something is legal for you to do independently does not mean it is allowed by the Google Play terms.

<comment><AUTHOR> even if a policy violation appears after over 6 months, that doesn't mean that google takes all the money on the table.

<comment><USER3> Consider this from Google's position -- they see an activity that will make them look irresponsible or in collusion. To minimize damage to their reputation, they might want to stop the activity even if they can't fairly redistribute the ill-gotten gains afterward.

Also, if legal authority decided to step in, Google would minimize their own liability and exposure by stopping the activity rather than by allowing it to continue.

It also serves as a warning to others who might want to sell content they don't own -- it discourages a repetition of the same behavior.

</comment></comment></comment></comment></comment><comment><USER6> Looks like Lemur Books is selling public domain Sherlock Holmes books. I'm guessing the value add is supposed to be nice format/layout on mobile devices but I can't be sure.

If Lemur were clearly saying they were selling the layout and formatting of public domain books I'd side with the blog. However, if they were implying that they were selling the e-books as content w/o clearly stating these were public domain then I'd side with Google. I hate it when people build a sales campaign around tricking people, even if legal.

What was the pitch in the play store?

<comment><USER7> There is no requirement, legal or otherwise, to identify a physical book you sell in a bookstore as having content available in the public domain. Why would there be on an ebook?

<comment><USER6> The first paragraph stated what I found that the blog didn't make clear to me. i.e. what was he selling and why was his account suspended. Items the blog didn't mention.

The second paragraph gave my opinion on the blog post (on which side I fall) and my reason for my opinion. Specifically point out that either way I didn't think they did anything illegal ... but possibly (not necessarily) immoral.

The third paragraph asks anyone knows the details about how the sales pitch was worded in the play store.

</comment></comment></comment><comment><USER8> .... and this is why people are excited about Bitcoin. Small business owners have really difficult negotiation position against big giants in the case there are any issues (and there always will be).

(This regardless that the author clearly violated Google Play terms of service and Google allowed money accumulate to the persons account)

</comment><comment><USER9> I'm curios why the author went ahead and starting selling before he was able to receive payment? My personal 'stop' started there.

</comment><comment><USER10> Sounds like the author was doing 'dodgy stuff', and you can probably bet that customers were likely compensated somehow.

</comment><comment><USER11> Why are you telling us? Sue them and let the court decide whether they've stolen from you.

<comment><USER12> Strange question. This is what HN is all about. Telling histories that might be of interested to the community. This one is no exception.</comment></comment>