Ask HN: Would you switch to a 4-day-a-week schedule if you could? - <AUTHOR> #1 - Would you switch to a 4-day-a-week schedule if you could? Why or why not?<p>#2 - Would you do it if it also meant you made 80% of your current comp? Why or why not?<p>Someone asked something similar about 4 years ago, but I wanted to see how the sentiment has changed and what you think :). <comment><USER2> Just one thing: In the 50s and 60s working weeks were 6 days in Germany (east and west). In the 70s this was reduced to 5 days (40 hours), and later, in the early 80s, in West Germany even to 35 hours/week. All this was possible without reduction of wages because working productivity had grown fast enough to compensate companies for the "lost" working time. Can anyone really imagine that working productivity grew significantly LESS than it had between c. 1945 and 1980 during the last 40 years? So, where did all the extra gain go in the mean time? Higher wages? Nope. Higher pensions? Nope. longer holidays? Nope. Lower prices? Nope. They all developed over the last 40 years in a speed that kept them more or less on the same relative level than in the 1970s/80s. The only thing that grew MUCH faster was the income of the rich… So, we should not ask, IF we wanted to work 1 day less per week, but WHY we are not doing so already? Would the rich be or at least feel much poorer than now? Does anyone of these people really know the difference between 100000000000 and 10000000000 (given, they could even pronounce these numbers correctly ;-))?

<comment><USER3> We get paid not for value, but for replacement cost.

Therefore we do not get paid for productivity but for market rates. Obviously having a high value allows the company the freedom to pay us more, but all else equal the lower cost employee will should hired

<comment><USER4> Then we change labor law. It really is that simple (and how we are currently at a 40 hour work week).

<comment><USER3> Until at will employment is undermined it will be hard to enforce. An employer just wont hire/retain <40 hrs & 5 day employees?

<comment><USER5> At-will employment is largely a US concept.

The rest of the developed world does not have such things, yet 40 hour work weeks are still commonplace.

<comment><USER3> True, this is an interesting concept. Maybe it's due to human preference, norms, or companies' ability to shift labor?

Japan has the salaryman that works much more than 40 hrs iirc.

</comment></comment></comment></comment></comment></comment><comment><USER6> Yup. Did it. I'm so fortunate to have been able to afford it, and it's been awesome.

When my first child was born, I dropped down to 3 days a week, at 60% pay/vesting/etc., but full medical (Google was awesome about it). After a few years, I moved to a new position that I felt really passionate about (Makani at Google[x]), and went up to 4 days a week to make that possible. After a few years there and the birth of another child, I left Alphabet and now work 2 days a week at Elemeno Health (who are hiring for a full time Lead Engineer, BTW; see [https://angel.co/company/elemeno- health/jobs](https://angel.co/company/elemeno-health/jobs)).

It's really life-changing. I've been able to be a much more involved parent than I ever could have working full time. My wife also works part-time [more like 80%] and it's such a big plus.

If you want to try it, and can find a supporting company, true work-life balance is amazing. You may have to pick the right projects, that are well- suited to a reduced duty cycle, but with the right fit, it works great.

<comment><USER7> How does that work?

Do u have to build a large reputation in that company so that they let you do whatever you want?

Or do you apply for these 2 days a week jobs that offer medical and all that?

<comment><USER6> For my first part-time job, I'd been there long enough to have a solid reputation; I also had a fairly-new boss during what had been a super- productive time for me, so he'd really only seen great work from me. I'm sure he was afraid that I'd quit if I wasn't allowed to go part-time, although I was very careful not to say or even imply that.

It was company policy that if you worked at least 50% time, you got full medical. They had standard procedures and forms for it, but still, it was pretty rare. You needed approval up to VP level IIRC. My boss was a director, so that took care of two levels of approval to start with, and his boss [who didn't know me well] trusted his opinion, so it was approved pretty fast, on a see-how-it-goes basis. It went well, so I stayed at 60% for about 3 years, before deciding I wanted to move on.

I don't know how you'd get a job at Google at that duty cycle from the outside; I did hear of one person coming in at 80%, but it's got to be a hard sell.

The 40% job I'm working now was a pretty special case in a number of ways. I was already an adviser of the company before working there. I then started working at 40% for stock and minimum wage, since I didn't need paying for a while and they couldn't afford me at the time anyway. When I'd vested out the stock, just as my COBRA ran out, we negotiated that my salary would go up to maintain the same total comp, but then down by 60% of the cost of medical, and they'd cover the other 40%. You can do these things at small startups; everything's negotiable. At a big company, it's going to be a lot less flexible.

</comment></comment></comment><comment><USER8> By law, in the Netherlands, employees are allowed to reduce their work hours. Allegedly, unless there is a clear, critical business need for you to work the entire week, the company is not allowed to deny your request.

I would love to work fewer days per week, and use the extra time to focus more on my personal development & side projects. However, at my current level of discipline, I'd be fooling myself if I said I would use the time productively.

That said, the idea is still very tempting and I intend to do it in the next couple of years. In the meantime, I fully enjoy all of my 24 PTO days and make use of our policy for getting 5 extra unpaid days without justification.

<comment><USER9> I'd like to merge Netherland law into Washington state law, this sounds like an excellent idea.

<comment><USER4> Have you considered running for Washington state office?

</comment></comment></comment><comment><USER10> 1\. Yes and I did about a year ago. I think I'll find it hard if I have to go back to 5 days a week. It's really nice to have long weekends every week. I've time to work on other things and take days to go hiking or skiing. It makes the work week really fly by as well. Some downsides are having to catch up on everything you missed on your day off, so it can suck up time. Also it takes people a while to realize that this is a permanent thing and to stop inviting you to meetings on a Friday. I would highly recommend that you pick the same day every week and stick to that. I picked Fridays and marked my whole calendar as out of office that day. Otherwise its too hard for others to manage if you take a Monday off one week and a Thursday the next.

2\. Yes. I did this too. Although technically I negotiated to reduce to a 32 hours week instead of a pay increase. But I have the option of going back to a 5 days week with a 20% pay increase. Software engineers generally earn pretty good wages so I'd prefer to have the time than the extra money.

</comment><comment><USER11> 1: Yes. I would like to not work on Wednesdays. Having a split work week sounds way better to me than 3-day weekends and two vacation days still buys me 5 days off.

2: Maybe. Have my hours been reduced by 20%? My workload? Will we have 25% more staff?

Any place I've worked that contemplated allowing people to go on a 4-day schedule expected 10-hour days, which ends up being appealing to very few.

</comment><comment><USER12> 1\. Yes. In a second. I find it tough to do all of the things I want to do with the activities I have outside of work with the amount of free time I have available.

2\. Yes. Less pay for less work makes sense to me. My productivity would likely go up, but at the same time, I'm just more concerned about not having my work take over my life. If 80% of my pay is what it takes to get there, then it's a trade off I'm willing to make.

</comment><comment><USER13> #1) Yes, definitely. The industry where I work does not require me to be on- call. Anything I have access to do is not immediate, and can only be done after business-hours. Further, I am completely comfortable with indirect chats, and digital meetings. Despite this, along with the fact that our company is only a few years old, we can't work from home - at all. It feels incredibly restrictive, especially considering the fact that many employees work around this rule. It feels like management doesn't trust us to do our work. Having just an extra day would make things so much easier

2) Maybe if I lived in Europe, but I'm in the US, and I quite like being able to afford a decent home + benefits

</comment><comment> blaser-waffle I did 4x10 at a previous job. I wouldn't say more got done, but the 3 day weekends were nice. The 10 hour days just dragged on, and productivity died after around hour 7. Since a big part of this was mostly just babysitting / being in the data center, that's not a huge deal. I read a lot of slashdot then. Dodging the traffic was nice too.

I don't know if I'd do it now, though. 9-5 with a reasonable commute isn't bad. I don't want to get home at 8 and "start my day" a couple hours before bedtime.

Would I take an 20% paycut? Nah.

</comment><comment><USER14> Absolutely on both accounts. I've been taking Fridays off the past few weeks and LOVE it. I have so many personal projects; having 50% more free days each week gives me so much more time to pursue them (in addition to the normal house, social, and family maintenance that typically fill up weekends).

20% off current comp also means I'm still comfortably middle-class. So it would be a huge net gain to my quality of life. (If I didn't have a software engineer's salary I would not be saying that!)

</comment><comment><USER15> > Would you do it if it also meant you made 80% of your current comp? Why or > why not?

That would not be a fair discount because the number you see on your paycheck is not the full amount the company is paying to employ you. They also pay for benefits, payroll taxes, equipment, office space, management overhead, etc.

The all-in cost of an employee is closer to 150% of the number on your W2. So assuming your output goes down 20% you should be giving up 30% of your W2 salary to compensate your employer for that loss, not 20%.

<comment><AUTHOR> That is not correct and I want to make sure you get the correct info. One of the larger companies I ran was 130+ people operating in about 12 states. The companies average tax rate on an employee's salary is ~20% depending on the state (~18% to ~22% depending).

So 20% on the salary. *And, that amount goes down relative to salary changes.

After that, if the company is paying for 100% of health care that can have a big impact of course but I wouldn't roll that into this.

Equipment, office space, overhead is separate from salary. I do not suggest bundling those together as it creates a false view of the costs of these type of decisions.

I understand what you are trying to say but I think it is not how I would look at it with my CFO hat on.

</comment></comment><comment><USER16> On my last job instead of a raise, I asked to switch to 90% with the same pay and got it, that was awesome.

On my current job, I work 80% because we have a daughter now and like the extra day with her. I also work from home, which adds more time for her on working days.

I think right now, the most important thing I can do is spend time with my kid, soon kids ;) It is only a couple of years until they also start going to kindergarten and school and also have a schedule.

</comment><comment><USER17> I did something like that for awhile when my first child was born. Went to 30 hours a week, done in three 10-hour days, spending Monday and Friday home with my kid. 75% salary/vacation time, same medical/everything else. I did that for a few years and it was really great. Had to go back to full time eventually because the extra 25% salary ended up being needed, but yeah it was great while it lasted.

</comment><comment><USER18> Yes. I did that for a few months back when I was told I had to spend my vacation days or lose them (PTO was supposed to be convertible to cash under local law, but I didn't want the hassle).

So I took almost three months of Fridays off, and it was _by far_ the most productive and happy time I had - remote work and flex time was nice, but having a clear separation between work and personal time was even better.

</comment><comment><USER19> If it was optional and the company offered optional Saturdays at 20% more to balance out everything.

There are a lot of advantages to a free business day.

</comment><comment><USER20> Yes. I already sorta do. My current schedule is nine longer days, with the tenth day off. I work enough time in the first nine days to make up for the tenth day. It's not exactly the same as a four-day work week though. I would jump on that in a heartbeat.

I immediately noticed an improvement to my overall happiness when switching to my current work schedule.

</comment><comment><USER21> 1\. Yes I totally would love it and think all Americans should go to a 10-hour, 4-day work week. Two days off is not enough. The Europeans have far more vacation time than us. What's disheartening is that we spend more days at work than not - at least this would even the playing field a little. It feels like your whole life is there then. I would be in favor of someone starting a movement to change this across the U.S. 2\. Officially my answer is yes because I value the time off with my family. However, I would argue that a 4-day work weeks can save companies money (i.e. don't have to pay utilities on the 5th day the business is closed) and therefore the cut isn't needed. And I'm still working the same amount of hours, so why cut?

<comment><AUTHOR> Would you ever want to do less than 40 hours, so 4 days of 8 hours for 32 hours a week?

<comment><USER22> 40 hours has been historically used to determine full-time status (and full- time benefits) like health insurance. It's one of the reasons I think this schedule is so hard to get away from.

<comment><USER23> I've heard it's a weekly schedule above 32 hours a week

</comment></comment></comment></comment><comment><USER24> #1 - I guess I would not make the switch. Usually I lose a day's worth of work every week doing things that don't directly contribute to my role and so I need all 5 days to recover from that. In that way I guess I already work a 4 day week, I just spend 5 days doing it.

<comment><USER25> Those things that don't directly contribute to your role are still part of your job and you should be paid to do them. The onus should be on the company to streamline your processes so they don't waste everyones time.

</comment></comment><comment><USER26> Back when I was working full time - absolutely. The reduction in pay would be expected.

I suspect I'd be happiest with 2-3 days a week, with the rest of the time being put into education/personal projects (with a proportional paycut).

</comment><comment><USER27> I DID switch to 4 days for 80% pay, starting in June when my kids got out of school. There aren't a lot of people who do what I do. I went in and asked, and they said they would do anything to keep me.

<comment><USER28> What...do you do?

</comment></comment><comment><USER29> I worked four days a week, taking a 20% pay cut, for about a dozen years while working at SAIC and Physical Dynamics. It was well worth taking a pay cut for three day weekends every week.

</comment><comment><USER7> 1 - yes. More FUN time, less WORK time. Simple as that.

2 - yes. I would just try to get a job with more money if it wasn't enough :).

</comment><comment><USER30> 1\. Yes. Actually switched to 3 days. Company was fine with it as my other option was resignation. I'd gained a valuable amount of knowledge, enough for them to keep me on.

2\. I made 60% of my previous salary but I'm fortunate enough that this covered living expenses. The 2 additional days off made me richer than any raise could.

</comment><comment><USER31> I would switch to a 2.5 day work week or possible even less, with proportional cut in pay, if I could.

<comment><AUTHOR> Gotcha, what is preventing you? Have you tried talking to your current company? Asking out of curiosity :)

