Greg Mankiw: I Can Afford Higher Taxes. But They'll Make Me Work Less. - <AUTHOR> http://www.nytimes.com/2010/10/10/business/economy/10view.html <comment><USER2> Long story short: Mankiw could take a $1k speaking engagement and, after 30 years of compounding 8% (please pass on stock tips, Mankiw) growth, pass on $10,000 to his children. But because of a battery of taxes, it will only come to $1700. And because he will likely be dead after 30 years, the estate tax will chew up another $700. Therefore, he won't do the speaking engagement.

"In effect, once the entire tax system is taken into account, my family's marginal tax rate is around 90%".

While continuing to point out that the US has a lower tax burden than Denmark, Sweden, Belgium, Italy, France, Austria, Finland, Norway, Hungary, Luxembourg, The Netherlands, The Czech Republic, Portugal, Germany, Iceland, the UK, Poland, New Zealand, Spain, Canada, Greece, Australia, Switzerland, Slovakia, Japan, and Ireland, and also pointing out that several of America's most unprecedented periods of economic growth occurred under significantly more onerous taxes than Mankiw faces in 2010, I concede that there is in fact a coherent narrative that he can construct in which a Harvard professor might turn down a speaking engagement because of the rollback of the Bush tax cuts. That's a price I'm willing to pay, but you'll have to make up your own mind.

<comment><USER3> A lot of dreaming and fantasy reasoning going on there. A compounding rate of 8% is a false premise to start from. Ask anyone who has figured the lat 20 years into their retirement calculations. A more rational take would be to assume you can't project rates in the future, but if you do the talk you will get money now, which has value now. A bird in the hand. And if he is concerned about what happens to his money after he dies then the most rational approach is to spend it while alive. History shows the heirs will waste it away.

<comment><USER4> Not just dreaming and fantasy, there's some actual numerical sleight-of-hand going on here. He's taking advantage of people's misunderstanding of compound interest.

Exponential growth will ultimately trump all other linear factors, even if the exponent is small. And that's also what makes small differences in that exponent so important (hence why computer scientists go through great pains to reduce complexity of matrix operations from O(2^2.51) to O(2^2.36)). Even if the investment only earned 1% per year, he can just sock it away in a 100-year trust fund:

        >>> 1000 * (1.01 ** 100)
        2704.8138294215287
        >>> 523 * (1.005 ** 100) * .45
        387.54342961962465

BAM - 85% "marginal" tax rate.

Plus, he has deliberately framed his scenario to take the maximum hit from taxes at every step. Corporate tax eats into his dividends? OK - invest in a growth stock instead of an income stock, and pay capital gains taxes when realizing the profits instead. Estate taxes steal most of the money from his heirs? How about he write a check to the university on behalf of his grandkids -- Uncle Sam won't see a dime of that.

<comment><USER5> Since his whole plan is predicated on giving the income to his kids, he could just gift them the $1,000 as soon as its made and it never gets hit with estate takes. He can now do 12 of these gigs a year ($12,000 a year is the max you can gift without declaring it) and pass it entirely onto his kids.

<comment><USER6> You have to pay estate tax on gifts too. Otherwise rich people could avoid estate tax by giving their assets to their kids before they died.

<comment><USER7> I believe that is not the case for amounts below $13k. See <http://www.nolo.com/legal-encyclopedia/article-30095.html>

A less comprehensible explanation is available from the IRS here: [http://www.irs.gov/businesses/small/article/0,,id=108139,00....](http://www.irs.gov/businesses/small/article/0,,id=108139,00.html)

<comment><USER6> Yes, there's an exemption. I'm talking about a marginal dollar, as he is.

<comment><USER7> If by "he," you mean Mankiw, I agree.

But I think you probably mean mikeryan. I don't think he was talking about a marginal dollar. His point was that the first $12k ($13k in 2010) gifted are taxed differently than dollars beyond that threshold.

I suppose the real question is the relative importance of the behavior at the margin versus the behavior for the first dollar. For the ultra-rich, $13k is obviously irrelevant, but for someone near the $250k annual income threshold like Mankiw, I don't think it is. The present value of $12k per year given every year for 30 years is substantially larger than the same amount invested and then hit by estate tax at year 30.

<comment><USER6> I mean Mankiw.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> So if you are

A. Making over 250,000 a year

B. Not planning on spending additional income yourself, but instead planning to save that money for your children when you die.

C. Have opportunities to make (relatively) small incremental chunks of income.

D. Have the ability to sock away money at a 8% compounding rate.

It _might_ not be worth your while to take on additional work. And this is entirely on Obama for letting the tax cuts to the $250K+ income families slip.

<comment><USER8> Obama cannot do anything about tax rates -- the 2001 congress passed a temporary tax cut which Bush signed. Whatever you think about the tax-rates going up was decided 10 years ago to dodge CBO projections of cost by Bush and that congress.

</comment></comment><comment><USER9> Does anyone else find the entire premise flawed? If all he wanted to do was maximize the amount of income he's going to pass on to his children then he would be an investment banker, not a Harvard professor/author. Any bank would take him in an instant.

Trying to make it sound like $1000 is the only incentive in play here seems like a mild distortion at the very least.

<comment><USER10> _If all he wanted to do was maximize the amount of income he's going to pass on to his children then he would be an investment banker, not a Harvard professor/author._

The question is whether he'll act _at his present margin_ (<http://en.wikipedia.org/wiki/Margin_%28economics%29>) , not whether he's spent his entire life trying to maximize one opportunity.

In any event, his bigger point is that a lot of service professionals in particular (think doctors, lawyers, consultants) will make decisions based in part on tax rates. For example, ten years years ago my parents routinely basically stopped working in mid November when they hit the top marginal tax rate essentially because the cost of work got too high (we do grant writing for nonprofit and public agencies, if you're curious: <http://blog.seliger.com>). A lot of people have a fair amount of discretion in the amount of work they do, and if you tax them a lot on the last 10 – 30% of income... they'll probably choose to consume less of it.

This is related to the backwards bending labor curve: [http://www.amosweb.com/cgi- bin/awb_nav.pl?s=gls&c=dsp...](http://www.amosweb.com/cgi- bin/awb_nav.pl?s=gls&c=dsp&k=backward-bending+labor+supply+curve) .

I assume people have done research to examine how large these effects are in the real world, but I don't know of any off the top of my head. I would also guess that the effects change in the short- and long-term.

</comment></comment><comment><USER11> Arguing against higher taxes because they discourage people from working is like arguing against jailing people for drug offenses because it overcrowds jails. It could be right (though in the case of raising taxes, history doesn't seem to bear this out), but it's not the real reason that we shouldn't want to pay higher taxes. The reason is that they do bad stuff with our money. There's a sense in which it can be said that all of your tax money goes towards paying down interest on the national debt, but if you take a look at what that debt is for, you'll likely be unhappy. If we (the people who don't want to pay higher taxes) pretend that it's for some reason other than it is, we put ourselves at risk of being told that our made up reason is stupid.

<comment><USER12> People who want higher taxes don't agree that they do bad stuff, or they wouldn't want higher taxes.

<comment><USER11> There are those people, and there are the people that don't know about the bad stuff. Actually, to be fair, there are also the people who know about the bad stuff but dont think lowering tax revenue is a good way to get them to stop doing the bad stuff. I think the first group of people might have a strange set of values (unless you mean that they don't think the net effect of what the government does with taxes is bad, in which case I agree with them), but it's still worth arguing about to convince the second and third groups.

</comment></comment></comment><comment><USER13> My girlfriend works 4 days at as a pharmacist. Her income for working a fifth day puts her into a high tax bracket in British Columbia and results in her making dramatically less money for that day. So she uses that time to develop herself personally and work on side projects.

I wonder if a flat income tax could ever work. No more bitching and whining - everyone pays the same percentage of their income and that's the end of it.

<comment><USER10> This is some of what I describe here: <http://news.ycombinator.com/item?id=1777371> . Thanks for another example of it.

</comment></comment><comment><USER14> If the Bush tax cuts for the wealthy are extended, it means the U.S. must continue to borrow greater sums of money than it otherwise would have to, in order to pay for those extended tax cuts.

This is one area where Democrats and Republicans should agree. The Bush tax cuts for the wealthy are simply not fiscally conservative.

The author expresses concern about the future for his children. Perhaps the author should consider that his children will have a higher tax/debt burden in the future if the U.S. keeps borrowing so much money.

</comment><comment><USER15> From what I've seen, some people have an in-born desire to work hard, and some don't. Taxes do not change this. The emphasis on taxes strikes me as a bit of posturing, and a ridiculous one at that. I've never had a single acquaintance say to me, "Yes, I've worked 70 hours a week these last few years, but they are raising nominal rates on my top brackets this year, so I will only work 50 hours a week from now on." Humans just don't work like that.

In my head, when I'm dealing with people, and especially when I'm hiring people, I slot them into 1 of 4 groups:

1.) ambitious - will do whatever it takes

2.) guilt ridden - aims to please, will make sacrifices for the job, though they can slip into burn out or depression

3.) multiple agendas, balances family and a job, stable but not extraordinary, will sometimes work extra in emergencies.

4.) unmotivated - their interests are away from work - hobbies, romantic partner, children, drug addiction, travel, art, writing, health problems - whatever, the issues are legion, but the point is the same - work is a low priority for them, they give it the minimal effort needed.

None of these categories change based on taxes.

For my part, I enjoy working, and that enjoyment wouldn't change if my taxes went up or down.

Possibly there are a few people, at the margin, who really are influenced by the tax rate, but I suspect this is a rare taste, like people who like yak butter. After all, you have to be willing to spend an inordinate amount of time studying the tax code before you can figure out how changes in work habits will effect your total tax bill over the long term, and few people are willing to make that effort. Hell, most people are not even willing to study their own investments, and leave all investment decisions to some advisor, or simply go with an index mutual fund, so that portion of their lives can function on auto-pilot.

