Pineapple Fund Drops $1M on the Sustainable Ocean Alliance - <AUTHOR> https://techcrunch.com/2018/02/14/pineapple-fund-drops-1m-on-the-sustainable-ocean-alliance-and-its-new-accelerator/?ncid=rss <comment><USER2> Pineapple Fund has pretty much single-handedly restored my opinion of cryptocurrency to neutral.

Pine is pretty much the Alfred Nobel of the blockchain.

<comment><USER3> Funny, since Alfred Nobel launched his fund to try to repair his reputation. His obituary almost read: _The merchant of death is dead_. [https://en.wikipedia.org/wiki/Nobel_Prize#History](https://en.wikipedia.org/wiki/Nobel_Prize#History)

<comment><USER2> That's exactly what I had in mind... ;)

</comment></comment></comment><comment><USER4> Anyone know what happens if some Bitcoins in the Pineapple fund turn out to be illegally obtained (theft, money laundering, ransom ware, drugs, etc.)? Is there any requirement for the donee to return the coins?

<comment><USER5> Probably not. There's no such thing as title to money, so it's really hard to say "that's my money" in a situation like this. Relevant case[1] re fungibility of money. If money can be tainted, then eventually all money will lose value, which is bad. Especially important for finite supplies like Bitcoin.

A different argument is based on property law[2]. You can't transfer better title than you have, but a "bona fide purchaser" obtains something that's practically pretty close to good title. So you could see the result hinging on whether a charity knew it was receiving stolen money (again, question whether property concepts apply at all to money).

[1][http://legalhistoryblog.blogspot.com/2013/05/reid-on- scotlan...](http://legalhistoryblog.blogspot.com/2013/05/reid-on-scotlands- first-banknotes.html) \-- OP didn't ask about jurisdiction, but this principle seems to be somewhat consistent in various places

[2][http://law.jrank.org/pages/9188/Personal-Property-Bona- Fide-...](http://law.jrank.org/pages/9188/Personal-Property-Bona-Fide- Purchasers.html)

Disclaimer: this answer is the product of law school, which means it is likely of even worse quality than a Wikipedia search.

<comment><USER6> "Especially important for finite supplies like Bitcoin"

The law doesn't concern itself with the technical implementation of bitcoin. In addition, trackable and "tainted" money is dangerous for people to accept; bitcoin just makes it real easy to identify that.

<comment><USER5> "The law doesn't concern itself with the technical implementation of bitcoin"

That's an astounding statement to make without citation or qualification. In general, the law (at least in the form of U.S. appellate courts and congressional bodies) is very good at including public-policy consequences in its decisionmaking process.

<comment><USER6> maybe future laws and policy will take into account the more-or-less finite supply of bitcoin. maybe.

my point is that there is no guarantee that bitcoin will receive favorable decisions. it's hard for the lay person to understand (why not just print more?) and if ever declared a currency-non-grata could actively be attacked in this way.

i should add that i have engaged in btc currency speculation and had a positive result. the long term value/health of btc is of great benefit to me. but, it would be foolish for me to assume that because it would good for it to be so that it will be so.

<comment><USER5> That much I can agree with. The law eventually gets things right, but it can take a while, and it might harm individuals and individual technologies along the way.

</comment></comment></comment></comment></comment></comment><comment><USER7> > the nonprofit is now in possession of what remains of the $1 million after > the usual fees and taxes

If I understand this right, if they took the donation as bitcoins they shouldn't be paying taxes on them.

<comment><USER8>
      The bitcoins have been transferred and cashed out

They sold into USD, which is taxable.

<comment><USER9> Sales of appreciated assets aren't taxable for charitable organizations in the US.

<comment><USER8> Respond to the OP, as they originated the assumption that charitable organizations pay taxes.

<comment><USER9> Reread the OP -- it is the exact opposite of that. DennisP is questioning the _article 's_ claim that the charitable organization paid taxes.

<comment><USER7> Exactly, thank you.

</comment></comment></comment></comment></comment></comment><comment><USER10> do the funds sent to these recipients remain btc and are leveraged against as an asset or are they converted to fiat?

<comment><USER11> The intention is that all of the nonprofit grantees cash out immediately. Almost all of the nonprofits funded operate on very tight budgets, and this funding is immediately applied to support payroll and recruit for essential positions.

<comment><USER12> _to support payroll and recruit_

The use of the incorrect form of recruitment appears to be one instance of a similar phenomena for many words that is perhaps some sort of American or Silly-Valley grammatical neologism. Does anyone know whether this has an established/accepted linguistic description or whether it has been noted in academia?

<comment><USER13> I think recruit is being used as a verb there.

> to support payroll,

> and recruit for essential positions.

</comment></comment></comment></comment><comment><USER14> I wish they would consider GiveWell, which has applied.

GW is in the business of evaluating the effectiveness of charitable giving to maximize impact. If you have a bunch of money to give away, it's probably tempting to think you can outperform the impact of professionals, just as if you suddenly have a bunch of money to invest, you might assume at first you can outperform professional investors.

Sadly the feedback isn't quite as pronounced in charitable giving. It can feel rewarding giving to an organization that makes a smaller impact than its rivals, so long as it has great promotional materials and you don't ask too many questions.

<comment><USER15> One doesn't need to do better, just less than 21% worse: [http://files.givewell.org/files/ClearFund/Clear_Fund_Form_99...](http://files.givewell.org/files/ClearFund/Clear_Fund_Form_990_2016_Redacted.pdf)

<comment><USER16> any further explanation? Not sure what we should be looking for in these 40+ pages

<comment><USER15> The first page (no snark intended) shows that about 21% of the income goes to salaries, and 79% passes to charities. Regardless of what one's conclusions are on whether this is an acceptable overhead, it is an important consideration in how "efficient" it is to donate through GW rather than directly to your favorite charity.

<comment><USER16> They also publicly list their chosen most effective charities, so you can always donate to those directly instead of through GiveWell. I'd imagine this is common, and a lot of additional external donations result from their research. They try to estimate their overall impact here: [https://www.givewell.org/about/impact](https://www.givewell.org/about/impact).

Also, feel free to disagree, but you might find their argument that expense ratios should not be the most important charity metric interesting: [https://blog.givewell.org/2009/12/01/the-worst-way-to- pick-a...](https://blog.givewell.org/2009/12/01/the-worst-way-to-pick-a- charity/)

<comment><USER17> Exactly. It's literally the first time I hear of giving _to_ GW. I always thought everyone uses them as a ranking of what charities to give directly to.

</comment></comment></comment></comment></comment></comment><comment><USER18> Good news but this is just a drop in the ocean.

<comment><USER19> I agree. Add a few of your own drops, the Pineapple guy did his part and then some.</comment></comment>


What I think is bad about Microsoft acquiring GitHub - <AUTHOR> https://dev.to/maxart2501/what-i-think-is-bad-about-microsoft-acquiring-github-gme <comment><USER2> I know it's an unpopular opinion but consider how bad it could have turned out if google bought it.

Points 1, 3 & 4 would likely happen under google.</comment>


Value_ptr – The Missing C++ Smart-pointer - <AUTHOR> https://hackernoon.com/value-ptr-the-missing-c-smart-pointer-1f515664153e <comment><USER2> Confusing to me why one would need that except for the pimpl use case, that seems to make sense to me

</comment><comment><USER3> Unclosable "open in app" pop-up.</comment>


Girl flooded with beauty ads on Instagram - <AUTHOR> https://www.bbc.com/news/technology-48677333 <comment><USER3> > If you are an Instagram user and you would like to see which ad categories > the platform has assigned to you, go to the settings menu in the app, then > follow this path: Security / Access Data / Ads / Ads Interest.

If the BBC wanted to be helpful, they could teach how to install uBlock Origin, instead of how to help corporate when their spying fails.

<comment><USER4> To be fair, as much as it doesn't help things, it is entertaining to see what Instagram thinks I like and is a feature I didn't know existed. I recently un- followed everyone besides the people I know IRL (so no more celebs, memes and instachicks) and, combined with the obfuscation software I use now, the ads suggestions are all over the place. For a male, 20-something year old nerdy engineer I apparently have a real love of all things 'comsmetics, hair products, spas, dresses, beauty, and tattoos'!

<comment><USER5> People need to realise that these categories are _not_ what web services use to target.

Instead, they are an approximation of the underlying data, which is really used for targeting.

Have an a analogy:

I have a photo of a crime suspect. I would describe it as "man with beard in yellow jacket".

When looking for the matching person, I _could_ look for all other men with beards, or I could go back to the original photograph and try to find a matching face. What's likely to give the most accurate result? Clearly the face matching. They show you the text though, but underneath they use the face for the actual targeting.

</comment></comment></comment><comment><USER6> In other news: Water is still wet

> "There are lots of things you think about with your kids on social media, > but advertising isn't really one of them," said Ms Winter

Under which moon did this lady live for the last decade? Instagram is probably the single piece of technology I would wish away the instant I got a magic wand.

<comment><USER7> May have been part of a generation that grew up when legislation to ban child- focused TV advertising had been in effect. If you don't use IG, it's easy to miss that it's become a cesspool of advertising. Both "Promoted Post" garbage as well as Influencer's sponsored posts.

</comment></comment><comment><USER8> I can't believe the business models that involve targeting kids these days are legal and so widely accepted

<comment><USER9> Not saying its right but Instagram terms of services states that they person cannot be younger than 13, this is a instance of the person being 12. The parents need to be more responsible and not create or allow social media accounts for their kids when they are that young.

<comment><USER10> Unfortunately that practically means ostracism for such kids, as everyone uses these apps.

</comment></comment></comment><comment><USER11> "Update 19th June 2019: Since this article was published, Tamsin Winters has found out that her niece did receive a broader range of adverts than she originally believed. In addition to the 13 adverts mentioned, she also saw ads for trainers, chocolates, a drink and women's football."

So.... never mind....

</comment><comment><USER12> > The girl, who is just about to turn 13 - the minimum age for Instagram - <USER2> > recently joined the social network.

So what we are seeing here is a TOS violation?</comment>


Women in technology are paid 13% less than men, research reveals - <AUTHOR> http://www.information-age.com/industry/uk-industry/123459525/women-technology-are-paid-13-less-men-research-reveals

<comment><USER2> Having a link to such study would be nice because we actually have no idea how it is calculated.

If they are counting Bill Gates, Larry Ellison... then I'd say most men are winning less than women</comment>


The rise of fear-based social media like Nextdoor, Citizen, and Amazon Neighbors - <AUTHOR> https://www.vox.com/recode/2019/5/7/18528014/fear-social-media-nextdoor-citizen-amazon-ring-neighbors <comment><USER2> Nextdoor is... very odd.

In Salt Lake City, where I currently live, all I see are people complaining about homeless people and "suspicious people", who are _always_ people of color just walking down the street (who I've actually recognized occasionally).

Yeah, people call others out on this sort of casual racism, but it doesn't make it go away. It becomes a hotbed of these kinds of thoughts. When someone gets a bike stolen, you'll always see a comment like "The homeless problem here is out of control" and sometimes a comment with a picture of some random (again, person of color...) walking down the street from a Nest cam asking, "Did you see anyone like this? My bike was stolen too."

It's so odd to me to see all this on Nextdoor because I live a block away from a homeless shelter (one of the "gritty" parts of the city) and I can count only twice that I've had issues with homeless people or crime. I've lived here for almost six years now and I've never felt nearly as nervous or afraid as some of these Nextdoor users claim.

However, there is a ton of amusement from Nextdoor users, as well. The number of times I've seen people call each other rude because they used the word "fuck" in their post is extremely high, but that could be because I live in Utah haha.

In short, it's my experience that Nextdoor is filled with the type of person who calls the cops on their neighbors for no reason (like noise complaints). These users would really benefit from just getting to know their neighbors in real life.

<comment><USER3> That kind of paranoid neighbor is nothing new. They would benefit from being social shamed and isolated. Connecting a whole network of them together is just about the worst thing I can think of.

Nothing reinforces crazy like an echo chamber.

<comment><USER4> If people are having their bikes stolen, that's not paranoia. I would not want to live in such a neighborhood and it's always a little shocking to me to see this type of commentary on Hacker News where low level theft and vandalism appears to be accepted as just how life is. It definitely doesn't have to be.

<comment><USER3> The majority of low-level theft and vandalism is by bored teenagers in their own neighborhood.

The worst petty crime I ever had to deal with was living next to a middle school in a nice neighborhood in Houston. There were car windows smashed all the time by middle and even upper-middle class kids walking home from school and seeing something shiny in the passenger seat.

It sucks, but it's not a good justification for being afraid of "those people." Turns our those people is us.

<comment><USER5> In my neighborhood there are very few teenagers. The bike thieves, package thieves and car ransackers are either actual thieves (with lookouts), or addicts. People like to blame bored teenagers, but given my city has one of the lowest percentages of teenagers in the country but yet this happens, indicates it's something else (proven by the pictures and videos posted by neighbors).

</comment></comment></comment></comment></comment><comment><USER6> In my limited experience with it, Citizen is trash and incentivizes bad behavior.

I once watched someone live streaming themselves following police into a call at a private residence. Unsurprisingly, the police officers responding forced the person back out onto the street. Now, I am all for accountability, bodycams, etc. but ordinary people holding up their smartphones _should not_ be following police officers into active crime scenes and any company that incentivizes or gamifies this behavior is, by definition, trash.

<comment><USER7> Sounds like Nightcrawler to me.. creepy.

<comment><USER8> The game Charlie and Frank play at night?

</comment></comment></comment><comment><USER9> I live in a very dense part of San Francisco and most of the Nextdoor activity I see is people complaining about the constant car break-ins, human feces, needles, package theft and unstable vagrants. There's one group that thinks these things are bad and should be stopped, and another group that likes to argue otherwise.

Sometimes there's some overt racism but usually those posts disappear quickly.

<comment><USER10> In our well to do South Bay neighborhood, it's about unknowns ringing their door bell, which is obviously a very suspicious activity.

When my wife and I once had to go to all the houses of the neighborhood, it was amazing how many people who were clearly at home did not open their door.

It's a totally alien concept to where I originally come from.

<comment><USER11> In this thread people are scared to open their doors when someone knocks. In the other thread people are scared to knock on their neighbor's door. How did this society become so irrationally terrified of everything? I know people who won't let their kids outside because they think crime is everywhere. This is in a firmly middle class single family home Leave It To Beaver neighborhood.

<comment><USER9> Communication technology has changed everything. We expect to be communicated with first in ways that have a minimal impact on our time and personal space, like text, email or a messaging system. We can handle those communications if and when we deem fit.

Someone calling on the phone or knocking on the door is someone demanding immediate and exclusive use of my time for reasons only they know. In the case of a door, they are also asking for access to my home (to a degree).

The fact that the vast majority of those calls and knocks are for sales, religion or politics make us rightly avoidant. And sure, some can even be dangerous. But almost none of them are people we actually want to communicate with. Those people would have already called/texted/emailed. If they called, we'd recognize their number. If they were coming over, they'd give us advance warning.

So the folks left surprising us are the folks we are least likely to want to engage with.

</comment></comment></comment></comment><comment><USER12> Interesting. I signed up for Nextdoor to see what it is based on this article. For my NYC neighborhood it's all tag sales, requests for opthomology recommendations, etc... No fear monger it in sight.

<comment><USER13> Try it in a mostly-white suburban neighborhood. You'll rapidly add new items to your library of dog whistles.

<comment><USER14> Checking in from a mostly-white suburban neighborhood. The only "crime" post I've ever seen was about a homeless guy going through trashcans and yelling at people. Everything else is as OP states; yard sales, missing (and found) pets, etc.

Edit: I also find it ironical that you're fear mongering on a post complaining that apps are fear mongering...

<comment><USER15> Like everyone's complaints about Slack, it's the users and not Nextdoor that are the problem.

<comment><USER16> Sure, but like Slack at work, you don't have the option to choose who you're connected to on it. So if you happen to have bad people on it (and both apps incentivize people who are inclined to act poorly to do so), you're boned.

</comment></comment></comment></comment></comment><comment><USER17> I live in the DC suburbs about a mile from a relatively new Metro station. The local Nextdoor is fairly reasonable, but about once a month someone posts to report a small crime (like a car break-in) and concludes with something like, "this never happened before Metro was put in."

Right, because criminals are spending an hour on the train, then walking a mile or two to your house so they can commit a crime, then hustling to get back home before the system closes down for the night.

It certainly is interesting to see how disconnected from reality some people are.

</comment><comment><USER18> Nextdoor.com was something I resisted for a long time, despite the number of neighbors using it. Once I signed up, I have be an ardent supporter. Having moved 3 times since, my partner and I both use it as extensively as the neighborhood requires. The ability to restrict messages to a specific neighborhood or set of surrounding with appropriate veiling of information, is brilliant.

</comment><comment><USER19> Any social media can be fear-based if you're scared enough.

"Fear of crime" has rarely had much connection to actual crime levels, far more to do with perceptions of cleanliness and social class.

<comment><USER20> And color, can't forget color..

</comment></comment><comment><USER21> These two twitter accounts are pretty entertaining:

[https://twitter.com/bestofnextdoor?lang=en](https://twitter.com/bestofnextdoor?lang=en)

and

[https://twitter.com/nextdoorsv?lang=en](https://twitter.com/nextdoorsv?lang=en)

Nextdoor is definitely a vector for accute NIMBYism where I live.

</comment><comment><USER22> I have a friend on Nextdoor who routinely complains of neighbors freaking out about "suspicious" people in the neighborhood, how crime is on the rise, and oh my god what are we going to do!? All that angst despite that neighborhood has one of the lowest crime rates in Denver, and there is zero evidence from publicly available police records that the crime rate is going up.

<comment><USER23> People in Seattle are starting to sound like conspiracy theorists in their efforts to explain why crime reporting data doesn't show that Ballard is now a hellish warzone where they fear for their lives just opening the front door.

<comment><USER24> Holy crap, no kidding. Between NextDoor and /r/SeattleWA, compared to my own experience, I'm beginning to think that I live in one of The Orville's split universes. According to those forums, there are lawless hordes of vagrant gangs roaming the streets, dumping bags of used syringes onto little old ladies in walkers while stealing their bikes and running over children with RVs.

Meanwhile, I (a person with no car so I walk and bus everywhere since my neighborhood isn't cool enough to get light rail...ever) barely see any of what they describe. Yes, there are a handful of tents around freeway onramps. Yes, the trash looks a little unsightly. Yes, I wish it wasn't there. But I've not once been attacked and I rarely see a syringe or even a hint of what looks like poop (statistically, it's probably dog poop given the scourge of terrible owners of dogs in this city).

So I'm not discounting that _something_ happens _sometimes_ , but damn, not on the level that the screaming hysterics seem to think it does.

<comment><USER25> I like how we live in a first world country, but yet casually dismiss the fact that there are homeless people living outside in tents, and that feces and syringes are only an occasional thing so it's really not so bad. Coming from a clean, safe neighborhood in New England, where even trash on the side of the road would be offensive, I feel like we are definitely living in two different parallel universes.

<comment><USER24> I think that's a very disingenuous reading of what I wrote. I was comparing my personal experience to the hysterics I read on forums like NextDoor and local Reddit. I did not say that the problem was not a problem, but that some responses to and perceptions of it are overblown. (Oftentimes, these positions are used to justify espousing a preference for simply throwing homeless people in jail for "vagrancy" or involuntarily removing people from the state. So, yes, in a way, I do find the response to be worse than the actual problem.)

<comment><USER26> Not really disingenuous at all - I read your comment the exact same way.

</comment></comment></comment></comment></comment></comment><comment><USER27> I don't feel that having more data is a bad thing as long as there's some transparency and context

<comment><USER28> I struggle with this issue. I'm a big fan of the idea of transparency given, as you point out, context. But many people are _terrible_ at looking for context, even when it's available. Wherever transparency exists, some aggregator that will harvest shocking information and divorce it from explanatory context to drive "engagement" seems not to be far behind. But I find careful packaging of information for people off-putting as well.

<comment><USER27> Maybe we suggest it to companies like Amazon and Nextdoor. They're both HQ'd in progressive areas and I wouldn't be surprised if they would be open to hearing about suggestions to tweak their UI to add more context.

</comment></comment></comment><comment><USER29> Nextdoor is a gigantic advertisement for Ring and Nest products.

</comment><comment><USER30> It is interesting to observe assumptions about the entire network, where one can only observe a small fraction of the entire network.

A single observation of racism or toxicity causes many observers to assume their neighborhood is full of casual racism or is completely toxic.

</comment><comment><USER31> Nextdoor is comedy gold - from people complaining about teenagers ringing their doorbell and running away, to reporting "suspicious black males", someone asking for free lemons. It's hilarious!

<comment><USER32> It's all fun and games until I'm the "suspicious black male" and held at gunpoint by police because of this foolishness.

</comment></comment><comment><USER33> Meanwhile, the only post on my nextdoor today is a reminder that it's the day of the year when they get together to repaint and clean up the poorest part of town as part of a charity event.

 _shrug_

</comment><comment><USER34> It's kind of ironic seeing journalists write about this since selling fear is the primary M.O. of engagement-driven journalism today.

<comment><USER35> Sad seeing this comment greyed out, I have friends who are journalists and they lament this all time.

The media model always had this strain in it on the fringes but now it's prevalent everywhere in a world of A/B tested headlines and click KPI's rather than newspapers sold.

<comment><USER34> As they say "If it bleeds, it leads"

</comment></comment></comment><comment><USER36> Nextdoor is particularly rotten. I've never signed up but I constantly get spam emails about what people are talking about in my complex. Click the link and it brings you to a sign up page.

I will never do business with a company that thinks it's okay to spam non- customers like this.

</comment><comment><USER37> I get the feeling most commenters here don't actually use NextDoor, but have plenty of opinions about NextDoor that [Vox | Gizmodo Media | Twitter | etc.] fed them. I have been on NextDoor for years and I almost never see frivolous complaints or racism. It seems to me that people get this notion based on hit pieces written by online journalists and by things like the 'best of next door' Twitter feed, which showcases cherry-picked isolated posts.

Many of the comments here are alleging widespread racism on Next Door, but I don't agree with the idea that a report about suspicious behavior that involves a POC is inherently racist. Broadly labeling such reports as racist is disingenuous and frankly harmful. OTOH, I see plenty of discrimination in this thread, where people are surmising that NextDoor is "just older white people" (as another comment put it). For those who don't use NextDoor, they have a very well-designed workflow when you try to submit a post about a crime or suspicious activity, where they ask you step by step to isolate what happened, why that behavior was suspicious, and so forth, before collecting details on the people involved.

For those saying "I don't see any problems at all, these NextDoor posters are conspiracy theorists or hysterical fear-mongers" \- maybe that's true for you but it is definitely not true for me: I've had needles thrown into my front yard by drug-addicted homeless people. I've been the victim of property crime and lost irreplaceable possessions. I've had friends physically assaulted, robbed at knifepoint, caught in the middle of gunfire, and even threatened with murder in front of their children. I've seen needles in front of my workplace, in front of stores I go to, and in greenbelts in parks. I encounter human poop about once a week downtown. These are all real problems that were absolutely not prevalent 10 years ago in Seattle, and have received limited press coverage due to our ideologically-skewed demographics + city council + journalists.

Violent crime is still rare here but on the rise in Seattle. Property crime is incredibly common, and a lot of it goes unreported because the SPD is not staffed to handle it and has been directed to de-prioritize investigating it or directed to not enforce certain laws or directed to not enforce laws against some groups of people (i.e. homeless). Both Facebook and NextDoor luckily have given voice to what are very real concerns to law-abiding residents.

PS: the level of discourse in this thread is appalling. So many people are using labels (e.g. "NIMBY") or discriminatory remarks ("old white people") to dismiss others' valid perspectives, values, and opinions. I find this ironic considering the same posters seemingly uphold the value of "lived experiences" in other contexts. But more importantly, it seems like lazy comments that aren't making any actual argument or adding any information are garnering votes, which is not good for the community.

<comment><USER38> I'm in Seattle too, and NextDoor is mostly frivolous racist complaints. Last time I used it, a bunch of angry white men were planning to "get their baseball bats" to "deal with" a homeless guy they suspected of breaking their car windows. (After the cops told them that they reviewed the camera footage and didn't think it was that guy).

I, too, have friends in Seattle, and none of them have had any of the experiences you describe happen to them. I go downtown daily for work for years, and have seen poop about three times, and discarded needles about the same number.

The reason you don't like being called a NIMBY is because it's accurate.

<comment><USER37> Do you have evidence to back up your claim that NextDoor is _mostly_ frivolous racist complaints? How did you determine either "frivolous" or "racist" in each instance? Did you investigate and verify or invalidate each of the reports to arrive at a strongly-backed understanding that they were frivolous? Did you somehow determine that race played a major factor and not suspicious behavior? I'm betting you don't have any such data nor any legitimate way to make those determinations.

> The reason you don't like being called a NIMBY is because it's accurate.

No one likes pejoratives. They add little value to the discussion. It is a crutch where there is otherwise no sound argument.

<comment><USER38> I used my eyeballs and common sense, same as you.

</comment></comment></comment></comment><comment><USER39> Love the Oxford comma in the title :P

</comment><comment><USER40> This article is 100% FUD.

For the downvoters, let me summarize.

Social media is bad because people.

Saved you a read.</comment>


Google Feedback on TypeScript 3.5 - <AUTHOR> https://github.com/microsoft/TypeScript/issues/33272 <comment><USER2> > (I might suggest the underlying problem in this code is relying on inference > too much, but the threshold for "too much" is difficult to communicate to > users.)

This is a _very_ outstandingly interesting line out the whole writeup.

I like the writeup in its entirety for being very balanced and thoughtful, but this line in particular really stands out to me as worth more thought for anyone interested in language and type system design.

Inference is great.

Except... when it's not. When it's "too much". When it starts making breaking changes appear "too distantly".

It's an interesting topic to reflect upon, because the inference isn't _making_ a breakage; just shifting around where the breakage _appears_. (And this makes it hard to ever direct criticism at an inference mechanism!) But this kind of shifting-around of the breakage appearance can be a drastic impact on the ergonomics of handling it: how early it's detected, how close to the important change site tooling will be able to point the coder, etc. That's important. And almost everything about it involves the word "too" \-- which means the area is incredibly subjective, and requires some kind of norm- building... while not necessarily providing any clear place for that norm- building to center around.

I don't have a point here other than to say this is interesting to reflect on. I suspect the last chapter on type inference systems has not yet been written. Can an inference system be designed such that it naturally restrains "too" much use of it?

<comment><USER3> IIRC there are a couple of Rust write ups about this.

In Rust, inference is limited within functions. The language doesn't allow inferring the argument or return types of functions to avoid this kind of action at a distance.

The function API is just one of the many arbitrary places where one can limit inference and require users to provide types. In other languages the module boundary might also be an appropriate place to do that.

<comment><USER4> A big part of TS is the ease of transition from JS where you immediately get benefits through gradual typing and return type inference is probably a big part of that.

<comment><USER5> This is true, but a lot of projects are now starting with TS, and maybe could benefit from intentional limitations on inference, at least locally. I'm pretty sure most folks start new projects with strict enabled as is.

<comment><USER6> In my experience a lot of people don't necessarily start projects with strict mode — and they _really really_ should ... most people I've talked to who couldn't figure out how to use typescript never figured things out because they ended up somehow with a compiler configured with noImplicitAny: false — typescript really needs to find a way to change the default here ...

<comment><USER7> Yes, my advice is almost always strict should be true for every new project, and even sometimes for migration projects where the end goal is to absolutely decrease tech debt and bugs as quickly as possible and the team isn't afraid of a giant compiler error waterfall as motivation. (It's a nice auto-generated TODO list with some semblance of progress reporting!) But at the very least, everyone should do themselves the favor and "noImplicitAny: true" no matter if it's new, migration, something inbetween, and no matter what they think of any of the other strict flags. Explicit anys are searchable TODO markers and fine, but implicit anys always seem to be hidden bugs waiting to be found.

</comment></comment></comment></comment></comment></comment><comment><USER8> Typescript is absolutely amazing. I've been working with it for the last 8 months.

[https://getpolarized.io/](https://getpolarized.io/)

and the source is here:

[https://github.com/burtonator/polar- bookshelf](https://github.com/burtonator/polar-bookshelf)

I could have NOT made as much progress just by using JS directly. When you have a large code-base and you're trying to make progress as fast as possible refactoring is needed and the strict typing is invaluable.

Honestly, the MAIN issue with TS are issues around webpack + typings for 3rd party and older modules.

I'd say 85% of the code I want to use already has types but when they don't it's frustrating to have to pause and write my own types.

I have 20 years of Java experience. Used it since 1.0 and for the most part have been unhappy with everything else.

I've decided that Node + Typescript is by far the most productive environment for me to switch to. I can code elegant apps with both front and backends and I get strict typing.

Could NOT have made so much progress without TS.

<comment><USER9> I'm writing this as a developer who writes a lot of C# and Typescript: Have you tried C#? Even though I sometimes miss the flexibility of Typescript when writing in it, I love the reliability. Maybe it's no _as_ battle-tested as Java (especially with all the rewrites recently), but feels like it's 99.9% there.

<comment><USER10> Not GP, but as a developer working with TypeScript and C#, I respectfully disagree regarding the type system. There are many things I like better in C# compared to JavaScript, but I feel overly constrained by the type system of C# way more often, and most notable is the lack of discriminated unions (aka sum types etc). You can say that something has this _and_ that, but not that it is this _or_ that.

<comment><USER11> I agree, as a mostly C# developer for years, then Typescript (Node, Angular and React) for the last couple of years, when I go back to C# projects, I feel like I'm doing a lot of work for the compiler. And really elegant use of the TS type system doesn't translate well into C# many times, forcing me to write boilerplate.

I've been eyeing F# for more elegant managed code, but that's going to take me a little more up-front investment to get productive.

</comment></comment></comment></comment><comment><USER12> This write-up led me to Evan Martins blog. What a gold mine. Digestible writing with a peek inside of Google's internals. [http://neugierig.org/software/blog/](http://neugierig.org/software/blog/)

</comment><comment><USER13> I love TypeScript. I started using it around v1.0. Microsoft has hit some gold with it.

When I first started using it I had lots of `any` in my code (like the Google employee is describing here). But over time it really starts being extremely clean.

<comment><USER14> I started around 0.7/0.8, it was already such a fantastic product back then. It's just fantastic, Javascript on steroids.

<comment><USER15> I don't have a significant amount of experience with TypeScript, but even from my limited experience I agree that it's a fantastic product. That said, at $JOB we (unfortunately) have a fair amount of production code written in TypeScript 0.9 which nobody has ever upgraded, and simply won't compile on a more recent version. It's been that way for _years_ now, and every attempt to bring it up to date has been met with failure.

It may be an overly broad request, but I'd be very interested if anyone had any suggestions for how we might go about performing such an upgrade in an iterative manner. My understanding is that pre-1.0, TypeScript went through a number of breaking changes (as would be expected of any pre-release software), but I've never found a complete list of what those breaking changes were.

<comment><USER13> You can see a list of all changes in the "What's New in TypeScript" document on GitHub:

[https://github.com/Microsoft/TypeScript/wiki/What's-new- in-T...](https://github.com/Microsoft/TypeScript/wiki/What's-new-in- TypeScript)

And a list of breaking changes here:

[https://github.com/microsoft/TypeScript/wiki/Breaking- Change...](https://github.com/microsoft/TypeScript/wiki/Breaking-Changes)

They both go back until v1.1. For older changes you can check the blog:

[https://devblogs.microsoft.com/typescript/announcing- typescr...](https://devblogs.microsoft.com/typescript/announcing- typescript-1-0/) [https://devblogs.microsoft.com/typescript/announcing- typescr...](https://devblogs.microsoft.com/typescript/announcing- typescript-0-9-5/)

Anyway, it's hard to say what you need to do to get your code to compile on the latest TypeScript version without knowing what some common compile errors are in your code.

Here are some guesses:

1\. The way you obtain type definitions for third-party packages has changed. It used to work with /// <reference> and tools like nuget or TSD (TypeScript definition manager). But now it works with npm in the @types namespace and some npm packages even include definitions themselves now.

Of course, updating to the latest type definitions would mean that you have to upgrade to the latest versions of the third-party libraries as well. Otherwise you have to find a way to keep working with the old definitions for the respective library versions.

2\. Pre-1.5 TypeScript had something called "internal modules" which were renamed to "namespaces" and are generally discouraged now. Hopefully your code is not using that feature.

[https://www.typescriptlang.org/docs/handbook/namespaces.html](https://www.typescriptlang.org/docs/handbook/namespaces.html)

3\. tsconfig.json. I don't remember when they introduced it, but you likely need to create this file and tweak the settings

<comment><USER7> > 2\. Pre-1.5 TypeScript had something called "internal modules" which were > renamed to "namespaces" and are generally discouraged now. Hopefully your > code is not using that feature.

Related to this, the TypeScript pre-1.0 import/export syntax for "external modules" was grandfathered in, but the semantics changed alongside the "internal modules" changes in 1.5. So pre-1.0 import/exports still mostly "compile" in post-1.5, but have very different semantics and that can often cause a lot of downstream module shape headaches, depending (and exacerbated by) the module format you are targeting.

A first pass making sure to rewrite all import/require/export statements can save you a lot of work later, even though it won't directly cause compile errors. You can get some compile errors by making sure you try to compile to a "proper" post-ES2015 module format (--module esm or --module es2015 or --module esnext even). There's also tslint rules such as "no-import-requires".

</comment></comment></comment></comment></comment><comment><USER16> Issues like these are the reason we can thrive as a community. Not playing a blame-game and offering direct feedback to a wonderful open source project. Trying to get my own company to get more involved in feedback to the open source tools we use as I think it is so extremely respectful and encouraging!

</comment><comment><USER17> A little off-topic:

I'm currently trying to find a way to write (type safe) business logic once, then reuse it pretty much everywhere (mobile / web / desktop),and it seems to me that typescript has become the only option. Javascript runtime is present everywhere, and can interface with anything.

Does someone knows of another alternative (viable right now, or in the coming months) ? I know llvm can theoretically target any platform, including wasm, but how painfull is it in practice ? Can you write a line of code that does a network request then expect it to run as it is on the browser and on mobile platforms ?

<comment><USER18> C# (with .NET Core 3.0 officially launching on the 23rd of September, Blazor (WASM) support is included.) I have been playing around with Blazor a bit with the preview releases and I have to say it's pretty slick.

<comment><USER19> Did they improve the download size?

<comment><USER20> No and on that basis it's unusable. However that's because it downloads the whole runtime. Eventually MS intend to load only your compiled code.

<comment><USER21> You can avoid that issue with the Server Side Blazor concept for business side portions of your application.

Depending on the application you can get extremely far with just using HTTP requests to an API for anything business logic related. A lot of apps over complicate themselves by trying to force a JS framework on the front end with no benefit to the user. I seem to prefer using non-SPAs these days over SPAs because very few places do them well. Google being a terrible SPA developer.

\- Edit - I forgot to mention Elixir's Phoenix has LiveView which is similar to Server Side Blazor.

<comment><USER20> As I understood Blazor as compiled business logic rather than a bundled runtime is due in a future release of .Net Core. Not sure if it's ready for 3.0 later this month but that will be the game-changer Blazor promises to be. Yes, Phoenix Live View is similar but unfortunately Elixir hasn't really captured sufficient mindshare for it to have an impact.

</comment></comment></comment></comment></comment></comment><comment><USER22> I've recently built a Node server with TypeScript and it's a joy to use with external libraries when the types are available. It's such a time saver to not have to guess which method to call with which arguments (I've had only experience with dynamic languages before). Some libraries don't have types or they are outdated but it was a minority.

With the experience I've found that most of the type errors are actually between the backend and the frontend in web applications. It's still hard to fully type the entire flow from the database calls with the ORM to the objects manipulation in the frontend.

How are you dealing with that? We used Nexus with GraphQL but it was still a bit cumbersome.

<comment><USER23> We use [https://graphql-code-generator.com/](https://graphql-code- generator.com/) in combination with some scripts which update the graphql schema at build time - works great. Using Apollo on the front end.

Having types straddle the client/server divide is a huge win

</comment></comment><comment><USER24> Almost every single Flow version upgrade is like this — every new version brings a slew of errors due to Flow's continuous movement away from practicality towards "soundness".

<comment><USER25> I'm not sure I agree. I've found updating Flow in a rather large monorepo a relatively straightforward process. The changes are usually rather small because the team releases every two weeks. They also manage the update internally within their company's monorepo so they'll usually find out about these types of unexpected behavior changes before the community does.

That said, we do rely on automated error excludes (similar to eslint-ignore- next-line) for things that cannot be fixed with codemods. Those errors were always there it's just now you know about them. Better to stem the bleeding by updating the type checker to the latest version.

<comment><USER24> > I've found updating Flow in a rather large monorepo a relatively > straightforward process.

I'm not sure you're being entirely honest here, as we both know through feedback that flow updates in the said monorepo are one of the most burdensome processes for its contributors.

As a maintainer/owner of a monorepo experience, it's crucial to maintain empathy and honesty of how processes such as dependency and tooling updates affect (and are perceived by) its users.

<comment><USER25> Apologies, lxe. I can tell you're frustrated. If the the Flow upgrade process has been burdensome to others, I'd really like to know. I've always thought we've done a good job of updating internally on the platform team and that it hasn't been a concern for end users. We did run into some pain points in changing configuration options around the unnecessary optional-chaining lint rules but that wasn't related to updating the Flow version. I think you may be conflating those.

</comment></comment></comment></comment><comment><USER26> > but any time someone saves a Selection into a member variable, they ended up > writing down whatever type TS inferred at that time, e.g.

> mySel: d3.Selection<HTMLElement, {}, null, undefined>;

I'm curious how Google and others approach adopting Typescript gradually, as I'm pretty new to it, I'm assuming it goes like: The programmer converts code to Typescript and when they come across return types they copy the inferred type and add it to the codebase directly wherever possible. I'm assuming just as a matter of using (untyped) libraries you need to rely on the output of Typescript in order to try have every return typed.

So the biggest problem seems to be how TS infers things changed meaning you can't always trust what you copied as staying consistent, even if the source library doesn't change itself. That's always something to keep in mind for overhead.

<comment><USER27> The explicit type is optional. It's not that it's required to copy out whatever the compiler inferred, it's just that lots of people do it to be explicit.

<comment><USER26> All types are optional in typescript. I was just curious about Google's approach to it and if they had some standard practice of always copying the inferred type to get a great amount of coverage.

<comment><USER28> Copying the inferred type is the same as copying your runtime outputs into your tests. It's a statement that you believe the result is correct and it's on you to make that judgement call. It's not a policy to blindly copy everything, because that defeats the purpose of type checking and testing, turning your tests into " verify that nothing changed", not "verify that the system behaves as intended".

<comment><USER26> Thanks, thats typically how I approach it as well, it's good to hear it written out. I try not to append copied types without fully understanding their structure either. But sometimes you just need to just trust it to solve a problem.

There's plenty of blog posts and docs on advanced types but I'm interested in the day-to-day best practical approaches people are taking adopting it. I should look around for some literature or talks on the subject...

</comment></comment></comment></comment></comment><comment><USER29> So happy to see the attention Typescript is getting lately. Absolutely love the language, and have been using it since it got released.

<comment><USER30> I tried using it with Angular, but it doesn't seem to help much. For example, if you have something like:

        <button (click)="login(email, pass)" />

And then a TypeScript function like:

        login(email: string, pass: string) {

        }

TypeScript can't help you at all here because all the typing is determined at runtime by Angular. Even if `email` is a number or a boolean, no problem, it will just happily pass it in.

What benefit, then, does TypeScript provide? I understand it's compile-time guarantees, but how does that help if the types are coming in from HTML land which the TypeScript compiler doesn't examine at all?

<comment><USER31> For your template code in angular, there won't be any significant benefit to using typescript. It could be worse than not having typescript at all, since you can add type annotations to your 'login'-function that don't match up with reality.

That's not really a typescript issue though, and it works great with libraries that don't use string templates. From what I've seen the angular community hasn't really prioritized a typecheck-able templating language.

<comment><USER26> Nor does Vue. The focus is on typing the reactive data that feeds the templates which should be sufficient.

Plenty of things like HTML form elements take numbers or strings just fine, as it all outputs to strings in the end. Additionally, by breaking up stuff into smaller composable components there should be enough gating and typing layers, at least with Vue/Vuex that's the case. If it was just plopping straight into the elements 1-to-1 that might be a different story.

</comment></comment></comment></comment><comment><USER32> Is there a way to migrate jsdoc-annotated JavaScript code over to TS, and is TS's minifier as good as Google's closure-compiler yet?

<comment><USER33> Visual Studio Code has a "Code Fix" that can automatically copies JSDoc into TypeScript annotations. This can be done to an entire file at once.

TypeScript does not come with a minifier. The code it produces is compatible with the target version of JavaScript (e.g. compile ES6 modules into CommonJS) but unminified.

<comment><USER32> I see. closure-compiler's "advanced" mode takes advantage of jsdoc type info for minifying so I guess generic syntactical minification won't compress as much for the time being.

<comment><USER34> We (Google TS team) maintain a tool[1] that transforms TS types into jsdoc types for the purpose of feeding them into 'advanced' mode. We also (to answer the grandparent question) maintain a tool[2] that converts Closure-annotated TS into JS. (Why both ways? We transition JS->TS and check it in as the code the user works with, while we use the TS->JS one within the compiler at optimization time.)

[1] [https://github.com/angular/tsickle](https://github.com/angular/tsickle)

[2] 'gents', in this repo [https://github.com/angular/clutz](https://github.com/angular/clutz)

</comment></comment></comment></comment><comment><USER35> filter(Boolean) is a bad idea anyways. I was bitten by this before.

<comment><USER36> Why do you say so?

<comment><USER37> One reason:

This isn't TS-specific; it's common in Python too: coercing to Bool has language semantics (for whatever language you are in) which often don't match the application semantics of your program. Application programmers don't (and shouldn't have to, but for the language's over-eager coercions) always think about the boolean semantics of all their objects. In particular, None and empty/zero object are both False in Python, and Python style/linters push you to avoid explicit comparison to None, which gets weird when your application wants to treat empty objects as True because they have differen semantics from None. (For example, in a security function, None may mean no-op / fallback to default, but Empty might mean "Reject all".

<comment><USER7> Another reason that is TS-specific is that of JS functions can be highly variadic in the number of arguments and a lot of subtle runtime bugs can be found in blindly passing arguments without checking their count. If filter changes from returning only one thing to say two (for instance, an index count), Boolean may produce a runtime error for having too many arguments, may silently ignore extra arguments, may interpret an extra argument as changing the behavior, or some combination of all three depending on strictness versus compatibility level, executing browser, phase of the moon, etc.

Boolean itself I've not had trouble with, but things like map(parseInt) is the big one that bites a lot of junior developers all the time in TS/JS. (parseInt takes an optional second argument for radix, so in cases where the second argument returned by map is an index count, which is likely, you get it parsing in base-0, base-1, base-2, … which is almost never something you'd do intentionally.)

</comment></comment></comment></comment><comment><USER38> It is very funny to read this from Google, since we talked about similar problems with Google regarding Angular upgrades, where features were modified that Google considered not used/no use cases known, while we were relying on these.

From my point of view Core members of any super large project (like React, Angular, TypeScript) are limited by design in what they perceive as their target audience and their use cases. This is simply a matter of fact: even as a core dev you cannot know how every dev uses your product.

So this is some sort of left-pad moment for TypeScript.

</comment><comment><USER39> Not a TypeScript user, but what really stood out to me is that Google are using a monorepo.

<comment><USER40> that stood out to me too... not the monorepo really, but the fact its a monorepo of a billion lines of code. seems almost impossible to maintain when you have a dependency change at the lowest levels that affects numerous projects.If i am understanding google was in a situation where they had to update every project that used typescript inside the entire company at the same time, that seems untenable.

<comment> yoz-y Mostly it means that you have to be really thoughtful when introducing a breaking change to a low level library.

<comment><USER37> Or you can YOLO / Leroy Jenkins the change and let everyone else fix the breakage you create, or see if they demand a rollback.

<comment> yoz-y They will not only demand a rollback but also do it. Besides, low level changes at this scale require a copious amount of approvals.

</comment></comment></comment></comment></comment><comment><USER41> I'm really curious how many lines of TypeScript are in use at Google. I bet most JS is still Closure.

</comment><comment><USER42> Google sure has a lot of comments these days</comment>


Ask HN: Help I think I'm being patent trolled - <AUTHOR>

Throwaway here.
I've been running an online service for a while now, and I just got an e-mail from some guy saying he "just filed a patent similar to what we do and hopes there will be no 'conflict of interest'".
Not once did the idea of trying to file a patent cross my mind, and this really makes me wonder and worry how the patent system works. I haven't been following it at all -- I just want to build cool stuff.
So my question is:
Is it possible for someone to file a patent and then come back and sue me after their patent is granted?
Does this mean I should try to file my own patent?
Am I even in danger or is this just an empty threat?
Thank you for any help shedding light on this. <comment><USER2> He has absolutely nothing to threaten you with at this point. In 2 or 3 years he may or may not have a patent and only then could he contact you about possible infringement. Patent applications become public after a year so you may want to set a reminder to take a look in a year and possibly send the patent examiner some clarifying info about your public website predating his application

<comment><AUTHOR> Here's the thing though. Like I feel like he came to my site and was like "Hey I don't think this guy patented his stuff. I'm going to patent it now, then come back and get him".

Can people do this with the patent system?

<comment><USER3> Sort of. You have some protection if you invented it first, but there are a lot of pitfalls. It's these crazy legal pitfalls that makes asking random people on the internet for their opinion so dangerous, even if you ask a smart bunch like HN.

For example, even if you invented what you did first, being able to _prove_ that you invented it first is another matter entirely. No matter how true it is, it won't help you in court if you can't provide legally acceptable proof.

Legal consultations aren't that expensive. And you'll need a lawyer anyhow to do anything other than ignore this email. Also, saying or implying that you currently have no legal representation is a really, really bad idea. At the very least, don't do that.

</comment></comment></comment><comment><USER3> If you want legal advice, I suggest getting a consultation from a patent lawyer. They can help you determine how best to protect yourself better than any online forum, even one as smart as HN.

Too many things depend on your specific circumstances for generalized advice to be helpful.

<comment><USER4> YES. This.

I cannot even begin to describe how many times I've heard commenters here spout advice like they are experts in patent law when they simply don't have the most basic grasp about them. It's terribly frustrating and scary to see people taking this often horribly wrong advice.

Sure, some people here are right, you probably don't have much to fear, they're probably just bullying you, but please, please, please don't take legal advice from a random forum. That's like taking advice on rails development from a forum full of lawyers. They just won't know what they're talking about much of the time and it can be very dangerous.

<comment><USER5> You have a valid point but is it worth your time? Experts don't exactly rule the world. The asker just needs to know if this threat will destroy what he does and the simple answer is NO.

He has a plethora of options at his disposal, being the real deal in this situation. If this was a letter from a lawyer, then it would take a lawyer. Does it need to be more complicated?

<comment><USER3> If it really is a bluff, the best way to call that bluff is by having a lawyer respond to them.

Advertising that you have no legal representation is a very bad idea. They can find ways to get you to say things they can use against you, for example, by making things sound bad and thus convincing you to deny things you shouldn't.

And yes, I have had this explained to me by actual lawyers.

</comment></comment></comment></comment><comment><USER6> _Is it possible for someone to file a patent and then come back and sue me after their patent is granted?_

Yes. The date of the patent _application_ is the determining date for a patent. I'm thinking that since they filed the application after you were already online, you're probably more or less OK, but patent law is weird.

 _Am I even in danger or is this just an empty threat?_

My money's on empty threat.

<comment><USER7> My money is on empty threat too. If he had a real case, he'd have "come harder" than he did (i.e., you'd have gotten a letter from an attorney, at least)

Best of luck, bud. Don't let it distract you too much. :)

<comment><AUTHOR> It was like "I am the CEO of blah, we just filed a patent..." stuff like that.

I should have realized this sooner, that if it was indeed a real challenge from someone with actual meaning they would have come with lawyers, and not some guy claiming to be a CEO of somewhere.

Guess I got the jitters too quickly. I feel better now though :)

</comment></comment></comment><comment><USER8> The message sounds more defensive than agressive. Establish contact with them and try to build a trust relation. Note that they were honnest to inform you at this stage. This is positive.

Try to get a hand on the patent text to see if there are differences in the methods. If one thing is different, then you are safe.

Check also about prior art. If your method was described in a document, a manual or somewhere else, it becomes unpatentable. His patent may then be rejected.

Don't get scared about it. Investgate and diagnose the extend of the problem (which may be a false problem), know your potential ennemy and see if you could turn him into an ally. He may have a patent, but you may have a business. It is the execution that matters. But evaluate the risk and odds to lose ground.

If you had some innovation, you should patent it, or publish it to make it unpatentable. You may publish it in patagonia to make it prior art to blow a patent troll if one shows up and keep your sauce secret in the place where you develop your business.

Patents are not expensive if you write and fill it yourself. I did it here in France and it costed me 280€. It did took me some time to learn how to write a patent, what to be carefull about, but it's not that hard.

</comment><comment><USER9> I know next to nothing about patent law, but wouldn't prior art be applicable here, if the online service was publicly available before the patent was filed?

<comment><USER10> I think the concern is that it costs money to lose a lawsuit, too.

</comment></comment><comment><USER11> Standard advice for anything involving law:

 _TALK TO A LAWYER_

You probably can't afford to make the wrong decision.

</comment><comment><USER12> I would ask for confirmation that he even filed a patent before worrying about it (or just ignore it until you see a public patent application as asmithmd suggests). Otherwise, the cost of an email is a cheap way to eliminate competition (so long as you don't mind 'stretching' the truth).

</comment><comment><USER13> It will take several years for his patent to make its way through the system. In the meantime, software patents will be abolished.</wishful thinking>

He could reasonably claim infringement if he can produce documentation saying that he came up with the idea before your service went live. If he is a standard patent troll, he will probably request a license fee that's low enough to be tempting given the alternative (a potentially expensive legal battle where you have to disrupt your operations to gather proof of prior art and focus on this rather than on your business). Unless you're willing to fight him just on principle, it may end up being cheaper for you to pay his fee and call it a day.

</comment><comment><USER14> I would consult an attorney. If I remember correctly, the actual date that your product has been known publicly (the day that you do business basically) by others, is an important factor to patents as well. If basically you can prove that your invention was out their before theirs even if they file a patent for it, and your idea was publicly known and used, I remember my attorney saying something that you can argue your case.

I'd also place my money on empty threat- but you should seriously look into filing your own patent. I'd also email the guy to ask him what his online service is for some more background information.

</comment><comment><USER15> Assuming the alleged troll's invention is even patentable (see <http://en.wikipedia.org/wiki/Machine-or-transformation_test>), if your _implementation_ actually conflicts with the ideas covered by said troll's application, you might be in trouble.

If not, you can always file an application covering the implementation details of your technology that distinguish it from existing prior art.

<comment><USER16> > _If not, you can always file an application covering the implementation > details of your technology that distinguish it from existing prior art._

He said that he is currently practising his invention in public. Thus he can no longer obtain a patent on said invention, his practice of it would provide prior art except under very limited conditions (which don't coincide with operating a business on the internet).

It is possible that he could obtain a granted patent but if any competitor knew that he had already being practising the patent they would know that they were immune from it and it would be effectively impotent to enforce a monopoly position.

As an aside: in the US applicants are required (or were a few years ago, I guess it could have changed) to disclose any close prior art they are aware of in their application. You can also make observations against the grant of said patent but I can't quote the USC without looking it up.

OMG - just looked it up, [http://www.uspto.gov/web/offices/pac/mpep/documents/1100_113...](http://www.uspto.gov/web/offices/pac/mpep/documents/1100_1134_01.htm), USPTO actually charge you to give them prior art against an application. They charge you to make the examiners job easier ...?!?

<comment><USER15> I doubt that by "running an online service" he's disclosed sufficient details to allow somebody to reproduce his invention. Can you tell how PageRank works just by _using_ google?

Not unless you google "pagerank" ;)

<comment><USER16> > _I doubt that by "running an online service" he's disclosed sufficient > details to allow somebody to reproduce his invention._

If someone looking at the service can tell that it is nearly coincident with their own service then I think there is unlikely to be sufficient inventive step that is undisclosed.

AFAICT that is not how things are measured though, use in public except at specific trade fairs is prior use that voids a patent.

There is a lot of room for spending money on patent lawyers within the argument as to what is and is not public use though - [http://www.ladas.com/Patents/Biotechnology/USPharmPatentLaw/...](http://www.ladas.com/Patents/Biotechnology/USPharmPatentLaw/USPhar17.html) is a good summary IMO.

IANAPL

<comment><USER15> I didn't gather from the original post that the online service was biotech- related. But if it is, then you could be right about the public disclosure (unless the service could be demonstrated as "experimental").

But I think it's more likely that we're talking about a software invention, in which case any non-disclosed implementation details could be a way to avoid potential infringement.

 _If someone looking at the service can tell that it is nearly coincident with their own service..._

Plenty of inventions produce similar results yet have vastly different (and therefore individually patentable) implementations. In the case of an online service, there's little chance of the actual _implementation_ being disclosed or somehow transferred to the end-user. My guess is that the inventive part of the service is executed server-side, and thus isn't accessible to the general public.

</comment></comment></comment></comment></comment><comment><USER17> I wouldn't do anything until I've seen the exact patent application. He's probably just playing safe and letting you know beforehand.

</comment><comment><USER18> Keep the email on hand, it could be used as his recognition of prior art.

You may also want to talk to a lawyer and/or navigate the USPTO to get your site added to prior art for the application.

</comment><comment><USER19> I would consult an attorney asap.</comment>


Gov security falters during U.S. shutdown - <AUTHOR> https://news.netcraft.com/archives/2019/01/10/gov-security-falters-during-u-s-shutdown.html <comment><USER2> Isn't it a little odd that such a large number of SSL certificates expired near the same time for these government-run web sites? Every time I've ever paid for an SSL certificate I bought at least a year in advance. I guess the US government prefers monthly subscriptions

<comment><USER3> I just assumed they had a ton of websites so they probably have certificates expiring all the time.</comment></comment>


An improved automated snare drum - <AUTHOR> http://www.logosfoundation.org/instrum_gwr/snar2.html

<comment><USER2> > Snar2 not only outperforms our first <Snar> version, but also easily human > players

As a drummer : they took our job !

I couldn't find any video, which is a bit disappointing. As the drilling of a vintage Ludwig Supraphonic.</comment>


Become a better programmer by taking a shower - <AUTHOR> http://leftnode.com/become-a-better-programmer-by-taking-a-shower/ <comment><USER2> Brainteaser questions have a lot of problems, I've found.

One is that (IMO, anyway) it's the very, very rare individual who can actually get through them by thinking their way through them. The interviewee either knows the answer outright, or they don't. So the interview becomes more, "how many of these brainteasers have you seen before?" Yeah, you can gauge a LITTLE bit about a person by seeing how far you have to lead them to the answer before they get it, but not much.

Another is that the interviewer is not trained in whatever black art it is that can "get an idea about the candidate's thought process". And then, what if you can? What does that matter? Can the guy do the job, or not?

All these questions do is waste time, attempt to give the interviewee a false sense of the company's cool factor or exclusivity, and find out how many brainteaser or "I interviewed at <company>..." blogs he's read.

<comment><AUTHOR> I guess I didn't mean my entry as a way to do better in an interview, but just to become a better programmer by trying to solve small problems quickly.

Kind of like doing a <http://projecteuler.net/> (Project Euler) problem in your head while taking a shower.

<comment><USER2> Yes, I'm sorry I took one small nugget of your entire post and ranted on it; I apologize. What set me off was the "find the loop in a linked list" example; that's one I heard many years ago. I never would have figured it out on my own, but once explained (and for me, proven), it's just like having that special wrench to get the nut under your car; you either have the tool and it's easy, or don't and it's damn near impossible. The skill of the mechanic doesn't come into play.

Your goals and means to achieve them were well reasoned and explained, I thought. My only complaint now is I don't seem to have the willpower to do it myself. =\

</comment></comment></comment><comment><USER3> I'm not sure whether it's really made me a better programmer, but I find that doing something like taking a shower or getting something simple to eat can be a good way of getting around mental blocks that have formed when I'm working intensely on a problem.

</comment><comment><USER4> Oops.. I really thought the article was going to suggest programmers to be nice to their cube neighbors !

You know, sometimes, personal hygiene gets ranked not to high on the to-do list :)

</comment><comment><USER5> What is so smart about your solution ? Am i missing something ? Your solution was the first that popped in my mind after reading the problem.</comment>


Learn Service Workers inside and Out with a New PWA Mastery Game - <AUTHOR> https://serviceworkies.com/ <comment><USER2> It is a "preview" and currently does not contain any information about service workers. I did not realize that until I created an account, invested some time clicking through a bunch (too many) dialogue boxes, and was presented with a message that part 2 would be emailed to me. I do not currently feel enticed, I feel a bit annoyed. Nice flash animation but the title promises to teach something and that is misleading and should be changed.

<comment><USER3> Seconding. I wish I could downvote posts.

<comment><USER4> You can flag them

</comment></comment></comment><comment><USER5> [https://i.imgur.com/8Q6PBBp.png](https://i.imgur.com/8Q6PBBp.png)

Is this the definition of progressive web design? :)

</comment><comment><USER6> To beat the game, you have to wait 24 hours or change the domain.

</comment><comment><USER7> It had almost no content on actual Service Workers, and after 15 minutes of constant clicking, I had to just give up.

</comment><comment><USER8> And here I was wondering why we needed to learn the insides and outsides of laborers in the service industry.

</comment><comment><USER9> All you need to learn is in this article: "You need neither PWA nor AMP to make your website load fast" [http://tonsky.me/blog/pwa/](http://tonsky.me/blog/pwa/)

</comment><comment><USER10> I haven't tried it, but I'm curious if this game works offline.

</comment><comment><USER11> I'm a huge fan of the new service workers functionality. Between it, and local storage, you can write offline web apps, which offer native app like functionality.

</comment><comment><USER12> Can someone give me an example of a website that would be useful offline?

<comment><USER13> Entertainment sites like blogs or image boards, todo apps, note taking apps, recipe websites etc.

Basically PWAs allow you to build features that were only possible in native apps before.

<comment><USER14> I made a free to use PWA for organising team games. No connection needed: [https://io.benfrain.com](https://io.benfrain.com)

</comment></comment></comment><comment><USER15> I don't understand what this is about but I love the artwork!

</comment><comment><USER16> Great idea! Looking fwd to checking this out.</comment>


Ask HN: Maker-Friendly M2M LTE SIM Vendor? - <AUTHOR> <comment><AUTHOR> Currently building some IoT stuff and need a maker friendly data plan vendor that has an API of some sorts.</comment>


Safari 5 Reader - Why It Won't Work For Long - <AUTHOR> http://experimentgarden.com/safari-5-reader-why-it-wont-work-for-long <comment><USER2> I once thought about writing something that adds a layer to a browser that allows a user to customize the layout of any webpage, to remove ads or any other visual clutter they didn't want (extreme personal itch). The ease at which content providers could switch around the html was one reason why I decided not to.

If this happens (very user-hostile, btw), it might turn into a cat-and-mouse game where you have some sort of AI trying to figure out what is relevant content and which are ads.

</comment><comment><USER3> <http://imgur.com/IY9uJ.png>

<comment><AUTHOR> Looks beautiful doesn't it? I'm certainly never going to block Safari reader on my own blog. ;)</comment></comment>


Parallel Random Numbers in Matlab - <AUTHOR> http://www.walkingrandomly.com/?p=2755

<comment><USER2> You can use the function RAND_bytes from the OpenSSL library to get cryptographically strong random numbers ( <http://www.openssl.org/docs/crypto/RAND_bytes.html#> ). I think that it is good enough to get a "different" seed for each instance, but I think that it does not solve the birthday paradox.

</comment><comment><USER3> Just a thought...why can't you generate the initial seed using the system time and then use that to generate random numbers? Won't this be random enough?

<comment><USER3> hmm...this idea seems to have been brought up in a comment as well <http://www.walkingrandomly.com/?p=2755#comment-31646></comment></comment>


What the heck is a parser-combinator? - <AUTHOR> http://www.kimpel.com/2017/02/28/what-the-heck-is-a-parser-combinator/ <comment><USER3> Consider the most basic parsers you might want. For instance, a parser that only succeeds if it matches a string exactly, a parser that matches any single character and always succeeds, a parser that matches nothing and returns some constant, a parser that always fails. They're all simple and stupid and let's give them names:

        string("foobar") : Parser<String>
        char : Parser<Character>
        always(x: A): Parser
        never: Parser

These are parser combinators. They form the atoms at the foundation of a language for constructing parsers. For instance, we can imagine two parsers happening in sequence

        then(a: Parser, b: Parser): Parser<(A, B)>

        then(char, char): Parser<(Character, Character)>

Or more fancily, a two parsers happening in sequence, but the second parser being defined using the output of the first. This creates context sensitivity

        thenDependent(a: Parser, b: A -> Parser): Parser<(A, B)>

We're constructing a fundamental language for building parsers up from our atoms to larger and larger things. All we need now is a way to "run" them

        run(p: Parser): String -> Option

Tada---parser combinators!

<comment><USER4> Is that really how the term is used? I would have naively thought that among your examples only 'then' and 'thenDependent' are parser _combinators_ , and that 'string("foobar")', 'char', 'always(x)' and 'never' are simply called parsers. (Maybe 'string', as opposed to the evaluated 'string("foobar")', should be called a combinator even though it doesn't take any parsers as arguments...)

Just like I'd call '+' and '*' arithmetic operators but I'd call '3' a number.

<comment><USER5> In my experience (limited) yes, this is how the term is used.

"Combinator" != "combiner". A combinator is a thing which is combined with other combinators. When you combine two combinators, you end up with yet another combinator which can be combined with other combinators. Very composable, in the functional spirit of things.

<comment><USER4> I'm not so sure, and however wrote the Wikipedia page seems to agree with me. The first sentence is "In computer programming, a parser combinator is a higher-order function that accepts several parsers as input and returns a new parser as its output." Also people name the type something like Parser, not ParserCombinator.

</comment></comment></comment></comment><comment><USER6> Gotta love Parsec for Haskell and pyparsing for Python. Some other awesome parsing libs:

PEGTL - _C++ Parsing Expression Grammar Template Library_ [https://github.com/taocpp/PEGTL](https://github.com/taocpp/PEGTL)

Parboiled - _Java & Scala PEG Library_ [https://github.com/sirthias/parboiled](https://github.com/sirthias/parboiled)

Nom - _Rust parser combinator framework_ [https://github.com/Geal/nom](https://github.com/Geal/nom)

Nearley - _JavaScript parser toolkit_ [https://github.com/Hardmath123/nearley](https://github.com/Hardmath123/nearley)

Neotoma - _Erlang library and packrat parser-generator for PEGs_ [https://github.com/seancribbs/neotoma](https://github.com/seancribbs/neotoma)

<comment><USER7> I've used Nom to parse a couple RFC-based protocols now, and I'm amazed at how easy and performant the result ends up being.

There's a great walk-through of using it here, including fuzzing your parsers to make sure they're solid. [https://github.com/Geal/langsec-2017-hackathon- code](https://github.com/Geal/langsec-2017-hackathon-code)

<comment><USER8> Geal is very helpful too, he pops up around the place in the Rust community and is responsive on the nom Gitter channel.

</comment></comment></comment><comment><USER9> Slightly off-topic but _please_ stop this js smooth scroll nonsense. If I wanted to use smooth scroll I would have enabled it in my browser.

<comment><USER10> ^ Someone talking sense right here, I thought some of my browser settings had changed for a minute.

<comment><USER11> Sing it! I wonder what purpose it is even supposed to serve?

The weird thing is that all people have to do to make this stuff work is: _nothing at all_. But for some reason that's just too much effort.

</comment></comment></comment><comment><USER12> This is great, but if you're going to use a parser combinator in .NET, you might as well switch to F# and use FParsec instead of hacking LINQ in C#. The F# code is so much easier to read and understand.

</comment><comment><USER13> Here's a JSON parser in LPeg, the excellent PEG parser from one of the Lua authors. The function "decode" returns the final, complete tree data structure.

      local lpeg = require"lpeg"
      local P, S, R, V = lpeg.P, lpeg.S, lpeg.R, lpeg.V
      local C, Cc, Cf, Cg, Ct = lpeg.C, lpeg.Cc, lpeg.Cf, lpeg.Cg, lpeg.Ct

      local function to8(n)
        ... -- Lua code to normalize UTF-16 to UTF-8
      end

      local unicode = P"u" * (R("09", "AF", "af")^4 / to8)
      local named = C'"' + C"\\" + C"/" + (P"b" * Cc"\b") + (P"f" * Cc"\f") + (P"n" * Cc"\n") + (P"r" * Cc"\r") + (P"t" * Cc"\t")
      local escaped = P"\\" * (named + unicode)
      local unescaped = C((P(1) - S'\\"')^1)
      local qstring = Ct(P'"' * (unescaped + escaped)^0 * P'"') / table.concat

      local exp = S"Ee" * S"-+"^-1 * R"09"^1
      local frac = P"." * R"09"^1
      local number = (S"-+"^-1 * R"09"^1 * frac^-1 * exp^-1) / tonumber

      local boolean = (P"true" * Cc(true)) + (P"false" * Cc(false))
      local null = P"null" * Cc(nil)
      local space = S" \t\r\n"^0

      local JSON = { "Value",
        Value = space * (V"Object" + V"Array" + V"Simple") * space,
        Object = Cf(Ct"{" * space * Cg(qstring * space * P":" * V"Value" * P","^-1 * space)^0 * P"}", rawset),
        Array = Ct(P"[" * space * (V"Value" * P","^-1 * space)^0 * P"]"),
        Simple = number + boolean + null + qstring,
      }

      local function decode(txt)
        return lpeg.match(JSON, txt)
      end

</comment><comment><USER14> This reminds me of Red's parse [http://www.red- lang.org/2013/11/041-introducing-parse.html](http://www.red- lang.org/2013/11/041-introducing-parse.html)

</comment><comment><USER15> type Parser a :: String -> [(a, String)]

      "A Parser for Things
      Is a function from Strings
      To Lists of Pairs
      Of Things and Strings!"
      - Fritz Ruehr

</comment><comment><USER16> Reminds me of SuperCombinators: a parser combinator framework written in Swift [https://github.com/snipsco/SuperCombinators](https://github.com/snipsco/SuperCombinators)

</comment><comment><USER17> Another good introduction: [http://theorangeduck.com/page/you-could-have- invented-parser...](http://theorangeduck.com/page/you-could-have-invented- parser-combinators)

</comment><comment><USER18> Here is a great explanation of parser combinators, not tied to any specific implementation:

[https://qntm.org/combinators](https://qntm.org/combinators)

</comment><comment><USER19> I implemented a basic set of primitive parsers and combinators here in K, along with a usage example- a complete parser for the bittorrent "Bencode" data interchange format:

[https://github.com/JohnEarnest/ok/blob/gh- pages/examples/par...](https://github.com/JohnEarnest/ok/blob/gh- pages/examples/parsing.k)

Not particularly efficient, but fairly concise.

</comment><comment><USER20> Parser combinator library in Go: [https://github.com/prataprc/goparsec](https://github.com/prataprc/goparsec)

</comment><comment><USER21> A tiny, elemental parser in a universe where parsers are closed under certain parser composition operators. Such tiny parsers can be combined using such operators to produce a bigger parser which could theoretically parse anything.

</comment><comment><USER22> Wanted to leave a comment on the site, but it seems comments are broken, so I'll stick this here just in case the author sees it:

You've linked to my csharp-monad library for C# parser combinators. This has been superseded by my language-ext project: [https://github.com/louthy/language-ext/](https://github.com/louthy/language- ext/)

It is a much more advanced and efficient port of the Haskell Parsec library. Would you mind linking to that instead?

Your Sprache examples would look like this in language-ext:

        public static readonly Parser<JCLCommand> JCLText =
            from open    in ch('$')
            from ws1     in spaces
            from command in asString(many(noneOf(' ')))
            from ws2     in spaces
            from content in asString(many(noneOf('"')))
            select new JCLCommand(command, content);

        public static readonly Parser<JCLCommand> GlobalText =
            from variablename in asString(many(noneOf('=')))
            from ws2          in ch('=')
            from openbrack    in ch('(')
            from filepath     in asString(many(noneOf(')')))
            from closebrack   in ch(')')
            select new JCLCommand(variablename, filepath);

But the power of parser combinators are their reusable nature. So I'd break that down to a set of tools:

        static Parser token(Parser p) =>
            from x in p
            from _ in either(spaces, eof)
            select x;

        static Parser<string> symbol(string x) =>
            token(str(x));

        static Parser<string> identifier =
            token(asString(many1(alphaNum)));

        static Parser quotes(Parser p) =>
            between(symbol("\""), symbol("\""), p);

        static Parser parens(Parser p) =>
            between(symbol("("), symbol(")"), p);

        static Parser<string> quoteText =
            token(quotes(asString(many(satisfy(x => x != '"')))));

        static Parser<string> parensText =
            token(parens(asString(many(satisfy(x => x != ')')))));

Then your final parsers would look like this:

        static readonly Parser<JCLCommand> JCLText =
            from open    in symbol("$")
            from command in identifier
            from content in quoteText
            select new JCLCommand(command, content);

        static readonly Parser<JCLCommand> GlobalText =
            from variablename in identifier
            from ws2          in symbol("=")
            from filepath     in parensText
            select new JCLCommand(variablename, filepath);

        static readonly Parser<Seq<JCLCommand>> Commands =
            from _        in spaces
            from commands in many1(either(JCLText, GlobalText))
            select commands;

Which is much easier to understand I think. It's not exactly the same as it defines what an identifier is, but it's much more tolerant of rogue spaces because of the token parser. This is definitely the most compelling aspect of parser combinators for me, the way they compose so elegantly.

</comment><comment><USER23> Discount Y - <USER2>

</comment><comment><USER24> basically a parser inception, takes parser and returns parser, woah

</comment><comment><USER25> A few years ago I worked on a similar kind of project as part of my bachelors. We were converting SQL for Oracle to SQL for Microsoft SQL Server. One problem is dealing with features which language A supports and language B doesn't. Another problem is that it is a huge amount of work to match all syntax elements as well as all library usages. In fact, I guess it's not a good thing to say on HackerNews, but isn't it better to just buy a tool which does it for you? It seems like they are available for the author's use case: [http://www.ispirer.com/application-conversion/jcl-to- powersh...](http://www.ispirer.com/application-conversion/jcl-to-powershell- conversion)

<comment><USER26> > We were converting SQL for Oracle to SQL for Microsoft SQL Server.

I had a similar problem a few months ago with a Golang application that uses Postgres in production, but SQLite for unit tests. Since Go's SQL support has pluggable driver backends, I made a generic proxy driver [1] that can rewrite the incoming query, and used that in my application to rewrite from Postgres to SQLite syntax [2].

[1] [https://godoc.org/github.com/majewsky/sqlproxy](https://godoc.org/github.com/majewsky/sqlproxy)

[2] [https://github.com/sapcc/limes/blob/205f9980a41d75fc0315e0ac...](https://github.com/sapcc/limes/blob/205f9980a41d75fc0315e0acc1e3daeb9853048f/pkg/db/connection.go#L48-L60)

<comment><USER27> Why just not use a local postgres instead of sqlite, your case seems like overengineering to me.</comment></comment></comment>


360 Degree Holographic Display - <AUTHOR> http://www.engadget.com/2007/08/31/researchers-develop-a-360-degree-holographic-display/

<comment><USER2> I think "holographic" is a bit of a misnomer. But that's splitting hairs -- it's still frikkin' dope.

That said, they've had a holographic video display sitting in the basement of the MIT Media Lab for close to two decades. I never understood why the world wasn't more excited about it. Guess it was a bit ahead of its time.

The holographic lathe was the coolest: <http://www.media.mit.edu/spi/HHlathe.htm> . You'd use this pen to shape a hologram of a cylinder, in real-time. The pen was a haptic interface, so you'd feel resistance as you "carved." Basically, you'd sculpt with light. Then you'd send your creation down the hall to the 3D printer.

I had the privilege of working in that lab for a little while. It was like living in the future.</comment>


Paving the way for more efficient hydrogen cars - <AUTHOR> https://phys.org/news/2018-12-paving-efficient-hydrogen-cars.html <comment><USER2> I've wanted a hydrogen scooter for 15 years but have never found a refueling solution to make the dream realistic.

<comment><AUTHOR> Not viable yet but I've seen experimental fuel cells that can run on natural gas</comment></comment>


The Story of Sweet 16 - <AUTHOR> https://en.wikipedia.org/wiki/SWEET16

<comment><AUTHOR> When I see a story on sweet16, I think of 1 point by Woz's byte-code interpreter for 16bit calculations on Apple][ 8bit 6502, not Mr. Gruber. [0]

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

<comment><USER2> I actually upvoted it on that assumption :-)

It's kinda sad that something like this only gets a couple of votes, while everyone is raving about the latest Apple products ... this is where the heart of Apple is, or at least used to be.

I do wonder what Apple might have been, had Jobs had someone like Woz in senior management to push hacker culture at Apple.

<comment><AUTHOR> _" I do wonder what Apple might have been, had Jobs had someone like Woz in senior management to push hacker culture at Apple."_

It was quite noticeable as Apple moved from the ][e to the ][c, no slots. With the ][e I added an 80 column card to increase the usable screen space. The ][c was a closed box. The change from open Apple to closed Apple happened very early.</comment></comment></comment>