Ask HN: Did the Google Play Store fail at keeping itself clean? - <AUTHOR>

My father just bought himself an iPhone 4s and it's the first I've used the Apple Appstore. All of the apps I saw were great and looked non-spammy. Even the free ones didn't give me pause to install them.
Contrast this with the Google Play store where I have to cautiously read what permissions I'm giving and see that it doesn't install ads everywhere. I do _not_ feel safe installing things from the Google Play store. It's just mostly garbage, especially if you browse the Free Games section.
What can Google do clean up this mess and make the store feel safer? <comment><USER2> Google has a much lower set of standards than Apple. When I worked at ClearChannel, our apps got into the Android store on the first try, where Apple kept asking for revisions. They said our streaming video bitrate was too high, and it would eat users data and battery life. They even made us retool the app so that the RSS news feed sent a diff instead of the whole feed to save a few KB. It was annoying, but in the end it made a better product. Google lets anything into the store, and it shows. If they raise the bar now, however, they'd still need to prune the crap that's already there.

EDIT: A good first step would be to do a basic review of permissions. I have seen tip calculators that ask for location, SD card, read contacts, and more. This is clearly not related to the core app functionality.

</comment><comment><USER3> I had the opposite experience. I heard about all the great games on the iPhone, so I downloaded a bunch of 5-star games. However, I was shocked to find that almost all of them were spammy and hardly let you play without making an in-game purchase. To me, spammy games which basically require in- game purchases do not merit a 5-star review. A free game on Android that is only superficially free would not receive a 5-star review.

</comment><comment><USER4> Yes. as a casual user its almost impossible to find useful not spying apps there. Its basically full of spyware.

Google apps has made it OK for developers to make money on what on windows is malware and requires anti malware software for.</comment>


Table of ongoing and proposed basic income pilots in North America - <AUTHOR> https://docs.google.com/document/d/1NWS5bYcGKcdLBji8TXPaDrXND27OmwC2Rht1bvb5Orc/mobilebasic <comment><AUTHOR> Source: [https://basicincome.stanford.edu/research/ubi-cities- toolkit](https://basicincome.stanford.edu/research/ubi-cities-toolkit).</comment>


SoundCloud and Universal Music Agree to Licensing Deal - <AUTHOR> http://www.nytimes.com/2016/01/14/business/media/soundcloud-and-universal-music-agree-to-licensing-deal.html <comment><USER2> I think it's absolutely ridiculous that SoundCloud gets into the ring to compete with Spotify, Apple Music et al. SoundCloud shines for small musicians, independents, for actually building a community around music. The other players don't do this. I blame VC money. Let's see if they can partner with the big labels and avoid watering down what makes them unique.

<comment><USER3> This isn't about competing with Spotify. This about having the major labels on board so people can remix and play with and use that content without Soundcloud getting sued into oblivion. Maybe you'll find all of Kanye's albums now added into Soundcloud as well but the point is to allow Soundcloud to continue as it is - and that was never going to happen without some kind of subscription. They have gazillions in VC funding and have to find a way to monetise the site.