I do not think I've ever known anyone who changed their work habits due to changes in the tax code.

<comment><USER16> I do know people who figured out their marginal hourly rate after taxes, and decided to cut back their hours worked to stay under that.

When figuring the hourly rate, one must take into account not only taxes, but loss of unemployment compensation, earned income credit, etc. There are definitely folks who do this and choose to work less because their net hourly rate is not compelling.

<comment><USER15> Well, like I said, "I suspect this is a rare taste, like people who like yak butter. After all, you have to be willing to spend an inordinate amount of time studying the tax code before you can figure out how changes in work habits will effect your total tax bill over the long term, and few people are willing to make that effort."

</comment></comment></comment><comment><USER17> He's ignoring the fact that having Mankiw work less may be a good thing. If Mankiw makes that $1000 for an article, he'll sock it away and it won't get spent for 10+ years. If a starving writer instead takes the job, he'll spend it immediately.

I do not see the downside.

<comment><USER18> A few problems with your analysis.

\- Money that is "socked away" in savings accounts or investment portfolios reenters the economy through lending or through decreasing cost of capital for businesses.

\- It is inherently better for Mankiw to write articles than it is for starving writers to do so. If anyone derived value from what the starving writer was writing, they would be getting paid for it and therefore not be starving (generalization -- there may be a few cases of highly valued writers being paid almost nothing and sharing their works for free to a wide audience, but I'm not aware of such). In the common case, that means that we are paying the starving writer for producing ~0 value, and decreasing the value that Mankiw produces, resulting in an overall decrease of wealth for society.

The fundamental misunderstanding you seem to be embracing is that the function of any individual in an economy is to pass the money they receive in wages forward to the next person in the chain. But this is not so: from an economic perspective, value is lost when less overall wealth is produced, so it's important not to encourage people in pursuits that hold no value to society as a greater whole. For example, society ought not pay artists that produce nothing other people want to look at for their services, nor should society pay programmers who produce software no one uses. On the other hand, society should avoid decreasing the output of those whose work is valued highly, like Mankiw's.

(If you derive some perverse value from having money wasted, then it would of course be fine for you to pay starving artists, but I'm arguing that society as a whole through the government should not.)

<comment><USER19> Isn't the problem right now that people aren't spending money, though?

Banks have plenty of money to lend (see the TARP and the Fed throwing money at them). Companies have money to spend. Neither are doing anything because the economy isn't churning because people aren't spending their money. They either have no money to spend (the unemployed), or they are saving their money because they don't trust their company to not fire them/the government to not tax it away.

Today, what it seems we need is money going to people that would buy things from companies so the companies will hire people to make more of those things. And then more people can buy things from companies.

Once the economy is working again, then we can worry about rich people earning extra money and putting it in the banks for them to loan out.

<comment><USER18> I know that people not having money to spend is an ongoing symptom of the problem with our economy. If it were true giving poor people $N thousand would fix our problems, I would support that move. But I haven't seen a credible argument to this effect besides gut reactions from people writing comments like yours. Do you have any links to articles from experts making similar claims? Any evidence of consensus on this topic among experts?

<comment><USER20> Go read Paul Krugman on why the stimulus was way too small, and stop trolling.

<comment><USER18> That was unnecessarily rude. What I've written is far from trolling, and it's irresponsible and uncharitable of you to call it that.

If you mean this [1], I have read the Krugman article on the stimulus' size. I'm sure Mr. Krugman's analyses are correct in the short term, although I suspect there's some question of how much you can increase GDP through government spending before other effects start working against you (like uncertainty about future taxes, decreasing ability of the country to borrow more money, etc.).

Regardless, like an ice bath is to a fever, this may treat one symptom, or even temporarily make things better, but it may also make things worse in the long run. There's nothing even remotely like a consensus that increased government spending and extra money for the poor is the correct solution to the current economic climate.

[1] [http://krugman.blogs.nytimes.com/2009/01/06/stimulus- arithme...](http://krugman.blogs.nytimes.com/2009/01/06/stimulus-arithmetic- wonkish-but-important/)

<comment><USER20> 1) Future taxes were made inevitable by a) the unfunded Bush tax cuts b) the unfunded Bush Medicare part D prescription drug benefits c) the unfunded Bush war in Iraq. _To spend is to tax._ If you (as a government) spend, you are going to have to tax, either now or in the future, either directly or by devaluation (inflation) of the currency.

Presently, there is zero indication of any decreasing ability of the US government to borrow money.

The reason there isn't any consensus on increased stimulus spending at present is mainly because of Republican lies, and the economists like Mankiw (a Bush advisor) who spin in support of them.

As you may gather from this post, I'm somewhat pissed off at the situation, and probably vented at you because of my anger. Sorry for the overreaction.

<comment><USER18> It's OK. I sometimes get riled up about politics too.

I agree, to spend is to tax. But to spend even more is to tax even more. I'm sure additional stimulus dollars would be money far better spent than the money we have spent burning Iraq and Afghanistan to the ground, but the fact remains that additional stimulus spending must be additionally paid back some day. The chief question in my mind is whether the return on those additional dollars would be worth the price.

I think you may be overestimating the extent to which outright Republican lies, numerous though they are, are affecting consensus on this issue among economists. For example, there are many non-Keynesians out there who disagree with the assertion that high government spending can counteract a recession.

