Telegram Login for Websites - <AUTHOR> https://telegram.org/blog/login <comment><USER2> By building a phenomenal chat app and gradually (deliberately) building features around it to create a complete WeChat-like ecosystem, Telegram will probably improve people's uptake of chat-centric utilities in the markets they're targeting.

I think the fundamental component to their success is just how snappy and 'live' their chat conversations feel. Everything including their backend perf, chat bubble animations, etc seems to be finely tuned to make conversations feel alive and active.

<comment><USER3> Interesting that the official Telegram client gets mocked a lot for how bloated its code is.

And it absolutely is, from a 2 minutes look at their code :

\- their chat activity is 12000 lines of code : [https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/...](https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java)

\- it looks like they have copy pasted tons of Android library like exoplayer directly in their repo

It does work very well though !

I guess that they have an extremely small team (or just one persone) and it is their first Android project.

It looks like they have acqui-hired a competing chat client (Telegram X), so it looks like they have a solution to clean this mess.

<comment><USER4> Curious why typecast if instanceof is checked already ? Wont the compiler know of this already ?

      if (view instanceof ChatMessageCell) {
      .......
       ChatMessageCell cell = (ChatMessageCell) view;
      ....
      }

<comment><USER5> It's essentially just how Java works, and isn't that uncommon in statically typed procedural languages.

