Behind the One-Way Mirror: A Dive into the Technology of Corporate Surveillance - <AUTHOR> https://www.eff.org/wp/behind-the-one-way-mirror <comment><USER2> I obviously haven't read through this whole thing yet, but I am very much looking forward to it. Hopefully this will be a good reference point for when people ask me for more information.

Me and a few other guys meet monthly to chat about ethical advertising, what it looks like for our products, and giving each other ideas on how to succeed at it. I feel that the subject of ethical advertising as an alternative to Google Ads will greatly increase in 2020.

<comment><USER3> I have a running list of problems caused by advertising:

[http://jacek.zlydach.pl/blog/2019-07-31-ads-as- cancer.html](http://jacek.zlydach.pl/blog/2019-07-31-ads-as-cancer.html)

If you and the guys can find forms that sidestep most of those issues (without causing even worse ones), I'm all ears.

<comment><USER4> That is seriously well-written. Personally I am (also?) in the camp where some advertising ("to connect goods and services with people wanting to buy them") is ok, and we both agreed that the current system is suboptimal bjt you have managed to nudge me quite a bit towards your side.

Good work, that is why I read HN.

(And everyone should feel free to tell me why I've been fooled by this post as well ;-)

</comment></comment></comment><comment><USER5> [https://stacks.stanford.edu/file/druid:fv751yt5934/SHEG%20Ev...](https://stacks.stanford.edu/file/druid:fv751yt5934/SHEG%20Evaluating%20Information%20Online.pdf)

Unfortunately, the following responses were not among those seen in the study:

"Because when I move the cursor/mouse over it, I can see it points to an ad server."

"Because when I view the page source I can see it is filled with links to ad servers."

<comment><USER3> Yeah, unfortunately, because that's one heuristic that never fails me: the more ads there are on a page, the less trustworthy the source is.

</comment></comment><comment><USER6> Excellent stuff, will happily continue to donate and would encourage others to as well.

*Not associated just an admirer of the EFFs work</comment>


Birds may be paedomorphic dinosaurs - <AUTHOR> http://whyevolutionistrue.wordpress.com/2012/05/28/birds-may-be-paedomorphic-dinosaurs/

<comment><USER3> Also, let's not forget that, in cladistics taxonomy (virtually the only one used by scientists in scientific journals), birds _are_ dinosaurs.

Dinosauria (dinosaurs) -> Saurischia (three-pronged hips) -> Theropoda (bipedal saurischians) -> Tetanurae (stiff tails) -> Coelosauria (birds, tyrannosaurs, velociraptors, etc.) -> Maniraptora (hand snatchers) -> Avialae (bird wings) -> Euornithes (bird tails) -> Aves (birds)

</comment><comment><USER4> There was a really nice article by Stephen Jay Gould about the paedomorphism of Mickey Mouse; it can be found online (in PDF) <http://athmarc.allthingshuman.net/images/PDFs/mickey.pdf>

It's a different discussion though; Mickey Mouse is a human creature; in order to appeal to a broader audience it " _was_ evolved" to retain juvenile features.

Birds used paedomorphism for different reasons of course, but it is true that we find them more cute and less threatening than dinosaurs.

</comment><comment><USER5> My daughter just asked me Sunday what group birds belong to, I'm looking forward to seeing her expression when I tell her "dinosaurs".

</comment><comment><USER6> Does that mean that an existing bird DNA can be minimally edited to express into a more lifesize dinosaur?

<comment><USER7> Birds, being dinosaurs and having the size they have, already _are_ lifesize dinosaurs, no DNA editig required.

As to the question you probably meant to ask, no editing the DNA of a living organism to match the unknown DNA of an extinct organism it separated from a 100 Million years ago is impossible.

<comment><USER8> And here we see the importance of commas, why you shouldn't separate the negative from the verb by a mile and the difference between "no editing ... is impossible" - all edits are possible and "no, editing ... is impossible" - <USER2> edits are impossible.

</comment></comment></comment><comment><USER9> I thought the classic example of paedomorphism was domesticated dogs. Research has shown that if you take wild foxes and select for non-aggression towards humans, after several generations, you end up with essentially foxes that retain their juvenile features and bear a strong resemblance to domesticated dogs. (Floppy ears, shorter snout, spotted fur, earlier sexual maturity, etc) You get all these physical features by simply selecting for tameness.

</comment><comment><USER10> Jurassic Park taught us about this nearly 20 years ago!

</comment><comment><USER11> so men did walk with dinosaurs after all :)</comment>


XACT: Lock-Free Multi-CAS for C++/x64 Built on TSX - <AUTHOR> https://github.com/scivey/xact <comment><USER2> He's assuming that retrying forever is a valid retry strategy, which it is not. For example if a page fault was needed to satisfy one of the memory access it would never finish.

See [https://software.intel.com/en-us/articles/tsx-anti- patterns-...](https://software.intel.com/en-us/articles/tsx-anti-patterns-in- lock-elision-code) and [https://software.intel.com/en-us/blogs/2013/06/23/tsx- fallba...](https://software.intel.com/en-us/blogs/2013/06/23/tsx-fallback- paths) for more details/

To make his code work he likely would need a global fallback lock (or a real STM) and guarantee that every change of the touched memory uses those too (which would be hard)

So I'm afraid the library is fairly broken.

<comment><AUTHOR> I'm aware of the issue with non-terminating transactions, though I wasn't aware of the role played by page faults -- thanks for adding that detail.

Looking back over the readme, I can see how the loops used in the examples are a little misleading.

This is mostly a documentation issue: the core XACT code doesn't use infinite retry loops, and actually does not retry transactions at all. As with std::atomic, the goal is to provide a basic primitive and leave retry / backoff / etc. up to the user. This is especially important with lock-based fallbacks, as I can't pick one perfect lock to fit everyone's workload.

I ended up dropping retries because I ran into so many never-ending transactions in my early experiments with TSX. That was also my motivation for limiting the transactions to as few locations as possible.

I'm just now starting to reexamine this and add some configurable retry logic back in -- e.g. the retry policy here is used in some test code: [https://github.com/scivey/xact/blob/master/include/xact/atom...](https://github.com/scivey/xact/blob/master/include/xact/atomic_ops/MultiOps.h)

As to the difficulty of protecting any memory touched in a transaction under a locking scheme: that kind of problem is exactly why XACT is focused on CAS- like operations on relatively limited sets of memory addresses.

Can you elaborate on the global lock? What's the motivation there?

<comment><USER2> Practically all valid fallback schemes require putting the lock (or something else like a sequence counter for a STM) into the read set of the transaction to properly synchronize between transactions and non transactions. Since you hide the transaction in your library it's not possible to do that with your current API. It would be very hard to construct a fallback path that is not racy.

(See Anti pattern #4 in the link above)

A global lock is usually the simplest fall back path, and the performance can be good enough because it's just a slow path. Of course it's always possible to do something more complex.

<comment><AUTHOR> Agreed that the basic "store to 8 locations" API would need tweaking to allow locking.

Re: adding a counter into the read set, I think the new generalized API here will support that out of the box: [https://github.com/scivey/xact/blob/master/docs/api/generali...](https://github.com/scivey/xact/blob/master/docs/api/generalized_cas.md)

Thoughts?

<comment><USER2> Yes with a read primitive it could be done in theory. It will be just quite awkward to use however as every caller has to do all that: define a lock, pass it always in, make sure the check for "lock is free" is correct etc.

Your unit tests don't seem to do it right.

It would probably be easier to hide the lock in your library, and enforce all other access to follow the right protocol using some ADTs. But then you just have a simple hardware TM accelerated STM.

FWIW the sweet spots for nice to use TM APIs are currently either lock elision, or compiler assisted TM (like __transaction* in gcc), or higher level libraries.

<comment><AUTHOR> Your feedback has been very helpful. Do you mind if I ask you for more advice down the line?

</comment></comment></comment></comment></comment></comment><comment><USER3> The last time I read about TSX it was a story about how Intel pushed a microcode update to disable TSX because it was flawed. Has this been fixed in newer CPUs? Is there a risk of TSX being flawed on CPUs in the wild (for example, if you're missing the latest microcode updates?)

[http://www.anandtech.com/show/8376/intel-disables-tsx- instru...](http://www.anandtech.com/show/8376/intel-disables-tsx-instructions- erratum-found-in-haswell-haswelleep-broadwelly)

<comment><USER4> If you have a more-recent-than-2014 kernel, BIOS, or stepping, the feature bit ought to be accurate.

So sure, there are some systems in the wild that are broken, but probably not that many.

<comment><USER3> Let's say you're deploying to a random cloud VM that may or may not have the latest microcode/BIOS. How do you know if TSX is safe to use? Can it be determined in software by looking at CPUID values? (If so, do all TSX-using libraries/compilers insert such checks?)

The risk of subtle locking bugs in multi threaded applications due to CPU bugs makes me want to shy away from the entire feature.

<comment><USER4> Note that most Linux distros put the latest microcode updates into all of their kernels for any supported version. That means that an updated box with an "old" distro is still going to be OK.

<comment><USER3> Does that work under a hypervisor/xen/VM/whatever? Can you apply a microcode update only within a given VM?

</comment></comment></comment></comment></comment><comment><USER5> So, I looked through the readme and at the example code. I didn't dig into the implementation code.

How do you deal with group size limitations? My understanding is that the hardware transactional support makes no forward progress guarantees specifically because it's bound by what it can monitor in the cache. So if the group size is too large, then transactions can keep failing. Hopefully I am not missunderstsnding this. If this is correct it means libraries of this nature have to take a position with regards to group size limits.

So what is your approach?

<comment><AUTHOR> You're correct: the limits on transaction size are unknown. That's mentioned in the documentation here [https://github.com/scivey/xact/blob/master/docs/api/n_way.md](https://github.com/scivey/xact/blob/master/docs/api/n_way.md)

TSX is a black box in many ways, and I think we can expect its behavior to change over time and across implementations.

I'm not enforcing an arbitrary limit on transaction size because the primary goal is just to expose a simple C++ API to fundamental primitives. The TSX intrinsics are much more difficult to work with, and assembly is painful.

If that seems like a cop-out, consider that DCAS is effectively a transaction size of two. TSX appears to handle this trivially. Yet DCAS is already a very powerful operation, and is useful in itself.

As the docs emphasize, the goal is not general transactions but extended versions of the small atomic operations already in common use.

In terms of safety and opinionatedness, I think of XACT like a library of locking primitives: pthread_spinlock_t is very useful, but it will not stop you from introducing deadlocks. Likewise, I won't stop you from attempting transactions that are too large to succceed on current hardware. Ultimately, I expect anyone using this to test and benchmark their own code on their own machines.

Beyond a certain size, transactions will be less and less valuable even if they can be successfully completed: if you're attempting 64-way CAS, benchmarks are probably going to guide you toward traditional locking anyway.

</comment></comment><comment><USER6> What is the motivation behind this? Multi-CAS is used as a basic building block for lock-free data structures to emulate more complicated transactional operations. But when you already have TSX, why would you use multi-CAS to emulate them? It's better to modify the algorithm and express the transactions directly using TSX.

<comment><AUTHOR> In an ideal world yes, but TSX has some significant limitations. andikleen2 has mentioned some of those in his comments.

TSX is somewhat unpredictable as a general tool, and there are difficulties with e.g. knowing which transactions are even feasible. Generic "complicated transactional operations" also make lock-based fallbacks very difficult and expensive, which andikleen2 also touched on.

After experimenting with more general use of TSX, I very quickly came not to trust it. So the real motivation here is to tame TSX's unpredictability by using it in a very controlled way.

TSX simply isn't suitable yet for complicated transactions, but just providing hardware-level support for multi-CAS is already a big deal.

</comment></comment><comment><USER7> Are there any performance benchmarks to show when this kind of approach is useful over less exotic solutions?

<comment><USER8> We used transactional memory in QEMU to emulate load-locked/store-conditional instructions, and it had much better performance than instrumenting each store manually (20%, I think).

</comment></comment><comment><USER9> If it meets the guidelines, this might make a good 'Show HN'. Show HN guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)</comment>


Ubuntu Users Win Back Privacy - <AUTHOR> http://benjaminkerensa.com/2014/03/30/ubuntu-users-win-back-privacy

<comment><USER2> About time. The feature was (as far as I could tell) also in breach of European data protection law (no opt-in/opt-out, no information in advance of opt-in about what was being collected, how information was being stored, what it was being used for, or where and how long it is being stored).

</comment><comment><USER3> This is great news</comment>


TSA Says Theyre Not Discriminating Against Black Women but Body Scanners May Be - <AUTHOR> https://www.propublica.org/article/tsa-not-discriminating-against-black-women-but-their-body-scanners-might-be <comment><USER2> >"...Afros, braids, twists and other hairstyles popular among black women."

They literally say so in the subtitle. The discrimination exists before people enter the airport, and it comes in the form of what hairstyle to choose. This is partly done on a cultural basis, and partly because of a different hair composition. But the important thing is, the machine does not differentiate on the basis of race, it's a machine that detects areas of suspect density that could presumably be hiding contraband. I am a white man with long dense hair, and my hair triggers the machine almost every time. Not because I look like a hippy, and Nixon is still running the show, but because I could hide things in my hair.

The fact that certain hairstyles are more popular within a racial group IS the discriminating factor, not the machine.

<comment><USER3> People are free to choose their hair and hairstyles. The burden of not discriminating is on _the government agency_ , which is funded and mandated (including, according to TFA, $100M for deploying the scanners) to not be discriminatory, including on characteristics related to race.

As u/tj-teej pointed out [0], the utilizers of this tech have the agency and means to improve or mitigate the tech, including prioritizing the training of algorithms to handle black hair styles instead of shunting it off to an edge case, conveniently burdening a demographic who has been historically limited in power and influence.

To think of it another way: in many parts of the U.S., Asians are very much a minority. Asians more commonly have narrower eyes which can interfere with face detection/recognition [1]. In the near and possible future, when face- detection becomes a "feature" in security tech as a means to expedite processing -- e.g. if your face is scanned and not found in a "Real ID" database, you're automatically put in a line for more invasive searching -- would Asian-Americans not have a legitimate case that the U.S. gov't has failed to improve their tech to the detriment of Asian-American citizens? Especially when it seems Asian countries have successfully mitigated the issue?

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

[1] [https://www.reuters.com/article/us-newzealand-passport- error...](https://www.reuters.com/article/us-newzealand-passport-error/new- zealand-passport-robot-tells-applicant-of-asian-descent-to-open-eyes- idUSKBN13W0RL)

<comment><USER4> Actually, I knew a guy who used to smuggle drugs into nightclubs in his afro, so targeting people on the basis of whether their hairstyle is physically capable of concealing contraband seems quite reasonable.

If you don't like it ... then you are free to change your hairstyle ...

<comment><USER3> Then given the sacredness/importance of human life, relative to the value of someone's hair, there is no reasonable justification for _not_ requiring every airline passenger to shave their head before entering security, if it reduces the probability of the scanner having false negative even by a small margin.

Come to think of it, there's no justification for allowing passengers to keep their clothes on as they pass through security.

<comment><USER5> That is the endgame. Together with every human spending their life in a small isolated cage. Perfect security.

</comment></comment></comment></comment></comment><comment><USER6> If the machines triggered on hairstyles commonly worn by white men, what are the odds that they would have made it to production? Conversely, if the development teams had a significant amount of black women with hairstyles like these, what are the odds that this problem would exist?

The TSA wants to externalize its discrimination to "the machine", but the machine is a product of human systems, and reflects and captures the biases that already exist in society.

<comment><USER7> Exactly. This is similar to how women and children kept getting killed or injured by seatbelts simply because no one in the room thought to test for them since no one in the room looked like them.

</comment></comment><comment> tj-teej A lot of people will say "this is a limitation of Computer Vision", but they are missing something.

If these kinds of technologies treat the hair of a certain race as a P1, then the technology (and people who designed the tech and the program) are participating in discrimination.

I'm not saying this to be 'woke' or to 'cancel' TSA. It's just a fact; and once we can all admit it (a lot of people in this thread don't seem to be able to), then we can make changes to fix it.

Editorial: If an aspect of traveling makes you feel like an 'other' in your own country, that's wrong, and I don't think public funds should be encouraging that. Public buildings have to have wheel-chair ramps, and TSA body scanners shouldn't be racialized.

<comment><USER8> Read the article again. The machine has a problem with certain hairstyles.. not hair of certain races.

People of African descent have a propensity towards the problem hairstyle that skews the results.

If your argument is for 'de-racialization' then you need to convince people to change their hairstyles to make everyone more similar.

You can't blame a machine for treating a 1 as 1 and 0 as 0.

<comment> tj-teej You're right you can't blame the machine. I'm blaming the people who designed it, who defined what the 1 and the 0 are.

If everyone in the country had the "certain hairstyles we'd have no problem saying "this machine doesn't work".

And frankly I don't think anyone who knows a lot of African-American Women would even consider asking them to change their hair.

<comment><USER8> You can't blame the people that designed it.

Some hairstyles are just bunched up and the machine can't tell what it is, so it gets flagged for manual inspection.

This is not a problem that is easily solved with technology.

Your only options are:

(1) not checking anyone's hair

(2) manually checking everyone's hair

(3) letting the machine do it's job and accept the fact that it can't scan certain hairstyles.

</comment></comment></comment></comment><comment><USER9> Given that TSA has never stopped a terrorist, and this is all theater, choosing to continue makes it biased theater.

<comment><USER10> It's funny not funny that the same people that like to rage about government agency's being increasing intrusive and consuming more and more resources while doing nothing valuable have nothing bad to say about the poster child for that.

<comment><USER11> > the same people that like to rage about government agency's being increasing > intrusive and consuming more and more resources while doing nothing valuable > have nothing bad to say about the poster child for that.

Don't they? The diehard libertarians I've been exposed to are the first and loudest to complain about the TSA. Is there some constituency I'm unaware of that's anti-government action but not anti-TSA?

<comment><USER10> > diehard libertarians

They bark and complain and then get on their knees and lick the boot.

<comment><USER9> Libertarian koan: Next year, that's gonna be my boot.

<comment><USER10> The short answer is libertarians are hostile to collective action. The only politically powerful group that aligns with is that of extreme wealth.

</comment></comment></comment></comment></comment></comment><comment><USER12> Racism and bias in prediction is a problem. I'm not sure that's what's happening here.

The article says false alarm, but when you think about the goal here, a false alarm might just be a lack of ability to get an accurate read through black hair styles. A false alarm doesn't mean they're accusing someone. It means their tech isn't good enough to do the job and they need a manual check to cover the gap.

Let's say it is somehow technologically impossible to infer what's hidden in an Afro. Wouldn't you expect manual checks to occur? Otherwise what's the point of doing checks at all? There would be an easy strategy: rock a 'fro

Unless your argument is against the TSA being nothing but theater because the task is basically impossible against a good determined actor but that's a separate issue.

</comment><comment><USER13> It seems that this may be due to the limitations of machine vision. When the body scanners were being deployed, there was a lot of concern that they could see under clothes and that the TSA officials were basically going to be able to see everyone naked as they walked through the scanner. To deal with that, it was decided to use machine vision to create a stylized "Ken Doll" body and superimpose areas of concern, but not allow the actual image to be seen.

Now, with certain hairstyles, I would guess the algorithms can't reliably distinguish hairstyle from concealed items and just alert. I would guess that a human looking at the the imaging would be able to distinguish, but that would involve the TSA being able to see you naked again.

<comment><USER14> Sounds like a prototype being deployed to production. We all know how well that goes.

</comment></comment><comment><USER7> For all the people claiming that flagging dense hairstyles makes us safer...please name one terrorist who hid contraband in his hair.

<comment><USER15> Now that they've published the vulnerability, they can take advantage of that information in future plans.

</comment></comment><comment><USER16> Body scanners and current TSA processes also discriminate against transgender people. The body scanners are obvious (the agent has to push "male" or "female" and someone with "bulk" in their chest and crotch sets it off), but the X-Ray machines also alarm on dilators and lube so my bag is manually searched _every time_.

Sometimes I get a friendly agent and they send me on with minimal fuss, and sometimes they're jerks and try to find a way to stop me from going thru security.

<comment><USER17> Interesting article about "flying while trans" in the NY times today: [https://www.nytimes.com/2019/04/17/opinion/tsa- transgender.h...](https://www.nytimes.com/2019/04/17/opinion/tsa- transgender.html)

Yet another reason to opt out of the body scanners. No one wants a pat down due to a machine deciding that their genitals are an "anomaly"

<comment><USER16> Yep. I fly multiple times a week. It's an awful, dehumanizing experience every time but I refuse to allow my activities to be restricted because of that.</comment></comment></comment>


elgooG - <AUTHOR> https://com.google/ <comment><USER3> I know this is supposed to be an april's fool joke, but dang, it reminded me of how much I hate this new unlimited TLD crap. I don't really have a good reason, I am just resistant to change I guess.

<comment><USER4> This has nothing to do with gtld, but I think what bothers me most is that domains are in the wrong order. It should be com.ycombinator.news or com.google

<comment><USER5> Maybe if you're a computer. But for us humans, google.com makes more sense.

<comment><USER6> That's just because you are used to it. But <tld>.<domain> actually makes more sense for multiple reasons:

\- That's how phone numbers work, the most significant part of the number is first (<country-code> <area-code> <local-number>) so the most significant part (TLD) should come first in domain names. Users like systems that look like other systems they are already used to.

\- <tld>.<domain> would help thwart phishing attacks as most users read left- to-right, so they see right away when the domain is incorrect. Compare this to "google.com.phishing.com" which tricks users because they stop reading after they see "google.com..."

\- When you read or hear "go to com.myawesomedomain" you know a domain name is being mentioned as soon as you hear "com.". It is not always obvious otherwise (you have to use specific language like "browse to").

<comment><USER7> If it was com.something you have to type the com first. If "something" is first, you by the time you get to "som" it will probably have something.com in the dropdown list.

I would say its easiest if the most variable part is first, not only for autofill but for the way I think about it.

When you talk about "most significant" you mean the "largest" category. To me the actual most significant is the part that identifies the most unique thing you are typing in, and that tends to be the domain.

<comment><USER8> Modern web browsers will complete from any start position in an URL (and some also from the title of the document, I think). E.g. if I have visited the Wikipedia article on irish setters and I start typing irish, it will suggest that article. In the same fashion, if the URL was com.example and you typed exa, it should suggest com.example.

</comment></comment></comment></comment></comment></comment><comment><USER9> That's pretty awesome.

Implemented with:

      transform: scaleX(-1);

<comment><USER10> On my browser (Chrome, OSX), that rule was overwritten by

          transform: rotateY(180deg);

Which does the same thing. Presumably there is a reason?

<comment><USER11> On both Firefox 37.0 and 41.0.2272.101 (gnu/linux x64, 3.19 yadda, yadda...)

        transform: rotateY(180deg);

is the cause of the change.

I'm curious which browser stringham is using.

<comment><USER9> I see the scaleX(-1) on ChromeOS (42.0.2311.60 beta) and Chrome for Android (41.0.2272.96)

<comment><USER9> For Chrome on Linux (41.0.2272.101) I'm seeing the rotateY(180deg);

</comment></comment></comment></comment></comment><comment><USER12> For anyone who was wondering why Google spent so much time and money acquiring the .google gTLD, you now have your answer!

<comment><USER13> But then they should have acquired .elgoog instead.

</comment></comment><comment><USER14> When the user runs her own root, she can make tld's "disappear" by editing a text file. She can also create new ones.

Similarly "ICANN" can "create" tld's by editing a text file. As we all know, most users choose(?) to use dns caches run by someone else and the admins of those caches point them at ICANN's roots.

I would guess most users are not even aware they are making that "choice".

In either case, the cost of editing a text file^W^W^W^Wproduction of a tld is next to nothing. (Maintaining a network of globally reachable servers _and_ coercing dns cache admins at ISPs and elsewhere to use these servers is a separate matter.)

Yet ICANN can charge exorbitant sums for "creating a new tld", i.e., editing a text file. With relatively little work this strange "not for profit" organization can put most YC startups to shame: 1. Edit text file 2. Profit.

How is this possible?

Here is my guess: Because most users do not know how to run their own root let alone their own cache.

Here is my opinion: It is not difficult. 14 years ago djb made it very simple.

Of course, it is April Fools Day. Maybe I am joking and there really is something more to it?

<comment><USER15> Holy shit, I almost assumed it was true...

</comment></comment><comment><USER16> Preempted by elgoog, though: [http://en.wikipedia.org/wiki/ElgooG](http://en.wikipedia.org/wiki/ElgooG)

Although it's down now, so i guess this is the official Google replacement

<comment><USER17>
      Though originally created by All Too Flat "for fun",[1] it found practical use
      in the People's Republic of China after the domestic banning of Google, as it
      circumvented the government's firewalls.

Wow, that was unexpected.

</comment></comment><comment><USER18> Reminds me of elgooG[1], which was used to bypass Chinese firewall after Google was banned there.

[1] [http://en.wikipedia.org/wiki/ElgooG](http://en.wikipedia.org/wiki/ElgooG)

</comment><comment><USER9> TLD Source: [http://www.iana.org/domains/root/db/google.html](http://www.iana.org/domains/root/db/google.html)

Mirror implemented with:

      body {
        transform: scaleX(-1);
      }

<comment><USER19> It's actually

body { transform: rotateY(180deg); }

<comment><USER9> Using chrome, and chrome on android inspecting the source shows that it is

      transform: scaleX(-1);

<comment><USER20> failoverflow was actually right; while scaleX(-1) is present, it's overridden: [http://i.imgur.com/mNjGE0F.png](http://i.imgur.com/mNjGE0F.png)

It doesn't matter though, both transforms have the same effect.

<comment><USER9> On my Chromebook it doesn't override it with rotateY(180deg), but it does on my Linux machine running Chrome 41.

</comment></comment></comment></comment></comment><comment><USER21> Actually this one's pretty good.

</comment><comment><USER22> I was really hoping they had a second layer to their prank by having a search for "Java" show java source code with the `import com.google.whatevs` be replaced with `import whatevs.google.com`

</comment><comment><USER23> shouldn't it be [http://moc.elgoog](http://moc.elgoog)?

<comment><USER24> someone jump on the "eloog" tld stat.

</comment></comment><comment><USER25>
        $ host google.
        google has address 127.0.53.53
        google mail is handled by 10 your-dns-needs-immediate-attention.google.

        $ host your-dns-needs-immediate-attention.google.
        your-dns-needs-immediate-attention.google has address 127.0.53.53
        your-dns-needs-immediate-attention.google mail is handled by 10 your-dns-needs-immediate-attention.google.

Interesting.

<comment><USER26> I do not understand what's happening here. How does it resolve to a 127.0 address?

<comment><USER25> DNS A entires can resolve to any address you like; just, a 127.0 address is not very useful. What's strange is that someone would have set google. to point to a 127.0 address, and left that message in the MX record. (Usually TLDs have no records.)

Though I think I figured out the puzzle:

        $ host -t TXT google. 22.214.171.124
        google descriptive text "Your DNS configuration needs immediate attention see https://icann.org/namecollision"

[https://icann.org/namecollision](https://icann.org/namecollision) gives some interesting information.

</comment></comment></comment><comment><USER27> For all of you feeling that the huge expansion of gTLDs is incautious, wait till you get a load of unicode in DNS: [http://unicode.org/faq/idn.html](http://unicode.org/faq/idn.html)

Oh yes, and this is happening in gTLDs now, too.

I'm amazed how many places unicode has been jammed in without regard for how utterly unlike ASCII and left-to-right plaintext it is. Check out the vertical text overflowing its boundaries in Youtube comments. Also look at how Youtube's attempts to block keywords from spam are evaded by lookalike characters.

I suspect unicode's keepers won't be satisfied unless it can render any monochrome bitmap via a cryptic formatting language the rest of us still naively treat as plaintext in order to slap a "localizable" label on our software.

<comment><USER28> Come on...give the ICANN (or the next governing body) 20 more years to fix this and we should make it. Internet is only 25 years old and new gTLDs are celebrating their first year of anniversary.

</comment></comment><comment><USER29> Someone explain how this works!!

EDIT: I understand the mirroring, but not the DNS.

There isn't really a .google TLD, right??

<comment><USER30> > There isn't really a .google TLD, right??

There is. For I think ~$250K you can get a .burningfrog TLD too.

<comment><USER29> Aha!

Time for a Kickstarter!

</comment></comment></comment><comment><USER31> Weren't all April fools' posts supposed to be placed on the other thread? [https://news.ycombinator.com/item?id=9302010](https://news.ycombinator.com/item?id=9302010)

</comment><comment><USER32> They really should have purchased the tld elgoog just for this prank.

<comment><USER33> That'd be a 185,000 dollar prank!

</comment></comment><comment><USER34> Doesn't work in Safari. It searches for com.google instead. Confirmed with Safari that has Google as search engine and one that has DuckDuckGo as search engine.

<comment><USER35> Seems to work if you include [http://](http://) or [https://](https://) when typing the URL. (only tested on OSX, not iOS)

<comment><USER34> Ah, I never do that manually, so didn't think to try it.

</comment></comment></comment><comment><USER36> I wonder if this is going to stay up? It's actually a good exercise for the brain to read and write in mirror. Hey, it worked for Da Vinci...!

<comment><USER37> When my grandfather was bored, he turned books upside down and started reading from there :)

</comment></comment><comment><USER38> Unfortunately, com.google doesn't support the "do a barrel roll" command. That kind of attention to detail would have impressed me.

<comment><USER39> It actually does something similar

<comment><USER38> Maybe my wife typed in in wrong when I told her to try it. Or some enterprising Googler decided to be an MVP and push out a new release.

</comment></comment></comment><comment><USER40> all they did is

        body {
          transform: rotateY(180deg);
        }

</comment><comment><USER41> [http://nic.google](http://nic.google) has been up since they owned the domain.

</comment><comment><USER42> In case you're wondering, yes, there are custom TLDs now. They're called gTLDs.

[http://www.thedomains.com/2012/06/13/google-applies- for-101-...](http://www.thedomains.com/2012/06/13/google-applies-for-101-new- gtlds-amazon-77-microsoft-11-apple-1/)

<comment><USER43> There have been gTLDs forever. You might have heard of .com, for example.

Since 2011, the registration process for gTLDs has been opened up.

<comment><USER42> I had it in my head that those were called "core TLDs" and were separate from gTLDs, but Wikipedia agrees with you.

</comment></comment></comment><comment><USER44> Huh - the other domains in *.google are hitting a default page. Perhaps the most-robustly-hosted apache default page in the world?

[http://foo.google/](http://foo.google/)

[http://wewjfkenf.google/](http://wewjfkenf.google/)

</comment><comment><USER45> The question is: what is "CriOS"?

Edit: Ah, it seems to be used in the "Chrome for iOS" user agent string.

Weird that it can't handle iframes(?). Or what's the reason for the JS on com.google that redirects only the "CriOS" user agent to www.google.com without framing?

<comment><USER46> Generally, on pages/domains where you may provide users with a sign in box (such as the Google Accounts login page), you want to disallow other sites from iframing your page to prevent a clickjacking attack – [http://en.wikipedia.org/wiki/Clickjacking](http://en.wikipedia.org/wiki/Clickjacking)

So Google.com busts out of cross-domain iframes by default to prevent attacks like this.

<comment><USER45> Sure, and Google normally does disable iframing — the particular URL that com.google frames is configured to not serve the X-Frame-Options HTTP, allowing this trick to work. Clicking "Sign In" breaks out of the frame (target="_top").

But that goes for all browsers — I wonder why is Chrome for iOS is being singled out here?

<comment><USER47> Chrome on iOS has some input handling issues inside the iframe.

</comment></comment></comment></comment><comment><USER48> Rest of the .google pages (like a.google) show the nginx start page. Sounds like a last minute idea to host com.google. Even com.google uses an iframe with src google.com?igu=2

<comment><USER49> That's because *.google points to 127.0.53.53, aka your loopback device - <USER2> the nginx start page is coming from your machine!

       ➜  ~  dig a a.google

       ; <<>> DiG 9.8.3-P1 <<>> a a.google
       ;; global options: +cmd
       ;; Got answer:
       ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32515
       ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

       ;; QUESTION SECTION:
       ;a.google.			IN	A

       ;; ANSWER SECTION:
       a.google.		600	IN	A	127.0.53.53

       ;; Query time: 31 msec
       ;; SERVER: 192.168.1.254#53(192.168.1.254)
       ;; WHEN: Wed Apr  1 12:34:27 2015
       ;; MSG SIZE  rcvd: 42

<comment><USER50> Oh, it's a loopback domain? Did they register it for the same reason as .dev, purely to avoid reconfiguring their Intranet? :/

</comment></comment></comment><comment><USER51> Despite having the same google.com cookies, it doesn't show me as logged in. I guess they didn't have time to finish that in their UI reversal/mirroring.

<comment><USER52> It doesn't show you logged in because it's hosted on com.google, not goole.com.

As for the UI it's a simple css transfom: scaleX(-1) on the body. It's not a specific 'reverse' UI.

</comment></comment><comment><USER53> google could buy 1st level domain elgoog and then fool us with moc.elgoog

</comment><comment><USER54> I like how any other .google domain leads to a default IIS page

</comment><comment><USER55> Surprisingly, google points to a 127.0.0.0/8 address.

<comment><USER56> Nothing surprising: it was agreed that new gTLDs can't be naked.

</comment></comment><comment><USER57> Wow, search results are also mirrored, impressive!

</comment><comment><USER58> Ouch, that hurts just looking at it.

</comment><comment><USER59> Shouldn't it be moc.elgoog ?

</comment><comment><USER60> deyalp llew

<comment><USER61> on

</comment></comment><comment><USER62> I was expecting moc.elgoog

</comment><comment><USER63> That's so cool

</comment><comment><USER64> slooF lirpA yppaH</comment>


Netflix Prize - One Team's Account - <AUTHOR> http://www.spectrum.ieee.org/may09/8788

<comment><USER2> A great overview on ensemble techniques in machine learning (what BellKor and many of the top competitors use):

<http://abeautifulwww.com/EnsembleLearning.pdf>

</comment><comment><USER3> A fascinating account, I always have found discussions about the teams chasing this prize interesting.

Most interesting to me though was that it finally gave a clear description of how the contest worked. I've never looked into getting involved with the contest and the past articles I've read have rather glossed over the format and the way in which they run tests and judge entrants.

</comment><comment><USER4> Another good account: [http://www.nytimes.com/2008/11/23/magazine/23Netflix-t.html?...](http://www.nytimes.com/2008/11/23/magazine/23Netflix-t.html?pagewanted=all)

</comment><comment><USER5> Interesting article. As of 5/13/09 "BellKor in BigChaos" team in the article have improved the algorithm by 9.71%. (<http://www.netflixprize.com/leaderboard>)

<comment><USER5> Is the contest over, or is it an ongoing one?

<comment><USER6> No one's won the Grand Prize yet, for which they're still offering $1M.

It'd be fascinating to know how much each percentage point increases sales.

<comment><USER7> Accuracy of Netflix's recommendation algorithm is the wrong place to focus if you'd want to increase sales:

1) It is only perceptible after someone is a customer.

2) It is not strongly perceptible (people suck at precise measurements -- that is why we have computers tell us when the root mean squared error is 9.63% instead of just looking at our slice of 4 movie recommendations and saying "HOT DAMN that is better than last week -- you gave Saving Private Ryan 3.5 stars -- a strong improvement over your last rating of it at 3, which didn't quite represent my interest.")

3) It only affects a portion of the customer base. Netflix is a service for delivering movies, not for rating them. The feature is doubtless useful to many and of intense interest to a few, but there are equally doubtlessly many Netflix customers who don't even know it exists.

Now, there might be some bonus for having the _perception_ of having better accuracy (or, for that matter, geek cred) from having the Netflix prize... but that wouldn't be tied to the objective reality of whether the algorithm actually improved or not.

It is likely that A/B testing on the call to action in the signup button would moev the needle a lot more, for a lot less work. (Please don't stone me too harshly.)

<comment><USER8> RMSE also penalizes for a bad prediction of your 1000th-from-the-top best prediction as much as your top prediction.

Amazon's algorithm is actually quite simple (at least as much as can be extrapolated from the outside, and confirmed by interviews with the people that wrote it), but they do a lot of work to place recommendations in context. I think that's one of the critical places to focus on when looking at raw sales boosts.

<comment><USER9> Yep, context is key. I recall reading that Amazon found placing the "This is recommended because you bought book X" actually reassured their customers a lot. It seems like people prefer recommendation algorithms they can understand, rather than complex ones that may be more accurate.

<comment><USER10> Absolutely; makes me think back to this item (<http://news.ycombinator.com/item?id=590276>) - the power of 'because'; whatever follows because only has to sound plausible in the blink of an eye that will be spent assessing whether the user trusts/pays attention to what amazon is telling him/her.</comment></comment></comment></comment></comment></comment></comment>


Unveiling Intellectual Ventures' Hidden Web of Patents - <AUTHOR> http://www.indiegogo.com/IV-Thicket?c=home

<comment><AUTHOR> A friend of mine started this project:

"I just launched an Indiegogo crowdfunded project for my company. Our goal is to publish the entire patent portfolio of Intellectual Ventures, a notorious patent troll that uses 1000+ shell companies to anonymously sue growing businesses. If we are successful, we hope this will add some transparency to the patent system and level the playing field for startups."

I think this is a great idea!</comment>


Seven Bridges of Königsberg - <AUTHOR> https://en.wikipedia.org/wiki/Seven_Bridges_of_K%C3%B6nigsberg <comment><USER3> The bridges today in modern Kalningrad.

[https://www.google.com/maps/place/Knaypkhof,+Ulitsa+Kanta,+K...](https://www.google.com/maps/place/Knaypkhof,+Ulitsa+Kanta,+Kaliningrad,+Kaliningradskaya+oblast',+Russia,+email@example.com,20.5115908,16z/data=!4m13!1m7!3m6!1s0x46e33d8d4b7c21a9:0x5050960016126ed3!2sKaliningrad,+Kaliningrad+Oblast,+Russia!3b1!8m2!3d54.7104264!4d20.4522144!3m4!1s0x46e31611283b3c4d:0x7112c08b68959f4a!8m2!3d54.7069392!4d20.5086368)

It appears that the geometry has changed since Euler's time, or the diagram is incorrect. It appears that is the larger ( Lomse/ Oktyabrsky ) island that has the 4 bridges from the mainland rather than the smaller one (Kneiphof). Ironically; the topology appears preserved, so it doesn't actually matter, which underscores the point of Euler's achievement.

<comment><USER4> The cathedral on the island is beautiful and contains Immanuel Kant's tomb. It was bombed pretty severely in WW2, before that there were a bunch of buildings on the island:

> After the war, the cathedral remained a burnt-out shell and Kneiphof was > made into a park with no other buildings. Before the war, Kneiphof had many > buildings. One of the buildings was the first Albertina University building, > where Immanuel Kant taught, which was situated next to the east side of the > cathedral.

[https://en.wikipedia.org/wiki/K%C3%B6nigsberg_Cathedral](https://en.wikipedia.org/wiki/K%C3%B6nigsberg_Cathedral)

Picture of it prior to WW2 (featuring more bridges?): [https://upload.wikimedia.org/wikipedia/commons/3/38/Modell_D...](https://upload.wikimedia.org/wikipedia/commons/3/38/Modell_Dominsel_K%C3%B6nigsberg.jpg)

<comment><USER5> The cathedral got lucky as its skeleton, the walls, whats left after WWII fighting and bombing, were allowed to survive through the Soviet times. During 198x were was a flea/farmers market inside and behind it.

The Castle didn't get that luck - [https://en.wikipedia.org/wiki/K%C3%B6nigsberg_Castle](https://en.wikipedia.org/wiki/K%C3%B6nigsberg_Castle). It got bulldozed, and the boondoggle of Soviet glory - the "skyscrapper" (21 story in Kaliningrad region in 198x was almost mindblowing, add to that that it is on the top of the Castle hill, so it looms large over the city) - <USER2> still unfinished and

([https://en.wikipedia.org/wiki/K%C3%B6nigsberg_Castle#Current...](https://en.wikipedia.org/wiki/K%C3%B6nigsberg_Castle#Current_situation) ) "Continuation of development was stopped in the 1980s as the massive building gradually sank into the structurally unsound soil stemming from the collapse of tunnels in the old castle's subterranean levels. Many people call this the "Revenge of the Prussians" or "The Monster"."

These underground tunnels (Kenigsberg and Prussia as whole has a lot of them) were back then and i'd guess even more today the scene of active exploration, in particular for hidden Nazi stolen treasures (e.g. "Amber room"), weapons/munitions/etc. and just out of sheer curiosity ( after all it is centuries of history starting from Teutonic Order). So you sometimes would find yourself facing a problem of "N tunnels in three dimensions" with some of them flooded/leading into unknown/etc.

</comment></comment></comment><comment><USER6> My grandfather gave me a puzzle when I was 8 or 9 years old where the goal was to trace a path through each of the "walls" in the diagram below without the path crossing itself:

      </comment><comment></comment><comment></comment><comment>---
      |        |          |
      </comment><comment></comment><comment></comment><comment>---
      |    |        |     |
      </comment><comment></comment><comment></comment><comment>---

I played with it off and on for years and suspected that it was impossible. I realized that it is in fact impossible when I took discrete mathematics in college and we covered the Seven Bridges.

I've passed this on to my kids but only let them play with it for hours until revealing that it's not possible and getting into the theory of it.

I don't think my grandfather knows this is impossible, and I haven't yet remembered to tell him.

<comment><USER7> In fact, this five room puzzle is mentioned in the Königsberg article and also has an article of its own:

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

Your grandfather would likely enjoy discussing it with you!

<comment><USER8> Wow thank you! So I just learned the proper name of this "puzzle", which my father also showed me a long time ago (and for which I used to fill pages and pages of trials even though I knew that it had no solution), and which I tried to render as an "applet toy", a couple of years ago on my blog (see my other comment below).

<comment><USER9> It's interesting that there exists a solution (shown in the Wikipedia article), if you build the rooms on a torus. That would be the equivalent of digging a tunnel between two rooms.

</comment></comment></comment></comment><comment><USER10> The discussion of the "Variations" section is interesting. Apparently the person who inserted it (and had it removed several times) won't give a citation but also won't come out and say that they made the examples up themselves. Nobody ever calls out the useless introduction of German terms in the examples, and more importantly that (a) "Ritcher" is not a German word, and (b) even if it were a misspelling of some German word, it would not mean "church".

<comment><USER11> Having knowledge of the material and writing it down is considered a negative when it comes to creating Wikipedia content.

<comment><USER10> The way the section was phrased (it's removed now) it appeared to refer to some external source. The sentence "It is understood that the problems to follow should be taken in order, and begin with a statement of the original problem:" would make no sense otherwise. But if there is such an external source, it should be cited. This is the main problem. It's not about Wikipedia being a boring stickler for rules.

</comment></comment></comment><comment><USER8> I was fascinated by a "puzzle version" of this problem as a child, and a couple of years ago I wrote some little Processing applets to explore the idea of "gamifying" it:

[https://cjauvin.blogspot.com/2012/02/implicit- bridges.html](https://cjauvin.blogspot.com/2012/02/implicit-bridges.html)

[https://cjauvin.blogspot.com/2012/02/eulerian- hoax.html](https://cjauvin.blogspot.com/2012/02/eulerian-hoax.html)

</comment><comment><USER12> It's interesting that it's apparently the problem that laid the foundation for modern graph theory, but the problem can't actually be specified as a graph under its usual modern definition... can it? At least not without some shenanigans that would make it more complicated than "node = landmass, edge = bridge", as it's depicted in the standard diagram shown on Wikipedia.

A graph is usually defined as a set of nodes and a set of edges, where an edge is a pair of nodes (an ordered pair if it's a directed graph). The "set" of edges (bridges) of the "graph" in this case contains duplicates -- there are two edges with the same pair of vertices, two bridges crossing between the same pairs of landmasses. And the two pairs of duplicated bridges are essential to the problem setup. So AFAICT it can't be fully specified as a set of edges; it would have to be a multiset.

(I've seen this problem before but only just noticed this when reading Wikipedia now -- let me know if I'm missing something.)

<comment><USER13> A "graph" can sometimes implicitly mean a "Simple Graph" which has neither loops nor multiple edges between pairs of vertices, but in some contexts can mean "Multi-Graph", which does allow multiple edges and loops. So the usual conversion of the bridges problem to a network gives us a "Multi-Graph" ... the distinction is often left to be inferred, because it's usually obvious (to the skilled practitioner).

One way around this to end up with a simple graph is to include a vertex in the middle of each bridge. Then each edge has one end in the landmass and the other end in the middle of the bridge. That equivalence/conversion shows that the distinction, in this case, is effectively unimportant.

</comment></comment><comment><USER14> Some friends and I took a holiday to NYC a few years ago, calling it "Project Königsberg" as we attempted to travel all public transport entry and exits to Manhattan without duplication, over the course of 3 days. I was glad not to be involved in its planning, but very happy to participate!

</comment><comment><USER15> I loved the 2015 SIGBOVIK paper applying this idea to Pittsburgh bridges. Page 21 of [https://archive.org/details/SIGBOVIK2015/mode/2up](https://archive.org/details/SIGBOVIK2015/mode/2up)

</comment><comment><USER16> William Hamilton has an interesting variation of Euler's Seven Bridges puzzle [0] which asks whether there is a path visiting every vertex of a polyhedron exactly once. Strangely, while the complexity of detecting Eulerian paths is linear in the number of edges [1], the complexity of detecting Hamiltonian paths is NP-complete [2]!

Hamilton (who was also fond of crossing bridges [3]) developed some interesting algebraic structures to study the polyhedron problem [4]. I recently became interested in Eulerian and Hamiltonian paths after taking a class in Graph Representation Learning [5]. In it, I learned there are many interesting connections between algebra and graph theory [6] and started writing a library called Kaliningraph to study some of those connections [7].

[0]: [http://eulerarchive.maa.org/docs/originals/E053.pdf](http://eulerarchive.maa.org/docs/originals/E053.pdf)

[1]: [https://en.wikipedia.org/wiki/Eulerian_path#Hierholzer's_alg...](https://en.wikipedia.org/wiki/Eulerian_path#Hierholzer's_algorithm)

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

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

[4]: [http://www.kurims.kyoto-u.ac.jp/EMIS/classics/Hamilton/PRIAI...](http://www.kurims.kyoto-u.ac.jp/EMIS/classics/Hamilton/PRIAIcos.pdf)

[5]: [https://cs.mcgill.ca/~wlh/comp766/](https://cs.mcgill.ca/~wlh/comp766/)

[6]: [https://www.cs.yale.edu/homes/spielman/sagt/sagt.pdf](https://www.cs.yale.edu/homes/spielman/sagt/sagt.pdf)

[7]: [https://github.com/breandan/kaliningraph](https://github.com/breandan/kaliningraph)

</comment><comment><USER17> Soviet solution: bomb two of the bridges, therefore allowing an Eulerian path.

<comment><USER18> You mean an Alexandrian solution (to a Gordian knot?)

<comment><USER19> I think the GP was intended to be funny. (And, judging by the downvotes, HN still has zero tolerance for humor.)

<comment><USER20> Well, the HN/engineer solution would be to propose the building of a new bridge.

Then we could have a big discussion about funding strategies, metallurgical esoterica, cutting edge topological algorithms for determining best place to add a vertex in the graph, and/or history of Roman land jurisdiction. And we'd all learn something.

<comment><USER21> The problem states seven bridges, not seven or more. Clearly, the engineering would be a tunnel.

(the beaver solution would be a dam. "List of mathematical problems solvable by beavers")

</comment></comment></comment></comment></comment><comment><USER22> i was extremely lucky and had a great math teacher who pulled this one on us in 10th grade.

Good times.

</comment><comment><USER23> Who cares about bridges when you can swim ?</comment>


Show HN: Make your words more AESTHETIC - <AUTHOR> https://github.com/BourgeoisBear/A-E-S-T-H-E-T-I-C <comment><AUTHOR> Yep. Not much longer before I start carrying Werther's Originals around in my pockets for no particular reason.</comment>