I must confess, though, I don't have my ear to the ground as well as I would like on this topic. Kind of makes you wish that there was a Cliff's notes for recent updates in the outlook of experts and academics on various important topics. My understanding is that Krugman's outlook typically differs somewhat from most economists' beliefs (as surely it would with Mankiw's arguments in the linked article), but perhaps that is not the case re: additional stimulus spending?

<comment><USER20> And almost all of those non-Keynesians [perhaps a better term would be anti- Keynesians] are wrong.

Also, see Krugman's current op-ed about the true extent of the stimulus: <http://www.nytimes.com/2010/10/11/opinion/11krugman.html>

<comment><USER18> > And almost all of those non-Keynesians [perhaps a better term would be anti- > Keynesians] are wrong.

Hmm, you seem to be claiming a either conclusive proof that Keynesianism is correct or disproof of Monetarism, new classical macroeconomics, and the Austrian school, etc. Either of these would be news to me. Am I reading you wrong?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER21> What I don't like about Mankiw's logic is that he's only looking at part of the picture. He talks about being ble to save $1,000 without taxes vs $523 with taxes. Fine, let's look at the $1,000 - now how much of that $1,000 will he have to spend to fix damage to his car's suspension system caused by crumbling roads? How much will he have to pay for private schools because the public schools suck? How much will he have to pay for home security monitoring because the police and fire fighting services have had cutbacks? How much will he have to pay to repair the water damaged caused when a nearby 50 year-old water main broke and flooded his house?

We can go on and on - there is certainly a cost in paying taxes but there is also a cost in _not_ paying taxes. People seem to forget that an interstate bridge collapsed a few years ago.

<comment><USER22> You seem to think that $10 out of $10 in taxes goes directly towards roads, schools, or whatever. In reality, about $2 out of the $10 is actually spent for the those purposes.

$6 out of the $10 is a dead weight loss... completely consumed by government waste and inefficiency. The remaining $2 of the $10 is effectively transferred to bank accounts of politicians & friends via bribes, political donations, and outright theft.

<comment><USER2> Six dollars out of every ten dollars spent by local, state, and federal governments are dead weight loss? Cite a credible source, please.

</comment></comment></comment><comment><USER23> The fundamental fallacy here is that people respond purely to monetary incentives for work. This may be true for Mr. Mankiw, but it is not a universal truth.

<comment><USER24> I don't think anyone's making that assumption. The argument holds if people respond _at all_ to monetary incentives for work.

And if you find someone who doesn't respond at all to monetary incentives for work, they probably aren't making $250,000 a year, or anything close.

</comment></comment><comment><USER8> If this article is indicative of the content of his speeches (purposely misunderstanding tax policy and misleading with math), then I'm relieved that he intends not to speak publicly.

</comment><comment><USER25> Ok, a couple points here:

First, he's talking about the total effect of the taxes, not the marginal effect of the new taxes. Aside from being against the economist's gospel, it's also disingenuous. His tax rate isn't Zero now, it's 36%. He gives some lip service to this later, throwing out the $2000 number without really justifying it, and he doesn't mention the degree to which those taxes have gone up, just what their new value is.

Second, he gets REALLY sloppy when talking about the corporate taxes. It's along the same lines as the first problem - he's talking overall rates, not rates of change, but it's really egregious there - the 8% returns he's talking about at this point are total fantasy.

Third, and this isn't necessarily a problem with the article, just its overall premise - As a society, we may get more use out of taxing Mr. Mankiw more than we would out of his limited-reach speaking engagement. Assuming he makes $500k, a number I'm not even going to try to justify, except to say the other poor bastard of a professor who jumped into this arena was making along those lines, increasing Mr.Mankiw's taxes by 3.6% yields an additional $18k in federal income, which can be diverted to more broadly useful expenditures than hearing an economist talk. The question to me isn't "Will Mr. Mankiw work less?" - let's assume there is something of a depressing effect on his outcome - the question is, "Is this a tradeoff we should make?"

Finally, I'd point out that Mr. Mankiw's kids will also be able to make use of the services and institutions paid for by his tax money - this isn't a zero- sum game. He and his kids live in the country where his tax money gets spent. If he doesn't like what it gets spent on, well, join the club, buddy, but that's a different argument.

</comment><comment><USER26> Do Americans have to pay income tax whenever value of stock appreciates (even if he does not sell in the market)? I doubt it. Since valuation of stock would vary.

Here in India, the only tax Mankiw would have to pay is when he sells the stock after 30 years and gets a capital gain. So, he would still have an effective 8% compound rate. So he would end up paying tax on $10000. Assuming 30%, he would still keep $7000.

<comment><USER4> Not when stock appreciates, but you get taxed each year on dividends and interest paid out by investments. That is how I end up paying taxes on my investments every year, which still have unrealized losses of 35% or so.

</comment></comment><comment><USER27> Couldn't he use a LLC to avoid the estate tax? His whole argument seems overly simplified to point of being incorrect to me.

Is he talking about investing in a company that's growing 8% or is it his investment in the company that grows at 8%?

The corporate tax rate of 35% is another example. Does revenue from Google UK count towards the total revenue for Google? If so, then since Google's UK headquarters are in Ireland, the corporate tax on that revenue is more like 12.5%, unless it gets taxed again by the US.

<comment><USER28> As far as I'm aware, the revenue generated by a foreign subsidiary is not taxed again by the US until it enters the US economy. So long as it stays overseas we don't touch it. It's interesting to hear people note the record amounts of cash that US companies have on hand right now, but much of that is in foreign accounts and can't be brought into the US without paying a huge tax on it.

</comment></comment><comment><USER20> For an interesting comment, see Brad DeLong's "Greg Mankiw Quits the New York Times?": [http://delong.typepad.com/sdj/2010/10/greg-mankiw-quits- the-...](http://delong.typepad.com/sdj/2010/10/greg-mankiw-quits-the-new-york- times.html)

</comment><comment><USER29> If you treat this as a statement of fact, the economic consequence of this is clearly a matter of interpretation. The fact that Mr Mankiw might not be providing labor may mean that others will simply do the task and pay money on their earnings instead.

</comment><comment><USER30> Out of curiosity, does anyone know what tax rates looked like in the 1800s? Zweig's 'The World of Yesterday' says it was in the single-digits in Vienna, but I'd like to have better numbers for more places.

<comment><USER2> I don't know, but it's worth pointing out that the US in 1890 was so different from the US of today as to make that an apples/oranges comparison. To draw some somewhat relevant comparisons: in the 1800s your children might very well be working in a mill to support the family, and there was no such thing as a weekend.

</comment></comment><comment><USER31> Well if it isn't Mister Galt :) Nice to hear from you again!

<http://en.wikipedia.org/wiki/John_Galt>

</comment><comment><USER32> The unstated fundamental assertion of this is that people only work because of money, and to amass huge sums of it to pass on to their heirs.

Personally, I work because I enjoy it and am passionate about what I do. If I come out ahead and have money to survive and buy a few modest luxuries, then I'm happy.

If you don't like what you do and work is a pain, but you're addicted to the money stream, something is very wrong.

Similarly, having a society where people don't have the opportunity to better themselves is also wrong - and that's where government can and should attempt to improve the system.

</comment><comment><USER33> Dear Mr Mankiw,

You may be a Harvard economist, I'm glad you're not my accountant! You've gone out of your way to maximize the tax penalties you'll incur in your goal of paying for your children's education. Perhaps you should take that 1000$ and find a decent financial planner. As a starting point, how about just investing in an index fund, taking long-term capital gains, and writing a check to pay for your kids' college?</comment>


Load Balancing and the Power of Hashing - <AUTHOR> http://jeremykun.com/2015/12/28/load-balancing-and-the-power-of-hashing/ <comment><USER2> Not mentioned in the article, but consistent hashing[1] is usually what you want if you're going to use hashing and load balancing together.

[1] [https://en.wikipedia.org/wiki/Consistent_hashing](https://en.wikipedia.org/wiki/Consistent_hashing)</comment>


Ask HN: Why didn't this site catch on? (TruthTruthLie.me) - <AUTHOR>

I recently launched a side project to try to leverage Facebook as a viral marketing platform to support a new social site called TruthTruthLie.me.
In a nutshell, people could create a "two truth and one lie" quiz about themselves and ask their Facebook friends to guess the lie. I created all the social hooks I thought I'd need (FB connect, FB comments, FB like, tweet this and all the big AddThis buttons), but regardless of how hard I pushed, I saw no virality at all.
I'd love you feedback as to why this experiment failed, my thoughts: * requiring FB connect for login was too much to ask new users * requiring login before creating a quiz was off-putting * it was too hard to create quizzes (unlike ThreeWords.me, which was dead simple) * it just wasn't that fun to do * the concept was poorly executed
Thanks for you feedback, HN. Even though the site flopped, I'd love to get some shared learning out of it!
For reference, this is one of my own TTL quizzes: http://TruthTruthLie.me/mitch/Deadly-While-Driving/ <comment><USER2> I want to be able to guess and find out what the lie is in quiz is without connecting with facebook. It seems like it'd be sort of entertaining to go through a bunch of random people's quizes and guess. Then maybe I'd be more willing to connect with facebook and create a quiz.

Requiring users to connect with facebook is a fairly big ask and when you ask for it, you haven't really given users much in return.

<comment><AUTHOR> Yes, your comment confirms my most significant concern...the FB connect barrier is presented too early. Thanks for looking.

</comment></comment><comment><USER3> You might not have out the app in the hands of the right people. If I were you I would be targeting the 12-16 year olds, maybe even younger. Use Facebook ads to find them.

<comment><AUTHOR> Funny you say that, because my 11 and soon to be 13 yo daughters said their friends would "eat it up". Problem is, they won't have Facebook accounts until they hit 13.

<comment><USER3> So go for 13+.</comment></comment></comment>


Ask HN: My team mate took credit for my work. What do I do - <AUTHOR> I refactored our code and made a library that improved our work. It wasn't a big deal and I didn't even mention except to share with my team mates. Our boss is non technical. In our team meeting he congratulated team mate on taking the initiative and creativity in making this library. I don't think he was banking on boss mentioning it. I was so shocked all I can muster was "You mean the library I made?". This has weighed on me a lot and I don't feel like sharing anything anymore. I mentioned to the boss later that I made this, but I don't think they really care or understand. What do I do? <comment><USER2> There are two issues here:

1\. Is your boss misinformed/clueless/you're misunderstanding?

2\. Does your boss not care about you?

#1 can be cleared up, as others here say, by better communication and by making sure your boss knows your accomplishments.

If answer to #2 is "boss doesn't care" you'll want to start thinking about new job, or new team at least, because this is just a symptom of a deeper problem.

</comment><comment><USER3> I would go talk to both your team mate and your boss, in that order. I would also be very cordial and professional. Learn why the teammate took the credit or may be the boss is just mistaken. Find out the truth and then set the story straight with the boss without bad mouthing the teammate.

If this happens again, then you can be little more direct.

It would also behoove you to mention your accomplishments in passing to your boss during a casual chat in the morning while you are talking about weather or current events. Bosses for most parts don't have all the minute details of who is doing what.

</comment><comment><USER4> Another thing that would be useful is for your version-control systems (git/svn etc) to be able to say precisely who made which changes. That gives you proof of who did which work. Even if your company/org does not use version control, you can use it independently as an individual, and have a complete development history of your own which documents your work. It would be harder for someone to claim your work if you have a ton of incremental check-ins and they don't.

<comment><AUTHOR> I version control everything, but my boss is not technical so this all seems like magic and you can make something simple a big deal easily.

<comment><USER5> Don't work under non-technical people who believe in hand-waving.

Even if they are well meaning and fair, eventually they will hit a comprehension limit. At that point arbitration for any technical debate should be escalated to a board of suitably qualified people, but they will be unwilling or literally unable to do it. Eventually as a consequence bad technical decisions will be made.

That's the best case scenario. In the worst case scenario you're already undergoing, your boss has no clue who's the better dev or why in your team.

<comment><USER6> Sounds like The Parable of the Two Programmers.

[http://www.bruceblinn.com/parable.html](http://www.bruceblinn.com/parable.html)

<comment><USER7> That's a horrible font choice

</comment></comment></comment></comment></comment><comment><USER8> The feeling of being relevant and contributing is a very powerful force. Its why people will take enhancers that help them win and place high in local 5K run races. Like it even matters, but to them it is everything. Worth cheating to get it they think. Something that has always helped me is knowing that cheaters can't lead, they can only follow. He'll need to steal credit from someone else to keep this "look" going.

So, for now ... I say to keep the peace - take it on the chin. Good learning experience for you. You did not properly credit yourself and made the way for this to happen. Note that you must be balanced in life too and not toot your horn too loudly. Have balance, allow others to succeed and get credit too. Maybe you saw the sample code on stack-overflow and refactored it. We all learn from others anyway.

The real problem here is the pat on the back from the boss, not the code itself which you saw as trivial anyway. Be aware of how this company operates. However, don't stop contributing! That will cause you to die inside. Your contributions are great and will help you to grow. So, no matter who gets the credit, keep doing it so that you'll be better off when you leave this place.

<comment><USER9> "Visibility" is one of the major drivers of promotion in every organization. They don't know your good if they can't see it.

If there are no mitigating circumstances here, like "actually we worked together but I did _most_ of it". Then it should be a simple matter to talk to the boss and get to the bottom of how it was misattributed. No accusations, no assumptions but a fact finding mission. The goal here is to find out how it happened so you can avoid it in the future, and as a secondary bonus it will obviously alert your boss to the fact you are the real author.

If people are able to take credit for your work it indicates a larger problem with your visibility in the organization and it should be dealt with swiftly if you care about your career.

<comment><AUTHOR> There wasn't collaboration other than plugging it into his code. It was not an oversight it was very clear he claimed to have written it all.You are correct though, partly my fault, why not mention it first myself, why wait for someone else to.

<comment><USER9> One final suggestion, if when bringing this up you come off as emotional as you do in your original post it won't be effective. Approach it as just a big misunderstanding. There is nothing wrong with ensuring correct attribution to work where its something big (which a library qualifies for).

</comment></comment></comment></comment><comment><USER10> Chalk this event up to a lesson learned. Now go back to doing great stuff and, from now on, make sure your boss is aware of it.

Also, this is an example of having a bad boss and is one of the reasons technical people generally prefer working for other technical people.

</comment><comment><USER11> It could have been a simple misunderstanding and your boss crediting the wrong person.

In the big picture these things don't matter a whole lot, I wouldn't take the time to discuss it with your boss any further.

Maybe talk to your teammate and see if he was trying to take credit for it or if it just happened to look that way.

Try to bring up more what you are working on and ideas you are executing on with your team and boss in the future.

kudos are nice but very minor in the big scheme of things. You are all cogs in a machine to your company and boss. So I wouldn't let it get you down and it's not worth making waves over.

</comment><comment><USER12> If you can ascertain objectively that your boss doesn't care or understand about your work, you can pretty much conclude that your environment is not emotionally healthy for you. Leave if that is the case and if you can find another gig elsewhere.

</comment><comment><USER13> This happens almost everywhere unfortunately.

If you want to 'compete', the way to play the game is to promote yourself as most of the time, no one else is going to. This is obviously what your colleague is up to.

I used to get mad about the same thing happening to me and it happened a lot. After talking to different people about ways to manage it, I decided to come to terms with it because I wasn't that interested in the alternative (self- promotion). Now I take comfort from the fact if they have to take credit for it, they are obviously worried about something that I am not.

</comment><comment><USER14> > I refactored our code and made a library that improved our work. It wasn't a > big deal ...

Significance, Contribution, Growth are core Human Needs.

Was this a big deal or NOT?

Can you quantify the improvement in your work?

Decide what you want -

Guy Kawasaki — 'If you don't toot your own horn, don't complain that there's no music.'

</comment><comment><USER15> It sounds like your one liner made the boss appear misinformed/easy to manipulate, in public. This never goes over well.

</comment><comment><USER16> who wrote the code that is inside the library?

the takeaway would be that you should promote yourself and your work preemptively.

</comment><comment><USER17> Your boss may not be technical but did you try to get your teammate to explain step by step how did he thought while making the library?

</comment><comment><USER18> I suggest you try asking on Workplace.StackExchange, too, since the people there have more experience answering this kind of question.

</comment><comment><USER19> Your teammate should said immediately that it was you who took the initiative and creativity on that refactor.</comment>


Ask HN: Python dev on Windows? - <AUTHOR> I'm self-taught in Python with a proficiency level I'd call "advanced scripting" and am looking to broaden my skills and get more seriously into web development work. I currently do all my coding on a relatively stock install of Windows 10 EE. I have had a pretty easy time working with Python on Windows but no matter how many times I install the MSVC++ compiler package I still occasionally run into the dreaded "cannot find vcvarsall.bat" error when installing a package that runs C under the hood. There are only so many binaries available. I'm considering changing my setup. I figure the options are 1) Try the Linux subsystem for Win, 2) Dual boot Linux, or 3) Buy a new windows laptop and convert the current one to Linux. I'm a little reluctant to dual boot because I otherwise use the Windows machine for sort of mission critical work. Can anyone offer some guidance?<p>The tools I'd be regularly using or exploring include: Falcon, Django, Postgres, RabbitMQ, Redis, Celery, Numpy, Scipy, lxml. <comment><USER2> Use WSL to get started with Linux. As a UNIX native, I find the filesystem in WSL quite slow, but for you it will probably be business as usual. I wouldn't suggest jumping in with more feet until you're more comfortable with Linux.

If the FS _is_ frustratingly slow, consider using HyperV or Virtualbox to run a Linux VM. the filesystem will be faster, but your RAM resources will be shared less "fairly" between Linux and Windows. VMs are quite fast these days, and most certainly preferable to a bare-metal Linux install for me, at least.

If you dual-boot or install on hardware, I worry you'll add too much friction and end up spending more of your time fiddling with Linux instead of learning what actually interests you here: Python.

</comment><comment><USER3> > I figure the options are 1) Try the Linux subsystem for Win, 2) Dual boot > Linux, or 3) Buy a new windows laptop and convert the current one to Linux.

