Learn You a Haskell for Great Good (2008) - <AUTHOR> http://learnyouahaskell.com/ <comment><USER2> I think the current 'definitive' resource for learning Haskell is [https://github.com/bitemyapp/learnhaskell](https://github.com/bitemyapp/learnhaskell), which has well-curated, comprehensive links.

<comment><USER3> I won't read that one on principle alone. The author (coolsunglasses on HN) runs around all the various forums (, threads, and subreddits) for other languages, trolling other users and making fun of their languages. He's a complete asshole. Besides, Real World Haskell and Learn You a Haskell are both extremely competent books/tutorials.

</comment></comment><comment><USER4> Haskell is such a great language. I've been recommending this book for a while now. If you are in doubt whether you should start learning it, read this post by Jeff Bone:

[http://www.xent.com/pipermail/fork/Week-of- Mon-20070219/0441...](http://www.xent.com/pipermail/fork/Week-of- Mon-20070219/044101.html)

After I read it, I immediately began learning Haskell. Since then, Haskell made my brain melt multiple times. But it has also enabled me to build an expression parser and analytic differentiator that I use every day (among other things, but that's what I'm most proud of). Such a program would be a lot harder to create, if it weren't for Haskell's ridiculously powerful type system and pattern matching.

Also, after learning the Haskell way of things, I recognized the reasons for many issues I had with code written in another programming language. Don't just go out there and do object-oriented programming because everybody else seems to do it, often it is imperative (pun intended) to use the declarative (functional) programming paradigm to keep you out of debugging hell.

edit: clarification

<comment><USER5> I'm not sure if that link is NSFW or not :)

<comment><USER6> Certainly doesn't help with the perception of the tech industry as a boys club. I mean I know it may have been written in jest but I was personally cringing while reading it and figured it'd be at the very least a little alienating (at worst outright offensive) for any women who'd happen to read it. Maybe I'm being oversensitive, I just know I wouldn't write anything like that.

<comment><USER7> Are you serious? From your description, I was expecting some kind of gross pornography. I think that these 'rolling in the aisles' displays of public piety in the service of political correctness are getting a little out of hand these days.

<comment><USER6> I think you are exaggerating somewhat, I was just saying I didn't like it and even caveated that this could be just me being oversensitive.

However if you can't see why someone may feel a bit weird reading "You'd be there, banging away at your regular girl" then I'm not sure what I can say. It's not rolling-in-the-aisles piety, it's just that our community already has a bad image and stuff like this isn't helping.

</comment></comment></comment></comment></comment><comment><USER8> We'd be remiss not to mention the Erlang counterpart...

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

</comment><comment> clark-kent What is a good online reference to learn about "Monads" for beginners? Someone posted a reference here on HN sometime ago but I lost it.

Edit: The book was enjoyable and a delight to read, but I started struggling to keep up from Chapter 8. as it went into Monoids and Monads, I feel like I need to read other tutorials before coming back to it.

<comment><USER9> The original monad papers, by Philip Wadler. Accept no substitutes.

[http://homepages.inf.ed.ac.uk/wadler/topics/monads.html](http://homepages.inf.ed.ac.uk/wadler/topics/monads.html)

[http://homepages.inf.ed.ac.uk/wadler/](http://homepages.inf.ed.ac.uk/wadler/)

Alternatively, if you really are allergic to LaTeX, or beards, the recently Oscared sigfpe's "You Could Have Invented Monads! (And Maybe You Already Have.)"

[http://blog.sigfpe.com/2006/08/you-could-have-invented- monad...](http://blog.sigfpe.com/2006/08/you-could-have-invented-monads- and.html)

There are no other monad tutorials. Just forget about them.

<comment><USER10> I highly recommend "You could have invented Monads", it helped me a lot. I also recommend the Haskell Wikibook:

[http://en.wikibooks.org/wiki/Haskell/Understanding_monads](http://en.wikibooks.org/wiki/Haskell/Understanding_monads)

</comment></comment></comment><comment><USER11> I want to note that LYAH may not work for you if you have my kind of learning style. I need to solve concrete, realistic problems to creatively use the knowledge imparted on me. I can't just read stuff and understand. Real World Haskell [1], the course by Erik Meijer [2] and the courses referenced here [3] worked much better for me.

[1] [http://book.realworldhaskell.org/](http://book.realworldhaskell.org/)

[2] [https://www.edx.org/course/introduction-functional- programmi...](https://www.edx.org/course/introduction-functional-programming- delftx-fp101x)

[3] [https://github.com/bitemyapp/learnhaskell](https://github.com/bitemyapp/learnhaskell)

</comment><comment><USER12> That sun cracks me up almost every time.

<comment><USER13> My favorite is:

"If we think of a list as a monster, here's what's what."

[http://s3.amazonaws.com/lyah/listmonster.png](http://s3.amazonaws.com/lyah/listmonster.png)

</comment></comment><comment><USER14> I like Haskell for the same reasons I like VIM:

\- It needs some brain melting to learn but it ultimately makes you a better coder. Time is not wasted on learning it. \- A new exciting mindset !

\- When you feel you're doing something repetitive, it's nearly sure there is a way to do it effortless.

\- Advanced stuff

</comment><comment><USER15> For newcomers I'd suggest this introductory course by Erik Meijer: [https://www.edx.org/course/introduction-functional- programmi...](https://www.edx.org/course/introduction-functional-programming- delftx-fp101x) . It's about FP, not strictly Haskell, but it really helped me starting with it and really stimulated my curiosity (and he really can explain hard concepts in a simple way imo). I started reading the book after I completed the course and helped giving an answer to a lot of questions I had during the course.

</comment><comment><USER16> I'm currently working through this book. Overall it seems like a good introduction but I wish it had exercises at the end of each section. I learn best by working through specific problems.

<comment><USER17> Word.

There's Real World Haskell by Don Stewart ([http://book.realworldhaskell.org/read/index.html](http://book.realworldhaskell.org/read/index.html)), though the order of exposition is different and your mileage may vary with the exercises.

I did find that "Programming in Haskell" by Graham Hutton was a very clear read and had good programming exercises.

</comment></comment><comment><USER18> I suggest the Haskell Wikibook as the best overall intro to Haskell actually: [http://en.wikibooks.org/wiki/Haskell](http://en.wikibooks.org/wiki/Haskell)

(and you can make it better if you find anything to complain about! but seriously, it's superb)

</comment><comment><USER19> Supremely useful reference: [http://dev.stephendiehl.com/hask/](http://dev.stephendiehl.com/hask/)

</comment><comment><USER20> Should I learn oCaml instead ? Looks appealing because companies like Facebook are using it create tools like Flow ( [https://github.com/facebook/flow](https://github.com/facebook/flow) ).

<comment><USER21> Why do people choose programming languages based upon which big companies are using them? Learn a programming language because it is interesting, not because Facebook uses it.

<comment><USER20> Facebook is huge influencer in the open-source world. I don't see anything wrong with learning the tools/languages that it adopts. There are far smarter people working there.

In context of this question, It seems that learning both Haskell and oCaml is what people recommend.

</comment></comment></comment><comment><USER22> This is what I used to learn Haskell a while back. It's a pretty darn good intro. I'm very glad I did it.

</comment><comment><USER23> I really like this book, but I think it may be teaching some bad habits by ignoring performance concerns.

<comment><USER24> It's not a problem until it's a problem.

That is: At least 90% of code is not CPU-limited. It's fast enough. So, _as an initial approach,_ ignoring performance is fine.

The problem is that, if and when you run into real performance issues, you need to know some tools for dealing with them. If this book doesn't teach you those, well... it's a language introduction. It's not an advanced text. Maybe it would be the better for a warning or two, a paragraph here or there, but performance is (quite properly) not the point for the book.

<comment><USER23> Fair enough.

I guess I mean to say that I really like this book, and would enjoy more from the author teaching fast Haskell, to supplement this book about simple Haskell.

</comment></comment></comment><comment><USER25> Haskell can be very handy at solving some puzzles.

<comment><USER10> Haskell can be very handy for solving real world problems as well.

</comment></comment><comment><USER26> This book was excellent for helping me learn Haskell, but the gendered language and fat-shaming jokes made me feel _very_ uncomfortable, eg:

"You're fat! Lose some weight, fatty!","You're supposedly normal. Pffft, I bet you're ugly!" and "You're a whale, congratulations!", "Sure, we could just type them all out but obviously that's not a solution for gentlemen who demand excellence from their programming languages."

<comment><USER22> Clearly the author is going for a casual, conversational, jocular attitude. That's part of what makes LYAH so approachable. If you want dry, sanitized, bowdlerized instruction, LYAH is not the place to look.

<comment><USER26> It's possible to communicate in a casual, conversational, and humorous manner without alienating minorities and delivering insults, and the author chose not to.

I think it's unlikely that he was trying to be malicious and is probably just not sensitive to what it's like to be on the receiving end of some of his examples.

<comment><USER27> Aren't you imputing motives without proof ?

While I respect your sensibility, I would have made the same kind of remarks without thinking it would hurt someone. I understand it could, but it wouldn't have been my _intent_. Also remember that your position is very very US- centric. But I am all for communication : explain your point to the author and propose something else that is as funny as the current text.

But saying the author chose not to is simply dishonest.

<comment><USER28> If we're talking about motives and proof, then The fact that you understand what you said is harmful and you choose to do it anyway is the legal definition of intent.

</comment></comment></comment></comment></comment><comment><USER29> I always have been interested on haskell.... but it doesn't look to be enough practical. For example there is almost no information about how to write a smartphone videogame in haskell, even if it possible to trasnpile it to C or to Javascript. It is possible to interoperate with the host language? Does it perform well for high performance activities? Is it possible to isolate some kind of events in a thread?

Edit: This lack of practical approach is what makes me hesitate in contrast to clojure (just to mention a language), especially if the only goal is to become again a "better developer" rediscovering functional terms and abstractions also documented in other languages.

<comment><USER30> > For example there is almost no information about how to write a smartphone > videogame in haskell, even if it possible to trasnpile it to C or to > Javascript.

These guys are doing it pretty seriously: [http://keera.co.uk/blog/all- posts/](http://keera.co.uk/blog/all-posts/)

And frankly a smartphone videogame is a pretty specialized use case; a lot of pretty mainstream languages (perl?) don't have a good story for how to do that. In fact I've never heard of anyone writing a smartphone game in Clojure - I guess you could do one for Android since it's just java bytecode, but does anyone?

"Practical" for most programmers is server-side business apps, and Haskell is very very good at those.

> Does it perform well for high performance activities?

Yes, very much so.

<comment><USER31> Regarding Clojure, yes it's done. I haven't kept up with the latest clojure on android news, but [https://play.google.com/store/apps/details?id=com.friendlyvi...](https://play.google.com/store/apps/details?id=com.friendlyvillagers.ballz) has been around for a while and I think the author just built off of libGDX. There's also exciting work on Unity integration: [http://arcadia- unity.tumblr.com](http://arcadia-unity.tumblr.com)</comment></comment></comment>


New picplz for iPhone - <AUTHOR> http://blog.picplz.com/post/2733908854/new-picplz-for-iphone-version

<comment><USER2> Many of the changes in the new version bring it closer to Instagram's design.</comment>


26 States Now Ban or Restrict Community Broadband - <AUTHOR> https://motherboard.vice.com/en_us/article/kzmana/report-26-states-now-ban-or-restrict-community-broadband <comment><USER3> Here is the full list from the original study:

Bureaucratic Barriers To Municipal Broadband:

      Michigan
      North Carolina
      South Carolina
      Tennessee
      Virginia
      Utah
      Wisconsin
      Montana

Direct Sale Prohibitions On Municipal Broadband:

      Arkansas
      Missouri
      Nebraska
      Pennsylvania
      Texas
      Washington

Prohibitive Referendum Requirements On Municipal Broadband:

      Alabama
      Colorado
      Louisiana
      Minnesota
      Iowa

Population Caps On Service Areas For Municipal Broadband Networks:

      Nevada

Excessive Taxes On Municipal Broadband Services:

      Florida

Other Tactics Used To Roadblock Municipal Broadband:

      California
      Wyoming
      Oregon
      Massachusetts
      Connecticut

(this was really annoying to format with HN's terrible formatting rules)

<comment><USER4> As someone who voted for [https://bouldercolorado.gov/connect-boulder/boulder- broadban...](https://bouldercolorado.gov/connect-boulder/boulder-broadband- enhancement), I'm curious what the implications of Colorado's "Prohibitive Referendum Requirements" are?

EDIT: If I'm reading this correctly, then this point is no longer true for CO.

> As of 2018, the state is moving forward with a new bill (HB-1099) that will > remove this problem. This bill is expected to pass in the coming months, but > is not official at the time of this writing.

[https://broadbandnow.com/report/municipal-broadband- roadbloc...](https://broadbandnow.com/report/municipal-broadband- roadblocks-2018/#colorado)

<comment><USER5> I'm in Centennial Colorado - Several years ago we voted to allow commercial companies to lease the city's fiber. As a result, I now have symmetric gigabit fiber from a company named Ting running into the house for around $89 a month.

<comment><USER6> Sonic in the Bay Area has symmetric gigabit fiber for $60/mo!!!

</comment></comment></comment></comment><comment><USER7> A year ago I moved from Chattanooga, TN (mentioned in the article) to Bellevue, Wa to work in "Cloud City" Seattle to take a job at AWS. It used to cost me a total $59/mo for 100MB fiber up and down, no contract, with _amazing_ customer service (I seriously have stories to tell about how great EPB is).

My only real option at my new residence is Comcast at $79/mo which went up to $94/mo after 1 year for a hypothetical 100down/5up, with frequent network drops.

It was quite disappointing to find zero options for fiber, and this convinces me that this kind of corruption by ISPs and legislators needs to be severely curbed.

<comment><USER8> I had a friend who worked for a cable company (several decades ago). He would tell me that for cable customers, frequently the cost of infrastructure was recovered during the install, if not within the first month or two.

When you look at the gross profit margin for ISPs and cellphone companies, it is frequently > 60%

Being the only game in town really has some tangible benefits.

</comment></comment><comment><USER9> I've worked for two ISPs during my career. One in California and another in Rwanda. Those experiences have convinced me that providing internet service just isn't a viable business: the margins are too thin, or non-existent.

Generally, I haven't seen private industry do a good job at providing infrastructure over long periods of time.

(edit)

That said, when I see articles like this one I have to remind myself that the landscape is going to completely change once Starlink and/or OneWeb become active.

<comment><USER10> Most reports are that major ISPs are highly profitable. Undercapitalized local ISPs always seem to struggle, however -- as do companies like Google when they aren't serious.

I am not that excited about the satellite model.

The LEO satellites are not going to be very big or high powered. The ground terminal is probably going to be a phased-array job that costs $6000 or so. The satellite is going to be a bent pipe to Verizon, AT&T or whatever rent seeker is operating in your neighborhood. If people from NYC who can afford to smoke dollar bills to spite the cable company are using it, they'll interfere with people who don't have a choice 700+ miles away.

The LEO constellations might hark back to the pirate days of satellite when the dish cost $6000 but there was no subscription. Unfortunately the people who are behind them don't realize that normal folks aren't going to have money for an expensive subscription after buying an expensive antenna.

<comment><USER11> > Most reports are that major ISPs are highly profitable. Undercapitalized > local ISPs always seem to struggle, however -- as do companies like Google > when they aren't serious.

What reports? Verizon's wireline division reports a 5% operating profit margin in a good year. It's been 15 years since Verizon started deploying FiOS, and it's not clear they've even recovered the initial capital cost yet. Charter, the biggest pure cable company, reported massive annual losses in the years leading up to the merger with TWC.

The idea that wireline broadband isn't "highly profitable" doesn't pass the smell test. Everyone is trying to get out of wireline.

<comment><USER10> If they were trying so hard to get out of wireline, then why are trying to keep governments out of it?

<comment><USER11> For the most part they're really not. See my comment above—the article really blows the restrictions in many states out of proportion. That aside, nobody wants the government coming in and using tax dollars to drive them out of business,[1] even if the business is a low-margin one they're looking to get out of.

[1] And that's what will happen. Municipal broadband will kill any private competitor, because you can't compete with a tax-subsidized alternative. If that happens, folks better pray that their municipal system doesn't end up like say the DC Metro or New York Subway (initially good, but neglected in the long term and allowed to decay).

<comment><USER12> What alternative does a community like Cleveland [2] have to municipal broadband?

[2] [https://arstechnica.com/information- technology/2017/03/att-a...](https://arstechnica.com/information- technology/2017/03/att-allegedly-discriminated-against-poor-people-in- broadband-upgrades/)

I was shocked by one of the comments saying that the only reason those neighborhoods have utilities like water and sewer now is that they didn't used to be poor.

<comment><USER11> Let me turn that question around: how can a community like Cleveland afford to run a municipal broadband network, if the reason AT&T won't expand service there is that people don't have the money to pay?

Our approach to broadband in poor urban neighborhoods is completely screwed up. We blame the telecom provider for not building in areas it's not profitable to service, or force them to do it to be allowed to service the city at all (and as a result, nobody gets service).

Broadband access in poor neighborhoods is a matter for the general welfare system and should be paid for with federal and state tax subsidies, just as we do for say schools in poor urban neighborhoods. Then, we can make a reasoned cost-benefit analysis about how to best use that tax money. (For example, maybe wireless is a more cost-effective way of providing a safety-net level of service than fiber.)

<comment><USER12> You might be interested in the story of Dennis Kucinich and Muny Light. Years later, it actually did turn out to be the right choice (and I'm no Kucinich fan). Maybe something similar could be done with wireless and the utility poles.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> I realize this is an unpopular opinion, The problem isn't just ISP's - <USER2> only reason community broadband in an urban environment sounds like a good idea, is because it can go around the permitting process. The permitting process to install shit is why any tom, dick and harry can't get themselves set up as a telco - yes, the big three/four/five as sleazy and slimy, but local government has made it almost impossible to compete with them either.

To give you an idea, I was working on a cell site upgrade project in from 2013-2015 - it took the City of Seattle two years to approve permits to do a simple no civil upgrade (swap equipment, move some above ground conduit), whereas in a more rural area, we had that same permit in 2-45 days depending on jurisdiction.

</comment><comment><USER14> This is so gross.

Related, I work for a large, publicly-traded American software company and I'm constantly amazed/frustrated by the internet connection in our office. We constantly deal with connectivity issues and bandwidth restrictions, all while the executive leadership cuts back on working from home/remotely. A multi- billion dollar software company literally cannot buy consistent internet access.

The bottom line is that we're completely at the mercy of Time Warner Cable/Spectrum, and no amount of cajoling/threatening/pleading seems to improve our internet service.

We're kidding ourselves as a society if we truly think that the established private entities that rule the internet infrastructure are our best shot at a faster, more reliable internet.

<comment><USER10> An awful thing you will find is that the vc funded folks, google, and "big tech" are not on our side. Somehow they think it is cool for China to break the neoliberal consensus and invest in infrastructure, but no way should there be competition for better internet or better airplanes here.

<comment><USER15> Didn't Google try to disrupt the market with Fiber ?

<comment><USER16> If a billion-dollar company gives up after rolling out in that few cities, they weren't really trying. Hard to know what their goals were initially since it seems like it wasn't actually market disruption.

<comment><USER15> I interpreted that failure as Google being powerless against big ISPs.

<comment><USER16> It's really hard for me to believe that a company with a billion dollars couldn't buy their way to favorable laws. Everyone else does it.

<comment><USER11> Google negotiated extremely favorable terms with Fiber cities, much more favorable than the terms the incumbents received: [https://arstechnica.com/tech-policy/2012/10/time-warner- att-...](https://arstechnica.com/tech-policy/2012/10/time-warner-att-want- kansas-city-to-give-them-google-fiber-style-deal).

> As we've reported on in the past, Kansas City has rolled out the digital red > carpet for Google: giving rights of way, prime office space, expedited > permitting, fee waivers, and more. In a notable example, the city charged > only $10 per pole for Google to string its cable on municipal utility > poles—as opposed to the usual $18.95 per pole rate. But now, local > incumbents Time Warner Cable and AT&T want to feel the love, too.

It wouldn't be fair to accuse Google if "buying" anything—it's modus operandi was to approach second tier cities in low-cost states that would see fiber as a differentiating factor to help boost their economy. (That's why they refused to deal with Boston, SF, or NYC.) Then Google gave them extremely aggressive terms, such as waiver of build-out requirements (the obligation to serve the whole city, even unprofitable areas) that are otherwise universal in such deals. And Google still couldn't make the numbers work!

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> Municipal broadband is the only long-term solution to enforcing Net Neutrality, and the only long-term solution to telecom monopolies.

If we value free speech a truly as we claim to as a nation, we should all be clamoring for municipal broadband infrastructure.

<comment><USER10> You know, I would sell out Net Neutrality in a second if Charter would do what they said they would do, which is build out in New York State. Instead all they do is "fight for the right to not serve customers".

</comment></comment><comment><USER18> I think these states should turn their municipal water and sewer over to private companies and then in a few years of having their toilet back up into their living room while costing them thousands of dollars maybe they will think broadband in the 21st century is a important utility that should be available to all at an affordable price.

</comment><comment><USER19> Is community and municipal broadband the same thing? The article says these states have banned community broadband, which I consider to be things like rural areas and islands where farmers/locals took up a collection and invested in a mesh network connected via microwave relay to the net at large. Whereas "municipal" broadband is internet access sponsored by the local city, county, or public utility company.

The two are significantly different things.

</comment><comment><USER20> NY is not one of those states, and NYC has a mesh network with a $20/mon suggested donation.

map: [https://www.nycmesh.net/map](https://www.nycmesh.net/map)

(I'm not a member - applied and considering it... for work, I need high speed and low latency... thoughts welcome!)

</comment><comment><USER21> Obstacles in both Democratic and Republican states alike. Pretty sad. Also damn hypocritical of the states which regularly complain of Federal overreach to go restricting their own local governments.

<comment><USER11> > Also damn hypocritical of the states which regularly complain of Federal > overreach to go restricting their own local governments.

Not at all. The federal government and state governments are separate sovereigns. Municipal governments are mere appendages of the state governments (and at the end of the day, the state governments are on the hook for anything bad that happens as a result of municipal decisions, _e.g._ Flint Michigan.)

</comment></comment><comment><USER22> One of the things that I find really encouraging is governments letting other industires to become ISP

>In Tennessee, for example, state laws allow publicly-owned electric utilities to provide broadband

I think this is the best way to solve last mile distribution. Electric companies already have the capacity to manage door to door to installations. Internet could become an additional source of revenue for them. They could lease the line from big providers and increase their reach. Win Win.

</comment><comment><USER23> Regulating cities so they don't do something stupid is reasonable. Remember muni wi-fi? That ended up being a massive wealth transfer from taxpayers to consultants and vendors of gear that didn't work. After the networks were built cities were left holding the bag and trying to decide whether to continue to operate a system nobody used or throw in the towel and admit they wasted millions.

<comment><USER24> > _Regulating cities so they don 't do something stupid is reasonable._

States should forbid cities from funding the creation of sports stadiums then. They're almost always disastrous.

[https://news.stanford.edu/2015/07/30/stadium-economics- noll-...](https://news.stanford.edu/2015/07/30/stadium-economics-noll-073015/)

[https://www.theatlantic.com/technology/archive/2018/11/sport...](https://www.theatlantic.com/technology/archive/2018/11/sports- stadiums-can-be-bad-cities/576334/)

(Of course that would run contrary to corporate interests, so don't hold your breath. It's clear who these states are trying to protect, and it isn't the cities.)

<comment><USER23> Sure, cities shouldn't be involved in transferring wealth to billionaire sports team owners either. But I bet if you gave voters a choice of a major league sports team or incrementally faster internet, they'd choose the sports team. You may not like it, but sports are still very popular.

</comment></comment></comment><comment><USER25> How do Americans square things like this with their insistence that they value freedom of the individual?

<comment><USER26> My anecdotal impression is that most Americans can't be bothered to think about these topics at all, and if you try to bring them up it's brushed off with a "I can't be bothered to think about anything that isn't day to day getting by".

I wish anyone I knew outside of tech circles cared even 1% as much... but I've given up trying to point out all the instances of corporations fucking over the public.

</comment></comment><comment><USER27> We should be indexing on more local competition.

Municipal broadband makes no sense if people think we need solutions like DNS over SSL.

Do not give your local government this amount of access to your behavior. If Facebook is bad for privacy, muni-broadband would be a disaster.

</comment><comment><USER28> On the topic, I think there's a better middle ground. Local governments already tend to manage roads, utility poles, etc. If they would manage conduit space the same way, maybe some colo, you could give fair access to private persons and companies, while preventing some of the ills of the way things tend to work right now (specific approval required for buildout, companies getting too familiar and working too closely with local government for there to be any fairness).

Maybe they could lease dark fiber similarly, but that may not be necessary with basic standards like those used for utility pole access in a decently well run town or city.

</comment><comment><USER29> I wonder is there some wavelength that is not regulated that can 'override' legislation? Or another type of transmission. Mesh networks come to mind but I'm thinking better.

</comment><comment><USER30> Is there any resource from the other side that provides reasons why restrictions should be placed on community broadband? The explanation "Evil Monopoly wants all the money" seems too simple for the complex nuanced world we live in.

<comment><USER31> The argument is that government, at any level, shouldn't be competing with the private sector. It should regulate the market, but shouldn't participate in it, because, on a practical level, it's often not too good at it, but also because it can create perverse incentives. For example, say municipal broadband became ubiquitous and popular enough that the income from it is now an important source of revenue for the authorities in these towns. Then they are incentivised to make things difficult for any commercial rival, even if the commercial offering is cheaper and better. Given how dysfunctional and kleptocratic municipal politics tends to be, almost everywhere, it's hard to say such concerns aren't entirely unfounded.

Of course, there are plenty of decent counter-arguments, and counter-counter- arguments. This is just one of those tensions that exists and is fundamentally irresolvable in any capitalist democracy.

<comment><USER32> Commercial ISPs are already doing all the things you worry public broadband _might_ cause.

</comment></comment></comment><comment><USER33> While is disapointing that paying a lawmaker us cheaper than competing, it worth noting that laws written by industry is necessarily bad. The onus is on the lawmakers to check what they pass.

</comment><comment><USER34> As someone from the UK who knows nothing about this, and just can't understand why on earth politicians would make this happen - what reasons are given for this?

<comment><USER35> Money, votes, influence in local businesses, college admission for their kids, trust funds.

America is more corrupt than one thinks

</comment></comment><comment><USER36> I am a strong believer in the free market and neo-liberalism . But let's be clear: this isn't capitalism, this is rent-seeking and corruption.

</comment><comment><USER37> Would a drone swarm that provides a mesh network for user devices to connect through, get around these restrictions?

</comment><comment><USER38> it is all about the benjamins...and big ISP have more of them. I have 2 ISP's (Spectrum and AT&T), and both are really expensive. And i am in San Antonio, how is this competition and how does this help me the consumer.

So very frustrating. lobbying pisses me off and now i am just venting.

</comment><comment><USER39> Pragmatically, the reason I would want municipal broadband is because it would be less expensive than Comcast or whatever private provider, right?

But would it be? I've used various of the major cable internet providers over the years and I can always get all the speed I want for $80 per month or less.

Or is this mostly about internet access for the poor, tax-funded?

</comment><comment><USER40> This is straight up shameful. People involved in these decisions should be personally shamed in their day to day, dropping their kids off at school, shopping at the grocery store, and picking up their mobile orders at Starbucks.

</comment><comment><USER41> TBH with 5G coming around the corner, I'd hate my city to plow 10s/100s of millions into laying fiber that might not get used.

<comment><USER42> Wireless data has actually got more expensive.

A little older now, but:

\- [https://brooksreview.net/2010/06/att-caps-phone-data- usage-w...](https://brooksreview.net/2010/06/att-caps-phone-data-usage-w..).

\- [http://www.cbsnews.com/news/new-att-wireless-plan-caps- phone...](http://www.cbsnews.com/news/new-att-wireless-plan-caps-phone..).

2GB for $25/mo with AT&T, $10/GB overage.

Now?

\- [https://www.att.com/shop/wireless/data- plans.html](https://www.att.com/shop/wireless/data-plans.html)

$30/mo for 2GB, with $15/GB overage.

Data prices do seem to have gotten better:

[http://about.att.com/story/att_offers_its_best_ever_pricing_...](http://about.att.com/story/att_offers_its_best_ever_pricing_..).

where they reduced the plan from $80 to $65 for voice+2GB data.

Indeed, last year to go from 2GB to 5GB cost $20, and now costs $25.

\- [http://www.att.com/att/planner/](http://www.att.com/att/planner/)

From the CBS article, "With that plan and voice service, a smart phone could cost as little as $55 per month before taxes and add-on fees, down from $70 per month."

According to AT&T's planner, that means in SIX YEARS, costs haven't changed at all, overall.

<comment><USER43> 5G is vastly different than previous generation cellular service. It's hard to tell what will happen to prices once it's fully deployed.

</comment></comment></comment><comment><USER44> What in the actual hell.

</comment><comment><USER29> When I upvote this, I feel like I'm hitting the FB 'like' button and it does nothing really to make it better.

</comment><comment><USER45> It seems like our free market is working exactly as intended. It sorted itself out just like its proponents said it would. Sure most people have no broadband or are locked in with a monopolistic provider, but it was left to its own devices and now clearly provides the best service for everyone. This of course, includes bribing--I mean lobbying--politicians. What an amazing system.

<comment><USER46> It's not a free market if the barriers to entry are so high even Google has trouble

<comment><USER47> well is it a market that just naturally high barriers to entry so the market will trend towards oligopoly or monopoly, or is it caused by senseless regulations, protectionism, etc.?</comment></comment></comment>


How to open source just the public assets of your Rails site - <AUTHOR> http://ghurrell.github.com/git-filter-branch-lightning-talk

<comment><AUTHOR> I believe the rationale being, these assets are public -anyway-, but officially open-sourcing them makes you hold the code to a higher standard.</comment>


What is the best free CRM tool?  - <AUTHOR>

<comment><USER2> Vtiger CRM has worked pretty well for me

</comment><comment><USER3> Sugar crm or oro crm</comment>


Show HN: Imagededup – Finding duplicate images made easy - <AUTHOR> https://github.com/idealo/imagededup <comment><AUTHOR> We've just open-sourced our library imagededup, a Python package that simplifies the task of finding exact and near duplicates in an image collection.

It includes several hashing algorithms (PHash, DHash etc) and convolutional neural networks. Secondly, an evaluation framework to judge the quality of deduplication. Finally easy plotting functionality of duplicates and a simple API.

We're really excited about this library because finding image duplication is a very important task in computer vision and machine learning. For example, severe duplicates can create extreme biases in your evaluation of your ML model (check out the CIFAR-10 problem). Please try out our library, star it on Github and spread the word! We'd love to get feedback.

<comment><USER2> This looks really interesting. Can you give us an idea of the performance? E.g. roughly how long would it take to process 1 million 1920×1080 JPEGS, without GPU and with GPU?

What is the scaling like? E.g. what if it was 10 million?

<comment><USER3> I use Cython (CPU) to brute force 400,000 pHash's of images. It takes somewhere between 100 and 200ms to search.

<comment><USER4> Only realized now that the 100-200ms time you refer to is for a single search and not for 400,000 searches. The package already achieves this brute-force speed. In fact, the package also implements bktree, which, depending upon the distance threshold passed, could drastically reduce the search time. Moreover, the search through bktree is also parallelized in the package(each image's hash gets searched through the tree independently after the tree is constructed). On one of the example dataset containing 10k images, with a distance threshold of 10 (for 64-bit hashes), the retrieval time per image obtained was < 50 ms.

<comment><USER3> The 100-200ms time I referred to was indeed a single search. The difference is, it's on a single core. Cython definitely makes the hamming distance function faster.

</comment></comment></comment></comment></comment><comment><USER5> This looks nice, and seems to support the most common methods for fingerprinting/hashing. This comes with some heavy dependencies, though (which is reasonable):

        install_requires=[
            'numpy==1.16.3',
            'Pillow==6.0.0',
            'PyWavelets==1.0.3',
            'scipy==1.2.1',
            'tensorflow==2.0.0',
            'tqdm==4.35.0',
            'scikit-learn==0.21.2',
            'matplotlib==3.1.1',
        ],

A while ago, I asked about sth like this (or more about the underlying methods) here on SO:

[https://stackoverflow.com/questions/4196453/simple-and- fast-...](https://stackoverflow.com/questions/4196453/simple-and-fast-method- to-compare-images-for-similarity)

There are some interesting discussions. (Nowadays, such a question would have been closed...)

<comment><USER6> If this is a library then locking those dependencies down is not great. Does it really _need_ Pillow 6.0.0, and not Pillow 6.0.1?

As this is being consumed by larger applications that may have dependencies that conflict with these, they should be much more liberal.

[https://github.com/idealo/imagededup/pull/36](https://github.com/idealo/imagededup/pull/36)

<comment><AUTHOR> Yes you're right thanks for pointing this out!

</comment></comment></comment><comment><USER7> For a split second I was excited and terrified because I thought this was a very similarly named Go project I wrote a while ago. It's nowhere near as fancy but is very fast and has a very similar name.

I don't have the background in imaging these people likely have but mine works by breaking an image into an X by X map of average colors and comparing, written specifically because I needed to find similar images of different aspect ratios and at the time I couldn't find anything.

[https://github.com/donatj/imgdedup](https://github.com/donatj/imgdedup)

</comment><comment><USER8> If anyone is interested in gui, XnViewMP does that too. [https://www.journeybytes.com/2018/03/how-to-find- duplicate-p...](https://www.journeybytes.com/2018/03/how-to-find-duplicate- photos-for-free-using-xnview.html)

</comment><comment><USER9> This came a bit late. I recently decided I had to sort all my photos which I usually just dump in a big photos folder. Using the camera on my phone a lot and also getting a lot of media through whatsapp the collection was getting a bit big.

I made a script to calculate the hash of every file and if it found a double it would move it to another duplicate folder. This worked reasonably well but I couldn't stop thinking there should be more than 1 solution already made for this.

<comment><USER10> quicker than hashing the file, you might want to compare exif data (extract with exiftool), i have been comparing image date/time (to the second) as tagged by the camera, and when i find a duplicate, i keep the one with the largest image size. I've not worked out how to deal with those without exiftags. I understand ShotWell hashes the thumbnail to find dupes. The security camera software motion has some image comparison and to determine if the camera image has changed since the last image, i think it was visual in nature, rather than hashing, since webcams are "noisy".

</comment></comment><comment><USER11> Here's a broad and perhaps a bit naive question on this;

Reddit, Imgur, and any other site that uploads significant amounts of images from significant amount of users.. do they attempt to do this? To de-dupe images and instead create virtual links?

At face value it'd seem like a crazy amount of physical disk space savings, but maybe the processing overhead is too expensive?

<comment><USER12> People do deduplicate files to save on space, except it's usually based on exact byte match using md5 or sha256. Some don't due to privacy issues: [https://news.ycombinator.com/item?id=2438181](https://news.ycombinator.com/item?id=2438181) (e.g., MPAA can upload all their torrented movies and see which ones uploaded instantly to prove that your system has their copyrighted files)

There's no way to make the UX work out for images that are only _similar_. Would be pretty wild to upload a picture of myself just to see a picture of my twin used instead.

But I do wonder if it's possible to deduplicate different resolutions of an image that only differ in upscaling/downscaling algorithm and compression level used (thereby solving the jpeg erosion problem: [https://xkcd.com/1683/](https://xkcd.com/1683/))

<comment><USER4> The cnn methods in the package are particularly robust against resolution differences. In fact, if it's just a simple up/downscale that differentiates 2 images, then even hashing algorithms could be expected to do a good job.

</comment></comment></comment><comment><USER13> Nice project!

I wonder how much of it could be adapted to finding duplicate documents, e.g. homeworks, CVs, etc. Presumably, the hashing would have to be adapted slightly. But how much?

<comment><USER14> For documents I wouldnt do anything listed here. I would just compare the contents on a line by line or word by word basis

</comment></comment><comment><USER15> This is really nice. I have a semi-abandoned project that uses PHash to canvas my photo library to flag duplicates, and am quite likely to use this instead.

Now if only Apple hadn't repeatedly broken PyObjC over the years...

<comment><USER16> I've been trying to sort through multiple backups of my photo library for several years and such a tool will be very useful.

<comment><USER17> This too is my usecase. Some backported home from Google takeout, some jpeg recompress, some renamed and date time shifted by jhead. I'd love to be able to group and select the highest Q or pixel count and then canonically order by date.

G

</comment></comment></comment><comment><USER18> Could this be used to order a large set of images by similarity?

<comment><USER19> The API does not seem to support this, but it should be easy to hack this (return not only a list of duplicates but the actual distance to the target image along with it, then sort results by distance).

<comment><USER4> The api already supports returning the hamming distances/cosine similarities along with the duplicate file list which can be used to sort the files. Please refer the docs for 'find_duplicates' function for more.

</comment></comment></comment><comment><USER20> did you evaluate the 'imagehash' [1] library prior to working on this-- any limitations/concerns? the additional CNN seems to be the difference between the two libraries

[1] [https://github.com/JohannesBuchner/imagehash](https://github.com/JohannesBuchner/imagehash)

<comment><AUTHOR> Yes, before developing the package, we were also using this great library for hash generation. There are a bunch of differences we have compared to imagehash: 1\. Added CNN as you mentioned 2\. Took care of housekeeping functions like efficient retrieval (using bktree, also parallelized) 3\. Added plotting abilities for visualizing duplicates 4\. Added possibilities to do evaluation of deduplication algorithm so that the user can judge the deduplication performance on a custom dataset (with classification and information retrieval metrics) 5\. Allow possibility to change thresholds to better capture the idea of 'duplicate' for specific user cases

</comment></comment><comment><USER21> Sweet. Just what I needed to remove duplicate memes from my phone.</comment>


Always Bet on HTML - <AUTHOR> https://gomakethings.com/always-bet-on-html/ <comment><USER2> > You can add native expand-and-collapse components to your site using the > details and summary elements.

WHAT WHAT WHAT

This whole time it was THAT easy??? I've been using Bootstrap and javascript every time I needed that</comment>


Microsoft weighs in: 'the future of the web is HTML5' - <AUTHOR> http://www.engadget.com/2010/04/30/microsoft-weighs-in-the-future-of-the-web-is-html5/ <comment><USER2> So why are they pushing Silverlight ?

<comment><USER3> Good question - I have no idea who Silverlight is for. It _might_ make sense for internal corporate applications - but they don't need to look very pretty so all the integration with design stuff is irrelevant.

<comment><USER4> For developers (developers developers) who like to use .NET. Not sure about end users.

<comment><USER5> it's actually pretty nice for that--- with vaguely reasonable effort you can make the same app run on .NET on the desktop and Silverlight on the browser

<comment><USER6> The latest version of the enterprise trash I develop for replaced a mid-90's Win32 GUI with Silverlight running in a browser... leaving intact the Java database connection code. When I installed it on my machine I had to reinstall Java before it would work.

But that's more a testament to the vendor's "now with $AWESOME_PLATFORM!"-driven software architecture paradigm than any real fault of Silverlight or Java. (Except that they both appeal to those sorts of people.)

</comment></comment></comment></comment></comment><comment><USER7> I really do want to believe this guy; that's why I think that it is other forces within MS that are causing IE snail-speed progress.

<comment><USER8> IE snail-speed progress? The IE9 rending engine is impressive. And the work being done is much more impressive than with the other browser makers. Consider the amount of discussion they put out about rounded corners.

[http://blogs.msdn.com/ie/archive/2010/03/19/the-css- corner-a...](http://blogs.msdn.com/ie/archive/2010/03/19/the-css-corner-about- css-corners.aspx)

When you look at something like this, you realize that it's not just the standard that needs to be finalized, but how the result should look. So while Firefox can say we support rounded borders, the net isn't well thought out. Browser makers are racing to mark of checkboxes of success. IE9 may not be the quickest to the block, but it's clear that the IE team isn't just trying to meet the standards.

Edit: I do want to point out that I think your question is a valid one, and while they've recently released updates to their browser rather quickly over the last few years, it feels like all together, they have been slow in releasing anything really impressive, or not just playing catch up.

<comment><USER9> > _the work being done is much more impressive than with the other browser > makers_

Are you serious? All the other browser vendors also have blogs, on which they have routinely discussed the details of web rendering for years. How does Microsoft also adopting this practice within the last year or two make them unique?

<comment><USER8> > Are you serious? Yes. > All the other browser vendors also have blogs, So? > What does a blog have to do with proper rendering? > on which they have > routinely discussed the details of web rendering for years. Great. They talk > about rendering. > How does Microsoft also adopting this practice within the > last year or two make them unique? It doesn't. What makes you think it does?

The impressive thing I was referring to was the actual rendering results. To be fair, I was mostly comparing what IE9 is going to do with what Chrome/Firefox/etc are doing now, but still. IE9's implementation of something looks impressive.

</comment></comment></comment></comment><comment><USER10> The dithering of the HTML5 editors has no meant that Microsoft have cemented the video codec for HTML5 as H264. Had they only bit the bullet and not been unnecessarily scared of patent issues for Ogg Theora, we could have had a true open video standard for the future web.

If Google release VP8 as open source and license-free, and HTML5 adopt it as a baseline, will MS change their mind?

</comment><comment><USER11> Of course Microsoft and Apple are endorsing HTML5/H.264; they are part of the licensing body that stands to profit from H.264 adoption. See <http://news.ycombinator.com/item?id=1306044>

</comment><comment><USER12> THIS JUST IN:

The future of HTML4 is HTML5.</comment>


JSONLint, The JSON Validator - <AUTHOR> http://jsonlint.com/

<comment><USER2> Also worth mentioning is the pure JavaScript implementation at <http://zaach.github.com/jsonlint/> for people worried about sending data to the jsonlint.com server.

<comment><USER3> A casual inspection of Firebug shows that the only way JSONLint communicates with outside world when you click _Validate_ is to report usage to Google Analytics. It certainly doesn't appear to be sending the actual JSON anywhere.

<comment><USER4> This is correct, I'm the creator of jsonlint. It actually uses zaach's implementation of jsonlint in JS, now.

Fun fact: jsonlint uses an html5 cache manifest, and can be used even while offline.

<comment><USER2> Thanks; that's good to know. Thank you also for jsonlint.com; great tool.

</comment></comment></comment></comment><comment><USER5> If anyone wants to validate on the client side(mac) and also have a great UI for editing/creating json strings, I highly recommend: <http://olivierlabs.com/jason/index.html>

I find that I use this tool constantly to build mocks for prototypeing and testing my various JS projects.

<comment><USER6> I wrote a quick Python version for use on the command line: <https://gist.github.com/1653544>

<comment><USER7> python -m json.tool /path/to/file.json

</comment></comment></comment><comment><USER8> Quick python validator, for those that would rather stay on the CLI and/or not have to copy/paste/submit to an external service: <https://gist.github.com/1919460>

</comment><comment><USER9> Another JSON tool that is less well known but also extremely useful is the JSON schema validator tool at:

<http://json-schema-tester.herokuapp.com/>

</comment><comment><USER10> I know its a fundamental part of web browsing but the inability to use tabs in a text area such as this gets to me.

<comment><USER11> <http://alanhogan.com/code/tabs-in-textareas> I link to a bookmarklet here that should help. (You can hit Esc to break out of the textarea, I believe)

<comment><USER10> Wow thank you. This is very very useful. This has plagued me in a number of websites recently.

</comment></comment></comment><comment><USER12> Have been using this for a while now as a quick way to get data a bit readable. Works pretty well.

<comment><USER13> Check out apigee.com if you want something more refined.

</comment></comment><comment><USER14> it seems to allow duplicate keys but drops all but one. I have no idea if this is correct since the JSON spec doesn't really cover it. personally I think the spec should ban it because it means you need to parse the closing brace for an object before you know you have the right value for any field. also it means you need to keep a dictionary-like representation in memory to detect the dups, a list or stream of pairs wouldn't consolidate dups.

a nitpick for sure but several times I've wished the JSON spec had something to say here.

</comment><comment><USER15> This is a nice litte webapp, I have been using it for a couple of months now, and it has been very useful.</comment>


Peter Thiel Is Giving This Man $100,000 To Disrupt College - <AUTHOR> http://www.businessinsider.com/dale-j-stephens-uncollege-radmatter-thiel-fellows-2011-6

<comment><USER2> Sounds like a neat little idea that might work for a while given his PR, but nothing that's going to disrupt college. Actually I can see a lot of college students using such a website or even them being the user base.

In fact I doubt there will be any significant website/business/education system that will kill/replace the current higher education system.</comment>


Show HN: Sell your Starbucks giftcards for Bitcoin - <AUTHOR> https://cardforcoin.com/

<comment><AUTHOR> Right now I'm starting with Starbucks cards, but plan to expand in the future if there's demand. I'm also looking into helping smaller coffee shops accept Starbucks cards, though that's longer term.

<comment><USER2> Curious as to what your business plan is here? To resell the gift cards for ~89% value, and by doing so convert BTC -> Starbucks -> USD?

</comment></comment><comment><USER3> Can I buy starbucks cards with bitcoin? Or only sell?

<comment><AUTHOR> Only sell. Gyft sells Starbucks cards for BTC though, check them out.</comment></comment>


Florida airport to require all international passengers to submit to a face scan - <AUTHOR> https://apnews.com/amp/eade4e6efbf442328b0e1eefabd98f05 <comment><USER2> Aren't all major airports (Port of Entry) scanning faces of International passengers at the immigration check?

I had to pass through a visa check the first time entered the US in 2011, and they had a tiny webcam like thing that took a picture.. what is new to report now?

<comment><USER3> Looks like the new part is scanning the faces of _departing_ passengers, even US citizens.

In reality it's not that big of a change, since you needed to enter all of your passport information with DHS before departing. You either did it online ahead of time with the airline, or the agent does it at check-in.</comment></comment>


LPT: Find who's sold your Gmail email to spammers? - <AUTHOR> https://www.reddit.com/r/LifeProTips/comments/hf4r7b/comment/fvvacjv <comment><AUTHOR> """ You can also add +sitename to your address as in "firstname.lastname@example.com" or "email@example.com for easy sorting. It's also neat to know what site sold your data to spammers. """"

Quoted here just in case the permalink doesn't work (since Reddit prompts to open the app).</comment>


Ask HN: What is the most absurd tab/space policy you have ever seen? - <AUTHOR> Alternating tabs and spaces on the same line is the worst I have ever seen. Bonus points for starting lines with different tabs/spaces based on C++ context:<p>https://github.com/compiz-reloaded/compiz/blob/master/src/object.c#L122 <comment><USER2> They're not basing it on the context. It's just the result of using 4 character indents while also using tabs, which is definitely ugly, but at least likely intentional and consistent, unlike alternating tabs and spaces in the same line, as you mentioned.

</comment><comment><USER3> Always wondered why tab vs. Space was a thing.

I mean,whether you use tabs or spaces,a text editor aware of the source code file format should render it according to your preference.</comment>


The New York Times is planning local editions (and why it's a good idea) - <AUTHOR> http://windycitizen.com/weeH

<comment><USER2> It certainly does make sense, the NYT does have the branding and clout to pull this off. Offering local editions does remove some of the fat in the newspaper business, but isn't there a risk of "the wal-mart effect," especially if the NYT moves into less populated regions?

<comment><AUTHOR> I think as long as they stick to major markets where they already have some pull, they'll be ok.

At the same time, Playboy Inc. makes waaay more money from licensing its brand than it does off the actual content it produces...so maybe extending the NYTimes brand is a good idea in general.

I want some NYTimes socks.</comment></comment>


A stronger Dart for everyone - <AUTHOR> http://news.dartlang.org/2017/06/a-stronger-dart-for-everyone.html <comment><USER2> i guess this means no more optional typing</comment>


How to Make C++ Code Run 90x Faster - <AUTHOR> http://marketmovers.blogspot.com/2016/04/how-to-make-c-code-run-90x-faster.html <comment><USER2> Author of blog post compared random insertion / random deletion speed with vectors and lists of up to 100k elements, based on a talk by Bjarne Stroustroup: [https://youtu.be/YQs6IC-vgmo](https://youtu.be/YQs6IC-vgmo)

The surprising result is that vectors are MUCH (almost two orders of magnitude) faster at this than lists, altough your CS background would make you expect a result in the opposite direction.

From Bjarne's talk (very interesting) we see that for example finding a single element in the middle of a vector by linear search, and then having to move the subsequent 50k elements forward by one position, is still MUCH faster than finding that element in the linked list and performing the minor pointer surgery to remove it.

The reason is that the linked list traversal is accessing memory all over the show, while the linear and predictable vector traversal and memory copy is superbly handled by modern caching architectures, and hence so much faster.</comment>


Facial Recognition just got a lot better - <AUTHOR> https://www.youtube.com/watch?v=lnzJEUA500c

<comment><USER2> Nice, I'm glad to see they've got a new app out! The old one didn't really live up to expectations. Looking forward to giving this a try again.</comment>


Grammarly's Marketing Strategy: Growing to 20M Users via Content - <AUTHOR> https://victoreduoh.com/grammarlys-marketing-strategy/ <comment><AUTHOR> This in-depth article exposes precisely how the SaaS company, Grammarly, powered its way to over 20 million users. It delves into how they achieved such a remarkable feat through content marketing and a unique product positioning tactic.

If you've ever doubted the importance of having a defined content strategy to guide your SaaS marketing efforts, Grammarly's results will shock you.

I'm sure about that because the author of this article was also shocked when he tried to feed his curiosity and asked:

How much of Grammarly's content strategy contributed to it reaching a market valuation of $1.3 billion, as of 2017 and millions of users?

The answer, as you'd find in this in-depth guide, is... A lot.</comment>


Calibre: continuous website quality and performance telemetry - <AUTHOR> https://calibreapp.com/ <comment><USER2> Might want to rethink that name. Calibre is already well-known and long- established as an eBook management app:

[http://calibre-ebook.com/](http://calibre-ebook.com/)</comment>


Apple hires Tesla's head of electric powertrains to bring electric car to market - <AUTHOR> https://electrek.co/2019/03/30/apple-car-tesla-electric-powertrain/ <comment><USER2> I still find it hard to believe that Apple will actually bring a car to market. Look at how long it took Tesla to do it, and all the problems they are still having more than a decade in. And all they do is make cars. It would seem so much more efficient to simply buy a car company that already had the expertise. Yeah it would cost an absolute crap ton, but Apple is probably the one company that can afford it.

That being said, I would definitely buy an Apple car. Too bad Steve isn't around anymore, he would make a damn fine automobile.

</comment><comment><USER3> Good attempt at releasing progressive sounding news in an attempt @ fluffing your devaluing stock value. But will anyone fall for it?

</comment><comment><USER4> Bit late in the game isn't it?

Need to lock down battery supply and probably pay MAGNA to build it which would eat into profit margins.</comment>


Musings on the Impossibility of Testing - <AUTHOR> https://blog.cerebralab.com/Musings_on_the_impossibility_of_testing <comment><USER2> A lot of the time it's easier to confirm that an answer is correct than compute that answer. Imagine a test like:

        val result = factorize(367)
        assertEquals(367, result.reduce(_ * _))

This isn't really a "human validation" \- as a human I don't actually know what the prime factorisation of 367 is - and the sense in which it's a "compiler rule" is a deep and subtle one. But I'd argue that it's a valid test and quite a lot of software tests are of this type.

Another type of test not considered here is a "redundant" check for a simple case. If we write a test like:

        assertEquals(multiply(83, 83), pow(83, 2))

then to a certain extent that's redundant, but I'd argue it's a useful sanity check of our pow implementation. Again it doesn't seem right to call this a "human validation" since I don't actually know 83^2 as a human.

It also bears considering that even an entirely redundant test may be useful in providing (and explaining) a use case for an API. If we've just implemented the map() function for lists, then a test like:

        def f(x: Int) = x * 2
        val input = List(1, 2, 3)
        var result = List.empty()
        for { element <- input }
          result :+= f(element)
        assertEquals(result, input map f)

is "redundant" in this taxonomy, but a perfectly legitimate test of map; often "be equivalent to this more complicated sequence of functions" is exactly the specification of a particular function.

<comment><USER3> > A lot of the time it's easier to confirm that an answer is correct than > compute that answer.

Is this a "human validation" that P!=NP ? ;)

<comment><USER4> More like "most software is in NP", since "easy to confirm an answer" is the set's defining characteristic.

</comment></comment></comment><comment><USER5> Testing is obviously not impossible, so let's set that aside for a moment.

The question is, why are you unit testing ML functions? ML is not software engineering, and unit tests not a good way to broadly evaluate them, outside some "third rail" type tests for insanely important cases. You'd typically use statistical testing (e.g. f1 scores) to determine whether your models are performing as expected, but they are ultimately probabilistic in nature and highly unlikely to satisfy all of the intended cases simultaneously.

There is of course the philosophical question of how you determine the quality of your tests, which are themselves software. The practical answer is to keep your testing software as trivially simple, obvious, and boring as possible; tests can then be validated with the mark I eyeball.

None of this has any bearing on the usefulness or otherwise of automated testing.

<comment><AUTHOR> > The question is, why are you unit testing ML functions? ML is not software > engineering, and unit tests not a good way to broadly evaluate them, outside > some "third rail" type tests for insanely important cases.

In practice, I agree with this, and that's how I usually write my tests when dealing with ML code. Though honestly I think this perspective could well extend beyond ML code to any code with very broad input and output spaces.

> You'd typically use statistical testing (e.g. f1 scores) to determine > whether your models are performing as expected, but they are ultimately > probabilistic in nature and highly unlikely to satisfy all of the intended > cases simultaneously.

Yes, but the solution to that (in practice) is to basically benchmark against your own (previous) code and alternative implementations. Based on the idea that "if 10x tried it, and mine is better, than I must be doing something correctly" and/or "if the previous version did worst, well, then something must be improving".

Again, I think this is equally true for testing a ray tracer or compilation times as it is for testing an ML algorithm.

> There is of course the philosophical question of how you determine the > quality of your tests, which are themselves software. The practical answer > is to keep your testing software as trivially simple, obvious, and boring as > possible; tests can then be validated with the mark I eyeball.

But this results in a situation where "good" tests are extremely subjective, and replacing a team of engineers with another (or even just a member of that team) would result in the need to replace the tests.

> Testing is obviously not impossible, so let's set that aside for a moment. > > None of this has any bearing on the usefulness or otherwise of automated > testing.

To me it seems to have baring in that, unless I am able to have at least some heuristic based on which I can define "good" or "sufficient" testing the question of what to test and how much time to allocate to it becomes impossible to answer. And that is a very useful question I'd want to have an answer to that is better than just "based on my intuition and what I think is sufficient as to not have my bosses/customer scream at me when stuff breaks, this amount of testing is good".

</comment></comment><comment> seedless-sensat > Since the function is very simple, time would probably better spent > reviewing the actual code to make sure it's error-free.

I disagree with that statement. Unit tests are very helpful for complex models, as they can guard against regressions in future changes. If the original author tested all their expectations, I am less worried that I may break something I didn't anticipate.

<comment><USER6> They're also great for remembering what the heck functions do. At one of my jobs we have a file called filters.js which had hundreds of functions in it. I made it a rule that anytime I used or added one of these functions in the future I would have to write at least one unit test for it.

</comment></comment><comment><USER7> I've used tools similar to quickcheck a little bit, and I think property-based testing can be useful. Generating, say, 100,000 randomized inputs over a range makes me more confident than if I hand write a handful of tests. Still, quickcheck-like tools are limited to producing input over limited ranges for different types, and a lot of tests need to have some kind of more complex and unique interaction of various components that can only be done by hand (i.e. integration testing). Still, I think property-based testing can serve as a good way to more thoroughly test inputs.

</comment><comment><USER8> Well he gives the answer himself: "I suspect the answer lies somewhere in a combination of smoke tests, testing common user flows, testing edge cases in which we suspect the software will fail, and testing critical components the failure of which is unacceptable"

</comment><comment><USER9> I disagree with the point about human validation tests being unsuitable for multiplication. Sure it's a contrived example but even with more complex financial rules, you're building the system for a reason and generally know enough example inputs and outputs to have these tests. If I saw some similar code that didn't have these types of tests because the 'machine is more capable at solving them' I'd fail the review. How do they know it works then?

<comment><USER10> More than that, if I write in a test assert(10=2*3), eventually I will find that test fails and fix it. Thus getting the test wrong isn't fatal. Of course if this is a more complex case (which it probably is) the bug might take a while to discover since it made me write wrong production code, but at least once it is discovered and fixed (both the test and production) that will not be broke again.

</comment></comment><comment><USER11> Goodness.

If all of software engineering is an infinite space, software testing is always infinite+1.

The problem always starts at human-defined logic and ends at human-defined interpretation.

There is no amount of testing that can replicate eyes on those expectations defined on either end, and my own personal politics reflect that:

Tests are simply reinforcing these vectors from human to human where we might have a black, grey box that is incompletely understood by its contributors.

The point is to reduce complexity and optimize those vectors so those expectations directly align.

If you're writing the consistency of crêpe-like tests, perhaps those goals don't align. I've been there. Something surely has to change. Tests should be very simple validations and should be very developer interpretable. In fact, they should be enlightening to that vertical code.

They should necessarily be an aside to the larger architecture where we generally understand what is supposed to happen. They should define a ruleset to its operation at each discrete step.

Never a validation of "what function functions?".

I've seen too many PMs, execs, and can-do engineers get lost beyond the design because they were building on sand and justifying their castle.

Just stop.

Bring testing to the 'else' case on 'if, else if, elsif, ...' where we can actually understand that path.

Goodness.

Addendum: perhaps I've not worked in complex enough systems. I would appreciate any constructive argument towards my personal views.

</comment><comment> amw-zero Testing / verification is the hardest problem in computing. I don't think the author actually understands why that is and has a few superficial gripes with how codebase are tested. That's not to say that a lot of test suites are actually good (they're not). That criticism may be fair.

Static types do not help at all with software quality, beyond catching some typos. You can never, ever write a static type that enforces anything of substance, because for that to happen you'd need to execute arbitrary code within the compiler (as happens with dependent types, and of course there is the constant fear of undecidable or infinite type checking in that system).

The classic example is that there's an infinite number of functions with type int -> int. The logic of these functions are extremely varied, and the type doesn't help you at all. Enum types are very useful for knowing what values you are allowed to write, but don't help with correctness.

The author brings up large input spaces, but conveniently leaves out input space partitioning, which any non-novice tester has to employ in their test case management. The category partition method is a fantastic way of covering large swaths of a seemingly infinite input space with relatively few tests. Of course there's combinatorial explosion, but that can be mitigated with constraints on the input combinations.

I'm not saying testing is perfect - it's not. But, the burden of proof is on the critic of testing, not testing itself. How else can you reliably change a large software product dozens of times a week, for 20 years in a row? And what's the alternative when I see products that large teams produce break weekly?

This is not something that "ship it and iterate" has had any meaningful impact on. Eventually you get people who don't intimately know the whole codebase, and make a breaking change unintentionally. What is the alternative to some kind of testing?

<comment><USER12> The part about static types is weird. "Tests are not always perfect but can be useful. However static types are not perfect and so they are useless."

<comment><USER13> I felt the same about it.

Static typing is a tool, just like unit testing, integration testing, and code reviews.

We combine these tools in order to maximize software quality, ease of development and maintenance.

Static typing eliminates a whole class of errors that good code bases in dynamic languages usually have to manually test (instance and type tests)

<comment> amw-zero There is no need to have "type" tests in dynamically typed languages. Dynamically typed objects are implementation details, you test without referring to the underlying types.

Also, static types _are_ manual testing, you need to write the types.

</comment></comment></comment></comment><comment><USER14> I wonder if the author has ever heard the aphorism, "Perfect is the enemy of good."

<comment><AUTHOR> I'm not trying to achieve perfect, rather just be able to answer a question like: What makes a test obviously bad or obviously good ? I needn't have a system that can help me generate perfect tests, or tell apart almost equally good implementations, but rather one where I can at least point to a test that is obviously bad and say "this is why" rahter than just using my intuition.

</comment></comment><comment> t-writescode I see the author posted this.

What are your thoughts on automated/unit tests used to guarantee expectations do not change in future revisions (a regression suite) and also used to present example inputs usages of the API that was designed?

<comment><AUTHOR> > What are your thoughts on automated/unit tests used to guarantee > expectations do not change in future revisions (a regression suite) and also > used to present example inputs usages of the API that was designed?

To be honest, this is one idea I was toying around with. As in, have a test suite that generates a "state" file for your program and then, in any given patch, list the items in the state that you'd expect to change.

That way, one can basically catch a lot of "bugs" which often boil down to "this change I made here to affect X is also unexpectedly affecting Y".

My main problem with this are:

1\. I see nobody doing this, and I'm not sure why. 2\. The tooling for this doesn't really seem to exist, and I'm not sure how easy one could bring it into existence and/or if a generic version of it could be written. 3\. This breaks down with a lot of software where a tiny change can affect, well, everything (e.g. modifying a random seed or changing an error-checking constant)

<comment> t-writescode > As in, have a test suite that generates a "state" file for your program

What do you mean here?

Do you mean you would run a specific function with specific inputs and record specific outputs and compare them?

<comment><AUTHOR> Yes, or rather, run your whole program with specific inputs then (e.g. by using a debugger) capture as much of it's state as you can and compare that with the state from the next run of those same inputs.

E.g. given a program with variables

a1 = array a2 = int a3 = string

Running might get the state flow:

a1 = []

a2 = 10

a3 = 'abc'

a3 = 'dd1'

a2 = 200

a1 = [200,'dd1']

Then, if a change is made, the programmer can say "I expect this change to only affect the state of a2" and if you get the state flow:

a1 = []

a2 = 11

a3 = 'abc'

a3 = 'dd1'

a2 = 500

a1 = [200,'dd1']

Then the test passes

If you get the state flow:

a1 = []

a2 = 11

a3 = 'abc'

a3 = 'dd1'

a2 = 500

a1 = [500,'dd1']

The test fails with error "The change you expected to only affect a2 also had an effect upon a1"

But again, the actual state you capture here and the way you check for equality (e.g. to you check for equality among all the states during the whole runtime, or just in the final state of the program ? If the former how is state-change ordering handled ? If the later, what about relevant state that is out of scope by the time the program finishes running ?)

<comment> t-writescode How is this different from a set of unit tests where you give the function under test each of those inputs and have the expected output be the same for each entry as the given list of outputs?

e.g.

      [TestCase(null, null)]
      [TestCase(10, 11)]
      [TestCase('abc', 'abc')]
      [TestCase('dd1', 'dd1')]
      [TestCase(500, 500)]
      [TestCase([200, 'dd1'], [200, 'dd1'])]
      public void StateChanges(input, expected) {
          actual = DoThing(input);
          Assert.AreEqual(actual, expected);
      }

<comment><USER9> Because this is only checking the individual function, not the entire systems state. If I have a function that adds two ints I could test it with [TestCase([2, 2], 4)] and this would pass _but_ if it also changed the value of an object there could be an issue a unit test (and indeed integration/e2e test) wouldn't catch.

</comment></comment></comment></comment></comment></comment><comment><USER15> The objection to comparing 'multiply' and '*' is silly. That's differential testing. The objection there shouldn't be that those two functions are being compared, it's that the arguments are static rather than being generated in high volume, randomly.

</comment><comment><USER16> The article is bikeshedding; still upvoting for the poem!

</comment><comment><USER17> Yep it's very easy to tear down a straw man of your own creation. Meanwhile I'll keep writing useful tests that validate my code and prevent regressions.

<comment><USER18> How do you know that your tests are useful ? most (I'm a senior tester so I know a few) teams write tests that are useful when they are new or when a new feature is being developed, those tests quickly stop finding problems and in the worst case give false negatives (fail for no reason).

A related problem are Rotten green tests [1]

[1] [https://dl.acm.org/doi/10.1109/ICSE.2019.00062](https://dl.acm.org/doi/10.1109/ICSE.2019.00062)

<comment><USER19> If a test never fails unexpectedly then you know that particular test has been a waste of time.

e.g. if no regressions ever get picked up by the test subsequently

<comment><USER20> That's an interesting statement. Imagine I have a test which never fails unexpectedly. But it expectedly fails when I decide to refactor some code. By your definition that test was a waste of time, by my definition it did excatly what it was supossed to do.

<comment><USER19> If you're expecting it to fail then your brain is already doing the work that the test is meant to do. It serves as an expensive to-do reminder in that scenario.

If you are part way or all the way through your refactor and think you're on the right track and then you unexpectedly have a failing test, then I would say that that was a useful bit of test code.</comment></comment></comment></comment></comment>


Notes on CouchDB, a distributed document DB in Erlang - <AUTHOR> http://blog.leetsoft.com/2007/9/2/futuretalk-couchdb

<comment><USER2> Yikes, where to start.

"Databases store data to disk. Thats all what 90% of us use them for. They are essentially elaborate hash tables backed by a disk drive."

Sure, if you don't need indices or transactions.

"a disk failure is still a major disaster. Even if you have backups, even if you have replication, there will be downtime and manual labor while a new master server is established."

If you use a dual-port, dual-controller RAID 10 with hot spares, you'll never even notice a disk failure. (No wonder the SmugMug people are so smug.) But I admit replication is a great solution for people who consider their time to be a sunk cost.

"Databases never put your 10-20 commodity server boxes with all their spare disk space to use."

At least this is true (for now). Given that Web 2.0ers apparently don't care about most database features anyway, maybe HBase will solve this problem.

</comment><comment><USER3> <http://damienkatz.net/2006/11/the_woz.html>

</comment><comment><USER4> From the CouchDB Wiki:

 _What it is not_

A relational database.

A replacement for relational databases.

An object-oriented database. Or more specifically, meant to function as a seamless persistence layer for an OO programming language.</comment>


Burnt out and broke and hungry - <AUTHOR>

Hi all i'm about to get an idea funded having discussed now for WEEKS with an angel investor - i was asked to re-write the marketing and revenue plan again but i seem to have no motivation to do so...just plain lazy! Having not eaten for 2 days now, can't afford groceries.Can anybody buy me dinner! <comment><USER2> Sure, what's your IBAN?

On another note: I think your angel deal is dead in the water, they just don't want to tell you outright.

<comment><AUTHOR> Oh my God, thank you Jacquesm! Thank you a million and God bless...actually i braced myself for something like get a job you loser! But thank you!

I don't have a IBAN, but you can please send it thru paypal -firstname.lastname@example.com.

Thanks a million!

P.S - i hope the angel isn't dead as you said he sounded very keen - see here [http://i59.tinypic.com/2z6ukg4.png](http://i59.tinypic.com/2z6ukg4.png) i just need to come up with a potent strategy which i would if i had the energy so thank you Jacquesm, would let you know how it turned out.</comment></comment>


Ask HN: the current state of the empty # in 'a href' - <AUTHOR>

What is your take on the a href='#' in web applications?
It used to be and may still be very well be today the 'good practice' to always have a # at least in the HREF. Empty or no HREF could cause issues with some browsers I was told.
Today it raises other problems. Those # litter web applications making link sharing duplicates in news site (ie. .com/# is different than .com/ but shouldn't), it also makes statistics skewed in some stats services.
I personally hate to see those empty domain.com/#
Note I have nothing against anchors actually being used as anchors, ie domain.com/#somesection.  That's not what I'm referring to.
It also annoys me off to have those littering # in my browser history (ie. when you type in the url bar).
Is there an alternative? Using <button> everywhere can also cause issues in some browsers I read, with some browser using the content of the button tag as labels while some others use the value attribute.
Is using A with no href still SIN today?
And don't tell me about HTML5. If it's not everywhere it's not on my cards.
Thanks. <comment><USER2> The standard is to use # in anchor tags that don't link anywhere that get hijacked with javascript and typically using jquery use e.preventDefault() which will stop the # from going into the address bar. You can also use return false. But e.preventDefault() is best practice. You need the # in the href because without it older browsers will not act like its a link which will prevent :hover from working. The # signs you are seeing all over the web are probably people who are not implementing preventDefault or return false. You could also be seeing them for sites that attempt to use something like jquery address for ajax navigation. If you are attempting to copy and share one of these links and it is not working then the developer didn't set up the ajax state management correctly for the particular app you are using. On a side note, you should probably leave these types of programming specific questions for stack overflow. I wouldn't consider this appropriate for hacker news in my opinion. Also you will probably get a larger response for this type of question on stack overflow. Heck, it has probably already been asked and answered multiple times on there.

<comment><AUTHOR> All good points. Thanks.

</comment></comment><comment><USER3> I've always been a fan of

      oi!

It'll look like a link (unlike leaving the href empty), and wont ever perform wacky page scrolling tricks or mess up your URL bar.

That's been my signature since 1997. Don't see any reason to change it...

<comment><USER4> Here's a shorter version:

</comment></comment><comment><USER5> I use A without href only when I'm making an actual anchor A name. When I use href=#, I always have javascript onclick return false. This won't stop crawlers but it keeps the user's history and address bar clean.

<comment><AUTHOR> what about href='' and in the jquery onclick function, return false at the end?

<comment><USER5> href='' will reload the current page in most browsers if the JS code hasn't loaded yet (waiting for $(function(){}) to fire) or has an error for some reason. href='#' will at least prevent that. Returning false form jQuery works.

</comment></comment></comment><comment><USER6> <http://api.jquery.com/event.preventDefault/>

</comment><comment><USER7> If you want to retain IE6 compatibility (usually a must for government related sites!), I've found this technique is pretty solid for cross browser platform compatibility (IE6-9, FF, Chrome, Safari):

My link

1) When you hover over the link, a 'hand' cursor appears for every browser (due to the #)

2) IE6 (in particular) won't barf at running your javascript code found in the onclick handler.

If your href tag contained "javascript:void(0)" instead of "#"; your code may not be run under IE6.

3) Because you 'return false' on the onclick, all browsers still avoid leaving the customers web browser with an unnecessary # in the top of the Url bar (as the click is effectively cancelled).

</comment><comment><USER8> I usually tack on "return false;" to the onclick action to prevent the browser from actually navigating to '#'. Not sure if this is the recommended/best way, but it works.

E.g.

       test

</comment><comment><USER9> I've always liked the standard of having a # value, and then using JS to prevent the default link behaviour (prevents address bar from changing to #)

</comment><comment><USER10> This is a valid question and you raise an intresting point, but I really think that is is more suited to a differant website, like Stack Overflow.</comment>


Google Legally Profits from Fraud on Its Platform - <AUTHOR> https://www.extremetech.com/internet/294213-how-google-legally-profits-from-massive-fraud-on-its-platform <comment><USER2> Was expecting to see various types fraud that google profits from, instead it seems to be focused mainly on "(business) identity theft via google maps" \- right?

Thought for sure there would be info about things like taking ads for "flashplayer" that installed malware, things like taking money for ads for "walmart" searches instead of just listed the organic result, because there is implied threat of NOT listing walmart at the top due to competitor ads or "gamed" search results.

Enabling places like grubhub and others to take over search results for restaurants / small businesses and brands in the search results.

Censoring organic results, yet allowing paid listings to insert themselves within.

I'm sure there are many more forms of fraud that could be brought up that are mainly possible with google.

Basically looking for more perspective given the title, I think the title could of been less broad given the article's info.

<comment><USER3> Funnier than the flashplayer ads, is that "Google Chrome" was (is?) a heavy ad target for malware.

</comment></comment><comment><USER4> It's amazing how many scams and malware-serving websites are in Google Ads, and how aggressively Google refuses to address it. I've actually had Googlers (here on HN) go and report and have removed the malicious sites I reported, just to see them back a handful of hours later, without so much as rotating domain names out.

Google must be stripped of any profit from criminal activity on their platform. When a fraudulent site is removed, Google should be forced to give up all of the profits generated from it. Though I doubt Google would even make the Fortune 500 if it did.

Section 230 absolutely _has_ to go for order and justice to prevail.

My go-to example for the particular type of predatory crimes Google knowingly and willfully enables happens whenever a senior citizen searches for "mapquest": [https://www.google.com/search?q=mapquest](https://www.google.com/search?q=mapquest)

I actually took a call yesterday from someone who "couldn't get directions from MapQuest without installing something". And if you look at the search results, you'll see why: Ads that look like real search results that _claim_ to be MapQuest push the real MapQuest below the scroll fold. And computer- illiterate individuals get taken advantage of, again and again and again. I've been pointing out this example for six or seven years, and the same domains that were operating then are still operating today, because Google simply makes too much money from them to care.

If you work for Google, this is where your paycheck is coming from, and if you use Google, this is the cost of your convenience.

<comment><USER5> > Section 230 absolutely has to go for order and justice to prevail.

For those who are unfamiliar with the reference, section 230 is a provision of a telecommunications act that gives legal immunity to platform providers that host user-provided content [0]. Getting rid of it would absolutely kill this site and 99.99% of similar sites by effectively requiring all user generated content to go through legal review. Absent review, a malevolently minded individual could post libelous or other illegal content on a website and have the site itself be sued. It would have a terribly chilling effect on the internet as we know it.

[0] [https://en.wikipedia.org/wiki/Section_230_of_the_Communicati...](https://en.wikipedia.org/wiki/Section_230_of_the_Communications_Decency_Act)

<comment><USER6> I don't think anyone wants to completely get rid of 230, but it should be narrowed. I think an ideal compromise would be that ubiquitous mega-platforms should be held somewhat responsible for what their users post, under certain circumstances.

If a platform is already protectively policing and curating content, then they are not really a platform, they are more of a publisher.

Companies like Facebook and YouTube should absolutely be open to lawsuits for what users post. They are already investing significant resources in regulating what users post anyway, so they are taking responsibility for it.

I think even large websites should still get full 230 protection, if they only have minimal moderation to remove spam or blatantly illegal content, like Craigslist. Craigslist is much more of a neutral platform than Facebook.

<comment><USER7> They're investing significant resources in regulation because the public and lawmakers have demanded they do. Craigslist can afford to be more neutral only because nobody's trying to organize cyberbullying campaigns or Rohingya genocides through Craigslist.

</comment></comment></comment></comment><comment><USER8> Reminds me of the Reply All episode about locksmiths & Google Maps ([https://gimletmedia.com/shows/reply- all/o2ho87](https://gimletmedia.com/shows/reply-all/o2ho87))

<comment><USER9> Interestingly enough, Google responded to that with a product offering: [https://www.google.com/search?q=google+certified+locksmith](https://www.google.com/search?q=google+certified+locksmith)

Not sure how well it works, as I haven't needed a locksmith in a long time. But for what it's worth, there is that.

<comment><USER10> Nothing comes up related to what you described, I just see a bunch of listings for Angie's list.

<comment><USER11> You might need to disable your ad-blocker

</comment></comment></comment></comment><comment><USER12> And YouTube was built on exploiting flagrant copyright infringement, making it easier than ever for the masses.

</comment><comment><USER13> It is such a difficult balance to be had since by taking a position of trying to resolve any/all frauds in the platform, they create a can of worm that is difficult, if not impossible to fill. The failure of finding all the frauds, illegal activity would prohibitively expensive, if not destructive to the platform itself (Think false-positives, etc).

For them, it is better/easier to say "we have the platform, we remove what we are legally bound to remove, everything else is on the user to be mindful of".

</comment><comment><USER14> I mean so does Amazon, Uber, Airbnb, FedEx, and any other service provider who hasn't 100% eliminated fraud (which is all of them).

</comment><comment><USER15> Why is there so much attention on Google?

It's market cap is $800B. Amazon and Microsoft are roughly $1T. Facebook is $600B.

We're not a bunch of rubes here, to have this many articles proposing sanctions and/or breakup of Google has all the fingerprints of coordinated action. It's less than a month after the US president saying he would sue them because he felt they didn't give conservative sources favorable enough index ranking.

This has a stink to it.

<comment><USER16> > Why is there so much attention on Google?

Amazon declared tomorrow "Prime Day" and a lot of workers are striking today and/or tomorrow.

Throwing shade at Google _would be_ a good way to keep technical people from paying attention to the plights of workers.

But it could also just be a coincidence.

<comment><USER17> > But it could also just be a coincidence.

It's not Prime Day, and there's bad press about Google. It's Prime Day, and there's still bad press about Google. Prime Day is over, and there will continue to be bad press about Google.

The word I'd go for isn't "coincidence." It's something more like Captain Obvious.

</comment></comment></comment><comment><USER18> I cannot wait to publish our stats on how effective google captcha is blocking bots.

<comment><USER19> Let me guess, 0%? :-)

<comment><USER18> We beat recaptcha v3 50% of the time v2 about 20%

</comment></comment></comment><comment><USER20> Just me or is the biggest company that likely has the highest % of their revenue generated illegally AirBnB? By "illegal" I mean the listing does not conform to local, state, and/or federal law for rental/vacation home rentals.

I've never heard of a situation where busted million-dollar rings of illegal AirBnBs ever resulted in the company being forced to refund fees.

<comment><USER21> How quaint: a comment in a post critical to Google, by an account created an hour ago, bashing not-Google.

</comment></comment><comment><USER22> How about eBay and Amazon knowingly selling counterfeit goods to the tune of billions? Or Craigslist for sex workers?

I'm sure none of these companies started out with the intention of profiting from illegal or immoral activities, but once they notice that prophet bump, it becomes difficult for them to make changes, especially if no one really cares or complains too much...</comment>