The `view` variable is still a reference of the parent type (Say `MessageCell` for now, can't be bothered to find that part in the code), and `MessageCell` references can only do certain things.

It's possible to check what the type of the underlying object is with `instanceof`, but that doesn't change the type of the reference.

If you want to do things that only a `ChatMessageCell` can do, you need to make a new reference of that type.

</comment></comment></comment></comment><comment><USER6> I don't use WhatsApp. I use Telegram almost always and am impressed with the speed of development and introduction of new features. In my limited trials with Wire and Signal, Telegram just blows them out of the water in features, reliability and speed. I know the background about its crypto being criticized, but until other apps catch up, I can't move to them. I've already spent a lot of capital to push a few people to use Telegram and haven't regretted that move from an user experience point of view.

On topic, I don't like these third party login systems much. Yes, they could provide better security compared to what smaller websites with less competent teams could, but associating a login with a provider also means I'm putting more eggs in one basket, so to speak. I also don't like the privacy implications, regardless of what Telegram states. It's sad that Mozilla Persona didn't take off and was shelved. It seemed like the best solution for this requirement.

<comment><USER7> _> In my limited trials with Wire and Signal, Telegram just blows them out of the water in features, reliability and speed._

When you say features, which ones do you mean? Do you mean the user interface?

<comment><USER8> I personally love their bot API and the option to create custom stickers.

Although not "features", having an open API for writing clients for whatever platform I choose and the fact that their official clients are open source are also a big plus.

<comment><USER9> So you use an encrypted messenger, but your choice on encrypted messenger is influenced not by the quality of the crypto implementation but rather by the ability to add bots and custom stickers.

Why don't you just use Snapchat?

<comment><USER10> To be fair telegram is probably better than snapchat as a messenger.

</comment></comment></comment></comment></comment><comment><USER11> But doesn't this mean you're really logging in with your phone?

It's 2018. Why are we still trusting the phone network for anything related to authentication? Surely companies like Telegram can't use the excuse that they didn't know how horribly insecure SMS and the phone network in general is, no?

I don't know how Telegram does it, but it keeps picking the wrong security options. It's like a gift they have.

<comment><USER12> No, in Telegram the phone number is used only as a sort of username. You can login to Telegram just with a password and the 2FA token gets to you inside the appp itself. Not SMS.

<comment><USER13> If you don't have a 2FA password enabled and you're not online on another device you _can_ login with your phone number.

</comment></comment></comment><comment><USER14> Thanks, but we don't want another Google knowing and keeping all our data, even websites that we visit.

<comment><USER15> All of your data? At best, they know the URL of any pages where this widget is visible. Not all websites, and not even a large subset of that site's pages.

This isn't like a Facebook share widget, which is usually so ubiquitous, they really _can_ know all the sites you visit.

<comment><USER16> That's how every now-ubiquitous thing starts. It used to be other things. Most of them are gone now. Something will take the place of the Twitter and Facebook buttons some day.

</comment></comment></comment><comment><USER17> While this is very clever, I'm not a fan of the implementation. I wish there was a documented oauth2 option and not just an iframe and some script. Script seems innocuous but Im not a fan of having the iframe on my page, and its hard to control the style. Obviously we can reverse engineer this a bit but I would prefer to just have a more robust API w/ proper docs.

</comment><comment><USER18> > Telegram Login for Websites

Or in other words: We are ready to sell your private data now. Because that's what actually happens when you login to another website via Telegram login.

<comment><USER19> That's nonsense.

First, it's you who decide to use telegram to login to a website (as you would login with Facebook / google).

Secondly, you see what informations will be shares with the website.

Lastly, there is no money involved. It's totally free to use.

<comment><USER7> _> First, it's you who decide to use telegram to login to a website (as you would login with Facebook / google)._

Yes, this is implicit in what the parent is saying. The point is, your data can be shared _if_ you volunteer it by using this feature.

 _> Secondly, you see what informations will be shares with the website._

At a minimum, you are sharing the fact that your identity logged into the application. A profile of logins associated with your identity can be built, and a profile of how many Telegram users logged into a particular website can also be built. Both (and particularly the latter) are valuable.

 _> Lastly, there is no money involved. It's totally free to use._

This has nothing to do with whether or not your data is actually shared or sold with third parties.

I'm not necessarily agreeing with the parent that Telegram is going to start selling user data, but your arguments here do nothing to diminish the fact that they _could_ do so en masse. A graph of your logins should probably be considered "private data."

<comment><USER19> Of course they could sell all your data to third parties.

But it has absolutely nothing to do with this feature as the parent comment was implying. This feature involves no selling whatsoever.

<comment><USER7> I don't follow what you're arguing. It seems you're agreeing - yes, Telegram _could_ sell the login data.

The commenter you replied to was expressing a (snarky) hypothesis that Telegram will sell login data. You initially said this was nonsense, but are now saying that they could do so. That's basically the point.

<comment><USER19> I'm just saying that implying that this feature would mean telegram start selling user data is nonsense. This is what the first comment was implying.

Ofc telegram can sell user data like any other company, and may be doing it for months for all we know.

</comment></comment></comment></comment></comment></comment><comment><USER13> Telegram's security is a joke. They show the first and last letter of your password and the length (the number of asterisks they put in the middle changes) when you sign in. Next to some pretty bad implications (do they store the password in cleatext or just the length and two letters?) , that password is down to about 1/5 of its original entropy. Told them a year ago, they don't seem to care.

EDIT: Yes, Telegram uses passwords if you enable them. This is what the questionable query looks like: [https://i.imgur.com/BAnddlg.png](https://i.imgur.com/BAnddlg.png)

<comment><USER20> They do? On which login do they show that information? I've only seen the kind-of two-factor one where you have to enter a code sent in a text message or with a telegram message to a different device.

<comment><USER13> Took a while for me to reinstall it, this is what it looks like (just after SMS auth):

[https://i.imgur.com/BAnddlg.png](https://i.imgur.com/BAnddlg.png)

I counted the asterisks, they do in fact reveal the length of the password.

<comment><USER21> Hint is a text field that _you_ fill in when creating a new cloud password. The hint text is generated based on password if you did not fill it yourself.

<comment> X-Istence > The hint text is generated based on password if you did not fill it > yourself.

That... is a problem.

</comment></comment></comment></comment></comment><comment><USER22> Reminder: Telegram's crypto is bogus, and use of this app should be continually and consistently discouraged.

It is a car with seatbelts that don't work; a car without any seatbelts is better.

<comment><USER23> Are there known vulnerabilities or do you mean the missing audits and security through obscurity approach? Because bogus in this context is a very strong word.

<comment><USER22> It's not end to end encrypted by default. This is the baseline standard for an encrypted messenger in 2018.

<comment><USER23> Its not if you focus on searchability and group chatting (Stripe, Discord, WeChat) so literally the biggest 3 players if you ignore the Facebook stack (And Facebook hasnt mastered encryption either, plus took very long to even try).

</comment></comment></comment></comment><comment><USER24> I wonder what the people who are railing about Kaspersky think about this development.

<comment><USER25> Sure, since you asked: It's bad. Don't use this.

</comment></comment><comment><USER26> Would love to see this added to Firebase.

</comment><comment><USER12> EDIT: For clarity, the comment below has nothing to do with Telegram Login, but Telegram itself.

Telegram gets a lot of hate on HN, but I have to say that of all large messaging apps Telegram has by far the best UX. That said, I can see it slowly turning into a walled garden. For example, in public channels (distinct from groups, they're broadcast only) it should be possible to link to their content from the outside. Instead if you try that they force you to download the app to see the content. EDIT2: As someone noted you can link each individual post on a channel, but you can't see and scroll through a list of posts as you can from inside the app.

I wish we had a messaging app with a market as large as WhatsApp's, UX as good as Telegram, security as good as Signal, run by an organization like Mozilla.

<comment><USER27> _> I wish we had a messaging app with a market as large as WhatsApp's, UX as good as Telegram, security as good as Signal, run by an organization like Mozilla._

An open protocol is a prerequisite. There's a 2018 IETF proposal for interoperable E2E messaging, initiated by Cisco, Google, Facebook and Wire:

Architecture: [https://datatracker.ietf.org/doc/draft-omara-mls- architectur...](https://datatracker.ietf.org/doc/draft-omara-mls- architecture/?include_text=1)

Protocol: [https://datatracker.ietf.org/doc/draft-barnes-mls- protocol/?...](https://datatracker.ietf.org/doc/draft-barnes-mls- protocol/?include_text=1)

 _" Messaging Layer Security (MLS) ... is not intended as a full instant messaging protocol but rather is intended to be embedded in a concrete protocol such as XMPP [RFC3920]. In addition, it does not specify a complete wire encoding, but rather a set of abstract data structures which can then be mapped onto a variety of concrete encodings, such as TLS [I-D.ietf-tls-tls13], CBOR [RFC7049], and JSON [RFC7159]. Implementations which adopt compatible encodings should be able to have some degree of interoperability at the message level, though they may have incompatible identity/authentication infrastructures."_

<comment><USER25> It's not a good plan. They propose to design, _de novo_ , in an open standards group, a cryptographic secure group messaging protocol based on a design that has never been deployed at any scale. The underlying design is cool --- it's basically Asynchronous Ratcheting Trees, which was presented in a paper at RWC just a few weeks ago. That's how _de novo_ this particular "standards" effort is: the underlying theory is just 28 days old.

Already, in the _starting point draft_ , it's been crudded up: it has "ciphersuites", and comes with support for the NIST P-256 curve --- despite the fact that the underlying design wants to take byte strings to curve points, which is tricky to do on the P-curve. It will only get worse from here. They'll figure out some reason to bolt a PAKE onto it soon enough.

Signal Protocol is exceedingly well-documented (and even before those documents were written, it was open enough for Wire to lift the protocol wholesale).

The IETF is bad at cryptography. Your default position should be distrust of IETF crypto standards.

<comment><USER27> Can Signal contribute to the IETF design, discussion and documentation?

<comment><USER25> Since the underlying standard is really a political maneuver meant to thwart Signal, this seems unlikely.

(I like my source on this, but can't share it; I expect to be able to this year, though. In the meantime:

0e49002152a374d9c11251cf856a7ccf25ef9bd0db54c3e97bef2a4109dad4f0)

<comment><USER27> Isn't Facebook (Messenger and Whatsapp) already using Signal Protocol at scale?

<comment><USER25> Yes.

<comment><USER27> Why would Facebook by trying to thwart the open Signal protocol that they are already using? In a standards discussion like IETF, wouldn't they be more likely to specify Signal interoperability (i.e. Facebook Messenger and WhatsApp interoperability) as a requirement on any proposed standard? That would be good for Signal.

<comment><USER25> 1\. Facebook is a big place.

2\. Facebook's interests in the standard are not necessarily what drives the standard; Facebook can just be along for the ride.

I think what's going to happen with this is what happens to all de novo IETF designs other than TLS, the one that the market requires actually work: it's going to fail. That's also the outcome that I'm hoping for.

In the meantime, if Millican wants to get together with Katriel Cohn-Gordon and do a Facebook-only ART protocol design for Facebook Messenger, with an eye towards replacing Signal Protocol in WhatsApp, _that_ would be a great development. So would a Cisco-only ART messenger, or maybe even a Mozilla ART messenger (though Mozilla's motives are the ones I trust least here).

What does not make sense is for a protocol whose service model we barely understand even in theory to be designed from scratch in an open standards group. The IETF motto used to be "loose consensus and working code". Now it's "take an RWC paper, add the P-curves to it, and use it to fuck over the most successful secure messaging protocol".

We shouldn't be cheerleading this. It's capture, not progress.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER28> > our widget asks for your phone number

I'm good.</comment>


Cars for Comrades: The Life of the Soviet Automobile (2009) - <AUTHOR> http://www.history.ac.uk/reviews/review/722 <comment><USER2> This was a fun and well-written book.</comment>


Got Flash? Got Silverlight? Make a FlashLight - <AUTHOR> http://blog.innerfence.com/2008/07/28/got-flash-got-silverlight-make-a-flashlight/

<comment><USER2> Banking on Silverlight is silly. Penetration is hideous.

<comment><USER3> Banking is strong - this is just one of the ways to upload.

Obviously, if we could do what we want with ubiquitous Flash, we would. But since we can't ...

Silverlight's first time install is actually quite reasonable - it doesn't even require a browser restart. And we've had more people try it than I would have believed.

The landscape is always changing. At some point Flash 10 will be a reality. Since it's just the two of us, we're paying a lot of attention to the shifting landscape (for example, Yahoo's recent stuff). If and when a better alternative is available, we will definitely switch to it.

</comment></comment><comment><USER4> Blizz. Much better.

</comment><comment><USER5> sounds too much like fleshlight

<comment><USER6> I have to wonder, what do you do during a blackout? Do you just sit there giggling?

On second thought, I probably don't want to know.

<comment><USER5> grow a sense of humor, you'll live longer</comment></comment></comment>


Ask HN: Deploying Jira and Confluence on-premise? - <AUTHOR> Hi HN-ers,
Is anyone familiar with deploying Jira/Confluence on premise? How does the software get packaged and deployed?
Thanks in advance. <comment><USER2> regret every hour replacing our Bugzilla with those monstrosities. the perl hacks and occasional maintenance were a cheap price vs the usability nightmare we have now

<comment><AUTHOR> Interesting. What were the usability issues you faced?</comment></comment>


On Being a Management Consultant - <AUTHOR> http://www.betsym.org/blog/?p=290 <comment><USER2> Considering the author is a Rhodes Scholar, she sounds incredibly risk-averse.

Working for a top management consulting firm is a great signal of your competence to future employers. But if you already have such markers (Rhodes Scholar, MIT, for the author) you will not gain much, especially if you do not enjoy the job.</comment>


Show HN: RESTCharts – Generate charts quickly and easily through a REST-like API - <AUTHOR> https://www.restcharts.com/ <comment><USER2> Looks good! One feature that would definitely get me using this for personal projects is the ability to add/customise axis. You might already have this, but I didn't see it in any of your examples, so if this is present, please advertise it!

My general reaction when seeing a chart without axis is "pretty, but I can't see what it means", where as with decent labelled axis I can dig into it and look at data points, and come to my own conclusions about the data.

Still, this is a useful service that could make life much easier - keep at it!

<comment><AUTHOR> EDIT: HN is doing some escaping to my example URL, so I adjusted it a little below.

Author here, thanks for the feedback!

My default use case was to use these images as background-images (via CSS) in dashboard widgets that show an accurate trend for how data has changed over time. Therefore my defaults were to hide to x and y-axis and make the chart margin 0 to fit in the widget and look "nice" across the entire thing.

But if you are or become familiar with the Highcharts chart config options, you can update any option you want for the axis via the `raw` param (see more detailed info on the params in github: [https://github.com/whatl3y/restcharts](https://github.com/whatl3y/restcharts)). One thing you could do to one of the simple charts provided on the landing page to show the axes is override the default margin values (which is margin: [0, 0, 0, 0]) and make the x-axis and y-axis visible like so:

where [raw]={"xAxis":{"visible":true},"yAxis":{"visible":true},"chart":{"margin":null}}

your URL would become

[https://localhost/chart/line?data=5,1,2,9,8,3,0,0,4&raw=[raw...](https://localhost/chart/line?data=5,1,2,9,8,3,0,0,4&raw=\[raw\])

You can obviously continue to add config to adjust the language on the axes among other things. I realize this could get a little verbose quick, but again the idea was to make a simple, quick view of data, even though you could technically get as complicated as you want with the `raw` param.

</comment></comment><comment><USER3> This is neat. Was looking for something like this for Xmysql[1] - which has a CHART API to fetch 'numeric column distribution' in MySql table. The data from Xmysql-chart-api[2] can then be fed to this. Will give it a try over weekend.

[1] : [https://github.com/o1lab/xmysql](https://github.com/o1lab/xmysql) [2] : [https://github.com/o1lab/xmysql#chart](https://github.com/o1lab/xmysql#chart)

</comment><comment><USER4> Will this work in emails?

If I put this URL in img tag in a html email, the clients and browsers (if they are configured to allow external images) will this show up?

<comment><AUTHOR> Great question, and the answer is yes it will (this is one of the most useful features I feel). I encourage you to try and test an image with your email :). The chart endpoint responds with a raw PNG buffer and a Content-type header of image/png, so it would act just the same as if it were a static asset image in a public folder or CDN.

</comment></comment><comment><USER5> An interesting addition could be a semicircle pie chart.

It's very common to see them in dashboards and in the news when reporting election results.

Making them look ok in {qlikview,tableau,etc} it's a bit time consuming.

<comment><AUTHOR> Thanks for the feedback! You can use `raw` parameter to configure any type of Highcharts chart you want (review GH for more info: [https://github.com/whatl3y/restcharts](https://github.com/whatl3y/restcharts)).

It looks like Highcharts already supports a semicircle donut, so you could take the entire config object, `encodeURI(JSON.parse([config]))` it, and add it to the &raw= parameter to draw a semi-circle donut: [https://www.highcharts.com/demo/pie-semi- circle](https://www.highcharts.com/demo/pie-semi-circle)

A working use-case within RESTCharts is as follows (shortened with google so the link doesn't break): [http://goo.gl/NbJtqX](http://goo.gl/NbJtqX)

</comment></comment><comment><USER6> What about the old [http://chartspree.io/](http://chartspree.io/)?

<comment><USER7> I tried chartspree, none of the examples are working on the website.</comment></comment>


Future versions of macOS won't include scripting language runtimes by default - <AUTHOR> From the macOS 10.15 Beta Release Notes:<p>> Scripting language runtimes such as Python, Ruby, and Perl are included in macOS for compatibility with legacy software. Future versions of macOS won't include scripting language runtimes by default, and might require you to install additional packages. If your software depends on scripting languages, it's recommended that you bundle the runtime within the app. (49764202)<p>[1]: https://developer.apple.com/documentation/macos_release_notes/macos_10_15_beta_release_notes <comment><USER2> From the list of 'OMG they're doing what?!' that comes up on apple, this is probably the least heinous, the runtimes they bundle are so horribly out of date no-one really depends on them being present for anything more significant than 1-2 line scripts, which could probably be rewritten in AppleScript or Bash anyway. Pretty much anything of worth always says 'First, get python from ...'

<comment><USER3> True, but it's aggrevating that Apple never bothered to do this properly themselves. Plenty of developers have macbooks and I would think it's enough market share for them to ship newer versions or at least heavily support homebrew.

</comment></comment><comment><USER4> Annoyingly, Homebrew installation (one of the best ways to get these scripting languages installed) assumes you already have Ruby installed. I wonder if they'll finally rewrite the install script in pure Bash.

</comment><comment><USER5> Anyone I know who does serious development work never uses the default runtimes anyway. It's always best to just install RVM/rbenv, anaconda etc and configure it yourself.

<comment><USER6> You're right, but this is a bit irritating. Whenever I'm in need of a calculator on someone's Mac I just start python in a terminal and type in expressions to be evaluated. It was nice to be able to find it on any Mac and so much nicer than clicking on a calculator's GUI buttons.

I can use the bc command instead (it's an old Unix command) but it's far less handy. See it's man page.

There's also dc, the even less used reverse Polish notation calculator. It is a standard Unix command that predates bc.

The dc "language" is older than the C, Awk, Perl, or any other programming language still found on Unix systems. It is written in C's predecessor, the language B.

You can tell that bc and dc are early Unix commands from their names, just two characters long.

<comment><USER7> Spotlight search is pretty neat as a calculator. Command-Space then type your expression.

</comment></comment></comment><comment><USER8> I think this is a great idea, security-wise. I prefer my installations to have as few attack vectors as possible. So having as few things enabled/installed by default is awesome.

</comment><comment><USER9> One really nice thing about Linux is that Perl, Awk, and Python are installed on most versions and I can script without thinking about it.

<comment><USER10> And that is also awful in so many other ways.

<comment><USER11> How so? Other than being when all you have are scripting languages everything looks like a nail.</comment></comment></comment>


How do I find Enterprise bandwidth for my business? - <AUTHOR> I'm curious where people turn to when their infrastructure begins to require gigabit and beyond speeds. Are there places where you can move your servers to tap into existing infrastructures or are there ways of getting the very-high-speed internet right to your place of business?<p>I'm specifically looking in the Los Angeles area, but perhaps general solutions might help people in other areas as well. <comment><USER2> Talk to a datacenter.</comment>


Upgrading PostgreSQL on AWS RDS with minimum or zero downtime - <AUTHOR> https://medium.com/preply-engineering/postgres-multimaster-34f2446d5e14 <comment><USER2> Interesting article.

Note that you cannot do this for a major upgrade with the Aurora offering AWS is pushing.

There is literally nothing else except pg_dump/pg_restore for upgrading major versions on Aurora.</comment>


Jeffrey Epstein's mystery bank came alive after his death - <AUTHOR> https://www.nytimes.com/2020/02/04/business/jeffrey-epstein-estate-bank.html <comment><USER2> _Records filed by the estate on Friday indicate that Southern Country had $693,157 in assets when Mr. Epstein died on Aug. 10. Then, in mid-December, the estate transferred $15.5 million to Southern Country in two checks. Southern Country sent back $2.6 million, leaving the total it received at $12.9 million. The documents filed by the estate do not give a reason for the transfers._

 _It's also not clear what Southern Country did with that money. Two weeks later, the year-end value of Southern Country's assets was $499,759, according to the estate's filings._

So ~$12.5M transferred after his death is missing an unaccounted for? That's pretty outrageous. Are there methods for tracking that money down? The article doesn't really say anything about an investigation into its whereabouts.

<comment><USER3> It's really hard not to jump down the rabbit hole, but how else to explain the lax "investigation". There's millions of dollars moving around and nobody cares? Of course they could track this down. But the Virgin Islands isn't going to implicate themselves in this. They consider themselves a victim too (metoo!). I'll just leave my comments there.

<comment><USER4> Why do you say no one cares? It sounds like the judge cares. Obviously the New York Times cares too.

> a magistrate judge, Carolyn Hermon-Purcell, questioned the estate's lawyers > about the transfers to Southern Country, saying the disclosure was not > satisfactory. The judge said she did not know why Southern Country would be > receiving checks from the estate. "There's no explanation for it," she said.

> A lawyer for the estate responded that some of the payment had been made in > error, but the judge was not satisfied with his response and asked him to > follow up with a fuller accounting.

</comment></comment></comment><comment><USER5> I've reluctantly come to the conclusion that the simplest explanation for investigations being constantly spiked or important evidence repeatedly disappearing during Epstein's life, is that enough high-ranking officials got invited to "parties" and slept with his underage sex slaves (or worse) on video, and were then blackmailed. The fact that even _after_ his life there aren't gobs of collaborators being arrested also leads me to think that he wasn't even in charge of the whole thing.

<comment><USER6> I am not normally a conspiracy theorist.. but I have come to suspect the same.

One example, despite all that has come up in the this case, and the number of times Ghislaine Maxwell's name has been brought up, there is no word of her whereabouts. Unless we think she is some Jason Bourne level expert that can just make herself disappear, I can think of only three explanations -

1) The law enforcement agencies are choosing not to find her and track her down for some reason. 2) She is being kept hidden (willingly or unwillingly) by someone else who has the means and ability to do so. 3) She is already dead and her body will turn up at some point.

The thought there could be such types of 'cover ups' in the western democratic world is very scary. I was always certain this stuff only happened in the movies, now I am not as sure about that.

<comment><USER7> Your surprise that this happens under democracy- does that change your political views?

It doesn't change mine. The government is notorious for being corrupt and inefficient.

I hear this and it makes me horrified of the thought of government takeover of a sector.

<comment><USER8> >The government is notorious for being corrupt and inefficient

So is the private sector. Excellence is rare. Such is life, welcome to earth.

<comment><USER7> The private sector goes out of business. The government lives until it collapses.

<comment> siv- > lives until it collapses.

Usually due to government intervention.

Corrupt and bloated businesses also "live until they collapse". I trust in democracy more than markets.

<comment><USER9> > I trust in democracy more than markets.

I don't. People vote against their best interests all the time. The SF housing market is self-inflicted from people voting against new housing, because many of them don't understand the concept of supply and demand.

Neither markets nor democracy are perfect, but at least free markets are efficient.

<comment><USER10> > many of them don't understand the concept of supply and demand.

Or they understand supply and demand perfectly well, and figured out that if they legislatively block new development, fixed supply + growing demand = rising home prices = better investment.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> Let me wonder aloud here. The story goes that Epstein was a Mossad puppet in an operation that served to control the richest, most powerful and influential, most well-connected people alive, to extent to significantly affect things on global political stage. That operation was successfully going on for decades. (That's impressive, but wouldn't really surprise me, as we know for a fact that some even more impressive success stories of several government intelligence agencies dismissed as "conspiracy stories" for decades turned out to be true.)

Then, this very valuable asset (virtually untouchable for some very high- profile people) gets compromised because some _nobody_ accused him of "sexual abuse". There is an investigation, arrest, conviction, yet nothing really leaks, he gets off relatively easy, his masters don't think it is necessary to get rid of him and the whole (pretty public by now, with multiple very famous people low-key-affected) goes on in this messy way for 15 years.

After 15 years he suddenly gets arrested again, this time for good, the whole story gets incredibly public, his bosses suddenly (again, 15 years) realise that he is a liability and decide to get rid of him. He gets killed in a cell by Mossad agents, this is staged as a suicide, which is another "conspiracy theory" for a short while, but in the end we all know that Epstein didn't kill himself. Key evidence disappears and the case is covered on multiple levels, leading up to some very high ranks.

Ok, there are plenty of really really suspicious inconsistencies in that story already, but here's what really baffles me: how come this very well-organized, lead by world-class professionals and covered up by incredibly influential people (both on the "offending" and "blackmailed" sides) operation gets "cleaned up" in a way such that every fucking couch potato in the internet (HN included) sees that this is obviously staged? Mossad cannot silently get rid of people?

I mean, of course everybody (again, HN community members _especially_ included) loves to think they are wa-ay smarter than some Mossad goons and dirty politicians covering this up. But seriously. How can this possibly be so obvious (yet still so mysterious! — we really know nothing in paricluar) unless somebody really wants it to be obvious?

<comment><USER12> "That's impressive, but wouldn't really surprise me, as we know for a fact that some even more impressive success stories of several government intelligence agencies dismissed as "conspiracy stories" for decades turned out to be true."

I would be interested in these, any Wikipedia links?

<comment><USER13> the only reason why MK Ultra was discovered was through a cache of just under 100k files that were supposed to be destroyed but ended up being found on accident. This forced the CIA to shut it down after it being unknown to the public for over 30 years. aka we don't really know how far back it goes and most likely will never understand the entirety of its reach. The Water gate scandal had everyone in the CIA destroying everything under strict rules if my memory serves correct.

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

<comment><USER12> Where would the conspiracy therory on MK Ultra be? That the CIA has a research programm using drugs and psychology to find a truth serum against spies of the Soviet Union? And people said this is a conspiracy theory and then the Church commission proofed it not to be one?

How would the Phoenix Program also be a conspiracy theory?

Where is the difference between a secret government agency program and a conspiracy?

</comment></comment></comment></comment><comment><USER14> Epstein may have the record for pimping at scale. There have been pimps for several thousand years. There have been pimps using blackmail. That's not new.

Becoming a billionaire with a private island that way, though - that's new.

<comment><USER15> You hope it's new. I don't think there's anything that he did that couldn't have been done by someone else in the past 2-3000 years.

</comment></comment><comment><USER16> >"Bank regulators expect applicants to be candid,"

Jesus wept. Is this it? That's the level of scrutiny?

<comment><USER17> I know, right? I read this:

"As a bank regulator, I'd be outraged to learn that an applicant had misled me in that way."

And laughed out loud. I feel insulted just reading that.

</comment></comment><comment><USER18> [http://archive.is/g7OGd](http://archive.is/g7OGd)

<comment><USER19> Off-topic but for some reason i'm now able to access archive.is via Cloudflare. Queries using 1^4 over DoH are only failing about 1/2 of the time (datacenter ATL).

<comment><USER20> me too, but only after solving 20 captchas - classic clownflare :)

<comment><USER21> The number of captchas for the "I am not a robot" checkbox you have to solve is decided by Google's algorithms -- not really a Cloudflare choice other than them allowing their users to show that Captcha page in the first place.

</comment></comment></comment></comment><comment><USER22> Is it that easy to start a new bank?

<comment><USER23> Ehhh, it can be (there used to be ads in the back of the Economist for this sort of thing). The hard part is getting correspondent relationships with bigger banks (i.e. a bank account for your bank).

The difficulty of that exercise is supposed to be directly proportional to the AML/KYC reputation of the jurisdiction granting the charter.

Exceptions abound, of course, and possession of incriminating video of a bank executive might make it a lot easier.

</comment></comment><comment><USER24> Amazing how millions of dollars just disappear and no one knows where it went.

</comment><comment><USER25> I heard Epstein wanted to have tons of babies in some weird Boys from Brazil scenario. Did he end up doing that? Is this money going to support them?

</comment><comment><USER26> there is a strong case to be made that Epstein could still be alive.

Per interviews with the victims he video recorded EVERYTHING at his properties. Pinhole cameras, CCTVs in bedrooms/showers etc you name it.

Chances are in order to protect himself - he had blackmail material on people we all know. If acts described by the victims were secretly taped then those people are royally (pun intended) screwed.

Now the real question is - who in the world is capable to pull off an escape from a prison / suicide / body double swap?

"I was told Epstein 'belonged to intelligence' and to leave it alone."-Alexander Acosta, the former U.S. attorney in Miami.

So the answer is - CIA.

Epstein's buddy Bill Clinton has a "dirty" drug / CIA connection from his Mena / Arkansas days going back to the 80's (it was widely publicized, refer to the book " Crossfire: Witness in the Clinton Investigation").

CIA is the only organization capable to get Epstein out and safe / get him new identity and help disappear.

The truth? We will never know.

<comment><USER27> > [https://www.washingtonexaminer.com/news/alexander-acosta- > dod...](https://www.washingtonexaminer.com/news/alexander-acosta-dodges- > when-asked-if-jeffrey-epstein-was-an-intelligence-asset)

This is something I had not read before. Thanks for bringing it up.</comment></comment>


The Use of assert() in SQLite - <AUTHOR> https://www.sqlite.org/assert.html <comment><USER2> I'd like to mention Go. This seems to me like a pointless quibble about how to catch and handle errors, the kind of argument you see buried in the HN comments and gloss over because you've heard it a bunch of times before. The assert() macro in C is roughly just if ... { panic() } in Go. You want that, use it. So the idea that getting rid of assert is "essentially telling developers that they are not allowed to do run-time verification of invariants" is completely nonsensical.

The Go philosophy against assert() and assertion libraries is largely that the error messages produced by assert() are low quality. The idea is that you should not just have a stack trace, you should have a good error message. The assert() macro can give you a stack trace with some effort, but rarely gives you a good message. Good use of panic() is easy and gives you both. It's also used mainly for runtime invariant checking, although there are some other ways it can be used (since it can be caught).

<comment><USER3> > _The assert() macro in C is roughly just if ... { panic() } in Go_

The article very clearly says that (unlike normal C behaviour) it's a no-op in release builds of SQLite, because otherwise they get a ~3x slowdown. Does Go compile away those `if` statements?

<comment><USER4> I find the fastest way to introduce bugs into programs is to compile programs differently in development than in production. It also warps developer's perspectives of how their program performs. As they say at NASA, "Test what you fly, fly what you test."

That said, you can do this easily enough in Go. Define a package:

      package debug

      const Debug = true

      func Assert(cond bool, msg string) {
            if Debug && cond {
                    panic(msg)
            }
      }

Have your build system generate the file that contains Debug = true. In optimization mode, make it Debug = false. As it is const, the compiler will propagate it, Assert will be inlined and the dead code removed. If you don't like relying on the compiler, have your code generator generate empty Assert functions. If you are working in a very bad code base that catches all panics, you'll need an extra 5 lines of code in the implementation of Assert, and your stack traces won't be pretty. (Roughly: put the condition check in a goroutine, block the Assert call on a channel signal from that goroutine.) I'd recommend the first project be to remove those panic catch-alls.

But really, all of this is only appropriate when you are far out in the weeds. Ship your program with those asserts. If they are too slow for production they are too slow for development.

<comment><USER5> That will still evaluate the cond in all cases. Passing a func will make it lazy but might have performance implications (I'd have to test it).

<comment><USER4> It won't, because of inlining and dead code removal. (At least, it didn't back around Go 1.11 when I last tested this.)

<comment><USER5> Maybe if the thing that is generating the cond at the call location is inline- able, but not if it's doing an expensive operation.

[https://play.golang.org/p/Ts6QqRrWwuQ](https://play.golang.org/p/Ts6QqRrWwuQ)

I couldn't get that to not trigger the lock.

[later] I could get it to remove it if you pass in a func instead.

<comment><USER6> Your Cond() has a side-effect. It can never be optimized away.

<comment><USER5> Correct. Which is one of the differences between this approach & macros. Though the lazy approach appears to work.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> > The CORRUPT_DB macro is used in many assert() statements. In functional > testing builds, CORRUPT_DB references a global variable that is true if the > database file might contain corruption. This variable is true by default, > since we do not normally know whether or not a database is corrupt, but > during testing while working on databases that are known to be well-formed, > that global variable can be set to false.

This is interesting - this really reveals their philosophy where they assume that until proven to be good, stuff is considered to be broken.

</comment><comment><USER8> Not only does zig embrace this philosophy, it introduces the concept of "language-level assertions". For example, integer operations, both signed and unsigned, assert that no overflow occured. Likewise many of the casts, such as non truncating integer conversion, assert that the numerical value is unchanged.

In safety-protected build modes assertion failures trigger a panic, which is globally overridable, but the default behavior is to print a full stack trace.

Finally, the assertion behavior can be modified at any scope. So one can identify the performance bottlenecks and turn assertion failures into undefined behavior.

</comment><comment><USER9> For reference, they use this code instead of assert:

        #if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_MUTATION_TEST)
        # define ALWAYS(X)      (1)
        # define NEVER(X)       (0)
        #elif !defined(NDEBUG)
        # define ALWAYS(X)      ((X)?1:(assert(0),0))
        # define NEVER(X)       ((X)?(assert(0),1):0)
        #else
        # define ALWAYS(X)      (X)
        # define NEVER(X)       (X)
        #endif

<comment><USER10> ALWAYS and NEVER don't pass-through their values consistently as claimed in debug builds, they pass through truthiness instead, with actual values in release builds. Perhaps this would be better for _debug_ builds:

        #define ALWAYS(X) (assert(X), (X))
        #define NEVER(X) (assert(!(X)), (X))

<comment><USER11> That would duplicate X

</comment></comment></comment><comment><USER12> I've always found the name `assert()` to be particularly bad.

Many people do not know that their compilers optimise away assertions in `-O` ("release") builds.

They use assertions for control flow and input validation, which is very wrong.

I believe that could be trivially fixed by giving functions proper names that indicate what they do or what they are intended for. For example, calling such an optimised-away assertion function `debug_only_assert()` would immediately rule out such unintentional misuse.

<comment><USER13> Huh? I was worried I had been doing this wrong this whole time, but I haven't been able to replicate that with release builds.

[https://gist.github.com/technion/7c74fad9efd1f14244e25a1cee3...](https://gist.github.com/technion/7c74fad9efd1f14244e25a1cee372a0e)

<comment><USER14> In many settings, "release build" implies passing -DNDEBUG, which disables the asserts.

</comment></comment></comment><comment><USER15> > The SQLite developers believe that the lack of assert() disqualifies Go as a > language for serious development work.

Great comment.

<comment><USER16> It seemed random and out of place to me. Like some sort of Wiki vandalism.

Why do I care about their opinion of Go in SQLite dev docs?

<comment><USER17> Whoever wrote that was probably shooting from the Hipp.

</comment></comment></comment><comment><USER18> I haven't worked with a lot of code bases, but am I correct in assuming this level of precision with error handling is fairly rare? Impressive stuff.

Orthogonal: one of my favorite talking points about Erlang is the fact that nearly every line of code is an assertion, and that those assertions are always enabled, even in production.

You'd not want to use Erlang for truly high performance code, granted.

<comment><USER19> Interesting point about Erlang! Where can I find more info on that specific aspect?

<comment><USER18> If you can tolerate a video, my talk from Midwest.io covers it to some degree.

It's really just a happy byproduct of the overall design of the language and VM. The two primary features that make it happen are immutability and ubiquitous pattern matching.

[https://youtu.be/E18shi1qIHU](https://youtu.be/E18shi1qIHU)

</comment></comment></comment><comment><USER20> Ooh, I love the idea of `testcase(X)` to instrument test coverage.

<comment><USER21> I'm probably being a blockhead but I didn't quite get how the testcase macro is used in instrumenting coverage. Can you explain that?

<comment><USER22> The testcase macro is the following:

      # define testcase(X)  if( X ){ sqlite3Coverage(__LINE__); }

If the testcase(condition) always evaluates to true, the code coverage analyzer would complain that the if ( X ) {sqlite3...} statement never evaluates to false and the branch coverage drops below 100%, the converse holds conversely if it was never evaluated to true in the first place. Only if the code using the testcase macro gets repeatedly called in a way so that the testcase macro evaluates sometimes to true and sometimes to false, the coverage stays at 100%.

sqlite3Coverage() does some dummy work so that the call will not be optimized away by the compiler.

</comment></comment></comment><comment><USER23> "The SQLite developers believe that the lack of assert() disqualifies Go as a language for serious development work."

Spicy!

</comment><comment><USER24> > In SQLite, the presence of assert(X) means that the developers have a proof > that X is always true.

Almost impossible to prove anything in a sufficiently complex system such as SQLite. The difference between assert and always seems arbitrary IMHO

<comment><USER25> The difference is that assert has been "proved" to be true, while ALWAYS is merely _thought_ to be true.

<comment><USER26> I'm still uncertain what they mean by "prove" though.

<comment><USER27> sqlite has extremely thorough test coverage with something approaching 100% branch coverage and such wide production usage it's basically proven that a lot of this stuff works.

<comment><USER28> Most (all?) of the production usage probably doesn't enable the assert though.</comment></comment></comment></comment></comment>


Modeling wine preferences by data mining from physicochemical properties [pdf] - <AUTHOR> http://www3.dsi.uminho.pt/pcortez/winequality09.pdf

<comment><USER2> This would be a great startup. It would be amazing if I could walk into a restaurant with an app that told the somelier that I not only prefer my vinho verdes with an acidity comparable to Famega but a little more chalky, but actually listed the ideal mix of the specific chemicals involved. It'd be like having a painting created for you in real time to match your taste; sure it takes away from the art and the aestetic experience, but it'd be cool once in a while.

<comment><USER3> I was just thinking the same thing!

It's cool that they released their data set too (although with conditions), shame that they don't give the wine names so you could compare computed scores to wine spectator or the like.</comment></comment>


Python quirks - <AUTHOR> http://www.lshift.net/blog/2009/10/29/python-quirks

<comment><USER2> As far as the "os" versus "os.path" question; this is hinted in the Python documentation for modules that "os.path" can be an alias of, such as "os.posixpath"; there, it recommends "import os" and then referring to "os.path". In other words, there's no need to "import os.path".

</comment><comment><USER3> Pretty good list, although I'm not sure how else you would expect 'finally' to function?

<comment><USER4> It's not that I expect it to work differently. It's more like: "oh, you can do that, that's interesting".

And the question is, how to exploit this behaviour. Does it mean that I can effectively rewrite return values? Can I access the original return parameters? Can it be used as a substitute of goto? (cascaded loops, that end up in return, which is than captured by finally)

</comment></comment><comment><USER5> This is kind of a weird list. I'm just learning python, but I don't know if any of these are quirks or just the result of not reading the documentation, or it not being like My Favorite Language(tm).

 _Sort returns nothing_

I expect the result of calling the sort() method on an array to sort the array that it was called on. Since this example is calling sort on a literal array, there's no way to access the array after it's sorted.

 _Tuples constructor_

I agree this is a quirk, as the result of the overlapping choice of parenthesis for the tuple literal and as expression precedence. The leading star on the _args argument puts all the arguments into a single variable as a tuple. foo(1,2) has two arguments, which sets args to (1,2), and the representation for that is "(1,2)". foo((1,2)) as only one argument, a two element tuple, and the representation for that is "((1,2),)", the last comma being needed to disambiguate this as one element tuple where the first element is also a tuple. In the second group, both foo(1) and foo((1)) have only one argument, in the latter case the argument is an arithmetic expression with no operators that evaluates to the number 1, and the literal representation for a single argument tuple, the args variable, is "(1,)".

The % operator takes two operands. The RHS operand is a list or tuple with the same number of elements as there are %expansions in the LHS. Only one %expansion is given in the format string on the LHS, but a two element tuple has been given on the RHS.

_Print is magical*

print is a statement. pprint.pprint is a function. Function arguments must be enclosed in parens. This isn't perl.

 _Inconsistent get interface_

This is documented, shows up in ipython's "help getattr". getattr takes an optional third argument that is returned if the attribute doesn't exist which would regularly raise an exception.

 _Inconsistent select/poll interface_

The only thing that is inconsistent here is how the timeout value is specified compared to the underlying UNIX implementation these are wrappers for. In the UNIX interfaces, select and poll take a structure that allows both seconds and fractions of a second, and epoll takes an integer. While I suppose this is confusing, these all have different usage patterns and different APIs, so it's not like you can just replace the call to select with poll and not have to refactor the rest of the code. This could be cleaned up, but it's most likely not worth it since the ranges of the timeout values reflect the most common ranges people are expecting to use.

 _Circular Imports_

This can be overcome by remembering that modules, classes and functions are defined at run time, that an object can be referenced even though it's not finished being executed.

 _999+1 is not 1000_ and _What is the value of one?_

I'm not sure why you'd use the _is_ operator to test equality of integers, when _is_ is meant to test object equality. In the same way it is suggested to _not_ compare strings and numbers.

 _The order of unpacking_

Using the same variable name multiple times on the LHS when unpacking should be undefined, because the reason to do that would be because you don't care about the values that are being unpacked into the same variable. I can not think of a reason you should be encouraged to write a function that takes multiple arguments that can not all be accessed, if you wanted to do that, you should define the function's arguments as _args so they get eaten up, it's more obvious that some of them are optional than using the same variable name that ends up hiding one.

The example of foo(a=1, b=2, _args, __kwargs) is definitely confusing, but then this would seem to be a confusing API anyway -- it would be best not to write a function like that. What I expect to happen here is that a and b have default arguments no matter what the kwargs are, but you can't specify a kwargs entry named a (as in foo(3,4,6, a=4)) without it raising "TypeError: foo() got multiple values for keyword argument 'a'".

 _Multi line strings_

python statements don't end with semicolons, so you need to escape the newline, which would mark the end of the assignment expression in the first example. In the second, the RHS of the assignment is an expression enclosed in parens, which doesn't end until it forms a complete expression with the closing paren. Whitespace between strings concatenates the strings, so but the newline ending the expression in the first example needs to be escaped so it's interpreted as whitespace and not as the end of the statement.

 _Finally finally is interesting_

Watch out for this. If try blocks are nested, it seems that a nested finally with a return keeps an enclosing except block from executing:

        def x():
            try:
                try:
                    print "try"
                    raise Exception
                finally:
                    print "finally"
                    return 1
            except:
                print "except"
                return 2

        print x()

I actually prefer to nest try blocks like this to get more control over the order of execution of the finally and except blocks and make it more obvious as to what the intended order of execution is.

 _List comprehensions, kind of._

I actually like having to explicitly have a literal list comprehension in the for-loop syntax. I'm not sure that the lack of punctuation increases readability: the _if_ in the suggested (second) syntax kind of gets lost. For maximum readability, the list comprehension might be best split into a separate expression statement rather than trying to take on perl in the longest line department.

I actually find python to be much more consistent and does the expected thing much more often than some other languages (ahem, I'm looking at you, PHP). I just hope that as I go deeper, using it remains refreshing.</comment>


Why we shouldn't protect teenagers from controversial issues in fiction - <AUTHOR> http://www.theguardian.com/childrens-books-site/2016/may/10/teenagers-controversial-issues-fiction-chris-vick <comment><USER3> >Show complexity – whilst showing the impacts – and yes, appeal – of activities that may be dangerous or illegal, don't celebrate the activity. But don't condemn the characters either. No-one likes a wagging finger.

I appreciate this "rule" that the author holds. I think there really are two sides to these kinds of controversial issues - parents who don't fully understand the appeal, and teens who don't fully understand the danger - <USER2> the best way to show both sides is to tell it like it is.

Unfortunately, since in fiction the author has full reign over the plot, lazier (or else ignorant) authors who may not fully understand both sides might simply reward or punish characters regardless of any realistic criteria. If I tried to write such a book, I would fall into the "ignorant" category, biased not only by my limited experience but also by my natural desire to reward characters more like myself, regardless of whether their actions merit it.

<comment><USER4> I disagree. I believe art should be whatever it wants to be. If someone wants to write a book glorifying "bad things", I say go for it. It might even be an interesting read.

Exploring the two sides of an issue (or three or four) should be done "away" from the book. We should confront those ideas with the real world and everything else we know. The author has no obligation to present those ideas fairly or truthfully. [1]

Parents should tech their kids to think critically, to accept that anything can be wrong or misleading. They should always evaluate what they learned and gather their own conclusions.

[1] And writing about X doesn't mean the author subscribes to X.

<comment><USER5> All the way agree. Parents should discuss a book after it's been read (yup, it means reading what your kids are reading, and teenagers don't always have great taste...) and go over anything controversial, leave the floor open for questions, encourage them to consider scenarios that are outside of their experiences, and so on.

Teenagers are perfectly capable of handling adult topics if they have the support of adults to help them grasp the entirety of it all. Keeping them insulated in a bubble, away from the real world, just means they'll get to experience it all at once, alone, without support, when they finally venture out of the house as young adults.

</comment></comment></comment><comment><USER6> Oh, really, we shouldn't?

And we usually haven't, but there have always been voices against, either the "save the children" crowd or something else.

(and yes, today SJWs are part of the problem)

<comment><USER7> If you would like people to be sympathetic to your cause, you should probably learn to stop using language life "SJW" that is designed to turn them off completely.

<comment><USER8> I don't think anyone that uses that term intends to take anything other than a scorched earth position with the people it describes.

..and for good reason. The mindset is arational and immune to basic logic and discourse. It's like trying to convince a deeply religious person that their God doesn't exist - it doesn't work that way.

<comment><USER9> So we should insult deeply religious people by calling them derogatory names also?

EDIT: Asking if you think its fair to call somebody names because they don;t have the same beliefs?

<comment><USER10> "SJW" is roughly analogous to "bible thumper" and about as derogatory too.

<comment><USER9> My point exactly, it's an insult that people seem to think is fine cause they don't have the same beliefs. If only we were all the same.

<comment><USER8> Only if you treat all beliefs as equally valid _a priori_.

Some beliefs are demonstrably harmful.

<comment><USER11> Can you give a little more depth to the position that social justice is 'demonstratably harmful'?

Edit: I ask because as a teacher who's married to a social worker I'm pretty sure we both get up every day and try to improve the lives of people in our community.

<comment><USER8> Not the _concept_ of social justice (which generally includes positive things like like equality of opportunity), but the label _social justice warrior_. Those are two different things.

Here's my litmus test:

* Do you parrot discredited statistics like the wage gap? (Bad information is self evidently harmful)

* Do you instantly cut off communication with people who do so much as disagree with you? (Fosters an echo chamber, see bad information above)

* Do you publicly label people who disagree with you as words ending in _-ist_? (Such labels are of questionable value anyways, less so when they don't even apply, and that's before talking about the social consequences)

* Do you try to get people who disagree with you fired? (Nuff said)

* Do you rally your friends to pressure media companies to change/stop making things that offend you? (Harmful to free expression, artistic integrity, and probably the economy)

* Do you use hateful language against people, and then rationalize it as okay because those people are above you in some social hierarchy?

Then you are not a "social justice warrior" or "SJW" and the "harmful" label does not apply.

<comment><USER12> You might need to add something about the goals, otherwise you very neatly describe people in Gamergate, who ironically enough, apparently popularized the term.

Maybe we can call those that use such tactics for social justice aims, Social Justice Gators, to clarify things while annoying people in various camps?

<comment><USER8> Well, I don't really share your views there (and I am _quite_ curious how you arrived at that conclusion), but HN probably isn't the best place to hash that out. Would you be willing to continue this offsite?

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> In high school I was /enraged/ to learn that the books given to me were censored. Books like Shakespeare's Romeo & Juliet.

I learned that when it came to respecting the power of speech, the Emperor had no clothes, and when deemed expedient a public institution would toss out their principles.

</comment><comment> awinter-py teenagers contribute nothing to the GDP. we could ignore them completely and they'd still turn into reasonable adults at the same rate. How about making school curricula marginally more specialized and employing the smartest 5% in challenging internships? short of that I can't imagine anything moving the needle on teens.

Anybody who thinks aggressive movie ratings makes a difference to young people in 2016 shouldn't be considered safe to drive a car.

<comment><USER14> Many teenagers do work, others can be a massive drain on the economy. Wait, no everyone in the US is just like you never mind.

<comment> awinter-py [http://taxfoundation.org/blog/which-age-groups-bear- largest-...](http://taxfoundation.org/blog/which-age-groups-bear-largest- share-tax-burden)

2% of tax returns are filed by teens accounting for 0% of IRS revenue.</comment></comment></comment>


When you find my body, pls call my husband, wrote dying hiker lost on App. Trail - <AUTHOR> https://www.washingtonpost.com/news/morning-mix/wp/2016/05/26/when-you-find-my-body-please-call-my-husband-wrote-dying-hiker-lost-along-the-appalachian-trail/?tid=pm_pop_b <comment><USER2> I saw no mention of GPS in the article. A bit of Googling found another story where someone in the comment section claimed that she did own a GPS but for some reason had not brought it that day.

It sounds like even a compass would have had a good chance of saving her.

I saw some comments on Reddit from people experienced with the Appalachian Trail that said that it is quite common for people to hike the part she was on without taking a compass or GPS or even a good map of the surrounding area.

</comment><comment><USER3> I wonder if they tried using any sort of infrared vision at night to locate her?</comment>


OpenBSD 6.5 Released - <AUTHOR> https://undeadly.org/cgi?action=article;sid=20190424132429 <comment><AUTHOR> More info in the release page [0] and mailing list announcement [1].

0: [https://www.openbsd.org/65.html](https://www.openbsd.org/65.html) 1: [https://marc.info/?l=openbsd- announce&m=155611207805565&w=2](https://marc.info/?l=openbsd- announce&m=155611207805565&w=2)</comment>


MS Flight Simulator Returns in 2020 (XBox Pass Only) - <AUTHOR> https://www.cnbc.com/2019/06/23/microsoft-flight-simulator-2020-announcement-surprised-fanatics.html <comment><USER2> I was surprised to find myself excited by the this news. I guess that brand really made a mark on me all those years ago. Is it really XBox Pass subscription only? The article doesn't make that claim.</comment>


Advanced techniques to implement fast hash tables - <AUTHOR> https://attractivechaos.wordpress.com/2018/10/01/advanced-techniques-to-implement-fast-hash-tables/ <comment><USER2> The author of this post wrote klib/khash, and uses it in his very popular cpu- intensive bioinformatics programs such as bwa (short read alignment against the human ref genome).

I've been learning rust recently. As a learning exercise, I compared the robin-hood hashing of std::collections::HashMap in rust to his klib/khash he mentions in this article , and then tried various hash functions to try and match his performance:

[https://github.com/gaberudy/hash_test](https://github.com/gaberudy/hash_test)

No dice, his hash table is smaller and faster.

My next step is to try and implement his data structure and hashing functions directly in rust and see if I can get it to near-C performance...

<comment><USER3> How does that compare to the dict implementation of Python 3.6 ? It's supposed to be damned fast but I don't have the skills to make such comparisons.

<comment><USER4> Python, ruby, php hash tables are roughly 2x slower. perl5's being the worst maybe 4x slower.

Damn fast is only relative. It's damn fast compared to the previous implementations. Wikipedia even dares to say that the worst hash tables of all, perl5, is one of the very best. Bias all over.

SIMD optimized hash tables, such as the Swiss tables tricks have the potential to be much faster than khash. And khash is not cache oblivious at all, with its double hashing scheme.

<comment><USER3> Does it preserves insertion order ?

<comment><USER4> Of course not. hash table iteration should assume random order, otherwise it's a security risk or performance nightmare.

</comment></comment></comment></comment></comment><comment><USER5> Hrmm this is the first I've heard that Google has opened swisstable[1]. Strangely the three submissions to HN of this attracted no comments. This blog is interesting but a write-only benchmark of a hash<int,int> is sort of niche.

[https://abseil.io/blog/20180927-swisstables](https://abseil.io/blog/20180927-swisstables)

</comment><comment><USER6> I recently wrote [https://github.com/ronomon/hash- table](https://github.com/ronomon/hash-table) for Node.js, which has a few more design tips listed in the Readme, specifically around optimizing a cuckoo hash table by reducing cache misses.

</comment><comment><USER7> Nit: You should implement quadratic probing with triangular numbers by addition for a slight speedup. I.e. x+= i, rather than x = ... × ...

<comment><USER8> Of course. Notable libraries implementing quadratic probing all use addition instead of multiplication. The example in the blog post is just for demonstration purpose.

<comment><USER9> >addition instead of multiplication

What is the advantage of this?

<comment><USER10> Addition being cheaper than multiplication on many CPUs?

<comment><USER3> ELI5: wouldn't it be the job of the compiler ?

<comment><USER10> Sort of, but there are no guarantees.

</comment></comment></comment></comment></comment></comment><comment><USER11> klib could do with a bit more documentation for what the abbpreviated argument and function names do. Apart from that, I just have praise for this. It's succinct, performance-oriented and comparatively portable. From what I reversed for the purpose of grasping the effect of parameters, I like the interface/API, but the scope over which I am speaking is pretty much limited to basic kbtree, due to the lack of documentation.

</comment><comment><USER12> I love this stuff but how many of us really get to (have the privilege) to doing this kind of work?

<comment><USER13> If you're writing code in C/C++/Rust/... then your code will benefit from understanding hash function performance because the choice of function can be another parameter to tune.</comment></comment>


Startups' Trillion Dollar Name Game – Backchannel - <AUTHOR> https://www.wired.com/story/startups-trillion-dollar-numbers-game-tam/ <comment><USER2> If software is eating the world and your a software company isn't TAM every dollar every where? I don't remember video being part of a search market? or is an office productivity program an operating system?</comment>


Apple releases iTunes Match - <AUTHOR> http://www.loopinsight.com/2011/11/14/apple-releases-itunes-match/

<comment><AUTHOR> Not available yet here in France.

I'm still amazed they actually pulled it off. How did they get the majors to agree on Apple-sanctified pirated music laundering?</comment>


Experimental nonlocal and surreal Bohmian trajectories - <AUTHOR> http://advances.sciencemag.org/content/2/2/e1501466 <comment><AUTHOR> From HN comment [https://news.ycombinator.com/item?id=18200169](https://news.ycombinator.com/item?id=18200169)</comment>


Vargas Llosa's speech at the Swedish Academy - <AUTHOR> http://nobelprize.org/mediaplayer/index.php?id=1416

<comment><USER2> And the transcript, in english: [http://nobelprize.org/nobel_prizes/literature/laureates/2010...](http://nobelprize.org/nobel_prizes/literature/laureates/2010/vargas_llosa- lecture_en.html)

Interesting that "dictatorship" was mentioned 9 times in the speech, free* 9 times, and democr* 13.</comment>