4) Use a virtual machine with Linux -- or the reverse, virtual machine with Windows running under Linux.

<comment><AUTHOR> I haven't tried that since my machine is a laptop with an i5 and 8gb ram, but I guess I'll give it a go and see how it performs.

</comment></comment><comment><USER4> Are you using a Python distro from python.org? I find that Anaconda is much friendlier on Windows [1]

[1] [https://anaconda.org/anaconda/python](https://anaconda.org/anaconda/python)</comment>


Show HN: HipSpec – User Stories/Requirements as a Service - <AUTHOR> https://hipspec.com/?showhn <comment><AUTHOR> Hey HN, I left my role running tech & security at a VC backed healthcare company a few months ago to scratch a multi year itch that I've had since a brutal multi hour sprint planning meeting during my time at a Fortune 50.

Over the last few years, I've found myself in deja vu moments coaching Subject Matter Experts (SME's), Product Managers, developers on their user stories & requirements for normal stuff we see in most software applications... Think user management, forgotten password flows, csv uploads, common customer service tasks etc - mostly solved problems from both an Engineering & UX perspective. The problem is that teams keep reinventing the wheel on these basics at the product level before code is written. It frustrates product teams as meetings and product debt build up and users end up taking their share of the pain. So I went down the rabbit hole and analyzed ~200 well built products, gathered "all the things" (about 800 "Story Specs" + Acceptance Criteria) & created a tool for importing them into project management tools.

Thesis: 60-80% of the software built by most teams is a solved problem. If we can better automate the definition of the basics earlier in the life-cycle via a common vernacular, there will be more bandwidth for smart people to do smart things. (I've got a blog post brewing about Maslow's hierarchy of product needs & how innovation/ smart people get dragged down.)

Here's a quick video of the tool (same video, loom & youtube depending on your preference):