<comment><USER31> It's a non-starter pretty much everywhere. No one wants to pay a half-time employee even half as much as a full time one. It's difficult to blame them, half my job is reacting to problems as the arise anyway.

</comment></comment></comment><comment><USER32> Yes. 20% less comp. 50% more free time. (Plus if I needed the money, freelancing pays a lot better)

</comment><comment><USER33> Absolutely. I am too tired in the evening during the work week to do anything and places on weekends are always packed with people. Spreading that out over three days would help a lot.

</comment><comment><USER34> This is something I'd pursue once I hit my retirement targets.

</comment><comment><USER35> 1 yes, because I can have a long weekend for side projects.

2 maybe. I don't want to climb the corporate ladder. I want to start a business. I need free time to polish my skills on that front.

But I prefer 4*10 hours

</comment><comment><USER36> In your scenario 1, refusing is basically accepting to work an additional day for the same comp? Why would someone accept that?

<comment><AUTHOR> Sorry for the confusion, I am asking from the employee perspective, i.e., would you want to work 4 days a week or do you like 5 days?

I've talked to some people who are in a period of their life where they wouldn't want to know what to fill it with and like being at work 5 days a week.

<comment><USER36> I was actually thinking from the employee perspective. If your employer allows you to work 4 days for the same comp, refusing is choosing to work an additional day for free.

It's strange to me that some people don't know how to fill their day when they are not at work. My personal todo list is always full!

<comment><AUTHOR> Gotcha, yep I agree :)

</comment></comment></comment></comment><comment><USER37> Yes, absolutely, 100%, no hesitation

</comment><comment> d--b Nope, cause I already switched to a 2.5-day-a-week schedule, and loving it.

Big pay cut, but worth it.

</comment><comment><USER38> Absolutely. when I cannot, I long for 10/80

</comment><comment><USER39> 1\. Yes. For me it's more about focus. I can dive deep on work then dive deep on family time.

2\. Maybe? 'Murican healthcare is quite the yoke.

<comment><AUTHOR> Yep on #2 I was assuming benefits don't change and hoping they were covering 100%.

</comment></comment><comment><USER40> No. We have 7 days in a week.

<comment><AUTHOR> Can you explain a bit what that means :)?

<comment><USER40> I find it __odd to limit ourselves to the structure of 4-day workweek or 40hr work-week __

I utilize all 7 days to work on my professional & personal projects

To do everything sustain-ably and optimize output, for some projects, I dedicate couple of hrs for 4 days and for some only a day and for some everyday.

 __How you time-box your work for maximum potential is a personal discovery __and the strategies vary based on the person, environment and the nature of the project.

So if we are talking about weeks, I have 7 days to get things done which are important in my life and I will neither follow 40hr work-week not 4-days a week. I will see the project, where it stands against all things in life, put it somewhere in my 7 day schedule, see if this schedule works and go ahead with the learnings each week.</comment></comment></comment>


Truthcoin: Trustless, Decentralized Bitcoin Prediction Marketplace - <AUTHOR> https://github.com/psztorc/Truthcoin <comment><USER2> This could be huge in my opinion, until prediction markets become legal at least. Is there any real value in it being decentralized other than bypassing laws?

There is enormous value in prediction markets, I hate that they are illegal in the US.

When real money is at stake then people make the decision that is most rational and filter out much of their bias.

I do think prediction markets should be legal and required to be 100% transparent. The scenario where people bet on something that they have control or influence over could be dangerous.

The thing that I don't understand about a decentralized prediction market is where do the results come from? Somebody has to say, "this bet won", right?

<comment><USER3> >Is there any real value in it being decentralized other than bypassing laws

You don't have to trust the person running the market.

<comment><USER4> As Intrade reminded everyone, counterparty risk is very real, and wouldn't it be nice to have a non-centralized trustless prediction market?