</comment></comment><comment><USER4> Hmm, IIRC they had a surprisingly open streaming API (raw .mp3 stream). Doubt that will be staying. :(

Edit: I see that API still exists at the moment. I wonder how that works with the ads they have running on the website. Do you currently get no ads if you use a custom player which uses that API?

</comment><comment><USER5> Does this mean they'll finally stop their absolutely ridiculous policy of removing mixtapes and remixes of popular songs, and of shutting down the accounts of "offenders"?

<comment><USER6> Yes, but they'll put ads in front of them and give the money to the rights holder, which is not a hindrance producers who create original material will have to suffer with.

<comment><USER7> As a remix artist myself, my experience from youtube (which I believe have similar deals in place) is that rights owners will tolerate (i.e. monetize) straight copies of their work, but many remixes, mashups and cutups get blocked. Which is sad because I feel the opposite would be more beneficial to pop culture as a whole (i.e. more interaction, variation and interpretation, less passive consumption of blockbuster hits).

<comment><USER8> Echoing thoughts from one of the best documentaries of all time: [https://www.youtube.com/watch?v=5SaFTm2bcac](https://www.youtube.com/watch?v=5SaFTm2bcac)

<comment><USER9> The content I suppose is interesting if a bit pretentious, but the voice over is like nails on a chalkboard.

</comment></comment></comment></comment></comment><comment><USER10> Soundcloud stopped being cool the second they put ads on it. This just seals it's fate as a youtube without videos.

<comment><USER11> The biggest problem I have with their ads is that I pay for SoundCloud and still have to suffer through them :(</comment></comment>


A gene therapy to treat a rare, inherited form of blindness will cost $850K - <AUTHOR> https://www.washingtonpost.com/amphtml/news/wonk/wp/2018/01/03/gene-therapy-for-inherited-blindness-sets-precedent-an-850000-price-tag/ <comment><USER2> > Only 1,000 to 2,000 people in the United States are thought to have > deteriorating vision caused by this errant gene

This drug will only work on, let's say 1500 people. Of those, let's optimistically say that 1/3 have insurance that will cover expensive treatment. So 500 patients can be expected to be treated by this drug per generation.

So this drug will optimistically get a revenue of $500 million per 2 decades or so, or $25 million per year.

The number generally thrown around for getting a new drug researched and onto the market is $200 million. So it will take 8 years just to break even (although likely front-loaded once it becomes known that this drug exists), and total revenue for this drug for the forseeable future is about 500 million.

Does this seem spectacularly unreasonable ?

<comment><USER3> No, it doesn't.

It would just really suck to be one of those 1000 that have gene and can't afford the drug.

<comment><USER4> They would be in the same position as they were before, only without that system it wouldn't be worth researching the drug to begin with.

<comment><USER5> Likewise if the company gave the therapy for free to everyone who couldn't afford to pay $850k, they would be in the same position as they were before.

<comment><USER6> Before the reaearch endeavor, the company had x more dollars in cash. They bore the cost with the expectation that it would generate cash flows in the future (to hopefully more than offset the cost). The dollar cost was likely quite large. So the company certainly would not be in the same position had they not decided to develop the drug. There was no cost the affected genetically blind, however. They only now have the option of potentially being able to get a new treatment.

</comment></comment></comment></comment></comment><comment><USER7> So Luxturna is a DNA sequence embedded in the AAV2 virus ([https://en.wikipedia.org/wiki/Voretigene_neparvovec](https://en.wikipedia.org/wiki/Voretigene_neparvovec)). It seems like they modified the Kozac (header, basically) of the DNA slightly (see Wikipedia). But essentially what they're doing is injecting the 'correct' DNA sequence into people with a biallelic (both copies) mutation on the RPE65 gene. The AAV2 virus is there as a delivery mechanism to get the DNA into the cells more efficiently. The injected DNA then hangs around (loose, I think) in the cell and will get read and the correct proteins get manufactured even though the patients main copies of the gene are faulty.

The virus bit might be hard to do, and maybe editing the header of it. I'm not sure. I guess that probably is quite hard.

But manufacturing DNA and injecting it is fairly trivial, as in this guy with a PhD and a small lab was able to do it for about $400. There are biotech companies who will just make the DNA for you. [https://www.theguardian.com/science/2017/dec/24/josiah- zayne...](https://www.theguardian.com/science/2017/dec/24/josiah-zayner-diy- gene-editing-therapy-crispr-interview) ... this was using CRISPR which is like a DNA find/replace, so in some ways more sophisticated than the way Luxturna works.

I'm not saying anything about the price of this treatment per se, obviously a load of R+D and regulatory ballet had to be done here, but just saying the basic building blocks of some gene therapies are quite a bit cheaper than I imagined.

<comment><USER8> Although the opinion of real biologists seems to be that Zayner is a snake oil peddling hack who doesn't know what he's doing.

e.g. [https://freethoughtblogs.com/pharyngula/2017/10/14/i-could-u...](https://freethoughtblogs.com/pharyngula/2017/10/14/i-could- use-bigger-muscles-but-im-not-going-to-get-them-with-biotech-in-my-garage/)

<comment><USER7> That guy misunderstands the point of Zayners stunt, and also misunderstands the kits that Zayner sells (they are kits for using crispr on yeast in a Petri dish). Zayner acknowledges that his arm injection stunt is likely very inefficient.

Still I'm not going to defend Zayner, he probably is a bit of a dick.

But the point is that you can modify the DNA of at least a small number of your own cells in a rough untargeted way for about $400. That's quite surprising. Makes you wonder what might be going on behind closed doors elsewhere.

edit: Here's Zayner's write up of his stunt: [http://www.ifyoudontknownowyaknow.com/2017/10/the-first- huma...](http://www.ifyoudontknownowyaknow.com/2017/10/the-first-human-to- attempt-crispr-gene.html) (possibly dodgy ads, adblock recommended)

</comment></comment></comment><comment><USER9> This is why the majority of medical breakthroughs and innovations occur in the US. Sure capitalism has its negatives, but its positive is that it provides vast financial incentives for people to create new solutions while at the same time filling a need for humanity. $850k is a hefty pricetag, but the ability to see your loved ones is priceless. Win/win for everyone involved

</comment><comment><USER10> The story is about the pricing, but the drug itself was more interesting to me:

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

It's a gene therapy delivered in a viral vector. They inject it (into your eye which much be fun). It appears to be one of the first approved gene therapies.

<comment><USER11> Could something similar be injected into you're eye and turn it into a different kind of eye ?

<comment><USER12> This might be limited by what the sum total real capability is of the entire vision system. An eye that can receive extra wavelengths is useless without the Neurons that can perceive and project into our conscious mind. To imagine injecting viruses that will change the genetics of the brain is a major leap of discomfort.

<comment><USER13> >An eye that can receive extra wavelengths is useless without the Neurons that can perceive and project into our conscious mind.

Not necessarily. For example, consider that neurons in our auditory cortex aren't different from neurons in our visual cortex!

What is different about them (and the "subsequent" perceptual/conscious level) is that they receive different inputs, and have learned the systematicity of how these inputs behave in relation to the body's own actions.

This is related to the "Sensorimotor Contigency" theory of consciousness [1], which would predict that it should in fact be possible to process entirely different types of sensory input, given long enough exposure and a clear systematicity of the input signal.

[1] [http://www.scholarpedia.org/article/Sensorimotor_theory_of_c...](http://www.scholarpedia.org/article/Sensorimotor_theory_of_consciousness)

<comment><USER14> Some experiments by "cyborgs" are relevant... I remember that one of them added to himself _" a sensor that detected Earth's magnetic field."_

[https://www.wired.com/2007/04/esp/](https://www.wired.com/2007/04/esp/)

and it seems the experiment has been updated:

[https://www.theguardian.com/technology/2017/jan/06/first- hum...](https://www.theguardian.com/technology/2017/jan/06/first-humans-sense- where-north-is-cyborg-gadget)

 _"As we walk down the street there's radiation, X-rays, infrared and ultraviolet, as well as the electromagnetic field of the planet. So we want to create new senses to become aware of our environment."_

and

 _Harbisson, who is colourblind, has an 'eyeborg' that allows him to "hear" the light spectrum (including infrared and ultraviolet), while Ribas has a sensor in her elbow that vibrates when an earthquake occurs anywhere in the world._

</comment></comment></comment></comment></comment><comment><USER15> Cost-effectiveness guidelines somewhat arbitrarily state that an expense of $50,000 per year of life is reasonable, since this is the estimated average annual cost of dialysis therapy. This gene therapy is sight-saving, but not lifesaving, so cost-effectiveness analysis must consider QALYs -- quality- adjusted life-years. How much is a year of blind life worth relative to a sighted year? There can be no definitive answer to this, but one guesstimate I found was 80%. Using this and the $850,000 total cost, one finds that the treatment would have to provide on average 85 sighted years to be considered cost-effective. Insurance companies could use this kind of analysis to restrict the treatment to infants.

</comment><comment><USER16> If someone gets treated with this therapy, and then has children, will the children inherit the parent's original gene or the repaired gene?

<comment><USER17> No. The genetic alteration is limited to the person who receives the therapy. Reproductive cells aren't affected.

<comment><USER16> So if you have this, at a cost of $850k, is it then unethical to have children, knowing that there's a high chance that they'll subsequently have to pay $850k in order to be able to see?

I suppose, more generally, even in the absence of an $850k fix, if you have genetic blindness, is it unethical to have children?

<comment><USER18> Not in our current human society, where new cures are invented every week. Its no longer a life sentence for your children; its a temporary setback.

<comment><USER19> This is what I came to believe too, and it's yet another reason why I believe the highest priority for the society is to _stabilize what we have now_ \- as opposed to constantly try to tear everything down in order to win something for one's group.

Looking at the last decades, it's no longer unreasonable to think we might cure things like blindness or deafness, or paralysis, in the next 100 years. But that can only happen if our technological civilization survives uninterrupted. If it spirals out of control and self-destructs, we'll be stuck in a pre-industrial age for thousands (if not hundreds of thousands) of years, until the Earth replenishes some of the easily accessible high-density energy sources we pretty much entirely mined out.

</comment></comment></comment></comment></comment><comment><USER20> Is there data on how effective this is, and how the vision of those treated compares?

I can't imagine the price I'd put on a sense; nice to know you can literally get half of the price for a single eye treated.

<comment><USER21> Check this out: [http://ir.sparktx.com/static- files/3f12ea2d-7f52-4ccd-93d4-c...](http://ir.sparktx.com/static- files/3f12ea2d-7f52-4ccd-93d4-c8ee7df871d2)

It is their corporate presentation; lots of data on the drug starting around slide 10. these are data from the clinical studies required for FDA approval. Investor presentations (for public companies) tend to have good summaries of the key data on a drug; for more info, you can read scientific publications on the drug in academic journals

</comment></comment><comment><USER22> Just wondering, why there's no mention of this being free, i.e. 100% government funded. Something like this essentially transforms somebody's life, allowing him/her to work, not being reliant on others etc. Not to mention the (oh, sadly) not quantifiable humanitarian reasons.

<comment><USER23> Because it's a slippery slope. You can always argue that a blind person is able to work in some way (callcenter, software dev, etc), and/or you can argue the same for other diseases. Where do you draw the line ?

That argument aside, I am of the opinion that all healthcare should (eventually) be free so that arguments like these become moot.

<comment><USER24> I used to think all healthcare should be free. One observation changed my belief:

"The demand for healthcare is effectively infinite."

There really is no limit to a person's healthcare needs. It's a moving target. The only way to make all healthcare free would be to start by defining exactly what is and isn't healthcare. That's exactly what is upsetting about the concept of government provided services. At some point someone will have to say "enough."

Who would decide that, and how?

<comment><USER22> Sure thing, I think the current soft limit is set by your doctor, who will e.g. postpone your non-essential (e.g. cosmetic) treatment. Blindness is just that - blindness. I see no slippery slope here.

Currently experienced three health systems: Polish, US and German; first is woefully underfunded and public, second is ultra-private, third is a properly funded public system.

In Poland, I used both public and private, using private whenever I could (think dentist, blood test etc.); in US I never went to the doctor because I had to pay extra; in Germany I feel comfortable and happy with the fact that I get public healthcare for my taxes. Actually planning a string of visits to the dentist ;)

</comment></comment></comment></comment><comment><USER17> $850K may seem like an outrageous price, but Steve Miller, CMO of Express Scripts, who has been a vocal critic of drugs prices over the years, called this price "reasonable".

</comment><comment><USER25> "Clinical data shows that the drug works at[sic] up to four years in some patients"

"a partial refund if the drug does not work in the first three months"

So is it $850,000 every four years ?

<comment><USER17> We don't know. I assume the 4 years came from the clinical trial (I.e. Patients were followed for 4 years).

</comment></comment><comment><USER26> We are going to see more of this sort of thing. The elephant in the health- care costs debate is, ironically, that we are becoming much more capable at it.

</comment><comment><USER27> I predict someone will figure out how to edit the genes the same way with off- the-shelf kits within a year or two and will publish it for free.

<comment><USER10> Personally I somehow doubt this (in this case).

The disease effects a small number of people (1 in 4000), and doesn't cause complete blindness in all those effected.

It's delivered in a viral vector, kind of not so easy to do yourselves I'd guess. Probably the easiest way would be to get hold of some and culture the virus yourself? Then just make as much as you want.

Still injecting something made without strict QC into your eye might not be so appealing.

<comment><USER27> [https://www.fastcompany.com/40477808/genetic-modification- is...](https://www.fastcompany.com/40477808/genetic-modification-is-just-an- injection-away-if-youre-feeling-lucky)

<comment><USER10> The article is well written and interesting.

The kit looks fun, but I don't think it as (easily) be used to replicate this work, it's just too different.

The issues mentioned in the article also apply.

</comment></comment></comment></comment><comment><USER28> Science and technology make the world a better place - for those who can afford it. The rest can go get stuffed.

I remember an old psychological test where you were presented with a scenario where a member of your family is sick and while there exists a drug that can cure them, you cannot afford it. You're given the option to break into the local pharmacy and steal the drug- and asked whether you would do it. The way you answer the question is an indication of your moral development stage. If I remember correctly, the idea is that the most morally developed individuals will decide that stealing the drug is not moral, that if everyone stole what they needed without regard to the interests of the original proprietor, there would be anarchy and society would collapse. So on the whole, the moral decision is to not steal the drug, even when your relative needs it.

Well, if society allows a life-saving drug (or, indeed, a blindness-curing treatment) to be unaffordable to those who need it, then that's already a society that is not serving its members' interests. What the hell do I care if society can support science advanced enough that it can cure blindness, if it won't cure _my_ blindness? I'm expected to do the moral thing and sit nicely and not rock the boat- but others are not expected to help me, in my need? Bugger that for a game of soldiers!

A society that leaves people blind when it can cure them is just as useless as one that burns. So let it burn.

I'd steal that drug in a heartbeat.

Oh btw- in another article about this miracle cure, I read the ridiculous claim that blindness will cost a person about $1million in their lifetime, so the $850k price tag is justified. I don't see this claim in this article, but it just goes to show what some may consider "fairness": "blindness robbed you of $1million, now we're gonna take another".

<comment><USER29> That's what they said about indoor plumbing, air conditioning ect. Yea new technology is expensive to start. Should people not work on anything that cannot be made available cheaply from the get go.

<comment><USER18> As mentioned above, such therapies cost a few dollars to create and deliver. The price is artificial.

<comment><USER19> Marginal costs may be small, but the initial costs are large. Once the initial costs get repaid, and as third parties reverse-engineer the process, the price of the treatment will drop.

<comment><USER18> In a free-market R&D ecosystem, sure. The issue is, do we want that to be how it works. And its debatable how much of the initial cost should be loaded onto this cure, as the work builds on other work, and the technique will produce more interesting results in future.

And in this case, does it boil do to publishing the dna fragment? Is this another 'patenting a number' discussion?

<comment><USER19> I don't feel we want that to be how it works, but I also have no good ideas of how it could work differently, while retaining the speed of discoveries.</comment></comment></comment></comment></comment></comment>


Instagram Influencers Are Driving Luxury Hotels Crazy - <AUTHOR> https://www.theatlantic.com/technology/archive/2018/06/instagram-influencers-are-driving-luxury-hotels-crazy/562679/?single_page=true <comment><USER2> Sometimes it feels like the entire U.S. economy consists of perception peddlers. Also Himalayan salt lamps and essential oils.</comment>


Why Startups Should Only Hire Good StarCraft Players - <AUTHOR> http://www.helloko.com/2010/09/why-startups-should-only-hire-good-starcraft-players/ <comment><USER2> Like I said in the other thread, I started Shopify build it up to 30 something employees and run it as CEO.

I play Starcraft2 right now and am usually in the top 10 of my diamond league. In fact the company is almost completely stacked with video game players. The article here is probably not taking itself very seriously but it's definitely close to what I've done ( unconsciously ) and it works extremely well.

It sounds silly but the day to day work of a CEO isn't very different from playing a game of Starcraft.

Before starting a startup I used to compete in many gaming tournaments. Not sure if that helped me much in preparation for becoming a CEO but it definitely got me started on programming. My first programming project was to decode the network protocol of quakeworld and create a proxy server that could inject all sorts of useful information into the network stream. Cool stuff.

<comment><USER3> you should have put in your battle.net ID and that Shopify is hiring :P

</comment></comment><comment><USER4> Mastering an extracurricular activity can be very good for your work ability. This article's list is StarCraft-focused, but similar lists could be made for several other games. NetHack taught me to type thousands of characters in a row without making a mistake or losing focus, and to use absolutely every resource; Descent taught me to visualize space and motion; Left 4 Dead taught me how to stay cool under pressure.

We need not limit ourselves to games, either. How many useful skills does one acquire in the process of becoming a quality musician, playing competitive sports, or raising a child?

I wouldn't advocate only hiring good StarCraft players, but I would advocate looking for people who are awesome at _something_.

<comment><USER3> > We need not limit ourselves to games, either

I think the opposite - that is, why is it impressive that someone is a good piano player, whereas being a top Starcraft player, not so much.

<comment><USER5> One cultivates the head and the heart, the other only the head.

<comment><USER6> Which is which? I'm not going to beat a dead horse, you can look at my comments in the other thread for my thoughts on StarCraft itself, but I'm going to speak generally on RTS:

I look at RTS as a sort of dance that eventually becomes a contest to find the better dancer. Even so, the better dancer may lose, and the better dancer may dance better and lose simply because the dance was better losing than winning. A loss has no real-world consequences, and as such, the sort of person I'd like to work with has no fear of losing. Only fear that the game will be uninteresting. I play for war stories, not to win.

Of course, games where one gets trounced tend to be uninteresting, and as embarrassing for the victor as the loser.

<comment><USER5> A really good pianist can literally bring me to tears with the skill _and_ feeling of his art. No RTS player, no matter how brilliant, will ever do this. I admire Olympic athletes but an artist that can make me look at the world in an entirely new way or make me feel something I've never felt before is on a different level, IMO.

<comment><USER7> Some of my most treasured memories, even years later, are epic games with friends at the peak of our skills. You may not see the art in it, but that doesn't mean there is none.

Some people juggle geese.

<comment><USER5> I've had many of those myself, but the original question was why most people have more respect for pianists than gamers and the answer is that _most_ people find the Moonlight sonata moves them in a way the goose juggler doesn't.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Damn, here I am trying to learn Haskell and master Lisp, and it's really getting good at Starcraft I should be focusing on.

<comment><USER9> The point is that you're taking the time to master something in your free time because you enjoy it. StarCraft 2 just happens to be something relatable to the author.

You're fixating on the individual pebbles when you're supposed to see the mosaic he made.

That's the problem with kitschy blog material that gets a lot of attention, 80% of your audience goes off into la-la on the irrelevant minutiae.

<comment><USER10> > That's the problem with kitschy blog material that gets a lot of attention, > 80% of your audience goes off into la-la on the irrelevant minutiae.

Perhaps if titles/analogies/content were more sensical ....

</comment></comment></comment><comment><USER11> I feel a profound sense of relief that we have moved on from "Why WoW is the New Golf".

I suspect that I might actually be able to play Starcraft without it taking over my life. Though I have so far been loath to test this theory.

<comment><AUTHOR> Definitely better for that - I can feel good playing one game and stopping, which is essentially 15 minutes or so. I'm glad I never played WoW... sounds like it could be bad in terms of being a big time suck :(

<comment><USER12> I ran a guild for a few years. It was a whole lot more work than running a business, with worse hours and more drama. Also, the loot sucked.

That said: Some people watch TV, some people put petroleum products on dead plant matter using animal hair, some people go watch fat men sing in classical Italian and they would have to read along in the handy little English guide if they hadn't known the plot for the last forty years. I killed imaginary dragons. It was quite fun at the time.

P.S. Not related to Starcraft, but nice job with the Japanese-learning startup. Cheers to your & your students' success with it.

<comment><USER5> The best thing about WoW is being thrown into a group of 10 or 25 strangers trying to solve a problem that requires careful, coordinated action. The group dynamics that emerge can be fascinating and the interactions and history of these groups reflect a lot of common real-world social dynamics.

It's interesting as a near-pure meritocracy too. A 15-year old kid might be calling the shots for 24 other people twice his age if he's got the experience and skills to lead.

It becomes a treadmill pretty quickly though.

<comment><USER12> I can't agree with you that WoW is a meritocracy. Give two people similarly situated characters and it might very well come down to experience, skills, and leadership ability.

However, the ability to arrive at "similarly situated characters" is not distributed in an equitable manner, and that grossly tilts the playing field. For example, WoW trades advancement for time. If you've got 720 hours to kill and spent them in the same calendar years as I did, you were going to end up with a level 60 character and a fair amount of gear (with differences depending on your WoW skill, guild, etc, but negligible compared to the differences between a lvl 1 and lvl 60 character).

Maybe skills would let you lead a raiding guild taking down what was then "top content", maybe they would not. But if you _didn't_ have 720 hours free, perhaps because you had to work three jobs to keep your children fed, then you weren't going to be leading that raid, regardless of your charming personality or skill with stance dance.

(Speaking of stance dance, I have a few years of practice of flipping between Academic Liberal Or At Least Educated By Them and Republican Somewhere To The Right of Atilla The Hun. Sometimes in the same conversation.)

<comment><USER5> Yeah it's a meritocracy assuming you put in the minimum baseline of time it takes to grind up gear. This takes a lot less time than it used to though. I'm not sure if you played recently but the whole thing has been tremendously dumbed down. Players of average ability can now clear all raid content without a huge weekly time investment.

Heroic modes are a different story though.

<comment><USER13> Nowadays participation mostly depends on gear, not abilities. Parties will seek players with for example "at least 5K GS", which means 5000 GearScore points according to a popular GearScore AddOn which analyzes your equipment.

The Dungeon Finder (with which you can find random parties for random instances) also employs a gear filter, albeit less outrageous than human players.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> \- Good StarCraft Players Play StarCraft All The Time, And Don't Invent And Build Real Things.

\- Good StarCraft Players Know How To Configure Their Video Card Settings, Making Them Savvy Enough To Deploy And Manage Business Servers.

\- Good StarCraft Players Master A Small Predictable Walled Garden, Not The Vast Outside Ever-Changing World Of Business.

Seriously. Using that logic, you can make the argument that a porn star who has a high PPM (penetrations per minute) should be hired by startups. ;)

<comment><USER9> I think the greater point here is that you should hire people who have a real passion and knack for something in their life that isn't necessarily what you're hiring them for.

Given the choice between two mostly equal candidates, I'd choose the one that could wax philosophic about StarCraft 2 or their boat building project.

</comment></comment><comment><USER5> RTS games always seemed to me like nothing so much as a test of how much manual busy work somebody will tolerate.

If I were to hire people based on their ability to play any game, it would be Go.

<comment><USER3> Starcraft is probably as close to Go as you'll get as a video game.

<comment><USER15> Particularly when one compares the aspects of scouting, harassing, turtling, and expanding to the similar goals of Go to control board territory, eliminate enemy stones, and defend strong holds.

The real difference is in Starcraft you're dynamically adjusting to your opponent's strategy in real time with fog-of-war obscuring your view and no benefit of a turn based cadence.

<comment><USER5> I haven't played much Starcraft but the thing that makes Go endlessly fascinating is the dynamic behavior of groups and the fact that a single stone placed on one end of the board can instantly & completely reverse the fortunes of stones on the other end of the board. Is anything similar possible in Starcraft?

<comment><USER9> Yeah, I won a game earlier tonight because I kept a scout in his base, which he didn't notice, and was able to respond immediately to his tactics, allowing me to use minimal forces to great effect.

Although I won, technically my play was sloppy because I didn't have to utilize all of my resources to wrap up the game.

Things don't go to the extremes of Go in SC2, but the dynamic is still there.

</comment></comment></comment></comment></comment><comment><USER16> StarCraft players do not have a monopoly on the virtues listed in this article.

<comment><USER9> <http://hackerne.ws/item?id=1661890>

</comment></comment><comment><USER17> Fun article, I agree the same principles in the article can be applied to many skill based hobbies.

The thing I love about Starcrack is how dynamic each game can be. The three races are so different and unique, yet balanced. There are so many different ways a game can end; there is a counter to every counter. You have to manage economy. You have to manage army production. Technology upgrades, information reconnaissance, micro-harassment, army positioning. Your brain has to be on top of everything, and you have to make decisions quick.

Its like compressing your startup work-life into a 20 minute simulation. Its kind of crazy, I actually get a bit of adrenaline and nervousness from wanting to win so badly.

</comment><comment><USER18> Without too much effort I can translate this to:

\- only hire white males

\- under 25

\- without much of s social life beyond other < 25 year old males

\- but if your target market is under 25 males and you don't plan to deal with government laws that will screw you because of the the bigotry.

Then you're good.

<comment><USER19> Considering the immense popularity of Starcraft in Korea, should I take this statement to mean all Koreans who play Starcraft are actually white males?

</comment></comment><comment><USER20> I've did a lot of gaming when I was younger, and always on a super competitive level. I think it's more that personality trait of close to obsessive competitivity that translates into being good employees, or anything they put their mind to for that matter. Some of the things you list are very concrete in-game examples, but I feel can all be summarized as a result of people taking the game more "serious". But you definitely have a point.

Would I ever mention anything about my gaming history on a job interview though? Unless I know the interviewer would be really into it, sadly, no.

</comment><comment><USER21> The article is interesting, but short on evidence.

Has anyone in academia performed psychometric testing on game players versus non-game players?

</comment><comment><USER22> Have any of you detractors even played starcraft? I'd like you to try it. For all intents and purposes, starcraft (or any other real time strategy game) is essentially training for effective resource allotment, time based strategic planning, and command/control skill. All managers should be have to be excellent players.

</comment><comment><USER23> That's a huge generalization. Different games test different skills. Some skills apply to things like startups, some don't.

Disclaimer: I suck at starcraft, so naturally I disagree with this post.

</comment><comment><USER24> This title gave me my biggest smile tonight :)

</comment><comment><USER25> Love it! "They know when to Expand"

</comment><comment><USER26> I'm sorry, but being good at Starcraft only means that you're good at Starcraft.

<comment><USER27> I love how prefixing a statement with 'I'm sorry' has been transformed into meaning the exact opposite...

<comment><USER28> It's cool how prefixing a statement with 'I love' has been transformed into meaning the exact opposite...

<comment><USER27> Touche! Actually no I'm a word nut so it's all interesting to me.

</comment></comment></comment></comment><comment><USER29> Only?

<comment><AUTHOR> Starcraft 1 players are acceptable too, but I imagine there's a bit of a "you're too old" discrimination associated with it.

</comment></comment><comment><USER9> I'm gold ranked, but I think the time the person spends honing their craft is important too.

You want to look at what kind of code projects (if you're hiring a programmer) they have in their portfolio that they made of their own accord.

</comment><comment><USER30> brilliant; insightful; lucid. this piece deserve front page of the utne reader, let alone hacker monthly.

<comment><USER31> It feels forced to me, and kind of content free. You could reasonably make the same argument for any number of activities (eg, being a parent, or playing soccer).

Unsurprisingly, the article focused on the benefits concerned with individual performance, rather than leadership or teamwork.</comment></comment>


Quick and simple PHP Twitter login for your site, ideal for your weekend project - <AUTHOR> https://github.com/deanbarrow/Twitter-PHP-Login

<comment><USER2> Security note: Check out the following lines, taken from the PHP API client used by this application ([https://github.com/jmathai/twitter- async/blob/master/EpiOAut...](https://github.com/jmathai/twitter- async/blob/master/EpiOAuth.php#L173)):

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

Those lines disable certificate verification: if I can intercept the connection between this client and Twitter, I can present my own, self-signed certificate and the client will still send requests as if I were twitter.com. This completely defeats the purpose of using SSL for connections.

<comment><USER3> Not sure if you've had a somewhat popular library on Github but those two lines of code save me lots and lots of issues being opened because the library didn't work out of the box.

Perhaps I could add an optional setting to include those lines of code...but that's the beauty of open source -- so can you :).

<comment><USER2> Fair enough: you'll have a pull request shortly. ;-)

Edit: Pull request created. <https://github.com/jmathai/twitter- async/pull/108>

<comment><USER3> Did not expect that :). Thanks, will pull and merge.

</comment></comment></comment></comment><comment><USER4> One big problem I see right off the bat: the twitterLogin() function completely breaks any page I embed this in, since if a visitor isn't logged in, all they see is a link to twitter, and then _nothing_ since you're calling exit().

Another nitpick: if I'm logged in, and twitterCallback() is called, why is it redirecting me to / ? Perhaps my site is nested deep within a directory structure.

<comment><AUTHOR> The script is just a basic login system, designed to be adapted to your needs since every application will differ.

I might add a login button function that will allow you to put the login button anywhere without protecting the page at the same time.

</comment></comment><comment><USER5>
          echo "
You are logged in as ".$_SESSION['logged_in'].".
";

_shiver_

<comment><USER4> Hey, maybe we should be giving this guy constructive criticism instead of shivering.

<comment><USER6> The fact that people are shivering in reaction is actually very useful for potential users of this software, though I agree that it's not constructive for the author.

<comment><USER4> Fair enough on both points - but regarding the first one, will those users actually read these comments? Not particularly likely, I don't think.</comment></comment></comment></comment>


Ask HN: Advice on selling my app/startup with no revenue/tiny userbase? - <AUTHOR> Some Background: about a year ago, my co-founder and I launched a dating app in a huge market. We invested about $X0,000 of our own money to bootstrap it and have been trying to grow it since.  Over the year, we tried an number of different things but unfortunately were unable to grow the userbase much. We've managed to experiment and build a number of things to help fuel growth, including a magazine, offline events, in-app matches and introductions (obviously), a small but growing social presence.
We're close to running out of money and we've decided to call it a day. Unfortunately, we realize too late that we're going to need a significant amount of money from here on out, given user acquisition costs in the dating space are high.
However, we have a high degree of confidence (based on real experiments) that someone with deeper pockets can really build this into a growing business. Not Tinder-scale but certainly a sustainable business.
Q to HNers - our app/community is tiny and we have 0 revenues. How do I try to salvage and sell what we did build (many people have told us our brand has name cachet to it), including the s/w, brand, social etc?
It's been a lot of work that I'd hate to see go to complete waste. I'm reasonable and not looking for anything more than a low 5-figure sale. It'll cost someone just as much or more to build what we have so far. I failed but I've learned some valuable lessons too and would love to pass them on to someone and prevent this boat from sinking to the bottom of the ocean.
Can you guys advice how I should go about this? <comment><USER2> —> flippa.com

Another option is to reach out to more successful (or at least venture-funded) startups in the dating space and see if they want to acquire your assets.

That said, with few users and no revenue, your brand is not worth much on its own.

</comment><comment><USER3> dating is local. if you focus your resources on making a tiny area profitable you could show an investors that xyz area is profitable and/or sell territories.</comment>


Microservices and the First Law of Distributed Objects - <AUTHOR> http://martinfowler.com/articles/distributed-objects-microservices.html <comment><USER2> The real strength of micro services is physical isolation more so than logical isolation. That is, there is an 80/20 rule as to scaling.

For instance, there is probably one function of your system that is responsible for a huge amount of work. If everything is in one database (say SQL, mongo,...) You have a complex system that is hard to scale. If you split the heavy load out, you might find the scaling problems vanish (because the high load no longer has the burden of excess data) and even if there is still a problem it is much easier to optimize and scale a system that does just one thing.

The most disturbing thing about microservice enthusiasts is that they immediately jump to: oh, we can write these services and clients in Cold Fusion, Ruby, COBOL, Scala, Clojure, PHP and even when we write them, the great thing is "WE DON'T HAVE TO SHARE ANY INFRASTRUCTURE!"

That's bougus to the Nth degree because a lot of the BS involved with distributed systems has to do with boring things like serialization, logging, service management, etc.

I think you still want to use the same language, same serialization libraries, management practices, etc. across all of these services otherwise you are going to get eaten alive dealing with boring but essential problems.

<comment><USER3> Docker is a promising building block for solving logging and service management and that's something I've been playing with for a while. You stream your logs to your container's stdout/stderr and can pick them up from the Docker REST API. You can also hit the Docker REST APIs across your hosts to discover the IP addresses and ports of the containers running various images. None of this is "solved" yet but it's getting there.

Serialization... depends, but you can get pretty far with JSON over HTTP.

So I guess you do need your microservices to be uniform in some respects, but the consistency of "every microservice is a Docker container exposing a REST API that speaks JSON and streams logs to stdout" would seem to be enough.

It's easy to build that in several languages... if Rails makes sense, use Rails. If Sinatra makes sense, use Sinatra. If Java makes sense, use Java.

You could run into trouble if you start using languages that only one or two of your staff members know, but it does allow for some flexibility (i.e. just because certain parts of the application are enterprisey doesn't mean everything has to be.)

<comment><USER2> I definitely like the direction that Docker is going.

JSON over HTTP sucks. I mean, it's OK if user experience doesn't matter, but if user experience does matter, then latency matters, and if latency matters you find pretty quickly that serialization/deserialization overhead is a big deal -- particularly in a microservices environment where an external request is going to mean a large number of microservice requests happen, which means data could be serialized/deserialized many times. If you're happy being in the middle of the pack, go on with JSON, but if you are playing to win you need something faster (preferably with a framework that means development as easy or easier than JSON)

With multiple languages you don't just have the problem of training but you have other complexity-multiplying problems.

For instance, one of the reasons why languages like Haskell are always a bridesmaid and never a bride is that they lack a complete "standard library". You need a urlencode() and decode function if you write web apps. If you write your own you may be more concerned with making it tail recursive than making it correct. I remember how the urldecode in Perl was busted for a decade and never got fixed, and that's a mainstream language. As flawed as PHP is, it took off because it had "good enough" implementations of everything web developers need in the stdlib.

In a microservices system there tend to be functions similar to urlencode that need to be replicated across the system, and if these are implemented over and over again in different languages it is inevitable that some or all implementations will be buggy. If you can centralize these things in one library everybody depends upon, however, life is easy and happy.

<comment><USER4> > With multiple languages you don't just have the problem of training but you > have other complexity-multiplying problems.

> For instance, one of the reasons why languages like Haskell are always a > bridesmaid and never a bride is that they lack a complete "standard > library". You need a urlencode() and decode function if you write web apps. > If you write your own you may be more concerned with making it tail > recursive than making it correct. I remember how the urldecode in Perl was > busted for a decade and never got fixed, and that's a mainstream language. > As flawed as PHP is, it took off because it had "good enough" > implementations of everything web developers need in the std lib.

I don't understand what you're saying here - are you arguing that we shouldn't use languages that don't have web functionality built into the std lib? What about web frameworks, e.g. Java + Spring?

<comment><USER2> In Java you can find implementations of that stuff and will probably use it. If there is anything wrong it is that there are too many different implementations out there.

In the case of Haskell you ~might~ find implementation of that stuff but you'll probably think you're too smart to have to reuse somebody else's code and also be too smart to have to deal with the corner cases.

<comment><USER5> > In the case of Haskell you ~might~ find implementation of that stuff but > you'll probably think you're too smart to have to reuse somebody else's code > and also be too smart to have to deal with the corner cases.

What is there besides extreme language bigotry to suggest that Haskell programmers tend to think they are too smart to do either of these things? Haskell programmers use other people's code all the time. And Haskell programmers handle corner cases as much as any other programmers.

</comment></comment></comment></comment></comment></comment><comment><USER6> I find that the reason there is so much discussion about microservices and scaling object oriented applications is due to the limitations of object orientation in the first place. These same limitations are the reasons why distribution and network/local transparency, something Martin Fowler states he doesn't believe works, do work in functional programming languages but don't work in OO languages.

It all boils down to OO programmers want their applications to be scalable and maintainable. They have decided the way to do that is through modularity. But we suck at enforcing modularity in a single code base. This has been proven time and time again. Microservices are just a sneaky way of forcing that modularity on ourselves. Instead of designing your system as a single ball of mud (monolith), you'll design your system as a puddle of mud (microservices).

It is just entirely too hard to write good, modular OO programs. This is why we hang onto every book, blog post and word the Object-Oriented Gods send down to us. OO could be a great and amazing thing for certain domains of programming. By all means, create monoliths and use Martin Fowler's Cookie Cutter Scalability solution because it is simple. But if you find yourself needing microservices, you're better off picking up a functional language where modularity comes naturally.

<comment><USER2> I disagree wholeheartedly.

If you read that post again you'll see that Fowler's admonition about "not distributing objects" is really about "not distributing method calls", and method calls aren't that different from function calls so far as his argument is concerned in that (1) the latency of distributed function calls is 10^3-10^6 greater than local function calls, and (2) distributed function calls often fail for reasons inherit to the network and not the application itself.

I'll agree that functional programming languages have many virtues, in that you can compose pure functions, run them in parallel and so forth, but functional programming does not make the issues Fowler talks about go away.

<comment><USER5> > If you read that post again you'll see that Fowler's admonition about "not > distributing objects" is really about "not distributing method calls", and > method calls aren't that different from function calls so far as his > argument is concerned in that (1) the latency of distributed function calls > is 10^3-10^6 greater than local function calls, and (2) distributed function > calls often fail for reasons inherit to the network and not the application > itself.

The expense of distributed method calls comes from the fact that you are dealing with objects -- that is, containers of mutable state -- where you either need to synchronize copies across the network (expensive in terms of traffic/latency) or run all method calls on the place where the object lives (likewise expensive in terms of latency).

Pure function calls don't depend on mutable state, and so don't have those issues (further, to the extent that you do set up a system that requires a remote call to execute them, once you've executed a given pure function with a given set of arguments, you don't need to do it again, as the result is cacheable and guaranteed good forever.) You still have to distribute the calls that _actually_ depend on mutable state, but if your language starts out with a clean distinction between pure functions and operations whose result might depend on mutable state, you start out miles ahead when it comes to dealing with distribution compared to working with a language which provides no language level distinction between pure and impure code, requiring either manual segregation or treat-everything-as-state-dependent-and-pay-the-cost approaches.

<comment><USER7> Practically speaking, function calls over a network are _by definition_ impure.

Any function that is capable of returning varying results for the same arguments is impure. And a function call across the network could return anything - a correct response, a corrupt response, no response - depending on what the network's having for lunch at that moment. We do have clever tools like the I/O monad, yes. But the I/O monad doesn't take I/O and make it pure; it takes I/O and wraps it up in a clever facade that (usually) lets you pretend that it's pure.

<comment><USER5> Whether a function is logically pure or not precedes the decision to implement via a network call and, in the event that a pure function is for some reason implemented via a network call, shapes _how_ you implement it as a network call (as it affects cacheability, etc.)

Obviously, the _medium_ of a network call is inherently impure -- but in the same way that anything implemented in an any physical device is (including internal computations in an electronic computer _without_ network communication.)

<comment><USER7> Technically, yes, you can follow that reductio all the way down the rabbit hole. Practically speaking, though, it's not generally considered problematic that there's no way to set a timeout before issuing the CALL instruction.

<comment><USER8> There _are_ ways to set a timeout before issuing (a particular) CALL instruction. Occasionally these are important.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> This article is missing any mention of promise pipelining, which solves some of the problems being discussed.

[http://kentonv.github.io/capnproto/rpc.html](http://kentonv.github.io/capnproto/rpc.html)

With promise pipelining, if you need to make two RPCs to the same server, and the result of the first is going to be an input to the second, you can actually do it in one network round trip. The trick is to send the server a message saying "Hey, when you finish that first call, substitute the result into the parameters of this second call".

With this, fine-grained calls no longer imply an enormous latency expense compared to course-grained. Meanwhile, fine-grained APIs are cleaner and more composable, as my link above describes.

It's unfortunate that CORBA gave distributed objects a bad name. Just like object-oriented design within a program is more expressive than procedural design, object-oriented network protocols are more expressive than the flat protocols we tend to see today. I've been working with object-oriented protocols a lot lately while using Cap'n Proto to build sandstorm.io, and I've surprised even myself at how much more elegantly I can express complex interactions.

CORBA only messed up in trying to make remote objects look the same as local objects. Everyone now agrees that was a terrible mistake. But making distributed objects work does not in any way require making them look exactly like local objects. Calls to a Cap'n Proto object look quite different from local calls, because you need to be aware of the network issues implied by the call. But I've found that the same higher-level OO design principles you might use locally translate remarkably well to Cap'n Proto interfaces.

<comment><USER10> I virtually never see metion of ZeroC ICE and OpenSplice/DDS. These seem like very well thought out and solid solutions for making distributed systems. Everybody seems to go on about thrift and REST and ZeroMQ and so forth, when I would much rather use DDS or ICE. The other approaches seem to amount to homebrewing your own approximation of these technologies much of the time.

<comment><USER9> ICE does not support promise pipelining, though.

[http://kentonv.github.io/capnproto/news/2013-12-13-promise-p...](http://kentonv.github.io/capnproto/news/2013-12-13-promise- pipelining-capnproto-vs-ice.html)

I haven't looked at DDS.

</comment></comment></comment><comment><USER11> This is the spirit of microservices to me :

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

"Instead of pretending everything is a local function even over the network ..., what if we did it the other way around?

Pretend your components are communicating over a network even when they aren't?"

\-- Solomon Hykes (of Docker fame) on LibChan

To me, it's pretty much anti-OO, and that's why I find it refreshing.

<comment><USER12> Isn't that kind of like erlang?

<comment><USER11> it's very much like that. and erlang has proved that it's a valid approach.

<comment><USER13> Yep. All the distributed systems I've worked with devolve into a bad reimplementation of part of Erlang.

</comment></comment></comment></comment><comment><USER14> > Given this uncertainty, the most important thing a writer like myself can do > is to communicate as clearly as I can the lessons we think we've learned, > even if they are contradictory. Readers will make their own decisions, it is > our job as writers to make sure those decisions are well-informed ones, > whichever side of the architectural line they fall.

This is a really insightful description of the role of someone documenting software architecture.

</comment><comment><USER15> I really admire the humility of his wait-and-see attitude, especially since he is trying to keep an open mind against his instincts.

This is a bit OT, but it seems like Angular apps have similar problems to distributed objects, where you can wind up making lots of network calls to retrieve one of these, all of those, etc. I'm curious what advice people have about that.

<comment><USER16> > This is a bit OT, but it seems like Angular apps have similar problems to > distributed objects, where you can wind up making lots of network calls to > retrieve one of these, all of those, etc. I'm curious what advice people > have about that.

You need to make a distinction between remote and local calls. You need something that looks a bit like function calls - not a several-line ceremony for each call - but also that clearly isn't the same thing as a function call, and you need a way to make sure you don't get the two mixed up. You need (whisper it) monads.

I've heard that new versions of Angular will have Dart as a primary platform? Maybe they can make a type-level distinction between remote and local calls in that language?

</comment></comment><comment><USER17> > I worry that this pushes complexity into the interconnections between > services,

I guess the instinctive answer is to well let someone else solve the problem. Grab something existing / standard (REST API + rest client, RabbitMQ + msgpack) or something similar.

What it still doesn't save you from is managing basic distributed systems issues - network partitioning, timeout, asynchronous starts and stops. Maybe it is better because by building this distribution into the core of the system and not trying to abstract it away behind an API (like the author says) it forces you to deal with them explicitly.

Overall I still haven't decided if microservices is just one of those buzz words invented because the old ones (Object Oriented, SOA, etc) have gotten old and don't bring in consulting revenue anymore.

<comment><USER11> I think microservices is a new evolution of an old idea, that is growing to term in an environment that could allow it to blossom.

As I posted elsewhere here, microservices are also explicit about being remote calls, and are built with the idea of assuming all your calls are always remote.

For instance, Docker is already built using a microservice architecture, and they are standardising that as a project called LibChan : [https://github.com/docker/libchan](https://github.com/docker/libchan)

It's basically msgpack over SPDY+TLS, all the way down the stack.

disclaimer: I am one of the co-founders of jsChan, the node.js/javascript port of libchan.

[https://github.com/GraftJS/jschan](https://github.com/GraftJS/jschan)

</comment></comment><comment><USER18> I believe they are grasping in the right direction, but what they really need to do is let go of the attachment to object oriented development. I don't mean to start the flame war, but if you insist that the architecture reflects the intent of the application, then why choose OO? If the architecture requires messages and buses and adapters, etc. what does OO bring to the table? Why do I think I need distributed objects? Am I choosing micro-services just because I want to try to get distributed objects working again?

It's not a language issue either. At this level we are talking about frameworks, models, domains, contracts, protocols, etc. This layer is not language dependent, although some languages are better designed to build frameworks that support these intents.

A classic example of how these assumptions creep into your designs is seen in the first chapter of Head First Design Patterns where they discuss at length how to create the perfect object model for a duck computer game. When I read that the first first think that came to my mind was, "Wait a minute, you are designing a computer game! Everything on the screen is a sprite. Sprites are moved around the screen by their coordinates once per game loop. How does the perfect duck object model help me here?"

Sounds very much like a hammer looking for a nail to me.

[edit] fixed a few typos

</comment><comment><USER19> High level knowledge representation like description logics can make these types of discussions obsolete if they are applied to information systems holistically. Describing relationships between data and describing processes themselves using a common machine-processable language would allow the plumbing to be generated automatically and could even enable systems to automatically be converted from course grained message types to finer grained ones and vice versa.

</comment><comment><USER20> Oh for the love of <insert deity here> no! This will now be printed and stuck onto the wall by the astronaut architects where we work, who blindly parrot MFs words like gospel, without any understanding.

Software used to be shit, but at least fun, then we had software architects, and now software is just shit.

Sigh.</comment>


Code, Eval, Play, Loop – Common Lisp OpenGL Environment - <AUTHOR> https://github.com/cbaggers/cepl

<comment><USER2> Be sure to check out the videos of it in use [1] and the Lisp to GLSL translator [2].

[1] [http://www.youtube.com/playlist?list=PL2VAYZE_4wRKKr5pJzfYD1...](http://www.youtube.com/playlist?list=PL2VAYZE_4wRKKr5pJzfYD1w4tKCXARs5y)

[2] [https://github.com/cbaggers/varjo](https://github.com/cbaggers/varjo)

<comment><USER3> Hehe looks like I need to get some visually interesting demos up, I've been pretty lazy about that. I started looking to input and event propagation and got lost in a sea of frp and data-flow stuff for a while.

</comment></comment><comment><USER4> For Clojure enthusiasts, I highly recomment Zach Oakes' environment in the same vein, Nightmod (his Nightcode IDE specialized with his play-clj library). It's an experimental platform that is a tidy, simple way to experience game programming in a functional style.

[https://nightmod.net/](https://nightmod.net/)

Also, here is his presentation on this subject at the last Conj (great talk): [https://www.youtube.com/watch?v=0GzzFeS5cMc](https://www.youtube.com/watch?v=0GzzFeS5cMc)

<comment><USER5> My first question on clicking the link was - Does there something like this exist for Clojure?

Glad to the have my question answered. Thanks for the links!

<comment><USER6> Lol me too! I'm gonna check out Nightmod asap. Anybody here tried it yet?

</comment></comment></comment><comment><USER7> Not to take anything away from that, because it's awesome, but that can also be accomplished in C. In fact pretty much any good game engine supports both dynamic shader recompilation, hot swapping the renderer and dynamically reloading the game code. A classic example where this technique is implemented is Quake 2. Basically the renderer and game are linked into the client as dynamic libraries and reloaded on demand or when a change is detected.

<comment><USER8> Rebuilding those dynamic libraries requires external build system and compiler invocation. In Lisp you just use the REPL.

<comment><USER7> Of course, but in practice that doesn't really matter. Recompilation time for small changes is negligible and if you have a sane build system setup is pretty much invoked the same way you would load new code into a repl.

In the case of shader compilation, compiling and linking actually is exposed as library functions, so you have complete control over how to do that.

Most of the dynamic features a repl provides, like introspection and so on is also available with a good debugger, depending on the scope of the project you can also just use Lua as a scripting language to get the majority of the benefits that Lisp has.

Moreover nested parentheses sort of pale, if you can visualize most of your state in much more powerful ways on the screen.

Since you have complete control over memory, you can implement time travelling debugging pretty easily, you just need a good ordinary debugger, a way to record all input to the game (easily done if you have clean separation between game and platform code) and a way to snapshot the game state at some point in time (also easy if you allocate all memory ahead of time and only let the game code use your memory allocators).

<comment><USER9> Could you redefine a class/structure and update every instance of it at runtime?

For example, let's say you are currently representing complex numbers in rectangular form. Is it possible to convert every existing instance to polar form, at runtime, without breaking any code?

<comment><USER10> That's a pretty ridiculous use case. I'd think if you wanted to make a change this drastic, having to reload the game wouldn't be a huge deal. I mean, you'd want to make sure everything up to the point you were at still works anyway. (Besides, this is an awful way to represent 2D points in practice).

FWIW, It's certainly possible to write code that reorders struct fields on changes, but it requires either boilerplate, macro hell, or parsing part of your C code for structure declarations (I've heard this sounds worse than it is). Arbitrary mappings are more difficult and IMO not worth the trouble.

Not to say this technique doesn't have downsides. It's downsides are so huge that IMO it's benefits aren't worth it, _unless_ you were already going to program in that style to begin with.

\- No pointers to static memory (globals, vtables, and pointers to string literals or constant arrays are out) \- No pointers to functions (most other ways of emulating dynamic dispatch are out). \- You need to use custom allocators that work out of your game state block. And since you have no global or thread local state... you need to hope that any library you want to use allows you to provide a context for any memory allocation it wants to do. Most don't. \- etc, etc, etc... you get the picture. Essentially, you need to write your game like its 1995.

And sure, maybe you can get this in lisp without any limitations (I don't know, but I believe it if you say you can), but the reality we live in is that it's unrealistic to write production-quality game engines in lisp. I've heard it's used for scripting and AI in some places (probably just Naughty Dog, tbh), but most of the code that goes into a game isn't in script, unless it's a slow game.

<comment><USER9> > That's a pretty ridiculous use case.

It was just an example. I never said you would actually want to do it.

> maybe you can get this in lisp without any limitations

See my response to orbifold: [https://news.ycombinator.com/item?id=8943113](https://news.ycombinator.com/item?id=8943113)

> I've heard it's used for scripting and AI

There are many different versions of lisp, some of them are used for scripting, but most implementations of Common Lisp could be used for almost anything.

> most of the code that goes into a game isn't in script, unless it's a slow > game.

Write version 0 in a high level language. Figure out the design and representation. Then rewrite the slow parts in a more efficient language.

<comment><USER10> > See my response...

That's very interesting, and would definitely solve a lot of the problems with hot-reloading code.

>> There are many different versions of lisp, some of them are used for scripting, but most implementations of Common Lisp could be used for almost anything.

I was talking specifically talking about uses inside of production quality, high performance (e.g. AAA-quality) game engines. The only usage of lisp that I know of is inside Naughty Dog (Last of Us, Uncharted, Jak and Daxter, etc), who have used it internally for a long time. I hear they're lisp nuts, but even they don't try to write the game engine in it.

> Write version 0 in a high level language. Figure out the design and > representation. Then rewrite the slow parts in a more efficient language.

For something small, retro, or 2D then maybe this could work. For anything else, this would be setting yourself up for failure.

You'll end up rewriting all or most in C or C++. This will cause you to miss deadlines and generally people will shit on your game on the internet.

Maybe it will be fast enough at this point, but odds are it won't. It will probably have the same problem as most game engines written in a high-level style, even if they're in C or C++. You'll fire up a profiler but there won't be any optimization targets. The whole program will be more or less equally slow. This is because you didn't design with memory access patterns in mind. 90% of the code will be spent waiting for memory to load during a cache miss.

Eventually, the game will be released and will struggle to hit 30fps. People will continue to shit on the game online, and that's if anybody bothers to play it.

Since you're starting now, it will probably be at least 4-5 year in the future, so even if 60fps expected by everybody yet, the oculus rift will be out, and anybody who plays your game on that will have a bad time. On the oculus, the framerate needs to be at least 90fps, or you risk inducing nausea. That means you have 9ms to update, and do _two_ renders of the game (one for each eye), and if you can't make this target, your game isn't just slow, it's actively harmful to the users.

The only way to avoid this is to think about memory usage, access, and the cache from the very beginning. At that point, maybe you could still write it in lisp, but any benefit it would have given you is gone.

I've seen most of this first hand (on engines that were written in C++, but ignored the cache), and it really sucks.</comment></comment></comment></comment></comment></comment></comment>


Start-ups and Emotional Debt - <AUTHOR> http://www.evanmiller.org/start-ups-and-emotional-debt.html

<comment><USER2> I have worked at a "startup" for 6 years where I have been, primarily, the only developer. It has been extremely taxing to say the least. I started in my early thirties. Sometimes I feel like a fool. Sometimes I worry about what I will do next. I do hope to never again have this similar experience of being the only one doing all of the truly hard (and it is hard) labor of creating a system when the reward is little more than a paycheck. I wasn't a founder, but I often think that the workload I have received is nothing short of one.

If anything, I think it isn't the experience of a startup that is terrible so much as the emotional burnout that often seems to result from being in one. I think everybody in their youth should experience it just to see how far they can go. I would only recommend that they don't do it in a situation where they are the only one steering the ship :) It can lead to lots of sleepless nights and tremendous amounts of pressure, but I would imagine that sharing the load with a couple other people would make it a lot more "fun" as well as providing all of the educational benefits available for participating. Nothing is better for developing your style as a programmer than having to program a lot over a long period of time. There are more opportunities to make mistakes in a startup which means there are more opportunities to learn. I would say it is far better than a corporate environment, which I have also had the pleasure of working in.

</comment><comment><USER3> I agree start-ups have become in vogue recently and many young, impressionable 20 somethings (myself included) get caught in the Tech Crunch celebrity of it all, but the person you're describing is exactly the kind of person doing start-ups for the wrong reasons.

Start with your passion and build a business around it. If the business end never works out, at least you got to work on something you really enjoy.

Much harder said than done. Many people don't know what they're truly passionate about until their 30-40s.</comment>


New York kicks off Startup-NY tax-free program - <AUTHOR> http://innovationtrail.org/post/state-kicks-startup-ny-tax-free-program

<comment><USER2> This is crazy, if taxes are too high for businesses to start then lower them; these piecemeal approaches to problems just make things more complicated. We need to simplify rules and regulations not increase their complexity.</comment>


1 Billion Page Views A Day for YouTube - <AUTHOR> http://www.datacenterknowledge.com/archives/2009/10/09/1-billion-page-views-a-day-for-youtube/

<comment><USER2> Does that include embedded videos?</comment>


Subroutines in MIX are called using self-modifying code - <AUTHOR> http://www.jklp.org/profession/books/mix/c06.html

<comment><USER2> Quoting Donald Knuth from MMIX 2009 [1] (the revision of the MIX architecture):

"And ouch, the standard subroutine calling convention of MIX is irrevocably based on self-modifying instructions! Decimal arithmetic and self-modifying code were popular in 1962, but they sure have disappeared quickly as machines have gotten bigger and faster."

[1] [http://www-cs-faculty.stanford.edu/~uno/mmix.html](http://www-cs- faculty.stanford.edu/~uno/mmix.html)

</comment><comment><USER3> Many early machines did this, often using a special form of store instruction that only modified the target address part of an instruction word.

EDSAC, on which David Wheeler invented the subroutine call, had no such instruction, and did it like this (using a modern pseudo-assembler syntax, not the original):

      address  instruction       comment
      </comment><comment>-  </comment><comment></comment><comment>----- </comment><comment>---
      m - 1.   clear accumulator
      m.       add from m        # Load the 'add from m' instruction itself
                                 #   (which contains its own address) into
                                 #   the accumulator.
      m + 1.   jump to s         # Jump to the subroutine.
      m + 2.   …                 # Control will return here.
      ⋮
      s.       add from 3        # Add a magic constant (kept in location 3)
                                 #   to the accumulator (which contains the
                                 #   'add from m' instruction from m) resulting
                                 #   in a 'jump to m+2' instruction.
      s+1.     store to r        # Store the 'jump to m+2' instruction at the
                                 #   end of the subroutine.
      ⋮                          # Subroutine body.
      r.       (anything)        # 'Return' jump stored here.

</comment><comment><USER4> Ken Thompson's regular-expression matcher also worked this way. It used two arrays of jump instructions: one jump for each current NFA state, jumping into the machine code that had been compiled for the regex. These jumps were actually calls using self-modifying code as in the OP (but for IBM 709 instead of MIX). But the new wrinkle was, it also wrote more jump instructions into the _other_ array, for the next-state set of the NFA matcher.

Unlike the MIX, the IBM 709 had a jump-through-register instruction, so self- modifying code wasn't necessary. I found that Thompson's code could've been more compact and about as fast (sometimes faster, sometimes slower) using such indirect jumps only, at the cost of needing to use all of the registers.

<comment><USER4> (The compiled code for an NFA state could append jump instructions to the _current_ state set as well as the next-state set, to implement the | operator. Just noting this for completeness.)

</comment></comment><comment><USER5> It's worth noting that JIT compilation techniques are also an extremely advanced form of self-modifying code.

<comment><USER6> In a sense, yes, but the basic flow of a JIT is write-once, and it's logically an external process from the code being modified.

</comment></comment><comment><USER7> Ironically, I was just learning this morning how it's done on the PDP-8, which has a disturbingly similar flavor. [http://en.wikipedia.org/wiki/PDP-8#Subroutines](http://en.wikipedia.org/wiki/PDP-8#Subroutines)

</comment><comment><USER8> This approach doesn't work with recursive functions, of course. The chapter notes this: "Reentrant routines are useful in relatively rare circumstances."

Oh, how times have changed…</comment>


Minicart.js - <AUTHOR> http://minicartjs.com/

<comment><USER2> I'm slightly disappointed that this isn't a minecraft clone in 64kb of JavaScript.

Even if what it actually is is much more useful...</comment>


Speeding up Google Analytics - <AUTHOR> http://neil.fraser.name/news/2010/04/07/

<comment><USER2> The author is ignoring that:

A) Most sites do have content with which async GA can load in parallel.

B) Where you put the GA snippet is a trade-off. Putting after window.onload will decrease the time it takes to get to window.onload, but it will also lessen the accuracy of your data; especially your bounce rate.

C) If you're worried about delaying user visible functionality that is tied to window.onload, you shouldn't be tying that functionality to window.onload in the first place. There are better ways to detect when the DOM is ready to use.

<comment><USER3> With respect to (C), can you describe some other good DOM-readiness detection methods?

<comment><USER4> put the script at the bottom of the page

I never understood why onload and all the frameworks implementing domloaded exist, script tags generally should go at the end anyway, and there is no problems with dom availability.

<comment><USER5> This is fine, if you're OK with missing bounces. If the page takes a long time to load, or hangs, then it's likely the user will close the window before the script runs.

<comment><USER2> I don't think he was necessarily suggesting putting GA at the bottom of the page. I read this as, "put the DOM ready detection" at the end of the page.

</comment></comment></comment></comment></comment><comment><USER6> I use my own server side analytics code. The reason I do, is that, no matter how much people pump Google Analytics, I'm afraid of it. I've been to too many sites that were completely hung, and in the status bar, my browser is saying "waiting for www.google-analytics.com".

I usually hit refresh and it generally works, but how many people don't? This isn't something that's happened to me once or twice. It happens often enough that I'm consciously avoiding ga. I don't need to cause more people to bounce for no reason.

<comment><USER5> Several browsers, including many versions of Firefox, had a bug relating to the status bar. The "waiting for ..." would only update after the first byte had been received from the next file. Thus, a slow resource would leave the status bar blaming www.google-analytics.com.

The bug has since been fixed in Firefox -- I don't have the url handy though.

IMO this is the main benefit of the async snippet -- random server problems won't lead inaccurate metrics.

(This is most visible with adwords campaigns -- you can see the number of clicks you paid for, but the number of visits they lead to is less. Typically due to a combination of high bounce rate plus slow loading pages.)

<comment><USER2> <https://bugzilla.mozilla.org/show_bug.cgi?id=487638></comment></comment></comment>


Show HN: Tomato – Pomodoro Timer - <AUTHOR> http://stripenight.com/tomato/ <comment><USER2> Years ago a Buddhist monk recommended to me to set a bell every 30 minutes as a mindfulness practice. When you hear the bell, look up, bring your consciousness back to your breath for a few breaths, make sure you are aware of your body posture, especially when sitting in front of a computer, and then go back to what you were doing.

The pomodoro technique always reminds me of this.

<comment><USER3> If you have sox installed, simply

          while true; do sleep 1800; play -n synth 0.15 sine 800; done

<comment><USER4> Or, in powershell (sans sox),

         while($true){(New-Object Media.SoundPlayer "C:\YourPreferredSound.wav").Play(); sleep 1800;}

I'm using the Single Hit Tibetan singing bowl from: [http://www.sound-effects- hunter.com/tibetan-bowl-sound/](http://www.sound-effects-hunter.com/tibetan- bowl-sound/)

<comment><USER5> Does this help you mentally? What changes have you seen since starting this 'mindfulness' practice?

<comment><USER4> I'm hesitant to say anything about mental effects, since I'm far from able to objectively measure such things, especially since I haven't been keeping any kind of measurements or records. But it certainly keeps me from slouching quite as much.

</comment></comment></comment></comment></comment><comment><USER6> Here's a productivity tricks that works for me:

Reason why I stop working on a project is because after a while (or 10 minutes...), it just gets boring.

So I toggle between 3-4 similarly important projects a day. The excitement of doing something new when I switch helps me keep working (just on a different project).

Yes there is a cost to mentally switching regularly but it's worth it to avoid the much higher cost of watching Youtube instead!

<comment><USER7> Very similar to the highly effective Structured Procrastination method - [http://www.structuredprocrastination.com/](http://www.structuredprocrastination.com/)

</comment></comment><comment><USER8> My favorite Pomodoro Timer is:

[http://tomato-timer.com/](http://tomato-timer.com/)

This one is lacking some features (I understand it aims to be minimalistic, but it cut flexibility on the process...)

<comment><USER9> I find [http://moosti.com](http://moosti.com) to be the best of the web tomato timers

</comment></comment><comment><USER10> Plug for [https://complice.co/](https://complice.co/) for group pomodoro's. There's a hacker news channel. Pretty interesting concept, especially for mobile workers who still want to "chat" with someone.

</comment><comment><USER11> Nice. For those who'd like a todo list to go with their Pomodoro* timer, I've created Lanes: [https://lanes.io](https://lanes.io).

It tracks how many pomodoros you complete each day and how long you spent being productive. Plus you can see the aggregate # of poms completed by all users of the app (which I find motivating).

*Not strictly a Pomodoro as the timer can be adjusted, but hey that's what the users wanted.

</comment><comment><AUTHOR> OP here - interesting to see not only how many developers on HN use the Pomodoro Technique but also how many have built their own app!

<comment><USER12> I made my own timer after trying almost everything else out there.

The one I have now is a tomato emoji in my Mac menubar. When I tell it I'm working, it asks what I'm working on (so I can keep it in a logfile and do fun analytics on it later), then plays my work playlist in iTunes and updates a webpage[1] that lets my wife know I'm working for the next 25 minutes.

When the time is up, it stops the music and asks how the pom went (also for the logfile).

It's absolutely the perfect solution for me. I can't imagine finding an app that does these things that someone else had built. The ROI on building tools for myself that help my workflow has been extremely positive.

1\. [http://gen.co/ischristianworking/](http://gen.co/ischristianworking/)

</comment></comment><comment><USER13> I just set a 25 minute time and forgot about it. The gong sound terrified me.

</comment><comment><USER14> Another Pomodoro timer that assumes that a Pomodoro is 25 minutes, even though that was only an example that worked for the author.

</comment><comment><USER15> I just use `notify-send` every 30 minutes... [https://github.com/dcousens/dotfiles/blob/master/.xinitstatu...](https://github.com/dcousens/dotfiles/blob/master/.xinitstatusbar#L88-L94).

</comment><comment><USER16> I use this [http://martakostova.github.io/timer/](http://martakostova.github.io/timer/) (compiled by myself) . It's good becuase it can run script, so i can sete myself to a DND status on slack when the pomodoro is running and turn back online after that. E.g.f for start you can use a script like this

do shell script "curl '[https://slack.com/api/dnd.setSnooze?token=<yourtoken>&num_mi...](https://slack.com/api/dnd.setSnooze?token=<yourtoken>&num_minutes=$duration'")

</comment><comment><USER17> I thought this was gonna be a post about cooking, I'm still not sure what this is

<comment><USER18> Pseudoscience based time management

<comment><USER19> Despite the snark of your answer, I'd be interested to know if you have any examples of science-based time management. It seems that this field is mostly trial-and-error, the techniques either work for you or don't.

<comment><USER18> Eh it's not like I intended pseudoscience as pejorative, but as in there some evidence in cognitive science that defocusing and refocusing on tasks help efficiency, but as all thing in this field reproducibility and other issues make it a tall order to call it scientific.

</comment></comment></comment></comment><comment><USER20> I love it! Doesn't get much more minimal than that.

Here's my relatively bloated pomodoro tracker: [http://alexose.github.io/pomodoro/](http://alexose.github.io/pomodoro/)

</comment><comment><USER21> Hi, nice one!

Just a suggestion, check the behaviour of the "do_it" div. If I click on it and then click outside without writing anything, the div will collapse leaving a blank area, and it will not be possible (or it will be very hard) to open it again.

I did one too before summer. Here's mine [http://codepen.io/gianc/full/oLdGAv](http://codepen.io/gianc/full/oLdGAv)

I'm still learning, any criticism and/or advice is appreciated.

</comment><comment><USER22> This is great. Now good luck resisting the urge to add just one more feature.

I really hope you don't because there are other more feature-bloated timers out there. This seems perfect to me.

<comment><USER22> After looking again, I realized uBlock was reporting that it had blocked something and so I took a look and it is Google Analytics. Just out of curiosity, why include that?

<comment><USER23> I would imagine the creator would find usage stats interesting.

<comment><AUTHOR> Yup!

<comment><USER22> Thanks for making it. Like I said, I really appreciate how sharply focused the timer page is. If I were to suggest anything, it would be to get rid of the analytics tracking. Is Google telling you anything useful? From my point of view, it consumes resources, doesn't add any functionality, and leaks data about your visitors.

</comment></comment></comment></comment></comment><comment><USER24> Is there an article outlining the idea behind these tomato timers, similarly to GTD or is it in reality just a simple system that I am trying to read too much into?

<comment><USER25> [http://pomodorotechnique.com/](http://pomodorotechnique.com/)

<comment><USER26> Anyone else getting a black screen that says, "Sorry -- Because of its privacy settings, this video cannot be played here"?

I can't tell what it's complaining about. I'm allowing tracking, DRM, cookies, everything I can think of.

Oddly enough, I was able to easily download the video using youtube-dl, a general-purpose command-line video downloader for Unix/Linux/Windows/Mac[1].

The video was well done and informative, but I still don't understand why it doesn't play on their web page.

[1] [https://rg3.github.io/youtube-dl](https://rg3.github.io/youtube-dl)

</comment></comment></comment><comment><USER27> Nice work! A good, minimalist solution.

\----

My personal favourite is Strict Workflow [1], which is a Chrome extension. It has the added benefit of preventing idle website browsing during a work phase.

[1] [https://chrome.google.com/webstore/detail/strict- workflow/cg...](https://chrome.google.com/webstore/detail/strict- workflow/cgmnfnmlficgeijcalkgnnkigkefkbhd)

</comment><comment><USER28> I get distracted by shiny things, so I made a low-distraction work timer [https://www.microsoft.com/en-us/store/p/low-distraction- work...](https://www.microsoft.com/en-us/store/p/low-distraction-work- timer/9nblggh5r6z1)

It moves pretty much imperceptibly so that it doesn't distract from the task at hand.

</comment><comment><USER29> I use Timebar, which is unfortunately no longer available through the Mac App Store. [http://lifehacker.com/timebar-turns-your-macs-menubar- into-a...](http://lifehacker.com/timebar-turns-your-macs-menubar-into-a- timer-484724310)

It turns your entire top menu bar into a countdown bar which you can keep an eye on peripherally as you work.

</comment><comment><USER30> My preferred behaviour for pomodoro timers is: start the break countdown automatically at the end of a pomodoro, but wait for the user to click to start the next pomodoro. Does it do that?

For everyone who has not tried the pomodoro technique (25 minutes focused work, 5 minutes everything else): give it a try! I'm constantly surprised at how much I can get done in 25 minutes.

<comment><AUTHOR> Developer here - it doesnt auto-start the break timer.

Interesting that you would want to start the break countdown but not the next work timer.

<comment><USER31> I prefer this too. I'm strict about work intervals but flexible about break intervals. Usually so that I can use the break to chat to my gf, go for a short walk, or make a cup of tea or whatnot without worrying about going over by a couple of minutes and having to reset the timer.

<comment><USER30> Yes, that's what I meant. If the break does not start automatically, I tend to forget to trigger it, whereas if the next pomodoro does start automatically, it may catch me in the middle of doing something else.

</comment></comment></comment></comment><comment><USER32> I have a simple PS script to use at work (so I don't have to install any extra applications, plus I can customize it easily). It shows the remaining time as well as a desktop notfication: [https://github.com/maxlorenz/ps- pomodoro](https://github.com/maxlorenz/ps-pomodoro)

</comment><comment><USER33> For a minimal OS X native app check out Pomodoro One. So simple and clean yet had a great impact on my productivity.

</comment><comment><USER34> I made a pomodoro app for Linux based on taskwarrior. I have been using it for a while with free sync online ... [https://github.com/liloman/pomodoroTasks](https://github.com/liloman/pomodoroTasks)

</comment><comment><USER35> Ah, memories. I did one of those, too, a few years ago: [http://pomodoro- timer.org/](http://pomodoro-timer.org/)

It even has an animated tomato, uses localstorage to save your work record, and makes ding in the end!

</comment><comment><USER36> I really dig the aesthetic and simplicity of [http://luckyshot.github.io/twentyfive/](http://luckyshot.github.io/twentyfive/)

</comment><comment><USER37> I like and am at the same time annoyed that it is so simple.

One the one hand I have a doze features I'd like to have. On the other I know those are mostly time wastes.

</comment><comment><USER38> Yay. Here's mine: [http://xcvfd.com/pomodoro](http://xcvfd.com/pomodoro)

</comment><comment><USER39> My favorite timer is pomotodo.com which merges a todo list with a pomodoro timer, and gives stats on completion rates.

</comment><comment><USER40> I use Pymodoro in a dzen bar in a minimalist tiling windows manager. Really nice.

</comment><comment><USER41> Can it send email?

</comment><comment><USER25> Why is this on front page? It has two buttons and one text input.

<comment><USER7> The 'Flappy Bird' effect.

</comment></comment><comment><USER42> Has anyone tried shocking themselves? I feel like this pomodoro idea is ripe for creative disruption.

<comment><USER43> [http://pavlok.com/](http://pavlok.com/)

<comment><USER42> Oh boy.</comment></comment></comment>


Save Internet Freedom: Support the Open Technology Fund - <AUTHOR> https://saveinternetfreedom.tech/ <comment><USER2> While you're voting this up, consider that for years people have sniped at privacy tools, most notably Signal, for accepting OTF grants, claiming that doing so compromised them, or even indicated collusion with the USG. That was always, bluntly, a horseshit argument, and OTF is probably an unalloyed good thing. But, still.

<comment> loup-vaillant As a European, _and_ a beneficiary of an OTF grant, I concur: they are up- front about what they want, and my interaction with them didn't even hint at a hidden agenda.

I would hate to see them go.

</comment></comment><comment><USER3> Signed!</comment>


Implement a 3¢ tax on plastic grocery bags - <AUTHOR> https://petitions.whitehouse.gov/petition/implement-3%C2%A2-tax-plastic-grocery-bags/tySVtfk1?utm_source=wh.gov&utm_medium=shorturl&utm_campaign=shorturl

<comment> marco-fiset Here in Quebec, Canada, some grocery stores tax 5¢ for each plastic bag, though it's up to them. People here tend to bring reusable bags which are a lot more durable and contain more stuff.

</comment><comment><USER2> I think most of Canada has a .05c fee.

<comment> marco-fiset Actually here in Quebec, Canada, some grocery stores do have a fee, but not all of them. They decide whether they charge for plastic bags or not.

</comment></comment><comment><USER3> This is asinine.

<comment> marco-fiset No it's not.If you had some environmental consciousness you would understand that plastic bags are very bad for the environment. The average life of a plastic bag is no more than 20 minutes and takes decades (if not centuries) to decompose. And 3¢ is a joke. It should definitely be higher. I say 1$ would be perfect because then people will buy reusable bags instead. See this link : <http://www.reusethisbag.com/25-reasons-to-go-reusable.asp>

<comment><USER4> The environment can go fuck itself, and this is the wrong forum anyhow.

<comment> marco-fiset I bet you don't have any children to have such a badly twisted mind.</comment></comment></comment></comment>