\- [https://youtu.be/6jGBVN_ab_U](https://youtu.be/6jGBVN_ab_U)

\- [https://www.loom.com/share/9afd3225b0e3418da802278f2bea9e33](https://www.loom.com/share/9afd3225b0e3418da802278f2bea9e33)

Some Screenshots (via rough docs): [https://docs.hipspec.com/docs/workflows/story-spec- pushing/](https://docs.hipspec.com/docs/workflows/story-spec-pushing/)

Free tier has some random user stories & will be further built out with listings to help get Open Source Projects into team backlogs… tangent for another time. Registration Link: [https://app.hipspec.com/users/sign_up](https://app.hipspec.com/users/sign_up)

Random thanks to @jason, @mijustin, @jonbuda, @derrickreimer, @r00k, @robwalling & @GrantM for their podcasts that have given me consistent company while working on this. And Startup School, what a blast. Thanks for checking out HipSpec.com, I'm around for feedback & chit chat.

TLDR: I identified ~800 user story primitives + associated acceptance criteria that are relevant to most software product teams & made them easy to import into backlogs.</comment>


What's the best keyboard and mouse you owned? - <AUTHOR> We all have our personal favourite. Please share which one you use now and which one is your favourite. <comment><USER2> Keyboard: Advantage2 QD from Kinesis. Nicely curved, very ergonomic keyboard with all the bells and whistles; it has both Qwerty and Dvorak layouts at the start, and every key can be remapped, including to macros.

<comment><USER3> I had one at work and it's an extremely great keyboard. I combined it with a Logitech Expert Mouse (actually a trackball) and my shoulder/arm pain was better within a week.

I have an Ergodox EZ at my new job and it's good but I'd recommend the Kinesis Advantage 2 over it if someone asked. Same price.

</comment></comment><comment><USER4> I don't like mechanical keyboards. I think the Apple Magic keyboard 2 has some of the best chiclet keys ever made. I also really liked the keyboard on the Surface Book 1.

As for the mouse I really like the Logitech G Pro. It's precise, lightweight, and the shape is great for fingertip grip.

<comment><USER5> I also use the Logitech G Pro and like it quite a bit.

Logitech also makes the g203 prodigy [1] which is identical to the G Pro except for two things:

1) the G Pro has a sensor with a higher DPI (6,000 vs 12,000)

2) the G Pro has a braided cable, while the g203 has a normal cable

Unless someone actually plans on using their mouse above 6,000 DPI, the g203 is probably a better choice because it's cheaper than the G Pro.

I've got one of each, with the G Pro at home for gaming and g203 at work so that I more-or-less use the same mouse all the time.

[1] [https://www.logitechg.com/en-us/product/g203-prodigy- gaming-...](https://www.logitechg.com/en-us/product/g203-prodigy-gaming-mouse)

<comment><USER6> I've been enjoying the g305 without the battery cover. It's really light with a AAA lithium ion.

</comment></comment></comment><comment><USER7> I travel a lot, so my selections are made with this in mind.

Kebyoard: Logitech K380. Perfect travel size, excellent keys, lovely stylings and — from what I can tell — infinite battery life. (Mine has been running for a year on the same batteries with no complaints.) It also doesn't bend like the expensive Apple wireless keyboard if you chuck it in your backpack.

Mouse: Logitech G403 Wireless. (I think the G703 might be an updated model.) It's the perfect middle ground between an office and gaming mouse: G903 guts, IntelliMouse feel. (It even has the clicky side buttons!) I was worried that charging every 2-3 days would be annoying, but it just hasn't been a problem so far: the mouse charges in half an hour and you can use it with the cable in wired mode.

I also spent a lot of time with the Logitech MX Master[2], but the Bluetooth worked awfully on my Mac, and the latency while using the USB receiver (however small) was unsuitable for my FPS gaming needs. Boy, that scroll wheel was nice, though!

[2]: [http://archagon.net/blog/2017/05/22/almost-winning-the- wirel...](http://archagon.net/blog/2017/05/22/almost-winning-the-wireless- mouse-game-logitech-mx-master/)

<comment><USER4> > Logitech K380

It's a great little keyboard. I was skeptical at first but it grew on me.

<comment><USER8> I have not the K380, but a K480. Its bluetooth implementation interferes with Wi-Fi at home. Periodically, once every few minutes, the device with which the keyboard is being used experiences a stall in its Wi-Fi connection. While I don't see this behavior in various hotspots around town, I also haven't seen the behavior from other bluetooth gear, including other keyboards. Changing the Wi-Fi channel doesn't fix the issue. Aside from that, the keyboard has a poor feel for typing, and feels cheaply made. E.g if you grasp it in both hands and give it a squeeze, the poorly fitted plastic case squeaks. I think the keys are the same as in the K380 [evidently not]. The only selling feature of the 480 is that you can switch the BT connection among three devices with a physical three-way switch. And you can stick a tablet and one, perhaps two phones into it at the same time, having them all stand up.

<comment><USER7> I have tried the K480 in store. Weirdly enough, it feels _very_ different from the K380. Neither the keys nor the construction are the same. (The Wirecutter makes this observation in their BT keyboard article[1]. I didn't believe them, so I had to check it out for myself. Turns out: true!)

[1]: [https://thewirecutter.com/reviews/the-best-bluetooth- keyboar...](https://thewirecutter.com/reviews/the-best-bluetooth-keyboard/)

<comment><USER4> Yeah I've had both and the K480 is crap in comparison to the K380.

It's heavier, uglier, and the keys on the K380 are so much nicer.

</comment></comment></comment></comment></comment><comment><USER9> I really liked my wired USB Mac keyboard with numpad. Put after a meeting with coffee it stopped working, and a replacement (magic bluetooth keyboard) is almost 4x the price, which have led me on a hunt for so,thing else. Also, I am thinking a windows layout would work better with windows, which is what my work computer is.

Right now I am looking at:

Havoc low profile[1], because it is mechanical and low

Surface Ergonomic Keyboard[2], because it is basically an ergonomic windows version of what I had.

Can anybody weigh in on these?

[1] [https://www.prohavit.com/products/hv-kb390l-low-profile- mech...](https://www.prohavit.com/products/hv-kb390l-low-profile-mechanical- keyboard/)

[2] [https://www.microsoft.com/en- us/surface/accessories/surface-...](https://www.microsoft.com/en- us/surface/accessories/surface-ergonomic-keyboard)

</comment><comment><USER10> Custom mechanical keyboard from WASD Keyboards with the Neo2 keyboard layout printed on it and a Zowie FK1 mouse. The former because I love that it's unique to me and the latter because it's an excellent mouse that doesn't require drivers but still has a hardware DPI changer.

<comment><USER11> My WASD keyboard with brown cherry keys is the best. Satisfying action and extremely durable--no issues at all after 4 years of daily use. The only problem is that when I'm working it sounds like an ongoing stream of machine- gun fire from my workstation.

Yeah, I work from home.

</comment></comment><comment><USER12> I still swear by the Microsoft Natural Ergonomic Keyboard 4000 [1]. Very comfortable keyboard. I think I've gone through about three of them, one of which lasted so long that the little knobs on the J and F keys wore away and I had to score them with an old soldering iron.

I do have a Kinesis Advantage (older model) that I've tried over a couple of weekends to get use to, but just found I couldn't adapt. Particularly the different placement of various punctuation keys like curly braces was too much of a hurdle for me when writing code.

[1] [https://www.microsoft.com/en-au/p/natural-ergonomic- keyboard...](https://www.microsoft.com/en-au/p/natural-ergonomic- keyboard-4000/8xlw43x19hnt)

</comment><comment><USER5> As far as keyboards go, I don't have a current favorite but I only use keyboards with an 84 key layout [1].

The 84 key layout keeps all of the important keys from the standard 10-keyless layout (home, page up, page down, arrows, etc) but it puts them in a single row on the right side of the keyboard.

I find that a 10-keyless keyboard is too wide, which requires me to put my mouse farther to my right than I like it. The 84 key lets me keep my mouse where I want it without losing important keys.

[1] [https://i.imgur.com/0TEi1.jpg?1](https://i.imgur.com/0TEi1.jpg?1)

</comment><comment><USER13> So, among mechanical keyboards, years ago Corsair used to make almost hands down the best one for the average consumer looking for a solid Cherry MX Blue option some time ago called the K70 Vengeance, which sat alongside their other Vengeance products in their gaming product lineup.

As time went on, Corsair decided it would be a great idea to fuck up everything that they did that made their gaming product lineup perfect. This directly impacted the K70 Vengeance, and made them utterly worthless. So much to the point that you paid a premium for older versions of the K70.

Back in 2014, Corsair changed their Corsair Gaming logo to what was unaffectionately called the tramp stamp logo. [https://kotaku.com/gaming- company-changes-logo-to-tramp-stam...](https://kotaku.com/gaming-company- changes-logo-to-tramp-stamp-fans-horr-1638359967)

Then, a couple years later, they dropped the Vengeance moniker and called the new K70 the K70 LUX. Which was absolutely no improvement on an otherwise already, in my opinion, terrible game. In this revision, they replaced the keycaps with some godawful font chosen by the 12-year-old child of one of the product designers, further cementing the former K70 into irrelevance in an attempt to "differentiate" which in this context means "look like everyone else."

[http://forum.corsair.com/v3/showthread.php?t=163538](http://forum.corsair.com/v3/showthread.php?t=163538)

To restore the keyboard to its former glory, you'd have to purchase the classic K70 keyset for another $30. Fuck 'em. [https://www.corsair.com/us/en/Categories/Products/Accessorie...](https://www.corsair.com/us/en/Categories/Products/Accessories-%7C-Parts/Gaming/Gaming- Keyboards/CORSAIR-Gaming-Classic-K70-Full-104-Keys-Set/p/CH-8970022)

To this day, I've not found a suitable replacement for the K70 Vengeance which my wife spilt coke all over.

As for a mouse, I just bought the same best-selling Razer DeathAdder many other purchase. It was nice to not have to think so much about the latter.

</comment><comment><USER14> I just built one of these about a month ago: [https://keeb.io/collections/frontpage/products/levinson- lets...](https://keeb.io/collections/frontpage/products/levinson-lets-split-w- led-backlight?variant=6600662679582) With 78g Zealios and DSA keycaps. I have shoulder issues and this board really seems to help with ergonomics in that way. Pretty much my favorite board right now.

</comment><comment><USER8> I like those little Logitech m187 mice. Very handy in cramped spaces. Their bigger cousins too, like the M325. The IR technology allows the battery life to be very long. In my 187, I use batteries that were discarded from other devices; I can get weeks to months out of "dead" batteries in this mouse. From time to time, quite rarely, the m187 locks up requiring the battery to be pulled and re-inserted to resume operation.

</comment><comment><USER15> The now-classic Logitech MX518 USB wired mouse... Hard to find an equivalent these days.

[https://www.google.com/search?q=logitech+mx518&num=100&clien...](https://www.google.com/search?q=logitech+mx518&num=100&client=firefox-b-1&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjP2fXdhN7bAhVEOH0KHXt0DtIQ_AUICygC&biw=1788&bih=1227&dpr=0.9)

<comment><USER16> I contacted Logitech twice when it was discontinued, claiming mine was faulty, just to see if they'd let on they had spare stock - they didn't.

</comment></comment><comment><USER17> Keyboard: CoolerMaster QuickFire Rapid

It's a reasonably-priced mechanical keyboard, but not too loud for an office environment.

I also have a DAS, but prefer the CM

</comment><comment><USER16> Logitech MX518 (mouse).

I bought it for gaming as I was using a 400DPI free Dell mouse I had, I didn't realise what a difference it could make. They sadly stopped making it, I emailed Logitech pretending mine had broken to see if they had any internal stock but I got nowhere. I bought a Logitech G400S for work which is pretty close, but it's not the same.

</comment><comment><USER18> Keyboard: Kinesis Advantage (1 and 2)

Mouse: Still searching...

<comment><USER19> You might like the CST Ltrac trackball

<comment><USER18> I'll check it out if the Elecom M-HT1DRBK that just arrived doesn't work out :x

</comment></comment></comment><comment><USER20> I own one of the traditional(think t420) thinkpad keyboards that are wired. My favorite keyboard to use by fare, but they don't really make them anymore. You can still buy them off of ebay.

</comment><comment><USER21> my employer made us use the microsoft curved keyboard, as it was the only option we had: [https://www.microsoft.com/accessories/en- my/products/keyboar...](https://www.microsoft.com/accessories/en- my/products/keyboards/comfort-curve-keyboard-3000/3tj-00019)

I hated it very much at the beginning. But now I'm so used to it, I'm the most productive when using it. I worry that one day this keyboard is discontinued, I can't find it anymore.

</comment><comment><USER22> KBD: Realforce 87U 45g. Hopefully even better when the Norbaforce gets here.

Mouse: Logitech G9x for feel, but the cable and rubber feet are garbage. Microsoft IntelliMouse (Optical) as a close second.

</comment><comment><USER23> My favourite keyboard ever is the IBM Model M. Best switches ever.

<comment><USER24> These are still being produced. Reviewers seems to agree that production process hasn't changed, but quality control has fallen drastically since the unicomp stopped supplying IBM and started selling on their own.

But nobody seems to complain about the switches.

[https://www.pckeyboard.com](https://www.pckeyboard.com)

<comment><USER25> Same here, I'm typing this on a Model M, and have 4 in storage. That said, Everex keyboards from the early- to mid-90s had a really good feel to them, too.

I'm using a Dell mouse (can't tell what model) right now that has a relatively solid, weighty feel to it that I like. Just 2 buttons and a middle button/wheel.

</comment></comment></comment><comment><USER26> Many years ago I had a Northgate Omnikey keyboard. Pretty much everything I've used since has been a disappointment.

My go-to mouse for many years has been the Kensington Orbital trackball.

</comment><comment><USER27> Desktop: the fist logitech marble Laptop: the thinkpad trackpoint

</comment><comment><USER28> I'm using a Filco Tenkeyless (FKBN87ML/EB) for about 8 years now. The mouse I'm using is the Microsoft WMO which I purchased in 2003 or 4.. cant remember.

<comment><USER29> I have the exact same keyboard with cherry mx browns. End game keyboard imo.

</comment></comment><comment><USER30> Mouse: toss up between Logitech g403, intellimouse 3.0 and cm spawn.

Keyboard: anything ducky. Currently using a tenkeyless ducky one 2, enjoying it quite a bit.

</comment><comment><USER31> Qisan Magicforce 108 keys GATERON red switch. Clear momentum without joint wearing click. All keys have adjustable lighting. No favorite mouse.

</comment><comment><USER32> HHKB Type-S and Logitech G703.

I absolutely love the Topre switches on HHKB Type S because of the silence it provides and the how it feels to your fingers.

</comment><comment><USER33> Ducky Shine 3 TKL - (Cherry blue MX switches) w custom pbt keycaps because I'm a keyboard nerd

Logitech MX Master

</comment><comment><USER34> Mouse: Razer Lachesis

I bought it 10+ years ago for 30€ because he got a Deathader. Still works perfectly

</comment><comment><USER35> Apple Saratoga keyboard, FTW. :)

<comment><USER24> The Matias Tactile Pro, supposedly uses the same switches and is aimed at people who miss their Apple Extended Keyboard.

Having tried neither, I cannot tell you if either lives up to their hype, but thought you should know :)

[http://matias.ca/tactilepro/index.php](http://matias.ca/tactilepro/index.php)

</comment></comment><comment><USER36> ThinkPad X220 and X230 keyboards with TrackPoint.</comment>


Semantic Import Versioning - <AUTHOR> https://research.swtch.com/vgo-import <comment><USER2> From the "Avoiding Singleton Problems" section:

> Another problem would be if there were two HTTP stacks in the program. > Clearly only one HTTP stack can listen on port 80; we wouldn't want half the > program registering handlers that will not be used. Go developers are > already running into problems like this due to vendoring inside vendored > packages.

This is only a problem if you allow nested vendor/ directories, which "dep" (you know, the "official experiment" that suddenly got discarded to the surprise of its developers) doesn't have because it recurses through the entire dependency tree and reduces it to a single vendor/, just like many (most?) other languages.

The whole post reads like the author thinks Go has a very unique dependency management problem that no other language ever had which somehow necessitates a completely unorthodox solution. Three blog posts into "vgo", I still don't see why...

<comment><USER3> Go doesn't have a unique dependency management problem. This problem is shared by many other languages that have all solved it poorly. I haven't written much Go and am not a big fan of the language, but I am watching this discussion eagerly because a successful solution in Go will be an example for other languages to follow.

<comment><USER4> Curious about what languages you think solved it poorly, and why.

<comment><USER3> I guess now that I think of it, all the solutions I've seen break down into two techniques.

First, loading different versions of the library under the same name to provide to different parts of your code. This has different risks depending on how and when symbols are looked up or linked. In some languages you can end up with the two versions accidentally calling into each other or using each other's symbols. In other languages you run into the "expected Foo but got Foo" type errors mentioned by munificent. That's what happens when you use classloader tricks as a half-assed way of isolating "components" in Java.

Second, loading different versions of the library under different names. This requires hacking the compiled code or the source code; convenience and reliability will depend on the quality of the tools you're working with. Sophistication ranges from using sed to munge source code to using tools like objcopy that can read and rewrite compiled artifacts. Java "shading" (not "shadowing" as I said earlier) relies on rewriting class files.

</comment></comment></comment></comment><comment><USER5> This article actually made the issue finally click for me: Go is having trouble solving this problem because it has more going on in the global environment, like its ancestor languages, and unlike more modern languages. They need to come up with a complicated framework to reign in their spooky action at a distance, because they have lots of implicit global relationships where we might prefer more explicit and local ones.

Yikes.

<comment><USER6> > where we might prefer more explicit and local ones.

could you expand on this? who is "we" and what are those explicit and local relationships? are you talking about an opensource ecosystem or a private enterprise?

<comment><USER5> In this case I mean open-source communities and the companies that heavily rely on them.

<comment><USER6> I'm not sure I understand your point. It seems you're implying (please correct me if I'm wrong) that ecosystems of modern open-source languages are more local, more tightly coupled and having people working in concert towards a common goal.

In my experience this is often what happens when a new community is spawned. E.g. when nodejs started it was there was always one single implementation of that thing I needed and it was reasonably up to date with the rest of the things around it (including the runtime environment, of which there was only one or perhaps two mayor versions of). As time went on more people started to contributing, often with different levels of commitment.

Often "modern" gets conflated with "young". Almost by definition, young communities don't develop the same kind of problems of mature communities, yet.

</comment></comment></comment></comment><comment><USER7> I like this quiet a lot, it fits very nicely in the go stack.

Absent this article is a discussion of alternatives to renaming. Reading the article would hint that a semver major bump would just leave you high and dry! This is certainly true in some ecosystems like Ruby or Java < 9\. But other ecosystems have solved this problem at the language level. Javascript, Rust, and others allow you to import multiple versions of a module so long as you don't expose types from that module in your public interfaces (not enforced by JS -- but by convention). You still reach the problem the article references once you have those types in your public interfaces or they use singletons. That means that your langauge's package manager needs to handle these dependencies differently (peer dependencies) giving you more flexibility at the cost of additional complexity in package management.

</comment><comment><USER8> Basically some motivation and how to use go + semver.

But is there a way to statically-compile dependencies? Is that even a thing?

(I'm not a go user so forgive me if I need a good RTFM session.)

It seems like a lot of these problems come from two dependencies wanting different versions of a third dependency.

Instead of just depending on a dependency as a semver string, I could (theoretically I think) depend on a statically-compiled version of the dependency so it's free to call whatever libs it wants - effectively eliminate the concept of transitive dependencies.

For projects with large dependency graphs, you may end up with relatively large binaries since you end up with lots of duplicate object-code for common libraries, but I wonder how much of a problem this actually is (and if simple de-duping may solve a huge chunk of it).

We spend lots of engineering effort to resolve dependencies as source just to end up compiling them into our executable anyway.

I'm sure this isn't a new concept, but it struck me as odd that go is fighting with it so much recently considering statically-compiled, "library-free" executables is definitely in go's wheelhouse - why not extend it to libraries?

<comment><USER9> The problem also happens in static linking, this is as old as the library concept.

For example, the public symbols of the libraries might collide, they might have side-effects that misbehave because there are multiple versions, they can rely on yet on another library that can actually only be linked exactly once, ....

<comment><USER8> Isn't that just a 'bug' in the algorithm for code-layout - that the symbol names weren't unique enough or something? This would require some breaking- changes in the way libraries are laid out and linked against, but basically you "should" be able to statically compile a dependency and then effectively hide all the symbols from its dependencies so nothing else knows how to link against them directly.

</comment></comment></comment><comment><USER10> Am I over simplifying things in the article to say

"At some point you cannot transparently support multiple target platforms"

we are all used to different builds for intel, ARM, 32/64 etc. why should we be surprised to see Azure and AWS as fundamentally incompatible.

I mean I know i was horrified when I grepped my nose dependancies to find 900+ packages, but i was pleased to find i had a clear version number on each of them. (Yes I am hand-waving what the depenancy manager resolves which is I guess the point of this post in some manner, but the post here seemed to be saying when you have incompatible requirements you are stuffed. And yes, that's true. So don't have transitive errors - this is only a problem for package maintainers not for developers, and so i suspect is a package _aggregation_ problem?

</comment><comment><USER11> _> "Incompatible changes should not be introduced lightly to software that has a lot of dependent code. ..."

I certainly agree that "incompatible changes should not be introduced lightly."_

This is agreeing with a sentence that the semver authors didn't write. The clause "that has a lot of dependent code" isn't in there arbitrarily.

What everyone in an ecosystem wants is high quality, easy-to-use, stable packages. In a perfect world populated by programming demigods, v1 of every package would be all three of those. In practice, human software engineers do not design usable APIs and write robust bug-free code without feedback from users. In order to act on that feedback, they need to change their code, which sacrifices stability.

The way this works in other healthy package ecosystems is that packages have a lifecycle. Early in the package's lifetime, it is undergoing rapid, breaking change while it finds its way. It can do that relatively easily because there are a small number of users harmed by the churn. If it gets popular, that implies it has found a good local optimum of design and quality. At that point, stability takes precedence and the package's evolution slows down.

The path to a great library is usually through several versions of a kinda- shitty one. A good package manager supports both maintainers and consumers working on packages at all stages of that lifecycle.

 _> Able to predict the effects on users more clearly, authors might well make different, better decisions about their changes. Alice might look for way to introduce the new, cleaner API into the original OAuth2 package alongside the existing APIs, to avoid a package split. Moe might look more carefully at whether he can use interfaces to make Moauth support both OAuth2 and Pocoauth, avoiding a new Pocomoauth package. Amy might decide it's worth updating to Pocoauth and Pocomoauth instead of exposing the fact that the Azure APIs use outdated OAuth2 and Moauth packages. Anna might have tried to make the AWS APIs allow either Moauth or Pocomoauth, to make it easier for Azure users to switch._

Those decisions are only "better" because they route around a difficulty the package manager arbitrarily put in the first place.

There is already _plenty_ of essential friction discouraging package maintainers from shipping breaking changes arbitrarily. Literally receiving _furious_ email from users that have to migrate is pretty high on that list. I don't see value in explicitly adding more friction in the package manager because the package manager authors think they know better than the package maintainer how to serve their users.

 _> To be clear, this approach creates a bit more work for authors, but that work is justified by delivering significant benefits to users._

Users don't want all of the work pushed onto maintainers. Life needs to be easy for maintainers too, because happy maintainers are how users get lots of stuff to use in the first place. If you push all of the burden onto package maintainers, you end up with a beautiful, brilliantly-lit grocery store full of empty shelves. Shopping is a pleasure but there's nothing to buy because producing is a chore.

Good tools distribute the effort across both kinds of users. There's obviously some amortization involved because a package is consumed more than it's maintained, but I'm leery of any plan that deliberately makes life harder for a class of users, without very clear positive benefit to others. Here, it seems like it makes it harder to ship breaking changes, without making anything else noticeably easier in return.

 _> They can't just decide to issue v2, walk away from v1, and leave users like Ugo to deal with the fallout. But authors who do that are hurting their users._

Are they hurting users worse than not shipping v2 _at all_? My experience is that users will prefer an imperfect solution over no solution when given the choice. It may offend our purist sensibilities, but the reality is that lots of good applications add value to the world built on top of mediocre, half- maintained libraries. Even the most beautiful, well-designed, robust packages often went through a period in their life where they were hacky, buggy, or half-abandoned.

A good ecosystem enables packages to _grow_ into high quality over time, instead of trying to gatekeep out anything that isn't up to snuff.

 _> In Go, if an old package and a new package have the same import path, the new package must be backwards compatible with the old package._

This doesn't define _for whom_ it must be backwards compatible. Breaking changes are not all created equal. Semver is a pessimistic measure. You bump the major version if a change _could break at least one user, in theory._ In practice, most "breaking" changes do not break most users.

If you remove a function that turned out to not be useful, that's a "breaking" change. But any consumer who wasn't calling that function in the first place is not broken by it. If maintainer A ships a change that doesn't break user B, a good package manager lets user B accept that change as easily as possible.

As far as I can tell, the proposal here requires B to rewrite all of their imports and deal with the fact that their application may now have two versions of that package floating around in their app if some other dependency still used the old version. That's pretty rough.

What you'll probably see is that A just never removes the function even though it's dead weight both for the maintainer and consumer. This scheme encourages packages to calcify at whatever their current level of quality happens to be. That might be fine if the package already happens to be great, but if it has a lot of room for improvement, this just makes it harder to do that improvement.

<comment><USER12> Well, the article calls for a v0, which seems to be exactly for the use case you describe? There are no import path changes, undergoing "rapid, breaking change" is allowed, and if you ever find a good local optimum you can graduate to v1 without any import path change either. I don't see any requirement to ever move to v1, although users may understandably prefer libraries that do. I don't quite understand what additional support you are looking for from "a good package manager".

I'm also not sure this makes it harder to ship a v2. Sure, users will have to change their import paths, although I'm sure tooling like GoLand can easily automate this. But this also frees library maintainers to do extensive API redesigns, without worrying about breaking everything or hanging their existing users out to dry. In particular, the ability to make v1 depend on (and become a wrapper for) v2 is quite nice. Not only does this pattern not break existing code, but it even allows users who have not yet migrated to the new API to benefit from the active development on the latest branch. And of course there is the potential for some degree of automated migration, through inlining wrapper functions as mentioned in the article.

</comment></comment><comment><USER13> Has something like gcc symbol versioning been talked about? I can probably sense the sneers from some, but I'd imagine there could be an evolution/"go way" to implement it.

<comment><USER14> This is about software (source code) versioning. Shared library symbol versioning is a completely orthogonal concept.

</comment></comment><comment><USER15> I feel like the article made its case pretty well, but I really dislike idea that I need to duplicate my library into a "v2/" directory (or a different top level git repo) in practice. Maybe I'm misunderstanding something, but this seems to be exactly what branches are for. If I'm not able to specify a branch name in the package "path" then there's something really wrong.

<comment><USER12> It wasn't obvious to me either, but apparently vgo translates that into the appropriate git tag, it's not actually a separate directory.

<comment><USER14> Yeah, it's just the import path that it's changed, but it's still ugly as sin and makes the mapping between import paths and filesystem paths non-trivial.

</comment></comment></comment><comment><USER16> While I still think SemVer is crap (because of the edge cases) this seems to be a reasonable approach to library versioning.

<comment><USER14> Mind to expand about SemVer?

<comment><USER16> It says only majors should break the API, but bugs do it all the time. So that rule is just wrong and gives a false feel of safety.

<comment><USER14> And the alternative is?

<comment><USER16> Simply treat every new version as a major release, everything else is a lie.

Sure, you can structure it by "intent" but don't pretend a bugfix can't break your API

</comment></comment></comment></comment></comment><comment><USER17> I am guessing my view of versioning being the fundamental abstraction for constructing software system is not well shared.

I did not see anything that isn't an approximation of versioning with added semantic tailor to more focused use cases.</comment>


Elasticsearch as a Time Series Data Store - <AUTHOR> https://www.elastic.co/blog/elasticsearch-as-a-time-series-data-store <comment><USER2> That's great for unstructured data, like data with high cardinality on the dimensions. But for most real world metrics outside analytics, this isn't necessary and a data model like prometheus makes more sense. If I did the math right, even after compression elasticsearch uses 22 bytes per data point (23m points / 508 megabyte) where prometheus uses about 2.5-3.5 bytes per data point.

Disclosure: Prometheus contributor here

<comment><USER3> Given your background, I'm going to take this opportunity to ask some very noobish questions. (I will be doing my due diligence to read up on Prometheus, I likely should have done so prior, but these are just some off the top of my head that I'm not sure I'd gain a good intuition for until late in the learning process)

\- How is the bulk of this additional compression derived? Is it explicitly the existence of a data model that lets you use more aggressive/intelligent compression strategies?

\- Does this come at a cost? (increased CPU overhead, latency at read time, something like that.)

<comment> chaotic-good If you can predict next value in the sequence you can achieve better compression (xor predicted value and actual, not previous and next - [http://users.ices.utexas.edu/~burtscher/papers/dcc06.pdf](http://users.ices.utexas.edu/~burtscher/papers/dcc06.pdf)), but I don't think that Prometheus developers are using this.

And BTW, I don't believe in 2.5-3.5 bytes per data-point somewhere outside synthetic benchmarks.

</comment></comment></comment><comment><USER4> While I'm happy to hear about a great success story of a great piece of open source software, Elasticsearch has done a great disservice by making application developers lazy about learning the ins and outs of various analytical/transactional/storage backend systems.

Echoing other commenters, Elasticsearch is hardly the best tool for many kinds of analytics. In fact, it is strictly not a good tool for several use cases. For starters:

1\. It's not good at joining two or more data sources

2\. It's not good at complex analytical processing like window functions (for example to calculating session length based on the deltas of consecutive timestamps partitioned by user_id and ordered by time).

Of course, it's also good at many things like simple filtering and aggregation against "real-time" data. Being in-memory really helps with performance, and with right tools, it's horizontally scalable. Elastic's commercial support is also not to be discounted.

However, as an old OLAP fart who spent years optimizing KDB+ queries, I am deeply concerned about the willful ignorance of data processing systems that I see among Elasticsearch fans. Just take my word for it and study Postgres (with c_store extension) and other _real_ databases, in-memory or otherwise, open-source or proprietary, so that you won't be shooting yourself (or future co-workers) in the foot, trying to shoehorn Elasticsearch and its ilk into suboptimal workloads (To be fair, I see a similar tendency among Splunk zealots).

<comment><USER5> > Of course, it's also good at many things like simple filtering and > aggregation against "real-time" data.

And also fulltext search at scale, which is basically its primary use case.

PostgreSQL's fulltext search isn't quite at the same level. The last time I looked into its capabilities, it didn't fully support TF-IDF. (I don't think it keeps track of corpus frequencies for terms.) Interestingly, I think SQLite's fulltext support does include TF-IDF, but I could be misremembering.

I mean, the Elasticsearch docs are pretty clear that joining doesn't work well (or really, at all). I'm not sure how being clear about the trade offs of your software is "doing a disservice." Sometimes you don't need to store relational data. Sometimes you do need to store relational data, but the other benefits of Elasticsearch outweight shoehorning relational data into what is effectively a document database.

If your only complaint is that people misuse software... Well... Yeah. It's been happening for a while now. We should help educate others. I'm not sure your approach is the most constructive.

</comment></comment><comment><USER6> Worth mentioning that Elastic.co has a commercial product called Watcher [1] which I think is a really nice way for making an automated alert system. The downside is being a commercial product I can't use Watcher and would have to implement one myself.

I am still deciding between ES, a relational database and Cassandra for time series data. We use graphite now and are happy with it, but I think having a single database handling logs, events and metrics data would be much more ideal. Having logs already in ES does make ES a better choice.

[1]: [https://www.elastic.co/guide/en/watcher/current/index.html](https://www.elastic.co/guide/en/watcher/current/index.html)

<comment><USER7> We used elastalert on a project and it did the trick: [https://github.com/Yelp/elastalert](https://github.com/Yelp/elastalert)

<comment><USER6> Thanks... and Python... I don't have to reinvent something... will take a look thanks!

</comment></comment></comment><comment><USER8> The 2.5 release of the time series focused dashboard Grafana added support for Elasticsearch. In a way they've come full-circle, since Grafana started several years ago as a fork of the Elasticsearch dashboard Kibana.

[http://grafana.org/blog/2015/10/28/Grafana-2-5-Released.html](http://grafana.org/blog/2015/10/28/Grafana-2-5-Released.html)

</comment><comment><USER9> So many ways you can abuse Lucene :) Many years ago, we used it as a graph data storage as well.

<comment><USER10> And I used Lucene as the data backend for an inference engine recently :) If there is one library that keeps me in the Java world, it's Lucene. No other open source comes close to Lucene in its category.

</comment></comment><comment><USER11> We use elastic search in a very similar manner as described in the article to store high-frequency data for our instance and multi-cloud profiling / benchmarking tool:

[https://profiler.bitfusionlabs.com](https://profiler.bitfusionlabs.com)

Since we are collecting data at sub-second granularity and did not want to introduce noise on the profiled instances themselves, whether it be for cpu, mem, or disk, we had a play a few tricks about how to collect data and when to precisely send the data to elastic search, but in general it has been working out very well for us.

</comment><comment><USER12> I tend to think of Time Series data as being several orders of magnitude larger than 23 million data points per week (38 per second) but now I can't seem to find a good definition of Time Series data. Anyone have thoughts on the rough threshold between event data and time series data? I think of arrays of hundreds/thousands of individual sensors that take 10 measurements a second as "different" than user generated data that is time-ordered.

<comment><USER13> I agree, time series should be more like 1000 measurements taken 100 times a second. Industrial acquisition data is not the same thing as timestamped web log data.

</comment></comment><comment><USER14> ??? elasticsearch good for everything.. looks like the computers got cheap and fast enough to do almost anything. Why not put the data in sql database? I suppose this will be much better

But nothing seems strange when in order to monitor 1 server you have to run 10 machine cluster with elasticsearch log collector</comment>


Show HN: 2 Player Space Invaders - <AUTHOR> http://www.undiscoveredfeatures.com/2012/01/space-invaders-2-player.html

<comment><USER2> Impressive project. How much of the time was spent writing the gameplay code as compared to the "engine". To put it another way, how much of the experience was writing the code to handle VGA and audio out as compared to the scoring system, movement, etc.?

Similarly, how much time was spent writing "code" that targets the PowerPC processor versus the FPGA module?

<comment><AUTHOR> The VGA is a DMA controller built into the board, so all graphics were just modifying the framebuffer.

We spent 6 weeks getting the game to work (~10-15 hrs/ week). This was all in C targeting the PowerPC and included effective double buffering for graphics as well as all the game logic.

We then spent another 2 weeks getting interrupt driven sound to work. This was also in C, but was valuable because in order to understand the nature of the generated interrupts we had to understand the underlying bus architecture.

We had 3 weeks to do a basic hardware module (a slave on the peripheral bus that powered some 7-segment displays and generated interrupts when switches were pressed) and then to do the creative portion (which was another slave).

Finally, we built the Audio DMA controller, which took 4 weeks. The Audio DMA controller was by far the most challenging because the rebuild cycle was 20 minutes (terrible EDK) and debugging was difficult.

So I'd say about 50-50.

It was a pretty cool course. No homework, no final, no text books. Just the project and all the documentation we could get our hands on.

<comment><USER2> Thanks for the details, posts like this are definitely the main reason why I miss attending university.

</comment></comment></comment><comment><USER3> Can you talk about your experience with those RF modules? I was trying to use those exact modules with a PIC24 microcontroller a few months ago but eventually gave up on them in favour of other modules because I was unable to get the sample code working (and google tells me a lot of people have problems with them).

<comment><AUTHOR> We had a lot of trouble getting them to work at lower frequencies. As soon as we switched to 915Mhz though, it all worked like a charm. Our guess was antenna problems.

Once we had it set up and had interrupt driven code to handle sends and receives it all worked great.

<comment><USER3> Hmm, I wonder if that was my problem too. Thanks!

PS: I love your project, good work!

</comment></comment></comment><comment><USER4> Amazing work! Was it written in VHDL or Verilog? And are you guys planning in publishing the source code and build instructions?

It'd be a nice introduction for other fpga and design logic students...

<comment><AUTHOR> The main game engine was in C targeted to the PowerPC. The hardware additions were done in VHDL.

</comment></comment><comment><USER5> Nice project, congrats! I hope you don't receive a letter from Taito like I did:

<http://www.scottlu.com/Content/Invaders.html>

</comment><comment><USER6> I'd buy this as an iPhone game.

</comment><comment><USER7> Congratulations, Peter. Impressive.</comment>


ZeroPrestige - <AUTHOR> http://zeroprestige.org/ <comment><USER2> I would love more of this kind of content. I often wonder how many folks over complicate things without considering the cost to benefit scenario. I recently met an old aircraft engineer and pilot and we've become good friends. I admire so much about his approach to life and his hobbies. He loves and regularly does wind surfing, kite-surfing and paragliding. All the tools for these hobbies he built from scratch with his own hands. He has knee issues and kidney troubles but I regularly find him in his workshop. His wisdom to me is going out and buying kite surf gear won't make you a kite surfer. Know how kites work and how to fly kites will. He has one of the nicest 2 man sail boats he used the plans for a fireball and basically copied the design its light and fast. Look forward to the day I can do something similar!

<comment><USER3> Sounds like he doesn't have a wife and kids!

<comment><USER4> He does, he's married to Tim O'Reilly's daughter and now runs an incubator that could be viewed as a grown up version of Zero Prestige

[https://otherlab.com/](https://otherlab.com/)

I used to Kitesurf with these guys when they were still at MIT. Awesome bunch.

[edit] apologies, I thought you were talking about the Zero Prestige founder and now realise you're talking about the parent's anecdote. As someone who builds his own kitesurf gear, electric vehicles, maintains an old house and has a wife & two rambunctious boys - it's totally doable.

<comment><AUTHOR> You're talking about Saul? Incredible inventor. I meet him occasionally as I live a few dozen yards from Other Lab. Do you live nearby? Would love to get coffee if you're up for it. @HNusername at gmail.

<comment><USER4> I'd love to but I'm on the East coast, put my roots down here. Thank you though!

<comment><AUTHOR> Ah, no worries then!!! :)

</comment></comment></comment></comment></comment></comment><comment><USER5> Is this your site? I'm seeing a self-signed cert when I try to visit the link over HTTPS.

<comment><USER6> It's a dreamhost cert likely being presented by his host.

</comment></comment><comment><USER7> Instructables link 404s for me.

<comment><USER8> This guy created instructables [https://www.instructables.com/about/](https://www.instructables.com/about/)

</comment></comment><comment><USER9> "Ice Kite Buttboarding" would be a better title. Who knows what zero prestige is supposed to mean?

<comment><USER10> HN as a general rule prefers website or article titles over any other title, even when the 'editorialized' title posted here is better and more informative than the original. It's not a great rule for some situations like this one where the original doesn't have a good title.</comment></comment>


Show HN: Particulars Game - <AUTHOR> http://particularsgame.com/

<comment><AUTHOR> OP here. I'm not the creator of this game, but I know several of the developers and wanted to help spread the word.

I thought the HN community may like this due to the science-y nature of the game.</comment>


Free Jupyter notebook servers with 5GB disk space - <AUTHOR> https://notebooks.newrails.tech/ <comment><AUTHOR> Instructions on getting started is available on the blog, [https://blog.newrails.tech/](https://blog.newrails.tech/)</comment>


OpenRTS: A 3D Real-Time Strategy Game Engine - <AUTHOR> https://github.com/methusalah/OpenRTS <comment><USER2> People interested in this might also be interested in OpenRA. It currently supports C&C (Tiberian Dawn), C&C: Red Alert, and Dune 2000 and work is ongoing for Tiberian Sun.

[http://www.openra.net/](http://www.openra.net/)

</comment><comment><USER3> For another oss rts engine that already runs multiple online games, there's springrts. It was originally intended for Total Annihilation so it tends towards TA-ish play, but many developers take it in exciting directions with lua.

That said, spring grew very organically and it shows. A fresh start like this probably has a lot of advantages.

</comment><comment><USER4> How does this compare to something like Spring (the RTS Engine) ?

[https://springrts.com/](https://springrts.com/)

<comment><USER5> At a very high level:

Spring is written in c++, scripted in Lua, and released under GPL2.

OpenRTS is jvm based and released under an MIT license.

</comment></comment><comment><USER6> Very cool! My company is working on a tile-based board game engine. The thinking is that many tile-based games are so similar, all you should have to do is change the rules for piece-moving and you could start up a server for a new game.

[https://github.com/QuantumProductions/tic-tac- toe](https://github.com/QuantumProductions/tic-tac-toe)

<comment><USER7> I wonder how many other companies had that same thought.

<comment><USER6> I haven't seen any good systems on Github. We're making a very modular framework -- eventually a Javascript client & server could share the same .JS file for game rules, just swap it out.

Most of the game engines I've seen either do too much or are too specialized.

<comment><USER8> Some time ago I saw this one: [http://www.vassalengine.org/](http://www.vassalengine.org/)

It has an amazing number of "modules": games implemented on it.

It is written in Java.

<comment><USER9> Just a heads up, but Games Workshop went after the vassal guys pretty hard when people started uploading 40k army stats. I would be very careful with anything GW related just FYI.

Not sure how it would go today (they're giving away licenses to anybody with a pulse and an iOS app on their resume right now), but back in the day they were _very_ protective of their IP.

<comment><USER6> Thanks for the heads up. I was hoping people would make their own board games; good to know!

</comment></comment></comment></comment></comment></comment><comment><USER10> You might be interested in the free Age of Empires II engine then:

[http://github.com/SFTtech/openage](http://github.com/SFTtech/openage)

</comment><comment><USER11> Are there any released games written using it yet?

<comment><USER12> I don't believe there is. At this stage what the engine really needs is a couple 3D artists who can help churn out a few more CC-BY models so that they can put together a properly playable game demo.</comment></comment>