<comment><USER5> The problem with this proposal is that there is single central (but non- centralized) counterparty risk. If the market grows big, there will be huge monetary incentives to try to find weaknesses in the system and find to collude.

I would like to see non-centralized single market that has protocol for multiple transparent brokers that compete with fees and have their reputation there for everyone to see and judge any way they want. This way the risk of large bets could be divided between brokers.

Broker would be just identity and the 'implementation' could be single individual (anonymous or not), multiple individuals (broker syndicate) who would vote among themselves and manage their membership. Ability to attach decentralized algorithms as brokers should be also possible if taken into account when designing the protocols.

<comment><USER4> > The problem with this proposal is that there is single central (but non- > centralized) counterparty risk. If the market grows big, there will be huge > monetary incentives to try to find weaknesses in the system and find to > collude.

Is this a problem for Bitcoin that there's a 'central' counterparty (the network)? If it is, then multiple Truthcoin networks could be run.

</comment></comment></comment></comment></comment><comment><USER4> See also the discussions in [http://www.reddit.com/r/Bitcoin/comments/1ycjdi/whitepaper_d...](http://www.reddit.com/r/Bitcoin/comments/1ycjdi/whitepaper_decentralized_bitcoin_prediction/) and [https://bitcointalk.org/index.php?topic=475054.0;all](https://bitcointalk.org/index.php?topic=475054.0;all)

</comment><comment><USER6> One problem with these prediction markets is that they don't allow you to make predictions on margin. Many bets in prediction markets have very large time horizons. As long as your asset is tied up in the bet, you are losing out on the time-value of money.

For example, if you bet $100 on Hillary Clinton winning the 2016 election, you don't get to invest that $100 in treasury bonds or the S&P or whatever, which is a pretty significant cost. On real futures exchanges this is mitigated with margin requirements and the legal threat of suing or bankrupting you if you don't make good on your promise to pay.

<comment><USER7> That's not true. There is absolutely no reason why you can't do this sort of stuff on margin, by issuing IOUs. You can even use smart property contracts to collateralize the loan.

However collecting on a non-collateralized loan when things go bad is difficult if you also maintain pseudo-anonymity. But with some sort of KYC procedure in place it could work.

</comment></comment><comment><USER8> SchellingCoin is a similar concept: [http://blog.ethereum.org/2014/03/28/schellingcoin-a- minimal-...](http://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal- trust-universal-data-feed/)

<comment><USER9> Actually, you can even argue that the blockchain itself is a similar concept. It's a Schelling-point-based system for determining consensus, except its scope is limited to the simple question of which transactions came first.

<comment><USER10> Right - I guess the open question at this point is how much weight those mechanisms can bear. Bitcoin has a very easy version of the problem, because all they need to do is time-stamping, where you just have to follow the rules and run your software without hacking it to stay in line with the consensus.

As described the problem TruthCoin is trying to solve puts a lot more stress on the consensus mechanism, because it requires the participants to do more work to stay in line with the consensus.

In practice I think what ends up happening is that somebody publishes a feed and everybody pulls their results from that and "votes" as they're told to by the feed. This may not be too bad in itself as the feed is probably not too bad, and the people publishing it probably have an incentive to keep publishing good data. But I do worry that this system will make it hard to get off the de-facto default data feed if it starts producing bad data, since it's designed to punish people who step outside the consensus...

</comment></comment></comment><comment><USER11> [https://en.wikipedia.org/wiki/Assassination_market](https://en.wikipedia.org/wiki/Assassination_market)

<comment><USER3> [https://github.com/psztorc/Truthcoin/blob/master/docs/3_PM_A...](https://github.com/psztorc/Truthcoin/blob/master/docs/3_PM_Applications.pdf)

"Public Bads, for example "The 'New Haven Lighthouse Point Park' lighthouse to be destroyed before date X" are unlikely to be funded this way, because the Winning State must be made public somehow, and criminals must remain private. Attempts to shift the Schelling-indicator from "Number 1/2/3" to something else, such as "on a Monday/Tuesday/Wednesday evening", have the disadvantage of alerting law enforcement in advance of the likelihood and manner of a future crime. Trades made just before the crime would, for free, alert law enforcement to an imminent threat of crime. Such 'tip-off trades' would be made by any profit-seeking members of the crime group themselves. Therefore, (surprisingly and fortunately) this feature cannot fund anonymous goods such as crimes"

<comment><USER12> This is absolutely not true. Unfortunately, a well-designed claim can circumvent this restriction: "The lighthouse will be destroyed in 2015 and the criminal group will broadcast a string hashing to 'cc9a1595600ebb745ec2cea73e80aad5' one second before the explosion".

This gives no useful information to the police, but it's enough for the criminal to unambiguously identify himself.

I'm disappointed that they didn't consider such scenarios.

<comment><USER13> Who would be the counter-party in that bet? If someone said, "I'll bet you a hundred thousand dollars that I won't blow up that lighthouse", I'd say, "No thanks.", since the outcome of the bet is entirely in the hands of the person making it.

Not to mention the fact that the objection still holds true to the extent that information is revealed. If you say the lighthouse is going to be destroyed in 2015, the police can still give the lighthouse additional security measures in advance of 2015, if not at the specific time. The less information you reveal, the less money you'll make from the market (since you're only trading on part of your private information).

Additionally, while there's nothing stopping a distributed system from allowing death contracts to pay out in the event of a murder or forbidding death contracts in general, it's quite possible that the participants in a market could develop social norms which prevent this from happening (e.g. everyone votes "void" when a dead person is murdered, or everyone votes "void" on all death contracts). I'm not saying I'd rely on it, but I think in mature markets of this nature, you'd actually see some of that behavior.

<comment><USER14> _Who would be the counter-party in that bet? If someone said, "I'll bet you a hundred thousand dollars that I won't blow up that lighthouse", I'd say, "No thanks.", since the outcome of the bet is entirely in the hands of the person making it._

Well of course. Why do you care if the lighthouse is destroyed? The counter- party to the bet is anyone who actually wants the lighthouse destroyed and are willing to pay to see it through.

<comment><USER10> The other problem when you try to censor this is that the illegality and immorality of these contracts actually depends on the intention, which you can't see on a public network. TruthCoin (or any other anonymous system for doing this) wouldn't be able to tell the difference between a payment to somebody to burn down the lighthouse and an insurance contract to help you rebuild the lighthouse if it burns down.

Likewise, for all you'll know looking at the transactions, a payment conditional on someone's death could be a will, a life insurance policy, a political bet or an assassination contract. These all look the same to the network; What matters is the intention behind them.

<comment><USER12> _wouldn 't be able to tell the difference between a payment to somebody to burn down the lighthouse and an insurance contract_

A prediction market provides trust that a payment will happen if a specific event happens.

But insurance also requires another kind of trust. If you want to insure your goods, the insurer needs to evaluate the moral hazard in order to determine his rate. But here, he doesn't know if the buyer of the contract is the owner of the lighthouse, so there's no way he can do that: maybe the buyer turns out to be someone who won't suffer from the loss of the lighthouse and who can easily commit a crime. Because the moral hazard is huge, the insurer can't provide insurance at competitive rates.

Insurance contracts where the buyer of the insurance is anonymous to the insurer don't seem desirable to me. They enable assassination markets but have no real use (except for small amounts that won't create moral hazard, but I'd call that betting rather than insurance).

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> Two potential problems:

1\. People are punished for _failing_ to rig the vote. If a collective does manage to push through a counterfactual vote, everyone who tried to stop them is punished.

2\. Voters in smaller betting pools will be low-information voters. Take a local election: there may be a few dozen or hundred local participants in the prediction market, enough to support betting, but there may be only be one or two legitimate news sources. Voters outside the local area could be easily misled by fake news sources. So throw up a couple of fake websites, use them as sources in a Wikipedia edit-war, and you might be able to trick the low information voters into voting your way and drowning out the local voters with personal knowledge of the event. Your deception only has to last long enough for the bet to be settled, and there is no way to punish it within the system. (If it falls through, the dupes will be punished.)

</comment><comment><USER16> Very cool. But this has me worried:

> through a weighted vote based on present and past consensus

How can Truthcoin protect against votestuffing?

<comment><USER17> From what I gather, in a weighted vote PM system the 'weighting' of the vote (AKA, the expected likelihood of the event occurring) is based on how much money you invest for or against the event occurring. Hence, 999 'for' votes of $1 are worth less than a single $1000 vote 'against.'

<comment><USER4> It's not quite that simple: it's not just a weight based on voting, since that's obviously gameable by anyone who can accumulate enough coins to guarantee a win on a single contract, but it's a weight based partially on how each voter reflects the majority in all the _other_ contracts. So anyone trying to corrupt a particular contract has to deal with the combined opposition of everyone who wants weight for every other contract.

<comment><USER7> So this relies on an identity system?

<comment><USER4> No more than Bitcoin does.

<comment><USER9> Bitcoin does rely on an identity system; it's called proof-of-work. It counts hashing cycles rather than humans, but it's close enough since the final goal is decentralization and not perfect equality. Here proof-of-work or proof-of- stake are also equally necessary for bootstrap purposes; otherwise you can use whatever mechanism nodes use to get into the system in the first place ten thousand times instead of one time and thereby massively magnify your reward.

TLDR: proof of voting is a good consensus algorithm, it's not a good distribution model.

</comment></comment></comment></comment></comment></comment><comment><USER18> Last I looked, this seemed exciting but a little hand-wavey with regard to the ability to have a rig-proof/blockade-proof vote.

Really wish the documents were in text/markdown/HTML instead of PDFs... would be much easier to review (and help improve).

</comment><comment><USER19> I'd call this consensus for consensus. You put your 'vote' in for a given outcome and the votes in aggregate are weighed to determine expected outcome probabilities. By tying the vote/bet to a store of value (stored POW) you might eliminate vote fraud.

I wonder what the effects of desired outcome manipulation by using large amounts of POW to vote? Ideally, you'd want 1:1 connections into the network by individuals.

<comment><USER2> What do you mean by "1:1 connections into the network by individuals"?

It would be required to have the same amount of bets bought and sold, just like the stock markets.

</comment></comment><comment><USER20> How do you prevent sybil attacks? Most reputation systems are vulnerable to these things, where someone can just pay for a bunch of fake ratings to boost them above the rest and pay for itself.

</comment><comment><USER21> See also: [http://bitbet.us/](http://bitbet.us/)

<comment><USER4> bitbet seems like an example of why one would want Truthcoin in the first place: [https://bitcointalk.org/index.php?topic=339544.0;all](https://bitcointalk.org/index.php?topic=339544.0;all)

<comment><USER22> [http://trilema.com/2013/why-i-nixed-p2p-colored-coins-and- al...](http://trilema.com/2013/why-i-nixed-p2p-colored-coins-and-all-that- jazz/)

<comment><USER4> What does that have to do with Bitbet scamming its users?</comment></comment></comment></comment>


Ask HN: What does your "Router Security Checklist" look like? - <AUTHOR> What does your "Router Security Checklist" look like? i.e. What actions do you take to ensure your wireless router is secure as possible?<p>http://routersecurity.org/checklist.php is really great, but kind of verbose. My attempt to boil it down to a simpler checklist: https://github.com/jonmbake/router-security-checklist. <comment><USER2> It's a good list. I just hate those things now.

I worked as a wireless router firmware developer for a while and as a result... I don't use them anymore. The whole industry is just producing unfixable tire-fires.

Different level of caring, but if security is important to you, put cable/dsl/fiber ntu in bridge mode.

Get a pcengines apu (or your favourite sbc), install your favourite os (ubuntu or debian for me). Don't bother with ui, just use a few nftables rules.

It actually worked out cheaper for me than the netgear thing shaped like a stealth fighter.

The other thing which really annoyed me was my ISP periodically updating settings on their stock router. Yeah, they can do that remotely if you use their unit and there's usually no good way to turn it off.

<comment><USER3> Can you expand on this a little bit? What does it buy you?

Is this setup (the linux APU in bridge mode) so that the NTU could get hacked but your internal network would still be secure behind the APU?

What protects the APU from getting hacked like a traditional router would? Just easier to secure yourself?

Did you just purchase wireless access points separately? Did you buy a seperate switch?

I've wanted to do something like this for awhile but I wasn't sure what all was involved, or if it was that much more secure.

<comment><USER2> The short answer is that if you build an x86 box based on crappy linux and updates then your security is based, fundamentally on the primitives which secure eveything else in the world.

It doesn't mean that it's the best. An x86/x64 ssh bug hurts everyone. But it means that everyone in the world gets fucked, more or less, and you don't have to worry as much.

Relying on random companies to secure your gateway puts you in the hands of random companies who not only do not care but also do not make theor own stuff and now lack the basic competence to do so.

</comment></comment></comment><comment><USER4> _Don 't change the password._ Find a router that uses pairing instead of passwords.

 _Don 't check for updates._ Find a router that updates itself automatically.

 _It 's a marathon, not a sprint._ Find a company that writes their own firmware and uses the same firmware for multiple generations. This shows that they are willing and able to invest in security.

Or just check if the brand is Google or Apple.

<comment><USER5> > Find a router that uses pairing instead of passwords.

Can you elaborate on that? I've never seen a router that doesn't use passwords. Does this mean to use WPA2-PSK vs WPA2?

<comment><USER4> I was talking about the admin password; I guess that wasn't clear. You still need a WPA password (unless you use WPS, but apparently that's even less secure).

</comment></comment></comment><comment><USER6> Nothing. Why even bother? My devices connect to untrustworthy networks all the time anyway.

I just don't trust the local network in the first place.

</comment><comment><USER7>
      - SELinux Enabled
      - Sysctl tuning applied
      - Inbound/Outbound/Forward iptables rules enabled
      - ipset iptables rules enabled
      - iptables intercept rules to route all ntp/dns over VPN
        to VPS nodes.
      - Unbound DNS overriding many spammy domains
      - tinc vpn enabled to multiple VPS nodes.
      -- Each VPS node load balancing to multiple datacenter open resolvers that
         are NOT OpenDNS or Google.
      - ip route blackhole about 20k bad networks from firehol on github
      - syslog to internal host
      - Surricata IDS logging to syslog
      - tc cbq traffic shaping enabled
      - haproxy L4 vips for sending select traffic to select squid proxies.
      - power conditionor / ups enabled, one for router, one for cable modem.

Those are the basic things. My router is always Linux running on commodity hardware with dual gig interfaces for clear physical demarcation.

<comment><USER8> Does anyone know anything for somehow providing useful information/action out of Surricata IDS logs? I have stuff routed to my syslog, but just always forgot to check for anything interesting.

</comment></comment><comment><USER9> Checking that I can flash custom firmware comes before anything else.</comment>


Microservices: Pop Culture Architecture? - <AUTHOR> http://deliberate-software.com/pop-culture-architecture/ <comment><USER2> Exactly. These days it is very easy to draw some boxes on the whiteboard and say "yeah this is a microservice architecture", and "everything works with APIs".

Not that the ideas are wrong, but a Microservices are just another tool. Sometimes it makes sense, sometimes one can solve the problem with simple VMs, and sometimes all you need is a cron job and not 3 freaking layers of abstraction.</comment>


Show HN: Graph of wikipedia articles semantic similarity (LSI, Python, d3.js) - <AUTHOR> http://similarityapi.appspot.com/graph/?title=cyborg Small experiment of visualization of wikipedia articles as a graph using d3.js.
Articles with more traffic are bigger. I computed the semantic similarity using LSI with python (gensim) You have to scroll down/right a bit!
http://similarityapi.appspot.com/graph/?title=blade%20runner
There is also a JSON api: http://similarityapi.appspot.com/api/v1/?limit=100&title=blade%20runner
All feedback is appreciated:
@lucamartinetti email@example.com <comment><AUTHOR> Small experiment of visualization of wikipedia articles as a graph using d3.js.

Articles with more traffic are bigger. I computed the semantic similarity using LSI with python (gensim) You have to scroll down/right a bit!

<http://similarityapi.appspot.com/graph/?title=blade%20runner>

There is also a JSON api: [http://similarityapi.appspot.com/api/v1/?limit=100&title...](http://similarityapi.appspot.com/api/v1/?limit=100&title=blade%20runner)

All feedback is appreciated:

@lucamartinetti firstname.lastname@example.com

<comment><USER2> The JSON api should degrade gracefully if results aren't found. I.E. There should be a JSON message explaining that that item doesn't exist.

<comment><AUTHOR> Right! It could use some input checking / normalization too. It expects the title parameter to be lower case now.

</comment></comment></comment><comment><USER3> I've never liked these scrolling animations. You need too much precision to see a part of the page clearly, while with normal scrolling it wouldn't matter if the information you're reading is at the bottom or top of the screen.

</comment><comment><USER4> Does the font size for a node represent it's similarity with the query page?

<comment><AUTHOR> It represents the traffic of the article. Ten most related articles are displayed for each expanded node. Articles with more inbound links are darker

</comment></comment><comment><USER5> Blank page in Chrome.

</comment><comment><USER6> Down?

<comment><AUTHOR> Not for me. You need a modern browser (chrome or firefox) and scroll a bit</comment></comment>


Best Startup Growth Books [Product Hunt Collection] - <AUTHOR> http://www.producthunt.com/e/best-startup-growth-books

<comment><USER2> Please don't use [bracket tags] on your titles, unless it's a [pdf] or [video].</comment>


Joy (Programming Language) - <AUTHOR> https://en.wikipedia.org/wiki/Joy_(programming_language) <comment><USER3> It's a functional programming language where every function is of type stack -> stack.

I like concatenative languages[1] and especially pipelines[2], but IMO Forth- like stack-oriented languages are in the wrong direction, b/c they force programmer to manipulate arguments on a stack, which feels hackish.

And my first real physical computer was an RPN calculator. As a kid I wrote lots of programs for it.

Also b/c of their simple implementation, Forth-s and stack-based VMs are frequently used in the wrong domains, i.e. Bitcoin's Scripts and Ethereum's EVM.

APL-family languages are better in this regard, but they also feel hackish in the general case, especially when passing arguments to nested functions. Copying RTL-style from math notation is also wrong. You are typing LTR (at least in English), but the expressions are evaluated RTL. Here Forth, RPN, and UNIX pipelines got it right.

The interesting direction would be a programming language with following attributes:

      - Purely-functional
      - Statically typed with an algebraic type system
      - Concatenative [1]
      - Tacit / Pipelines [2]
      - <USER2>
      - top-to-bottom, LTR

[1] [https://en.wikipedia.org/wiki/Concatenative_programming_lang...](https://en.wikipedia.org/wiki/Concatenative_programming_language)

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

<comment><USER4> I think your list basically describes [http://kittenlang.org/](http://kittenlang.org/) which sadly has kind of halted in development because the sole dev working on it couldn't get anyone else on-board. Probably because it occupies a pretty rare niche of computer science interests.

<comment><USER3> any relation to Cat [1]?

[1] [https://web.archive.org/web/20150205081218/http://cat- langua...](https://web.archive.org/web/20150205081218/http://cat- language.com/manual.html)

<comment><USER4> It's a direct inspiration - hence the name ;)

</comment></comment></comment></comment><comment><USER5> Joy is great (at least better than SQL) as an API to a database. IE, every query is a joy program. If you add get, set and (de)serialize as primitives, you have stored procedures, intermediate results, galore! Want to transform your result before you send it back to the client ? no problem, just add a transformer function.

<comment><USER6> Can you add a link pointing at some examples?

<comment><USER5> there's a bunch of research related to 'stack based query languages' google for SBQL.

Anyway, in the specific case of joy is more difficult to dig up. Here's an example (I know it, because I implemented it): [https://github.com/openvstorage/arakoon/blob/lsl/src/system/...](https://github.com/openvstorage/arakoon/blob/lsl/src/system/single.ml#L416)

        "script1_" true
        "script2_" false
        0
        [POP; 1; ADD]
        FOLD_RANGE

The above program has basically calculates the number of keys between "script1_" inclusive and "script2_" exclusive. It's really compact flexible and powerful.

Now, before you run off and think about implementing this yourself. First have a look at kitten: [https://kittenlang.org/](https://kittenlang.org/)

</comment></comment></comment><comment><AUTHOR> Example from C2[0]:

      (* x y percent approxEqual *)
      DEFINE approxEqual == 100.0 / rotate [0 =] [pop] [dup rolldown -
      swap /] ifte >

[0] [https://wiki.c2.com/?JoyLanguage](https://wiki.c2.com/?JoyLanguage)

</comment><comment><USER7> "In Joy, everything is a function that takes a stack as an argument and returns a stack as a result. "

But formal parameters are same things[1]. It's just a values pushed to stack before calling a function and values poped from stack on return. That's why you get stackoverflow exceptions in java when your recursion fails.

EDIT: [1]most of the time, in situations that i know about.

<comment><USER8> The difference is that in one case it's an implementation detail covered by an abstraction to make that fact irrelevant to the programmer, and in the other the language is fundamentally designed around the idea that the stack itself is exposed as a data structure to the programmer.

If you don't understand how the difference is significant, I suggest trying a language like Joy, Factor or Forth.

<comment><USER7>
      class Fun implements Function<Stack, Stack> {

        public Stack apply(Stack s) {
          return s;
        }

      }

So this is Joy in Java. But as my neighbor comment asks. How does this benefits a language as tool for humans to get job done (c). From my perspective it only brings you down the abstractions ladder.

<comment><USER9> Climbing the abstraction ladder does not lead to Heaven. Rather to Noah's ark, according to the law of leaky abstractions.

Java has this reputation of being a lot of boilerplate code, and indeed when you compare it to Forth code this is striking. For instance this is the code to square the top of stack:

: square dup * ;

I don't know much about Java, but I guess it something like:

Stack apply(Stack s) { int tos=s.pop(); s.push(tos*tos); return s; }

Of course this is not fair at all because Forth has no type checking, no OO and gets its terseness from the point-free style that stack-orientation allows.

But this example is symbolic of one thing: Java needs a lot of baggage to be viable. A state-of-the-art GC. A state-of-the-art JIT. A complex lexer/parser. A mildly efficient Forth interpreter/compiler can be written by one teenager.

If your job is to get some sort of interpreter running on a brand new hardware, then Forth is probably the fastest way to get that job done. Chuck Moore, the creator of Forth, has funded a company on this - company that is now more than forty years old.

This extends to more common use cases. As most processors come on the market with a C compiler, if you have a Forth interpreter written in C, you can have it running right away. Even before you have an OS for it.

But you can benefit from the OS and the large number of C libraries too. Writing library bindings for a Forth system is often trivial; the hardest part is to decide how the API should look like on the Forth side (often library APIs are too rich and you want to only expose the useful subset for you).

So "stack-oriented programming" leads to simple interpreters and compilers, which in turns gives a lot of flexibility, which is very valuable to get things done.

<comment><USER10> Thank you for this! You concisely answered the question I kept having throughout the wikipedia page and these threads. Obviously there's a world in which stack programming lets you be productive, its flourished, but what is that environment? Bootstrapping, new hardware, working at pre-OS levels, these are all places I don't have to think very much about, so I appreciate the reminder and context for why Forth is powerful there.

</comment></comment></comment></comment></comment><comment><USER11> I've been working with Joy for several years now, on an off, in a hobbyist way, and I've got to say, I think it's the most useful, simplest language.

(I've made implementations in Python and Prolog [https://joypy.osdn.io/](https://joypy.osdn.io/) )

</comment><comment><USER12> The coolest part of this article imo is the binrec operator. Do other languages have something similar?

</comment><comment><USER13> From many viewpoints a stack is a nuisance, for example memory management and context switching. Therefore I think that languages which use a stack are going in the wrong direction.

</comment><comment> kalium-xyz Michelson language has distinctly ruined my taste for language like this.

</comment><comment><USER14> The point of Forth/Joy is that the language is so simple, you don't need compiler. It is a minimum language.

</comment><comment><USER15> I still find ada language more advanced than current ones

<comment><USER16> What do you mean? They're different branches on the tech tree. Saying one is more advanced than the other is strange.

</comment></comment><comment><USER17> Very confusing as just have another Joy web framework. For this kind of new language, one may have to have a kind of FAQ for the reason why it exists at all. Why not just FORTH?

<comment><USER18> > Why not just FORTH?

Joy comes from a totally different background, and has a very unique set of features. The fact that a purely functional point-free programming language finished looked quite similar to Forth in some aspects was just an accident (a happy accident, imo).</comment></comment>


Ink Cartridges Are a Scam - <AUTHOR> https://www.youtube.com/watch?v=AHX6tHdQGiQ <comment><USER2> I first learned about this scam/business strategy in around 2008. I'm from India.

When I was in 10th class, we got a printer for my dad's office work. The printer was for around $40 or so. I was really excited and printed out a few full-page colour images of animals. Then my 4-years-older sister told me that the printer used ink and didn't run indefinitely. Okay. I didn't know that. I stopped using the printer after that.

Eventually, we ran out of ink in 2-3 months. The cost of new cartridges? $50 The cost to get those re-filled in a local shop? $2. It voided the warranty? Who cares - a new printer WITH new cartridges would be cheaper than purchasing separate cartridges.

We re-filled those cartridges around 7-8 times over the next 2 years after which we threw away the printer, and it worked perfectly during the time.

<comment><USER3> _> a new printer WITH new cartridges would be cheaper_

Yes, but most printers come with "starter" cartridges, which have much less ink than the expensive replacement ones.

<comment><USER4> Scam number two: 'starter cartridges.'

</comment></comment></comment><comment><USER5> Yes it is. Fortunately laser printers are a decent alternative. The color laser I'm using still has its original toner carts from the day I got it a year or so ago. I wonder how long it takes Goodwill to sell or turn over their isle of inkjets.

<comment><USER6> I purchased a $50 laser printer about a year ago as well. The stock toner cart is at most half used after printing multiple reams of paper. Inkjet's can suck it.

</comment></comment><comment><USER7> Ironically, we have Open Hardware/Source 3D printers but not 2D ones. Some development in that field too would send a message.

</comment><comment><USER8> It's time to start a new printer company. Anyone on board?</comment>


Why I'm Moving Home - <AUTHOR> https://www.nytimes.com/2017/03/16/opinion/why-im-moving-home.html <comment><USER2> I am 60, when I was young in rural France, people like me run away from the countryside where we were born as it was some kind of intellectual desert. People who were left there become victims of crooks who told them to invest a lot and work hard. Forty years later those countryside people are really impoverished even if they contribute to create astounding value for the companies (disguized as not-for-profit for social and fiscal reasons!) who sell their dairy and meat products. I think this article is of high interest to people who are interested in the society they live in and who wonder how to make it better. While the proposed solution is certainly something people like us would reject, the author has certainly a great courage to propose it.</comment>


Imaging advance offers new view of allergic asthma - <AUTHOR> https://directorsblog.nih.gov/2016/10/18/imaging-advance-offers-new-view-on-allergic-asthma/ <comment><USER2> The photo really shows what's happening.</comment>


Giving up on Julia - <AUTHOR> http://zverovich.net/2016/05/13/giving-up-on-julia.html <comment><USER3> Happy to address these points:

      - Startup performance/memory usage

Yes, we are definitely very acutely aware of these. Julia is not currently optimized for frequently run short scripts. That's the price on pays for having to bring up the entire runtime system (initializing the compiler, RNG, external libraries etc). The good news is that there will be a solution to this soon, which is to statically compile your julia program. The area where this really comes up for most people using is package load times. We're very actively working on making that faster.

      - <USER2>

A little subjective, so not sure how much I can say here. I can say that I'm not a huge fan of our multi-line comment syntax. It's not entirely clear what a better syntax would be though (the original issue on this had some suggestions, but some of them were worse).

      - One-based indexing

I think there has been plenty said on this topic, though interestingly this is one of the only times I've seen the argument made in a way that I actually agree with. That said, I do think there is an easy way to deal with this though. For packages that needs arrays of indices, it would be quite easy to define an `IndexArray` type that does the translation automatically.

      - String Formatting

Yep, you're right, it's a mess. It'll have to be cleaned up.

      - Unsafe C Interface

There's two projects (Clang.jl and Cxx.jl) which can help with this. The former automatically generates ccall definitions for you, the latter just parses the header and generates the call directly.

      - Slowing down in development

I'm really not sure where that impression comes from. Perhaps it is that we're adding fewer features, but rather working on cleaning up existing features. Also, I personally at least have been doing a lot of work outside of base (particularly on the debugger). Not sure. Would love to know.

<comment><USER4> The thing about 1 based indexing is that it's a kind of in your face "this is different" decision from the point of view of a programmers of most popular languages. To be honest I wouldn't want to start investing my time into a language where people who proposed 1 based indexing are making design decisions. It's not that I think they are incompetent but it's clear they care way more about some different world than about my programming world and are ready to make my life miserable stating the point.

Now, I don't know if people from that different world (Fortran, Matlab, some other languages used in academia maybe) would feel the same way about 0 based indexing but it certainly sends the message to programmers outside those domains.

<comment><USER5> R and Mathematica are also 1 based. And R really is popular ([http://www.tiobe.com/tiobe_index?page=index](http://www.tiobe.com/tiobe_index?page=index) \- ok, popularity is droping right now, likely b/c of Julia ;-))

<comment><USER6> Julia seems like it's meant to be friendly to people who know MATLAB, Python, and R (even Fortran). R and Python are really comfortable with working with data science and that's what Julia is geared toward. I have no experience with MATLAB, though. Julia's programming "world" may indeed be a different programming world than C programmers.

I'm not defending Julia per se. I've been patiently observing from the sidelines to see how the language shapes up.

</comment></comment></comment></comment><comment><USER7> Libraries? Sure. Ease of development, I cannot comment on.

But measuring performance with timing a "hello world" program? Seriously? What scenario does the author have in mind that makes this particular benchmark even remotely relevant?

The rest of the rant pretty much comes down to "it doesn't look like Python" (which is IMO a good thing, and I would certainly not call Python a "de facto standard of numerical computing" \-- sure, it's there, but I still see a lot more of R and Matlab -- and note how both have 1-based indexes.)

To be fair, last time I checked, Julia definitely had some catching up to do in a few areas to become a real competitor to those two, but "hello world" benchmarks would not be among these.

It's been a little while though, and I am tempted to check again -- leaving libraries alone for the moment, does vectorization still result in a lot of performance loss compared to loops?

<comment><USER8> > But measuring performance with timing a "hello world" program? Seriously? > What scenario does the author have in mind that makes this particular > benchmark even remotely relevant?

If Julia is to replace Python in scientific computing, people will want to use it for short plotting scripts. Startup time matters there. That hello world is so slow is already telling. A plotting script needs tens of seconds just to load the Julia libraries.

<comment><USER9> They use the REPL like R.

<comment><USER10> Not all of them. Many of them? Sure. Many people also use scripts and so on.

</comment></comment></comment></comment><comment><USER11> I know R and have used Octave. I started learning Julia this morning after a physicist recommended it to me after he switched from python. I used Jupyter/Julia to simulate a neuron as a practice exercise. This is my experience as a beginner:

1\. The static typing makes a big and positive difference. Its nice having a statically typed repl.

2\. The documentation is good.

3\. Using unicode symbols and \mu style tab completion is nice, especially in Jupyter where you can use the same symbols in latex style equations.

4\. The base install is a bit bare. It would be nice if batteries were included - distributions and dataframes in particular.

5\. R uses 1 based indexing and it was no shock to see this in Julia.

6\. I had no problems with the mix of lisp and C++ in the source code. The lisp implementation is beautiful and worth a read.

Generally, I was shocked to see a blog post like this given that my first day with Julia was so positive.

<comment><USER12> > The base install is a bit bare.

I think the problem here is the library approach. They should break stuff out of Julia's core library and move them into default included libraries (like python does).

<comment><USER10> What is the difference?

<comment><USER13> * initial memory footprint is lower

* faster start up time

* cleaner global scope

</comment></comment></comment></comment><comment><USER14> I'm genuinely surprised that one would say that Julia is "slowing down in development". Perhaps it's because less press is being generated about Julia? Or that the commit rate has gone down slightly, now that the easier issues have been picked off and the remaining work will take longer for the next round of incremental developments? I'm not sure what the OP meant, but from the inside, we are busier than ever.

\- Both Julia Computing and the Julia Lab have grown sizably over the past two years. The Lab now houses ten full-time researchers (up from four last year), with five new students coming online over the summer and fall. We also maintain more active research collaborations with more research groups at MIT and off-campus.

\- Julia is a grateful recipient of 12 Google Summer of Code slots this year, compared to 8 for 2015's Julia Summer of Code program (sponsored by the Moore Foundation) and 4 for GSoC 2014.

\- JuliaCon grew from 72 attendees in 2014 to 225 in 2015 and we are on track to meet or exceed last year's ticket sales for 2016.

\- New packages continue to be registered on the central METADATA repository at roughly the same rate since June 2014. [http://pkg.julialang.org/pulse.html](http://pkg.julialang.org/pulse.html)

By some measures we are still a relatively small project, but I don't see any serious evidence for the imminent heat death of the Julia universe.

</comment><comment><USER15> For many users of Julia, long-running performance matters more than microbenchmarks. Having converted a naively written Python program to Julia (there was a huge amount of computation being done over a large search space), I experienced a massive speedup even against PyPy. My Python scripts ran for about 10 hours before I called it quits (.6% of the work had been completed). Converting to Julia allowed me to finish within 3-4 hours, AND it was easy to parallelize.

<comment><USER16> Just how naively was the Python written? ~1600 hours vs. 4 hours of execution time sounds like some extremely naive starting code. Is it fair to even compare them?

<comment><USER17> I've gotten 400x speedups going from python to c++.

<comment><USER18> I've gotten 200x speedup going (badly written) Javascript to (better written) pure python, despite python being a nominally slower language according micro- benchmarks. Comparing run time without knowing anything about the code doesn't say much.

<comment><USER19> Were you using a js runtime without a JIT? Were your python algorithms better? Otherwise a 200x speedup sounds completely unbelievable. That would basically indicate a bug in the js runtime causing degenerate performance under your scenario.

<comment><USER20> That's very believable.

Example: popping from the beginning of a list in Python is O(N). Popping from the end is O(1). Initial poorly written code can have a lot of such obvious optimizations.

<comment><USER21> It's a common programming thing - you write your code, it compiles, it runs, it runs properly on your test case, you try it on your full data, it's too slow. You run your profiler and you spot some problems, you solve them, it's still too slow, repeat until fast enough, declare victory.

</comment></comment></comment></comment></comment></comment></comment><comment><USER22> Not sure why this is on the front page because the criticism in this article is fairly superficial. Julia was designed for scientific computing and interpreter start-up time doesn't matter at all in this context, especifically the start-up time of hello-world. Baseline memory consumption isn't an issue either and one-based indexing is simply something to get used to. If this stops you from being productive, it's not the language's fault. The comments about the syntax remind me of all those people saying Lisp is a bad language because it has too many parentheses.

</comment><comment><USER23> I love python and I don't like Julia at all.

But, I think judging a language (which claims math and scientific computing is it's strongest point) by print screen performance is not fair.

And, the authors last example is a little bit misleading I think. The C code sets up registers and jumps to the main sprintf routine. I don't know why didn't he tell that routine's instructions count...

Has any one counted?

<comment><USER23> Oh. I think metrognome had shown the point. Didn't read it. sorry.

</comment></comment><comment><USER21> I'm not bothered by "hello world" performance myself, and I my recent issues with Julia have been caused by rapid development meaning that when I had to put it down for a few months lots of things I had done (because I'm mortal) stopped working. I wrote this off to "it's 0.x, getoverit". I've never tried complex text formatting in Julia either! My concerns are more focused on the type system (this I love) and performance for massive computation (I've still not managed to persuade my Hadoop admin to put julia images across our cluster, but I suppose I might win the argument one day!)

<comment><USER24> Yeah the poor performance in this blog post is a total misunderstanding of why and how julia is performant. Is printing "hello world" fast really that important? OK. Then don't use Julia.

You pay for it by having the compiler JIT the code in a highly optimized fashion. If you have actual numerical calculations that are compile-once, run- many-many-many-times, then you will see a huge performance benefit, amortizing the cost of expensive compilation and optimization that happens once at the beginning of the program cycle.

The very title of what he links to "How To Make Python run as fast as Julia" betrays the problem. The goal of Julia is to not have to do that sort of boilerplate/arcane tweaking to get really good performance - the system will do it out of the box.

I'll have to disagree with the notion that Julia is hard to read. I'm currently deploying Julia to run automated hardware verification on a computer chip. Effectively, I've written a DSL using Julia macros that generates assembly code files, compiles, and executes it, and my coworkers (who do not use julia) have found it easy to read my code and understand what's going on. Far easier, in any case, than the equivalent C code using asm blocks.

I do agree about the one-based indexing. I get it, it's what matlab does. But it would be nice to say, be able to throw an option at the top of a program that forces the appropriate indexing.

<comment><USER25> >The goal of Julia is to not have to do that sort of boilerplate/arcane tweaking to get really good performance

As someone who is new to python (for bioinformatics), and find python is a fine language... but..

The do it "this way not that way" method of implementation of the same algorithms to get it to run fast makes writing performant python a tedious exercise in research and profiling. The article cited suggests Cpython, numby and numpy [1] as ways to make it faster.

Why not C using GPU acceleration as the time spent coding would probably be the same? Thats what I love about plain python, its fast to write and has some good data structures.

I haven't tried Julia, but someday its on my list of languages to learn more about.

[1][https://www.ibm.com/developerworks/community/blogs/jfp/entry...](https://www.ibm.com/developerworks/community/blogs/jfp/entry/Python_Meets_Julia_Micro_Performance?lang=en)

<comment><USER18> _Why not C using GPU acceleration as the time spent coding would probably be the same?_

As someone who does that sort of thing I can assure you it isn't. And when I do use C and GPU acceleration, doing so via cython and pyCUDA (and the myriad of libraries that build on cython and pyCUDA) saves massive amounts of time and effort.

That being said I do agree that writing fast python is quite different from writing python, probably more so than in most other languages.

</comment></comment></comment></comment><comment><USER26> When the author compares the number of CPU instructions that sprintf compiles to in both C and Julia, he fails to take into account dynamic linking in C:

      jmp	__sprintf_chk

I would guess that another few hundred instructions run as a result of this jmp. Thus, the difference in the number of instructions that C's sprintf and Julia's @sprintf compile to are not as drastic as the author makes it seem.

<comment><USER27> Also note that the author asks for the native code for arguments of type `(AbstractString, Float64)`. The first is an abstract type — which means that this code will never get called in the first place. Julia will resolve the type of the string, and then dispatch to the concrete implementation. Which, for an ASCIIString, is 3x shorter.

<comment><USER28> This is actually a good point, but what about Unicode? Will `(UTF8String, Float64)` emit another function?

<comment><USER27> It's the same on 0.4, and Strings are getting a big overhaul on 0.5. Here are the results for 0.4:

        $ julia -e 'f(a, b) = @sprintf("this is a %s %15.1f", a, b); code_native(f, (AbstractString, Float64))' | wc -l
        WARNING: Returned code may not match what actually runs.
             628

        $ julia -e 'f(a, b) = @sprintf("this is a %s %15.1f", a, b); code_native(f, (ASCIIString, Float64))' | wc -l
             194

        $ julia -e 'f(a, b) = @sprintf("this is a %s %15.1f", a, b); code_native(f, (UTF8String, Float64))' | wc -l
             194

<comment><USER28> Thanks, this looks better. I'll need to update the post.

</comment></comment></comment></comment></comment><comment><USER29> To me the biggest thing that Julia brings to the table is the amazing concurrency support.

You can not only easily create parallel tasks on your machine, but on any machine that you have ssh access to that also has Julia installed.

That is simply amazing. Until something else can do that, Julia is going no where but up in my mind.

</comment><comment><USER30> At this point there are many well phrased comments saying most of what I wanted to say - unreliable airport wifi ate a long response a few hours ago - so let me just note that

A) the author is entitled to all their opinions and experiences and

B) raises some good points (see Keno's comment) but

C) raises some subjective (syntax, etc) and odd (measuring performance by timing a one line hello world) points.

Julia is not the right hammer for all nails, but I use it every day and enjoy doing so. If you're on the fence, I encourage you to give it a try. And for what it's worth, end as a keyword aside, I really like the syntax, particularly :: type decorators. Your mileage may vary.

</comment><comment><USER31> Complaining about microbenchmark performance, then perf benchmarking in a completely unscientific way, is pretty bad (These are non-quiesced machines, etc)

The error bars show it's probably slower, but i'm pretty sure he's not going to get valid measurements to 0.002s by running it once with time without doing things like disabling CPU throttling, etc :)

Of course, looking at julia's microbenchmark for C, they had to do a bunch of things to get the compilers to stop optimizing away their benchmarks, so that should tell you something right there :)

The example they give of sprintf calls is completely misleading, since sprintf_chk is going to be several hundred instructions itself.

Follow [https://github.com/lattera/glibc/blob/master/debug/sprintf_c...](https://github.com/lattera/glibc/blob/master/debug/sprintf_chk.c) all the way down the rabbit hole :)

</comment><comment><USER32> Julia aside, Keno, kudos for being an absolute class act and replying to everything so politely.

For what it's worth, my impression of Julia has been overwhelmingly positive, and all the developers I've interacted with have been polite and friendly. I haven't made the switch from Python because:

\- I prefer the Python syntax

\- I like Python libraries (I know about PyCall, and it rocks)

\- The increased speed of Julia doesn't really add much given numba/theano and so forth

However, I really like:

\- Optional static typing for sanity checking

\- Can write fast functions directly in julia - which is handy when passing callbacks or doing numerical routines like integration (although this requires timholy's fast lambda package)

<comment><USER33> > this requires timholy's fast lambda package

Not on nightly. That's fixed now. The technical concerns here about startup time etc are fixable, we'll get to them.

</comment></comment><comment><USER34> If you want to replace Matlab you should use Octave, julia is for making your next climate model, not for "hello world" ricing

<comment><USER35> I've found the Armadillo C++ library ([http://arma.sourceforge.net/](http://arma.sourceforge.net/)) to be a better replacement, when concerned about speed.

<comment><USER36> IME eigen3 is even better (although the template-induced hellish compilation times are a huge pain).

<comment><USER35> I was going to say "but there's RcppArmadillo!" But now I see there's RcppEigen, too. I'll have to check it out.

</comment></comment></comment></comment><comment><USER37> As someone who does quite a lot of image and signal processing the fact that their arrays are 1-based is a complete deal breaker. The first few years of my career I worked with Matlab and I hated 1-based arrays with a passion. I think I never encountered a situation where the Matlab way makes stuff easier, almost always the 0-based index is the more natural choice.

After I switched to Python/C I can say that I never want to work with 1-index languages again.

<comment><USER38> I just cannot comprehend how anyone can use 1-based indexing. I have never used it myself though so there's always the possibility that I may just be missing out on something. Glad that you cleared this up.

<comment><USER39> I just can't comprehend how something as trivial as indexing can be a deal- breaker for someone. I write 0-based most of the time, but I can think of as many advantages for 1-based indexing as I can for 0-based. The only time I can understand prefering 0-based is in C or something of a similar level, where indexing is just syntactic sugar for pointer arithmetic.

</comment></comment></comment><comment><USER40> Seems like for the last five years every language has been gaining popularity. Now they're all losing popularity. Except rust, perhaps, and elm. What gives?

<comment><USER41> Obviously static/strong typing is winning. Last man standing are JavaScript and Python, the former transforms into a compilation target (like Elm), the latter doing some kind of gradual typing (like mypy).

I think dynamic typing has its place, but more in experimental design and prototyping than in bigger application development (big IMHO).

<comment><USER42> Why is strong/dynamic typing considered such a big deal?

<comment><USER43> Two main reasons:

1\. You can detect very common errors (e.g. typos) at compile-time instead of _maybe_ detecting them at run-time. This makes the code much much more reliable (or equivalently you don't need to do nearly as much testing).

2\. Dynamic typing prevents IDEs from doing extremely useful things like _real_ code completion and symbol renaming.

If you're thinking "but I edit Javascript with code completion" or "code completion isn't such a big deal" then it's probably because you've never used _accurate_ code completion, e.g. Microsoft's Intellisense for C++, or pretty much an Java IDE.

<comment><USER44> There are ways to deal with that in dynamically typed languages.

1) Common Lisp implementation use a compiler to detect typos, etc.

        CL-USER 21 > (defun bar () (fo0))
        BAR

        CL-USER 22 > (compile *)

        The following function is undefined:
        FO0 which is referenced by BAR

2) In Common Lisp one can ask the running Lisp system for information about classes, symbols, functions, etc.

The use cases for renaming are also completely different. If you take for example a Java class and you want to rename an attribute and update the getter/setters you might want to use a 'tool'. In a dynamically typed language like Common Lisp, this is often not necessary because code generation is widely used and changes can be propagate that way.

</comment></comment></comment></comment></comment><comment><USER45> You know, you take a potshot at Go in there, but I observe that none of the negative bullet points apply to Go. My real point here not being "Go rocks", but that languages are more than just the collection of bullet-point features they claim on their home page. I think this is another one of those things that says obvious when I say it directly, but a lot of people are not letting it inform their actions.

Also I _love_ that first alphabet image on that page.

<comment><USER46> Was it really a potshot at Go? Maybe I read it incorrectly but what I thought was being said was that all the "modern" features that Julia/Python/other newer languages have are not available in Go (think stuff like list comprehensions). I don't think that's a potshot as it's not really a negative, just a difference in design. Go doesn't have those features and many times does not want those features, and there is nothing bad about that and nothing bad about stating such.

</comment></comment><comment><USER47> \- One-based indexing

setting aside whether zero- or one-based indexing is 'better'; R and MATLAB have one-based indexing, so the convention is likely familiar to many in the Julia target audience.

still, as the OP says, (relatively) painless interoperability with C and C++ is an advertised Julia feature, both of which use zero-based index (although Fortran is one-based), and that mis-match is a definite obstacle to interoperability.

<comment><USER33> I find I don't pass individual array indices back and forth between C and Julia as often as I would in Python or Matlab, since I don't need as much compiled interface glue. You can do iteration and the like entirely on the Julia side or entirely on the C side and mostly pass the array buffers back and forth. ccall handles that for you if you declare a Ptr{Float64} argument type that the C library expects and send it a Julia Array{Float64} input. It's when you have arrays of indices, like the linear programming library his example snippet is referring to, that you notice. Or serializing text-based representations.

</comment></comment><comment><USER48> Regarding performance, I can only say that julia's primary use case doesn't really seem to be for small scripts that take a few msec to run.

The last set of programs I wrote in julia had run times of hours to days. A few extra seconds of startup time is well worth the 10x or better improvement over using python for the same tasks. The code was also tighter and easier to understand. A win all around.

</comment><comment><USER49> I think it's a little naive to "give up" on a language early on, but on the same note, I've walked away from several for periods of time because they lacked the maturity I needed.

I did enjoy the article and the linked article that spelled out ways to increase performance with Python. With any environment there are dramatic performance improvements to be had with a little bit of engineering and knowledge.

I've seen a bit of an odd shift towards Julia - People seem to be adopting it in droves from my perspective. That means that the development team is doing something very right. Given some of the people I've heard talking about Julia, I don't think it's going away any time soon.

This kind of feedback is good for the team. If you are going in another direction for the time being, stating why is always helpful. Glad to see a developer here in this thread.

</comment><comment><USER50> Numba package for Python gives you the LLVM JIT for numerical work. I really don't see how Julia is relevant anymore.

<comment><USER51> Python really doesn't (and cannot) address many of the design goals of Julia. At least as I understand them (and I'm not a Julia user). Whether or not Julia has/will achieve them either is a separate issue.

Python can be a very useful mess for this sort of work (numerical analysis etc.), and is succeeding at that quite well. In fact, that's it's main challenge to something like Julia. Not design, that ship sailed a long time ago. But practicality and availability of packages and bindings. Once you get too far ahead in that, it's hard to justify using any other platform for "real work", rather than because it's fun to hack on.

<comment><USER50> Python is a mess if you make it that way.

What are these design principles in Julia that Python can't possibly uphold?

</comment></comment></comment><comment><USER52> Diversity is good. Ruby and Python, C# and Java... good ideas can emerge. Having another Python-like language is good.

</comment><comment><USER53> The author has addressed very valid issues, but I strongly disagree with his objective theme of "Giving up"

I don't think the Julia team should be blamed for anything. I have not heard of the project receiving any support from large companies as Python, Golang and Rust do.

For this reason, I find it very unfair to compare Julia to these languages. FYI Julia has not even reached version 1.0 yet!

The language just needs support, and the author is not helping out.

</comment><comment><USER54> You may be interested in Nim. If you can tolerate working without a REPL, Nim hits essentially all the bullet points you mentioned, from macros to coroutines, multiple dispatch, ability to call c trivially and python easily and so on.

It has static types and is fast. The libraries for scientific computing are not there yet, but it lends very nicely to mathematical abstraction.

<comment><USER55> How does Nim's "trivial" C interop work if Nim is garbage collected and C is not?

(Not trolling, genuinely curious).

<comment><USER54> Nim compiles to c, hence you can just call c functions. All you need is a signature, which can even be generated automatically from a c header.

You can manually allocate memory if you want, and you can also pass pointers, either to manually allocated or gc memory. The gc will not run when c is working, since it is triggered by allocation

<comment><USER55> So if I call from Nim to C (passing a gc'd Nim-owned pointer), then that C routine calls back into Nim (via a function pointer, or some other way through the FFI), the nested Nim routine may trigger gc and wipe out the pointer my C code is working with?

<comment><USER54> The situation that you describe could happen, but it is quite rare in practice. Usually, I call c functions that do their work and be done, such as BLAS.

For such cases, you can either manually allocate the pointers you pass to c, or temporarily disable the gc. Each thread has its own heap, so gc for one thread does not break anything in other threads

<comment><USER55> It's just those "quite rare in practice" bugs that I'm concerned about. Those tend to cost the most.

</comment></comment></comment></comment></comment></comment><comment><USER56> You also might be interested in: [https://www.reddit.com/r/Julia/comments/3rxg1x/is_julia_movi...](https://www.reddit.com/r/Julia/comments/3rxg1x/is_julia_moving_too_fast_in_too_many_directions/cwsdc6v)

</comment><comment><USER57> Lots of guesses as to what Julia can or can't do in here, primarily by peopl who obviously don't follow the progress of the language. Slowdown? I'm following Julia closely, and I have quite a hard time doing my job and keeping up with commits and the issue/pr tracker at the same time. That Julia doesn't get as much PR now that it's a bit more mature cannot be too surprising. How many articles have you read lately about the thousands and thousands of people who will be learning C(++) over the coming years? Not many I guess, but does that mean C is dead?

</comment><comment><USER58> I swear every day I see a new post about why X programming language is awful. It is pretty demotivating.

</comment><comment><USER59> About the startup time: a Julia server and client could mitigate this, couldn't it?

</comment><comment><USER60> Key phrase

"I became very enthusiastic about it."</comment>