Building a PGP web of trust that people will actually use - <AUTHOR> http://bitcoinism.blogspot.nl/2013/09/building-pgp-web-of-trust-that-people.html <comment><USER2> "If we assume the purpose of a WoT is to unambiguously and unimpeachably map public keys to human beings"

Why would we assume that? I can think of a few other use-cases:

* I want to verify the PGP keys used to sign packages in some GNU/Linux distribution

* I want to verify the keys used by anonymous remailers (or at least a PGP key used to sign a mixmaster / mixminion pub key)

* I want to verify the PGP key used by a business to sign official messages (such businesses do exist, as I found out a few months back)

It is also wrong to think that the purpose of the web-of-trust is to unambiguously or unimpeachably map public keys to anything. The web-of-trust is a heuristic that makes a particular kind of impersonation more difficult, so that PGP is more convenient to use. If you need something unambiguous you need to manually verify keys (which most people do anyway).

<comment><USER3> I think it is reasonable to observe that the current PGP WoT is designed to try to unambiguously and unimpeachably map public keys to entities (if not necessarily literal human beings). It is ambiguous to me in the original text whether the author was claiming that _all_ WoTs must have that characteristic or if he was just describing the current one.

Personally I think this has been a problem with many security systems so far. You _can 't_ be 100% confident about anything, so building a system in which that is a fundamental element is doomed to fail. See also the SSL/TLS cert system, in which it is assumed that you 100% trust all the cert vendors in your key store, absurd even before we consider the default key store inflation over the years. If WoT is going to work, it's going to have to have some concept of levels of trust. I'm willing to sign my wife's key with the highest authority I can give. I'm willing to sign the dev I meet at some meetup and who definitely seems to have the same personality and knowledge as the guy I know online with a medium degree of trust. I'm willing to sign other people with low degrees of trust.

Sure, dealing with the consequences of partial trust are difficult. But since you can't have full trust, it is in less difficult than our current systems based on it, inasmuch as a thing that is possible is less difficult than a thing that is not possible.

<comment><USER4> > I think it is reasonable to observe that the current PGP WoT is designed to > try to unambiguously and unimpeachably map public keys to entities (if not > necessarily literal human beings).

I don't really think the PGP WoT can "unambiguously and unimpeachably" provide that mapping, or is even intended to. At best, I think that the WoT _documents trust relationships_ between entities with keypairs.

I actually really like this feature of the WoT, because I think it does a good job of simulating the actual trust relationships between people in real life. In a private conversation, I might imagine a friend vouching for someone another person as trustworthy; a key signature from my friend does something similar, in a secure fashion. This is good because I don't _want_ my web of trust or social network to be able to say "this key is certain to be trustworthy": after all, it can't actually guarantee that. But I don't mind seeing trust opinions from my friends, and their friends' friends.

If anything, I think the trust relationships in GPG ("unknown", "marginal", "full") are too unclear, and I know that these numbers mean different things to different people. I'd prefer the ability to add a short note to the signature so I could say something like,

"I know this person well and you can be confident that this key is theirs, but I don't think they're careful enough to trust their signatures."

<comment><USER5> I've never understood why a weighted WoT system has never become popular. I trust some friends implicitly, and I trust some other friends less. I trust friends of friends, but generally less than I trust direct friends. I'm still willing to trust someone who two friends friends know, and if you can trace me a dozen lines to Kevin Bacon, I'll trust him, too. Sure, there's some hard graph theory and weighting to be done, but I can't imagine those aren't problems that can be solved with modern big-data techniques.

<comment><USER6> Because what does partial trust actually mean?

If someone sends you an email and you partially trust the key, how does that map to the contents of the email? How does it map to executable code? Source code? Images? Digital signatures?

It's like saying some people's trust is a square circle. It's a correct sentence but it doesn't map to any meaning usefully.

<comment><USER4> As two examples: Partial trust means you trust a key for different purposes, or for different levels of validity.

Different purposes: "Do I trust that this key correctly identifies this person?" is a separate question from "Do I trust this person to do proper verification before signing others' keys?" (i.e., trusted link in the Web of Trust)

Different validity: "I've met this person and verified they own the key", is different from, "They've identified themselves with two forms of government ID", is different from "I've known them all my life".

</comment></comment></comment></comment></comment></comment><comment><USER7> I agree 100% with the idea that we need to build the next generation web-of- trust so that from the user's perspective it looks like a social networking app/game.

Trust grows organically as your interact with others. Our computational model of "trust" needs to work the same way.

Part of the problem with existing web-of-trust usability is that it makes "trust" too explicit and coarse. It would make more sense to tell the user "this message is signed by the same person you've had 70 conversations with before, and who has liked 40 of your photos" or "this message is signed by someone you've never interacted with before, but they have a long history of interacting with your friends X, Y, and Z".

</comment><comment><USER8> I think signing someone's identity + other attributes is a very interesting idea. One problem that could be with such a system is the "mixing of the worlds" issue: knowing my email address, you could look up my profile and see a lot of personal information about me (any attribute someone has signed for me).

A possible solution to this could be to use "partial disclosure" of attributes associated with an identity. In an authentication scenario, the server learns the attributes I disclose (or a function there of), and nothing else. I think this is called a "zero knowledge proof". If I have to prove to an authority that the I am over 18, I could reveal only the answer to ((me.date_born - time.now()) > 18 yrs) and not my actual birth day.

This idea was invented and developed by Prof. Stefan Brands who was at McGill at some point, but then started a company around the technology. Later Microsoft bought them.

[http://arstechnica.com/information- technology/2010/03/micros...](http://arstechnica.com/information- technology/2010/03/microsoft-open-sources-clever-u-prove-identity-framework/)

[http://en.wikipedia.org/wiki/U-Prove](http://en.wikipedia.org/wiki/U-Prove)

Now the tech is open sourced under an Apache License:

[https://uprovecsharp.codeplex.com/SourceControl/latest#UProv...](https://uprovecsharp.codeplex.com/SourceControl/latest#UProveCrypto/README.txt)

</comment><comment><USER9> Retroshare has a PGP web of trust, too, but I suppose it's not the most user friendly.

It seems they've just released a web interface for it:

[https://retroshareteam.wordpress.com/2013/08/29/retroshares-...](https://retroshareteam.wordpress.com/2013/08/29/retroshares- web-interface/)

<comment><USER10> > but I suppose it's not the most user friendly.

What makes you say that?

Personally, I found it to be very user friendly. You just exchange your public keys with your friends and your all set.

</comment></comment><comment><USER11> > Most frequently of all, however, is that the key signing party never happens > at all.

As with many problems, the tech isn't the issue, it's the social side of things.

<comment><USER12> I was thinking if the WoT every becomes as easy/popular as social networks, it will be inherently untrustworthy. Has the author forgotten about how common impersonation is on Facebook? And how many people access social networks from public machines or rootkitted/trojaned devices?

</comment></comment><comment><USER13> In trying to actually use PGP, I think the first step is well integrated mobile clients! Everything is pretty much crap on iOS and Android with regards to PGP when I tried a week ago. If I can't use it on my mobile, I might as well not use it at all.

<comment><USER14> On Android I use the K-9 Mail app with APG for encryption, works like a charm.

<comment><USER15> Works yes, like a charm, not quite, still no support for pgpmime and APG hasn't really had any development in a few years.

On the positive side the guardian project is working on a full port of gpg, and see to be making good progress, [https://guardianproject.info/code/gnupg/](https://guardianproject.info/code/gnupg/).

</comment></comment></comment><comment><USER16> There's a big contradiction in the article.

"We also need to take advantage of mobile computing technology. Secure key exchange has to occur through tamperproof channels... The rest of this proposal assumes that we can trust the hardware we own. This is a known-false assumption, and an urgent problem, but solving it is something that will have to be handled via other efforts."

But wait, the smartphone is not a tamperproof channel, and this borks the proposed scheme. Unless you've rooted your mobile, it is subject to remote control by the vendor. The attack mode would be swapping a public key, then you're talking to someone other than whom you think you're talking to.

A desktop or mobile, running "Free" software, can be in practice secure enough for reasonable trust, but not a captive phone.

Kudos on the effort to get WoT going, tho - we really need it as the CA scheme has been a house of cards.

<comment><USER17> If my phone is compromised, then my identity is compromised — it can access my e-mail, 2-factor tokens and phone calls.

<comment><USER18> well… the problem is, that it can, indeed

</comment></comment></comment><comment><USER19> This is an excellent suggestion. I imagine a future where when we meet people in real life, rather than ask, "what is your phone number?" we ask, "what is your public key?"

<comment><USER2> I doubt it. The trend has been towards things that are easier to remember than phone numbers, and public keys are much harder to remember. If public key encryption ever becomes commonplace for personal communication, it will probably be via identity based encryption; if a web of trust is involved it will be between IBE authorities.

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

<comment><USER20> Well, you're right. The exchange may end up being more like a NFC tap of phones, giving both a phone number and public key.

</comment></comment></comment><comment><USER21> "Cheating by manually creating signatures without actually meeting in person: is this an actual problem, and if so, how could it be fixed?"

First naive thought for a fix (if it is indeed a problem):

\- Keys managed by phone (assuming phone is trustable)

\- phone displays some signed fact as, for example, a QR code, for the 1st person 'exchanging' keys.

\- 2nd person in the WoT transaction takes a photo of 1st person holding QR display up next to face.

\- <insert CV/Facial Recognition/Mapping/Whatever Magic + QR code analysis>

\- repeat for 2nd party, with roles reversed.

</comment><comment><USER22> We plan to implement a web of trust at the protocol level in Tent ([https://tent.io](https://tent.io)) before 1.0. Tent already allows users to store arbitrary data on their own servers and send it via webhooks to other users.

</comment><comment><USER23> the main issue with pgp... and really i mean the gpg implementation, which everyone but symantec uses, is that its far from user frienly. its unintuitive even for experts. its not impossible to use either but its pretty painful to setup.

that and being misunderstood, both design and some functionalities

</comment><comment> mike-cardwell I'm not a massive fan of the PGP WOT. The way people sign each others keys and then push the signatures to the keyservers. It's kind of like publishing your contact list for everyone to see.

And I say this as somebody who uses PGP many times a day.

<comment><USER24> If you are concerned about leaking your associations via public key signatures, you could use (and request that your contacts use) local/non- exportable signatures. That way you will be able to keep track of your trusted keys locally, but your signatures (and the associated metadata about your contacts) cannot be exported, either directly or to a keyserver. You can do this with `gpg --lsign-key`. Enigmail also exposes this option in their GUI, as a checkbox in the "Sign Key" dialog.

Of course, this reduces the utility of the web of trust, but within the current design of PGP this tradeoff is inevitable.

</comment></comment><comment><USER25> How about using a bitcoin-like distributed blockchain to store proof events/transactions and use wallet balance as reputation?</comment>


Pesticide Spraying in Harvey's Wake a Toxic Boon to Agrochemical Giants - <AUTHOR> http://www.mintpressnews.com/post-harvey-insect-control-damage-humans-honey-bees/231855/ <comment><USER2> Is this section true? That a pesticide is now believed to be behind the birth defects that were blamed on the Zika virus?

 _This is especially troubling given that the manufacturer of Naled, Sumimoto Chemical Corp., is also the manufacturer of the mosquito larvicide SumiLarv, a chemical now believed to have been the real culprit behind the spike in birth defects in Brazil originally attributed to the Zika virus._

<comment><USER3> here's the paper I beleive they are referring to, [http://www.biorxiv.org/content/biorxiv/early/2016/04/13/0485...](http://www.biorxiv.org/content/biorxiv/early/2016/04/13/048538.full.pdf)

"A Possible Link Between Pyriproxyfen and Microcephaly Dan Evans, Fred Nijhout† , Raphael Parens∗ , Alfredo J. Morales∗ and Yaneer Bar-Yam∗ ∗New England Complex Systems Institute, 210 Broadway Suite 101, Cambridge MA 02139, †Department of Biology, Duke University, Durham, NC 27708 (Dated: April 13, 2016) The Zika virus is the primary suspect in the large increase in microcephaly cases in 2015-6 in Brazil, however its role is unconfirmed despite individual cases of viral infections found in neural tissue. Here we consider the alternative that the insecticide pyriproxyfen, used in Brazilian drinking water for mosquito control, may actually be the cause. Pyriproxifen is an analog of juvenile hormone, which corresponds in mammals to regulatory molecules including retinoic acid, a vitamin A metabolite, with which it has cross-reactivity and whose application during development causes microcephaly. Methoprene, another juvenile hormone analog approved as an insecticide has metabolites that bind to the retinoid X receptor, and causes developmental disorders in mammals. Isotretinoin is another example of a retinoid causing microcephaly in human babies via activation of the retinoid X receptor. Moreover, tests of pyriproxyfen by the manufacturer, Sumitomo, widely quoted as giving no evidence for developmental toxicity, actually found some evidence for such an effect, including low brain mass and arhinencephaly—incomplete formation of the anterior cerebral hemispheres—in rat pups. Finally, the pyriproxyfen use in Brazil is unprecedented—it has never before been applied to a water supply on such a scale. Claims that it is not being used in Recife, the epicenter of microcephaly cases, do not distinguish the metropolitan area of Recife, where it is widely used, and the municipality, where it is not. Given this combination of information we strongly recommend that the use of pyriproxyfen in Brazil be suspended pending further investigation. "

<comment><USER3> I'm not sure about the credentials of the 'New England Complex Systems Institute', though the authors have written other papers.

On the question of what pyriproxyfen does, I came across this, "Pyriproxyfen is a potent suppressor of embryogenesis and later development that competes for juvenile hormone receptor binding sites and disrupts the transition from one developmental stage to another [6]–[8]. The mode of action of pyriproxyfen is not fully understood due to the lack of a known signalling pathway and/or a receptor molecule. " from [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3275616/](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3275616/)

So if this is still the case, people do not fully understand how pyriproxyfen does what it does, which is not that great.

<comment><USER3> "The WHO has congruently pointed to the use of insecticides – particularly larvicides – on sizeable containers of water to aid in mosquito eradication (87). Conversely and controversially, the Argentine-based group Physicians in the Crop-Sprayed Villages has implicated the larvicide known as pyriproxyfen as the source of the soaring rate of microcephaly in Brazil rather than 18 ZIKV itself (83). The report states that by quickly connecting microcephaly in newborns to the spread of ZIKV, the Brazilian Ministry of Health, PAHO, and WHO have put the commercial interests of the chemical industry above the well- being of the environment and the people, failing to identify that the areas where this larvicide has been introduced into drinking water are the same regions where microcephaly has exploded (81). The group supports their claims by affirming that no birth defects were found to be associated with previous ZIKV epidemics, and that in countries such as Colombia, there have been thousands of ZIKV cases but no documented instances of babies born with microcephaly (81). Based on previous examples of negligence in identifying the causes and scope of illnesses described in this analysis (AIDS and Lyme disease), there are evident hazards in allowing the supposed experts to dispose of a claim rather than investigating additional possibilities (55). However, in this situation, while it is still imperative to retain an open mind and not reject any factors that may play a role in the disorder – particularly when business and chemicals are involved – empirical findings suggest that ZIKV is likely the primary culprit in the upswing in microcephaly (83). "

Nature's Games: Will the Global Medical Community Triumph Over Zika Virus? file:///F:/Chrome%20Downloads/eScholarship%20UC%20item%205n01487n.pdf

<comment><USER3> [https://www.nature.com/articles/srep40067](https://www.nature.com/articles/srep40067)

04 January 2017 "Our data indicate that pyriproxyfen does not affect central nervous system development in zebrafish, suggesting that this larvicide on its own, may not be correlated with the increase in microcephaly cases reported recently."</comment></comment></comment></comment></comment>


Apply HN: Coconut– Baxter for managing organization data - <AUTHOR> --Story--
A while ago I worked in a call center at a university. Their business software was a mess of hacked tools and scripts because their needs were constantly changing. The cool part? The student leads were the ones implementing the business rules.
The idea is to build a flexible and fun tool for managing organization data. Things like: call center tickets, work orders, incident reports, media requests, event requests, feature requests, etc.
--Business--
SaaS. This is a crowded field with many specialized solutions but I believe that the available solutions aren't right for many organizations. <comment><USER2> Isn't the proposed solution very close to a typical CRM? Maybe I'm wrong

<comment><AUTHOR> Yes.. but the problem is what if you need to manage data across a CRM as well as something like an ITSM?

For companies that are managing one specific type of data and that alone-- for example a support desk-- something like Zendesk works perfectly. Those aren't the types people this would be able to help.

It's the organizations that might do many different things at the same time-- maybe one or two people are managing customer requests as well as checking in and handling customer inventory with a special workflow. For example, at the University I worked for we whitelisted the MAC addresses of hundreds of customer devices using a special procedure that changed every couple months.

This tool would allow people to easily manage that work and keep that that workflow up to date. This would cut down on mistakes and make things go a lot faster.</comment></comment>


QuickMockup is a simple tool for creating mockups of interfaces and websites - <AUTHOR> https://github.com/jdittrich/quickMockup <comment><USER2> very cool; simple enough that anyone can use.

I'd bind js key codes 8 (backspace) and 46 (delete) to the `delete Element` action though.</comment>


The planet is on edge of a global plastic calamity - <AUTHOR> https://www.theguardian.com/environment/2018/jun/05/the-planet-is-on-edge-of-a-global-plastic-calamity <comment><USER2> It would be great if Atlas Obscura or the like could do an article on alternatives: what did we do 25, 50, 100 years ago?</comment>


Avoiding Webscraping Throttling Using Python and Tor as a Proxy - <AUTHOR> https://boredhacking.com/tor-webscraping-proxy/ <comment><USER2> While this is intellectually interesting, I'm troubled by the fact that the author seems not to have given the slightest thought that he's breaking the site's T&C, or of how much this abuse costs the service.

I'm particularly sensitive to this because I'm constantly dealing with scraper bots from competitors that are trying to monitor our pricing. Without our ongoing policing, and a fair amount of developer time going into it, the traffic coming from these bots - and hence the amount it costs us to operate the site - is significantly larger than that of actual customers. Let me say that again: scraper bots account for more traffic on our sites than do legitimate customers.

<comment><USER3> > breaking the site's T&C

T&C's have absolutely no bearing on publicly accessible information [1][2][3]. They only apply to registered users accessing login-required portions of your website or application. Browsewrap does not represent a legally binding contract, no matter how much you pay your lawyers to write up your irrelevant T&C's.

[1] [https://www.eff.org/deeplinks/2018/04/scraping-just- automate...](https://www.eff.org/deeplinks/2018/04/scraping-just-automated- access-and-everyone-does-it)

[2] [https://www.eff.org/deeplinks/2018/04/dc-court-accessing- pub...](https://www.eff.org/deeplinks/2018/04/dc-court-accessing-public- information-not-computer-crime)

[3] [https://www.eff.org/deeplinks/2018/01/ninth-circuit- doubles-...](https://www.eff.org/deeplinks/2018/01/ninth-circuit-doubles-down- violating-websites-terms-service-not-crime)

<comment><USER4> The world is a lot larger than just the United States. Besides that, even publicly available information can be copyrighted. So the scraping itself may be legal, storing that information; using it and re-publishing it very likely is not.

<comment><USER5> > The world is a lot larger than just the United States.

Where would this be significantly different? For T&C to be valid, you'll have to agree to them _before_ using the service. Since you generally can't know, much less agree to, the T&C of a website before using that website, you have a chicken & egg problem where the law tends to come down on "these T&C aren't binding" imho.

You're right about the re-publishing though. Storing is likely a different issue, even browser-caching is storing; iirc there were court decisions in Germany that essentially argued that even having data in memory is creating a copy.

<comment><USER6> In Germany there was a recent ruling that scraping, even for competing purposes, is fine.

[https://www.heise.de/newsticker/meldung/Urteil-zu-Screen- Scr...](https://www.heise.de/newsticker/meldung/Urteil-zu-Screen-Scraping-BGH- legt-schriftliche-Urteilsbegruendung-vor-2236236.html)

</comment></comment></comment></comment></comment><comment><USER7> It's overkill to use Tor for this. And I'm a little surprised that it works at all well, because Tor exits so commonly trigger CAPTCHAs.

Better, I think, would be using HTTPS proxies. But not free ones, which tend to get burned down pretty quickly. There are sites that lease private proxies, and guarantee that they work.

<comment><USER8> There are such paid proxy services that provide you with a refreshable IP pool. Unfortunately, you can't control which IP they give you at each request (or when you can, your request rate drops significantly) so they do not work with websites which require you to keep a session alive.

<comment><USER9> I use crawlera, and it does have the capability to establish and maintain a session. I can't pick the precise initial IP but once the connection is made I can certainly tell it to keep using that IP.

Sessions are the only way to use crawlera with libraries like cloudflare- scrape, which pin your authentication to a specific IP.

<comment><USER8> That is interesting. $1000 tier is a considerable amount, but perhaps one can find a profitable line of products to justify the price. Of course, this is too expensive for initial development most of the time, so I'd go for an in- house network of machines initially.

</comment></comment></comment></comment><comment><USER10> Well, Tor is usually blocked. If you want something more reliable, use private proxy services, for example [https://gimmeproxy.com](https://gimmeproxy.com)

</comment><comment><USER11>
        2a0b:f4c1::7

How is that an IPv4?

<comment><USER12> xxx.xxx.xxx.xxx and the mask. in his example: 2a = 42; 0b = 11; f4 = 244; c1 = 193; mask = 7 (weird i know) so the IP is actually 220.127.116.11. A short trip to any free IP locator site says that IP is from South Korea

</comment></comment><comment><USER13> If only websites have their data dumps for free instead of html reverse engineering.

</comment><comment><USER14> Could scraping through TOR be risky if site has different content depending on the visitor's IP? Or does TOR allow you to control for that (e.g. get only IPs from a specific location)?

<comment><USER15> You can use ExitNodes in your torrc to set a country code, e.g. {us}.

</comment></comment><comment><USER16> Not sure how long this will last since there are a limited number of exit nodes. Many networks throw up CAPTCHA for such nodes.

<comment><USER17> Ah, yes, the captcha arms race. I've encountered bots that can solve simple text captchas (especially bots routed through Tor) and as ML gets cheaper and more accurate I do wonder what the end result will be...

<comment><USER18> Well, for Tor in particular, the most likely end result is Tor being banned from an increasing number of websites.

<comment><USER7> That already happened.

<comment><USER19> Yeah honestly surprised scraping through tor would work. I imagine most commercial solutions routinely block exit nodes.

<comment><USER20> Depending on how you read the embargo laws for your country, you may be required to block them. If you identify the source of the traffic as a non- country, dropping it may be what you want to do.

</comment></comment></comment></comment></comment></comment><comment><USER21> It's higly likely that a web site will greet any connections from Tor with captcha.

</comment><comment><USER22> Cool article but couldn't you just spoof your IP using something like socket?

<comment><USER22> Replying to myself here. This will not work because the packet still has to go back to the spoofed address. What a poorly thought out comment.

<comment><USER23> One could test to change ipv6 address, it might work.

</comment></comment></comment><comment><USER8> This method will not work for many websites that require you to stay logged in.</comment>


Ask HN: Do you accept advertising from online poker sites? - <AUTHOR>

I run a fantasy sports website in the US, and I was contacted by a poker site that wants to place a button ad on my site.
Should I accept ?
Is it ok to displays ads for oversees gambling sites ? do I risk anything ?
Thanks for your feedback! <comment><USER2> If this is real poker (meaning, with real money), I would stay far, far, away... I don't think anything would happen in the short term, but it's just such a slippery slope, don't get me started.

<comment><AUTHOR> all right, I will stay away from it... my partner was a bit reluctant anyway.

</comment></comment><comment><USER3> Sounds like it could come with some headaches (bots, google thinking the wrong things about your site, potential for your users to get scammed, etc).</comment>


Immigrants and Billionaires: Why Are We Blaming Them? - <AUTHOR> https://gregness.wordpress.com/2020/04/26/immigrants-and-billionaires-why-are-we-blaming-them/ <comment><USER2> It's easy to blame the government too. How dare it run on old technology just because we under fund and expect it to fix all societies problems.

<comment><AUTHOR> If there was a correlation between tax rates, revenues gathered and services etc at local level I think you would have a valid point. But cities with high taxes don't seem to have any fewer problems than those with lower tax rates.. unless you see some data.

</comment></comment><comment><USER3> White supremacist much?

Wow your super-white successful family succeeded at blending in. It's all entrepreneur spirit and hard work, you dumb brown 'people'! Don't blame the exploiting billionaires who are spared taxes and gorge at the trough of public spending!

<comment><AUTHOR> So because there is a mention of Norwegian heritage it's only talking about "white" immigrants? So if he had said Hispanic, etc he would be OK.</comment></comment>


Bisecting Floating Point Numbers - <AUTHOR> http://squishythinking.com/julia/2014/02/22/bisecting-floats/ <comment><USER2> I like numerical methods like this because they sit neatly in the space between high level algorithmic ideas and low level implementation details.

The library CGAL has many clever algorithms with floating point numbers. Its strength lies in the mixture of numerical approximation and exact computation it does to solve problems.

<comment><USER3> Any specific algorithms in CGAL you found particularly clever?

</comment></comment><comment><USER4> Great post!

It may interest you that William Kahan has written quite extensively on the pitfalls of iterative algorithms on floating point numbers; his discussion of Muller's pathological recurrence on pp. 14+ of this paper seems particularly relevant.

[http://www.cs.berkeley.edu/~wkahan/Mindless.pdf](http://www.cs.berkeley.edu/~wkahan/Mindless.pdf)

</comment><comment><USER5> This doesn't work if the output of the function you're checking is a noisy black box. For example, if fn() creates a finite element model, analyses it with an external software package, and post-processes the results to get an output value, you're gonna need a pretty high tolerance for your stopping condition.

<comment><AUTHOR> If your function isn't a mathematical function (i.e. its output is not completely determined by its arguments), then it's a little confusing to figure out what isolating a root would mean. But even in that case, bisect_root terminates, because it _always_ halves the interval at each step, even if your input procedure is returning nonsense. Witness

        julia> bisect_root((x) -> rand() - 1/2, 1.0, 2.0)
        (1.1980511149266218,1.198051114926622)

        julia> bisect_root((x) -> rand() - 1/2, 1.0, 2.0)
        (1.595600613503659,1.5956006135036591)

<comment><USER5> "...it's a little confusing to figure out what isolating a root would mean. "

Well, to take an example from some of my past work as a structural engineer, say you wanted to find out how much wind load a structure could sustain until it buckled under its own weight. So you create a finite element model of the structure that applies the wind load and then ramps up the gravity until the structure fails. The input is the magnitude of the wind pressure. The output is the total gravity at failure (in units of g). subtract 1 from the output, and you have a function where the root is the level of wind load you're looking for.

You're point about it always terminating when you use the bisection method is well taken, however. I was using a hybrid that included some Newton's method iterations to reduce the total number of steps, since each "function evaluation" took a lot of computer time.

</comment></comment></comment><comment><USER4> Good! Instead of (x1 + x2)/2, it is better to do x1 + (x2 - x1)/2 [source:kdbuo]

</comment><comment><USER6> Floats are evil.

Here's some more fun you can have:

int main() { float a = 0x7FFFFFFF; printf("%f %f %f\n", a, a - 64, a - 65); return 0; }

<comment><USER7> Float may be evil, but if so they are often a necessary evil.

<comment><USER8> I dispute "often". I honestly can't think of cases other than certain scientific calculations where they are more appropriate than fixed-point numbers.

The fact that scientists had so much input on the early design of hardware and programming languages means that floats are often a performance hack that exchanges semantics for speed. But that's hardly necessary in most applications.

And if hardware and language support was better for fixed point numbers, floats would be seen as the bizarre special case that's only appropriate in rare cases.

<comment><USER9> How big improvements do you feel improved hardware fixed point support could yield, and what form might the improvements take? Imagining for example that Intel decided to make a instruction set extension in their next CPU.

<comment><USER8> Modern CPUs are already so complex and so fast that I can't imagine the potential speedup would be significant as compared to modern optimized fixed point libraries.

Language support is a much bigger issue. Programmers are fundamentally lazy, and will always do the thing that takes the least work (for them, right now). So for fixed point numbers to really be used, that means that they need to be fully first class in the language. Literals need to exist, and with syntax no more complex than it is for other numerical literals. And of course, all operators must use the same syntax for both.

This is hard to retrofit into a language. Java and C can't retrofit either in. C++, Python, and Ruby can do operators, but not literals. You have to get into pretty uncommon languages before support for additional numerical types becomes good. Haskell and Scala, for instance, can meet both of the requirements.

Given that, I'd say any kind of widespread use of fixed point numbers in the cases where they're more appropriate than floats is at least 30 years away. Maybe 50.

<comment><USER3> You should give some more concrete examples of domains where you think fixed point is more appropriate than floating point, but floats are currently used.

As it is, your comment can't really be discussed or disputed, because it's just an abstract complaint with no substantive evidence/analysis presented.

Here are some areas where I think floats are more appropriate than fixed point, given the availability of CPUs and GPUs with native floating point support: computer game physics, any kind of 3d rendering, 2d vector graphics including e.g. map rendering, high dynamic range image/video editing, most types of statistical analysis, ...

I'm having trouble thinking of any applications where I think fixed point numbers seem more appropriate than floats or integers, except code running on embedded devices without native floating point. Audio maybe? Image/video decoding for immediate playback?

<comment><USER9> Floating point is actually a significant source of bugs in 3D graphics and games. And a complex thing you have to constantly keep in mind, taking cognitive resources from other more useful stuff. And a thing you have to code around, increasing the codebase complexity, making changes harder and taking time from programming/debugging/testing useful code.

CPUs and GPUs do have support for fixed point (aka integer) data formats, it's been a DX/OpenGL requirement for a while. Though I don't know what API issues you run into if you try to avoid FP altogether.

<comment><USER10> Floating point arithmetic is a significant source of bugs. And if you transition to fixed point arithmetic, you will still have a significant source of same-same-but-different bugs (maybe unless you really only need to add things and not never scale or multiply them).

<comment><USER9> What kind of bugs do you have in mind for fixed point?

While there no doubt would be some, I have a feeling they are a significantly lesser drag (in frequency and debugging complexity) than floating point bugs. Assuming the language supports fixed point.

Of course you can imagine error-prone fixed point too. Writing shaders with plain integers while trying to manually keep track heterogenous fixed point scales would be a nightmare for example...</comment></comment></comment></comment></comment></comment></comment></comment></comment>


'Radical Political Decentralization' Could End Nation States - <AUTHOR> https://news.bitcoin.com/radical-decentralization-end-nation/ <comment><USER2> Snowcrash!</comment>


Friedrich Nietzsche: The truth is terrible - <AUTHOR> https://www.the-tls.co.uk/articles/public/friedrich-nietzsche-truth-terrible/ <comment><USER2> Nice to see a good reading of Nietzsche, which is super hard given his style and your own bias.

I agree with this, and it really puts the focus on why it is rewarding reading Nietzsche today.

The only thing I miss is the implicit and hidden Spinozism in Nietzsche. Why it matters? - Spinoza can really help with the political aspect. Goal of true democracy and maximum freedom.

Such a reading will see The will to Power as the Spinozian conatus/desire. As for Power, not opressive power of rulers, but the power to live and act. The affirmation as Spinozian affirmation of joy (ie affirmate what makes you grow in such power)

</comment><comment><USER3> Enjoyable read but quite the dire ending. Of course that's the point; this essay wasn't meant to bring you happiness.

</comment><comment><USER4> Leiter tends to take Nietzsche very literally.

Yes, Nietzsche grasped quite clearly that exceedingly few people have the courage to endure the world "in itself." Most people persist their whole lives trapped in elaborate fantasies. This is something that, Nietszche suspects, has been true since the dawn of time and recognizes it as an essential human characteristic (herd instinct).

Science causes a kind of crisis. ("God is dead.") After millenia of extreme devotion to all manner nonsense (think of the religious wars that plagued Europe) science starts asking some very uncomfortable and very pointed questions. But people will not abandon their fantasies, even in the face of overwhelming evidence to the contrary. Instead they will cling to their fantasies that much harder often with full knowledge that what they "believe" are lies. This metastasizes into fascism [1]. When Trump says climate change is a Chinese hoax he knows he's lying, and you know he's lying, and accusing him of lying would be pointless and that's the point. Nietzsche foresaw quite clearly that this would be the crisis of the 20th century and beyong: in the face of science people would become _more willing_ to deceive themselves.

What Nietzsche proposes against this isn't some tired paean to "human excellence." Leiter here gets very literal and selective here. Nietzsche does not think that art or philosophy or dance can stand against the ever rising tide of fascism. It is what _motivates_ these things -- the _will to power_ \-- that is the only defense against self-deception. All fantasies are born of fear, a fear of change and growth and death. But there also exists in some men a _desire_ for change and growth and death. (Indeed Nietzsche will come to believe that the will to power is a kind of cosmic necessity.) The only hope that societies have against falling to fascism is cultivating precisely this opposing force which Nietzsche understands not as some mere "will to truth" or "will to excellence" but a far more primal "will to power" that motivates men to plunge into the unknown and confront their own mortality.

[1] "In an ever-changing, incomprehensible world the masses had reached the point where they would, at the same time, believe everything and nothing, think that everything was possible and that nothing was true. ... Mass propaganda discovered that its audience was ready at all times to believe the worst, no matter how absurd, and did not particularly object to being deceived because it held every statement to be a lie anyhow. The totalitarian mass leaders based their propaganda on the correct psychological assumption that, under such conditions, one could make people believe the most fantastic statements one day, and trust that if the next day they were given irrefutable proof of their falsehood, they would take refuge in cynicism; instead of deserting the leaders who had lied to them, they would protest that they had known all along that the statement was a lie and would admire the leaders for their superior tactical cleverness."

<comment><USER5> > When Trump says climate change is a Chinese hoax he knows he's lying, and > you know he's lying, and accusing him of lying would be pointless and that's > the point.

That's hilarious-- you left out the one person who matters in your anecdote: the person who voted for Trump. I see no evidence that could lead you to assert that a Trump voter picked at random would know that Trump was lying about climate change being a hoax.

On the flip side, I've seen _a lot_ of Republican politicians, pundits, and op-ed writers for years repeat the assertion that climate change is a hoax. So many, in fact, that we're now calling it "climate change" instead of "global warming." Why? Because those same demagogues preyed on the layperson's confusion of weather and climate, repeatedly pointing out cold weather days as some kind of refutation of "global warming."

Plus-- fucking climategate! What could possibly be the point of all the money and rhetoric poured into that phony controversy if not to _actually_ convince people climate change is a hoax by muddying the waters?

By positing this broad-- and frankly, untestable-- theory that a metaphysical Nietzshean breakdown is causing Trumpism you actually make it impossible to address the problem. And the problem is that millions of people _really do_ believe something that isn't supported by the broad, overwhelming scientific evidence. That's a tractable-- if depressing-- problem which lies mainly in the disconnect between the primary research and the current portals through which laypeople attempt to learn what the primary research says (if at all). (Also in the low quality of U.S. public education.)

> instead of deserting the leaders who had lied to them, they would protest > that they had known all along that the statement was a lie and would admire > the leaders for their superior tactical cleverness.

That way of thinking turns every single case of non-trivial politicking into a form of fascism.

For example: was Jill Stein acting as a fascist when she quite shamelessly hedged on vaccination in order to pander to her anti-vaxxer base?

<comment><USER6> > that we're now calling it "climate change" instead of "global warming." Why?

[https://climate.nasa.gov/resources/global- warming/](https://climate.nasa.gov/resources/global-warming/)

> Global warming

> Global warming refers to the upward temperature trend across the entire > Earth since the early 20th century, and most notably since the late 1970s, > due to the increase in fossil fuel emissions since the industrial > revolution. Worldwide since 1880, the average surface temperature has gone > up by about 0.8 °C (1.4 °F), relative to the mid-20th-century baseline (of > 1951-1980).

> Climate change

> Climate change refers to a broad range of global phenomena created > predominantly by burning fossil fuels, which add heat-trapping gases to > Earth's atmosphere. These phenomena include the increased temperature trends > described by global warming, but also encompass changes such as sea level > rise; ice mass loss in Greenland, Antarctica, the Arctic and mountain > glaciers worldwide; shifts in flower/plant blooming; and extreme weather > events.

</comment></comment></comment><comment><USER7> My takeaway from witnessing countless arguments about Nietzsche: Nietzsche wasn't very good at expressing what he meant. If he were, there wouldn't be so much arguing about how to interpret his works.

<comment><USER8> I always felt he was extremely articulate, and it is the typical readers preconceived filters preventing them from understanding Nietzsche sentence by sentence.

I have sat down with an unbelievably large number of people studying Nietzsche, as I was a teaching assistant for an undergraduate class on his work. Time and time again, I would be pointing out the basic, fundamental misunderstandings; The world view of the typical American Christian cloud their ability to think clearly about the basic nature of Nietzsche's perspective. They literally can't think logically straight, and bend meaning word by word with personal emotional criticism interlaced with "fear for their soul". They are intellectually handicapped, their thoughts are so interlaced with variations of fear.

<comment><USER9> I think it's ok. When they would instantly understand Nietzsche, it's very likely they already had major depressive episodes in their lives.

Otherwise it's difficult to question everything you thought you knew about anything. Normally it's not a pleasant experience. That is the reason that so- called enlightenment happens only to those who had big inner struggles after many years of reflection.

In a Freudian way their unconscious side protects them from threats attacking their mental health. Knowing what's right and wrong is necessary to do anything with reason. If you accept the fact that there is no right and wrong, you can definitely lose some motivation which is detrimental to the incentive system that our consciousness gets trained with.

It's therefore rational for most people to reject those ideas (although they don't necessarily can reflect on this level). I wouldn't call it "intellectually handicapped", I would say their mental processes protect them very well from thoughts that could lead to a loss of their values and belief system. Otherwise it sounds so negative although it's a rational thing to do for the consciousness. Normally your incentive system is not "I want to know the whole damn truth", it's "I want a happy and fulfilled life, want to feel good about myself and achieve something". Cognitive biases help us to achieve those goals. It just seems irrational from external point of views because of missing profundity in the analysis of the psyche of the other person. They're perfectly logical w.r.t. the incentive system.

<comment><USER10> I really appreciate the way you've articulated your thoughts on this. It helped me reflect once again on the way Nietzsche affected me when I first read him.

I was about 20 years old, and had lost several important friends while also briefly dropping out of college. Saw Nietzsche on a bookshelf while making an effort to continue my education independently as I saved money. I was young enough to earnestly jump into pursuing "the whole damn truth," and my mental health be damned. Cue years of unrelenting depressiveness, self-absorption, solipsism, fragile and tragic romantic relationships, etc.

I completely agree, and I think a lot of people who don't "get" Nietzsche are actually reacting to his ideas perfectly rationally with respect to their (not necessarily anti-intellectual) values in life. I for one would have been much more fortunate to have studied him in an academic setting, with a group of peers. I recall reading once that Nietzsche's ideas are valuable insofar as one finds a resistance to them.

<comment><USER9> It's funny. I had a nihilistic mindset and found Nietzsche afterwards. I guess we're similar. Therefore I didn't had the chance to have any resistance to his ideas.

Recently I've dropped out of college, I was lonely in school and even nowadays, had several relationships that didn't last long and were painful. I've endured the pain of existence until I was able to comprehend it. I still feel this suffering every time I choose to feel.

I'm 20 years old now. I know how to help myself, but maybe there are things you want to say to your younger self. Maybe I can invite you to see this as a chance.

<comment><USER11> I never got much into Nietzsche, but well, between being trans, and having seasonal depression, and having been stuck in rural Alaska for twenty years, we can say that I've seen some depressive episodes.

It does get better.

One thing that helped was leaving the negative environment. Also, some of my angst sprang from the disempowerment of youth; having more power ($$, or in Spanish, _effectivo_ ) to control the world around you makes most life problems easier to deal with. Philosophically, I became something of a Stoic: this may be the worst of all possible worlds, but there's not really much value in being depressed about it. You are not in control of the world, but you are in control of your reaction to it, and as long as the world is absurd one may as well laugh. However, the ultimate key to my depression was simply self-acceptance. Try to make peace with your demons; they're just another aspect of you.

I doubt if your life and mine have many true parallels, but that was my path out of darkness. I hope that you may find peace, and the warmth of good feeling.

<comment><USER9> > I became something of a Stoic

I can relate.

> However, the ultimate key to my depression was simply self-acceptance.

This is so important. Learning to love oneself is such a difficult task but so rewarding in the end.

Thanks for sharing your story, it was very inspiring.

> I hope that you may find peace, and the warmth of good feeling.

I'll try to remember to allow myself to find peace in hard times. I hope that you can feel the love and warmth in your life.

Your story gives hope. I feel blessed that you told us your philosophical journey. Have a great day!

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> The pragmatic views of Trump _are_ more in line with Nietzsche's philosophy. There _is_ a very small elite group that create wealth. Taxing the successful and giving out free stuff for votes seems to be the default position of the intelligentsia of the age. Nice read though, well constructed

<comment><USER13> That's false. Wealth is created by needs of the market that's why markets with strong middle class do so well. Any random rich person can fill those needs. It's not some brilliant vision they have. As a matter of fact most new tech wealth... Google Uber Facebook Apple Microsoft... all of their founders came from the middle class.

If your idea was true then 3rd world countries where the rich have vast wealth and cheap resources would have the best economies.

Your armchair supply side trickle down economic theory doesn't hold up. You should question what you hear on conservative news outlets.

<comment><USER12> You make no sense, rather just keep quiet

<comment><USER14> Posting like this will get you banned here regardless of how much sense another comment makes. Please don't do this again.

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER12> sure, sorry

</comment></comment></comment></comment></comment><comment><USER15> Before ingesting Nietzsche, please first understand Plato.

<comment><USER16> Why? Nietzsche gets it right, assuming there is no God. There is no objective morality. There are no forms. The world is entirely material and all things are subjective. Even the uberman is just a subjective fantasy that Nietzche told himself to find meaning in a meaningless reality.

<comment><USER17> I'm going to chime in to this very rote and dreary conversation only long enough to point out that, even in the unlikely event that "objective morality" is anything more coherent than "nuance makes me uncomfortable," the existence or absence of "God" does not impinge on its existence. This is one of the more damning things about that whole "conversation"; the psychological need for a moral order is so great that the justification used for it is an utterly unquestioned, utterly absurd non sequitur.

I've just said the most interesting thing I've ever heard on the topic, and I'm _still_ bored with it.

<comment><USER16> I bring up God's existence for this end, without such a being, we are left with a material universe. There is no measure within the universe for right or wrong. People need to accept that since all of your ethics and laws are fundamentally build on it.

For example, why is rape wrong? Easily answered with God: because he said so. With out God, well, you don't have an answer. You can say, "Because it impinges on the rights of the victim." To which one will reply, "Why should I care about the victim?" This will cycle until one person is honest enough to admit, "Because if you rape, the force of the masses will descend on you to the point of pains or death." Might makes right (so too for God).

With man, the uneasiness is that we are fickle. We will only defend those we wish to. We know that fundamentally we can't trust each other. We know that we are each out for our own. We can lie and say, "She loves me. Or they wouldn't do that." These are all lies. The Germans were fairly good people until they weren't. The Russians and Chinese too. The government was a kind father until it exterminated millions with the, at least, tacit consent of millions more.

That, dear friend, is your world. That is why you don't need to read Plato first. Plato is predicated on a world view of constants and moral weight: the Forms. Nietzsche shows those don't exist. The only thing remaining is the stark reality that reality and all its trappings don't matter for all is simply matter. It is neither good nor bad. The only rule is that made of the strongest material to crush the wills of others to submission. Whoever bears that scepter has the right to make moral.

<comment><USER18> I'm about as far from someone who understands this topic as it gets, but here's my explanation for why rape is bad that doesn't invoke god:

It's not an evolutionarily stable strategy. [1]

By that I mean, if we had a society where rape was normal, and sex was largely a nonconsensual thing, meaning there would be more violence, women would develop adaptations to prevent being raped, and more energy would be spent on the prevention of unwanted procreation, and the the gene pool would be less fit for survival than one without the rape gene.

But merely having a society full of non-rapists isn't enough either: the first serial rapist to come along would invade the gene pool by raping others and spreading the gene that encodes this "rape others" behavior, and within so many generations the gene pool would be full of rapists.

To have an ESS, our behavior would have to be encoded with a "don't rape others, but also don't tolerate others who do rape" strategy, which would increase a society's fitness for survival, _and_ be more resilient against an invading strategy.

Calling rape "immoral" is a good shorthand because "morals" are basically a formal way of defining the whole "don't do this, and don't tolerate others who do" concept in a way that humans can understand. But at the end of the day morals are just an abstraction that we've had to create in order to be more successful as a social species. Religion may have helped as well... to me these things are extended phenotypes for our genes that have been selected for over eons to keep our gene pool at a stable equilibrium.

[1] [https://en.wikipedia.org/wiki/Evolutionarily_stable_strategy...](https://en.wikipedia.org/wiki/Evolutionarily_stable_strategy#Human_behavior)

<comment><USER19> Rape is a regular thing for ducks to the point where males and females have evolved weird reproductive organs in some sort of evolutionary arms race. Bed bugs practice what is known as 'traumatic insemination', where the male literally stabs a female with his penis, and sperm travels to the eggs through the blood of the female. Females can die of infection because of the open wound left after sex. Clearly rape isn't such a big evolutionary disadvantage that no species exist with this trait. Likewise, lions show us that killing or scaring away someones partner and killing their infant children can be perfectly 'evolutionary stable'. It seems to me that your reasoning starts with the conclusion, and then works backwards to some argument that sounds plausible. It's a strange world out there, and I would be very wary to base morality on evolution.

<comment><USER20> > clearly rape isn't such a big evolutionary disadvantage that no species > exist with this trait.

If different species (with different evolutionary strategies) also have different moralities, would this not be a strong hint towards morality being based on evolution?

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> This was excellent except for the last two chapters. I am pretty sure that Trump and elite oriented capitalism is much more in line with Neitzsche's views.

Or did I misunderstand?

EDIT: Crazy down voting in this comment thread.

<comment><USER22> From my reading of the article, Neitzsche is critical of the hedonistic life we have today.

This hedonistic life is exemplified by Trump and Twitter and how we don't struggle. Instead, we tweet, voice opinions and continue with our happiness maximizing lives.

The author is suggesting that since we live in a culture that maximizes happiness, the nihilists were right. In this world, according to Neitzsche, humans can not achieve excellence.

I agree that it's a rather abrupt point made at the very end. Probably something the author will expand upon in his book.

<comment><USER23> What is the so called excellence and why is it so important?

</comment></comment></comment><comment><USER24> What actually is happening is people being indoctrinated with a view of themselves and the world as being animals spinning around a rock with no purpose and no meaning. This is how the powers that be wants us to feel, and it's the point of going through the education system, shaping us into specialized workers, with relief coming from consuming things.

It seems very few people realize what is going on. It's no accident the world was told to be round in the 1500s, because in order to make people believe we are pointless small little hairy apes, you first have to create the understanding that we are not special and have no purpose.

Let the downvoting begin :) Hacker news readers are usually unable to even consider things like what I said. It's natural to assume people like me are just dumb, but reality is not that easy.

<comment><USER25> It's so much easier to imagine that there is a grand, fantastic, and amazing conspiracy, and that ultimately when the curtain is pulled down it will all make sense and the truth will be clear. No more confusion, no more enfeebled helplessness, no more spinning around in a universe where directions are meaningless. The evil will be pushed back and things will go back to how they ought to be, in perfect harmony.

By romanticizing the world this way, it all becomes so much easier, it's an easier pill to swallow because it's a bitter taste that we are familiar with. And there is an allure of sweetness behind the taste, the idea that ultimately there is an inherent wonderful good truth waiting, just around the corner.

But it's ultimately an illusion, there is no grand conspiracy, and when there carpet comes down we find only empty space behind it. It can be both terrifying and liberating to accept that.

<comment><USER24> No no, this is not some romanticizing fantasy image that I dreamt up after a couple of glasses of wine one night :)

I'm a hard-core geek, programmer, tinkerer since I got my first computer in 1985 or so. I'm working as a data engineer and cloud architect currently. My IQ is fine and I dont believe in fairies :)

All I did was research the history of our societies. Who controls what, who benefits from what, stuff like that. And there is actually a big conspiracy going on when it comes to our world view and our place in this world. There are sites purely set up for propaganda, like flat earth society, who explains gravity with "yeah so the world is currently traveling upwards at a constant rate, and that is gravity"... Lol :) Nobody actually believes that. It's just to turn people off from the idea, and it's working. It's been the Google number one hit since like forever, and it's designed that way :)

All this makes sense if you understand what the purpose is, but people usually spend like 10 minutes, go to the wrong sites, and laugh it off :)

Go to Eric dubays videos on YouTube, go through the ones where he goes through how things are working according to flat earth theories. Its highly interesting. There see more than one way to explain what we see.

<comment><USER26> Given how much effort you have to put into a local progress and how many 'energy' and knowledge is lost on progress that crosses the company/group/area/country boundary, it is a very small femtochance that any worldwide conspiracy exists. Obviously, the capital and power has to be accumulated in relatively few hands, but it seems too doubtful that at least one of our species is capable of managing and routing that in the way you describe. It may appear as such to some idiots with megatons of money and clear minds behind them, so they form their elite clubs, but no more than that.

Anyone who did something complex should have seen that clearly. We as a whole civilization are just an uncontrollable mess.

<comment><USER27> To clarify, are you saying there is an illuminati, but they really suck at their job?</comment></comment></comment></comment></comment>


Material-ui 0.8 removes all CSS and switches to full js inline styling - <AUTHOR> https://github.com/callemall/material-ui/releases/tag/v0.8.0

<comment><AUTHOR> This follows @vjeux talk about css in js: [https://speakerdeck.com/vjeux/react-css-in- js](https://speakerdeck.com/vjeux/react-css-in-js)

This is afaik the first public library following that path.

</comment><comment><USER2> I tried to right click and inspect what was going on on their demo site and it treats left and right click as the same action. Oh dear.

</comment><comment><USER3> Looking through the slides referenced, this only seems possible/reasonable due to the styles being applied using React's DOM manipulation engine.

Perhaps that's assumable, but recommending this path seems pretty dangerous without significant caveats on its DOM-diffing requirement. Otherwise, just the raw amount of DOM injection is a severe performance risk.

</comment><comment><USER4> I have been using inline styles in React with great results too. I am glad to see more and more adoption. It leads to better portability and greater flexibility.

</comment><comment><USER5> why?</comment>


Is this the world's first blog post? - <AUTHOR> http://web.archive.org/web/19990220104843/dsiegel.com/diary/august.30.95.html <comment><USER2> Apparently they were going a year before that: <http://en.wikipedia.org/wiki/Blog></comment>


Chemotherapy may spread cancer and trigger more aggressive tumours - <AUTHOR> https://www.telegraph.co.uk/science/2017/07/05/chemotherapy-may-spread-cancer-trigger-aggressive-tumours-warn/ <comment><USER2> This has been common knowledge and is trivially obvious. Chemo includes carcinogenic chemicals. If you're at a point where chemo is the right treatment, you are out of safer options.

</comment><comment><USER3> And yet not using it is still far more dangerous, than not treating cancer at all.

</comment><comment><USER4> This has been obvious for a very long time, but denied by mainstream media and "modern science" cheerleaders, including here on HN. It's insanity to undergo chemo where so many highly effective alternative options exist. The fact that those often get shut down in a conversation actually kills people.

<comment><USER5> What are these "highly effective" options? Why would you say doctors choose to kill people with chemo instead of these options?

</comment></comment><comment><USER6> Unfortunately, so can radiotherapy. Both treatments are very hazardous options.</comment>


Mysterious Phony Cell Towers Could Be Intercepting Your Calls - <AUTHOR> http://www.popsci.com/article/technology/mysterious-phony-cell-towers-could-be-intercepting-your-calls

<comment><USER2> Cripes, what a breathlessly clueless article. This has fuck all to do with "Android security": the towers are MITMing _GSM_ , and the tech to do this has been around in some form since 2003.

[https://en.wikipedia.org/wiki/IMSI- catcher](https://en.wikipedia.org/wiki/IMSI-catcher)

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

<comment><USER3> Slate reported last year that IMSI catchers or similar technologies were "in the hands of the feds since about 1995 [...] widely deployed since the mid '90s".

[http://www.slate.com/blogs/future_tense/2013/02/15/stingray_...](http://www.slate.com/blogs/future_tense/2013/02/15/stingray_imsi_catcher_fbi_files_unlock_history_behind_cellphone_tracking.html)

Wikipedia does suggest it was "first commercialized" from 2003, but that doesn't mean that the technology wasn't around even earlier. (Ross Anderson has referred to interference from governments in the security design of GSM, and the possibility of fake towers could well have been one of several things those responsible for the interference had in mind.)

</comment></comment><comment><USER4> Here's the original article instead of the blog:

[http://www.popsci.com/article/technology/mysterious-phony- ce...](http://www.popsci.com/article/technology/mysterious-phony-cell-towers- could-be-intercepting-your-calls)

It's equally devoid of content that doesn't consist of telling us how CryptoPhone 500 [tm?] is awesome because it can detect these false towers.

<comment><USER5> What does the proprietary secure phone do to detect these things? Can I get an app to alert me if I connect to a stingray-type device?

<comment><USER6> I don't know what the secure phone does, but something like the IMSI Catcher Catcher [1] comes to mind.

[1] [http://www.sba-research.org/wp- content/uploads/publications/...](http://www.sba-research.org/wp- content/uploads/publications/AdrianDabrowski-IMSI-Catcher-Catcher- ACSAC2014-preprint-20140820.pdf)

<comment><USER7> Nice, more interesting than the article. :)

Thanks for the link!

</comment></comment></comment></comment><comment><USER8> Support the EFF - they are helping develop a false tower detector: [http://secupwn.github.io/Android-IMSI-Catcher- Detector/](http://secupwn.github.io/Android-IMSI-Catcher-Detector/)

<comment><USER3> We've been invited to collaborate with that project in some way (and it "aims to be recommended by" EFF in the future), but I'm not aware of any announced collaboration between AIMSICD and EFF so far.

</comment></comment><comment><USER9> Interesting question, perhaps the best way to figure out who owns these would be to destroy one and set up a camera trap to see who comes out to fix it. I'm sure that with a little creativity it would be possible to 'fake' a fault (my favorite being the apocryphal tale of shooting frozen pigeons out of an air cannon to knock microwave towers out of alignment).

</comment><comment><USER10> Those are just stingrays though, right? It's unclear as the article says towers but doesn't say whether anyone has actually seen a tower, only that they've detected attacks through their secure android phones.

If this is just a report of stingray use it should come as no surprise that they are in widespread use & that non-targeted phones latch on to the signals.

<comment><USER11> At any rate if the FCC doesn't get involved we know who to point the finger to.

</comment></comment><comment><USER12> That entire article reads like an advertisement for a renamed Android rom.

<comment><USER13> But it has 468 vulnerabilities patched! I wonder how they inflated this number. I'd bet a lot of it comes from Samsung customizations, meaning you get pretty good protection just by flashing an Android build that's closer to Google releases. Also, if there are serious vulnerabilities among that number, it's a bit disappointing that they took an open-source project (well, such as Android is) and horde their fixes under this license.[1] It sounds like they don't even permit you to flash your own build ("to compile it solely for the purpose of comparing the compiled version to the binary code provided by GSMK")

[1] [http://esdcryptophone.com/background/source- code/license](http://esdcryptophone.com/background/source-code/license)

</comment></comment><comment><USER14> Funny to read this here. Just read about it last week in a mayer german tech magazine. Now everybody can buy the imsi cacher for less then 1500 usd. [http://www.heise.de/ct/artikel/Digitale- Selbstverteidigung-m...](http://www.heise.de/ct/artikel/Digitale- Selbstverteidigung-mit-dem-IMSI-Catcher-Catcher-2303215.html)

</comment><comment><USER15> Christ Popsci is a terrible site to try and use from Australia. Trying to access any URL just gives a lazy redirect to the front page of popsci.com.au, with the helpful error message "Oops! Something went wrong. Please scroll down to find your content."

</comment><comment><USER16> Url changed from [http://www.welivesecurity.com/2014/08/28/android- security-2/](http://www.welivesecurity.com/2014/08/28/android-security-2/), which points to this.

</comment><comment><USER17> Important questions that should be put to Apple and Google loudly and frequently: Why don't we have baseband transparency to know what our phones are connected to? Why don't we have baseband firewalls?</comment>


Stress Testing React Easy State (with exotic state structures and mutations) - <AUTHOR> https://dev.to/solkimicreb/stress-testing-react-easy-state-5elg <comment><AUTHOR> React Easy State ([https://github.com/solkimicreb/react-easy- state](https://github.com/solkimicreb/react-easy-state)) is a transparent - ES6 Proxy based - state management library for ReactJS. The marketing pitch of the project is this:

> It doesn't matter how you structure or mutate your state stores, any > syntactically valid code works.

In this article, I try to prove this with a simple app and increasingly exotic state structures and mutations.</comment>


Ask HN: Good book/resources on algorithms? - <AUTHOR>

Recently I realized that my knowledge about algorithms are almost nonexistent, a fact that made me want to change this but I'm having some difficulties finding good resources to guide me in the right direction.<p>Have any advice/links/books?<p>(I'm asking here and not elsewhere as I already received some very good directions on one of my past, somewhat related, question) <comment><USER2> Introduction to Algorithms by Cormen is a great. It is set up as a sort of reference and isnt necessarily meant to be read cover to cover. However, you'll need to read/understand the first 4 or so chapters (on asymptotic complexity, recursion, log rules, master theorem, ect) to really be able to grasp anything else in the book. The proofs and explanations can be rather terse, as it assumes you have some working knowledge with algorithmic theory and math. I wouldn't recommend it for starting out _at all_ as it can be very intimidating at first.

I started out with Algorithms by Tardos (you can pretty easily find a copy of the book and solutions online somewhere). It is less terse and goes through all the basics in a much less formal format. In this book I would advise starting at chapter 1 and going straight through to 8 or 9, doing the exercises and programming up most of the algorithms on your way. At this point you'll have a really nice working knowledge and can dive into Cormen and tackle stuff that interests you.

</comment><comment><USER3> Check these books:

[http://www.amazon.com/The-Algorithm-Design-Manual- ebook/dp/B...](http://www.amazon.com/The-Algorithm-Design-Manual- ebook/dp/B0016H523Q/)

[http://www.amazon.com/Programming-Pearls-2nd-Jon- Bentley/dp/...](http://www.amazon.com/Programming-Pearls-2nd-Jon- Bentley/dp/0201657880)

Prefer Python ?

[http://www.amazon.com/Python-Algorithms-Mastering- Language-E...](http://www.amazon.com/Python-Algorithms-Mastering-Language- Experts/dp/1430232374/)

[http://www.amazon.com/Structures-Algorithms-Python- Michael-G...](http://www.amazon.com/Structures-Algorithms-Python-Michael- Goodrich/dp/1118290275/)

</comment><comment><USER4> I've been taking an algorithms course on Coursera and I'm really enjoying it. It's taught by two professors from Princeton, Kevin Wayne and Robert Sedgewick. Heres the link:

[https://www.coursera.org/course/algs4partI](https://www.coursera.org/course/algs4partI)

I'm sure there are plenty of other online algorithms courses online too.

</comment><comment><USER5> Art of Computer Programming by Knuth

Introduction to Algorithms by Cormen

</comment><comment> a-b I like [http://rosettacode.org/wiki/Category:Programming_Tasks](http://rosettacode.org/wiki/Category:Programming_Tasks)

</comment><comment><USER6> What kind of algorithms?

Whatever the answer, check out Numerical Recipes ([http://www.nr.com/](http://www.nr.com/)).

<comment><AUTHOR> I was thinking of something that will explain, maybe step-by-step, the implementation of various algorithms (like these, for example, [http://en.wikipedia.org/wiki/Sorting_algorithm](http://en.wikipedia.org/wiki/Sorting_algorithm)), so that I could understand the logic behind them.

<comment><USER6> How about taking a look at some sample pages? I'd be interested in knowing if it's along the lines of what you're looking for.

[http://apps.nrbook.com/rollover/index.html](http://apps.nrbook.com/rollover/index.html)

</comment></comment></comment><comment><AUTHOR> Something like this [http://bigocheatsheet.com](http://bigocheatsheet.com) , but more detailed.

</comment><comment><USER7> How do people view Udacity's algorithms subject?</comment>


Show HN: Review my startup - Posterhaste - Custom art prints and posters - <AUTHOR> http://www.posterhaste.com/

<comment><AUTHOR> Hi everyone!

I have been working on this idea for a few months. I had hoped to get it up a little earlier in order to get some more Christmas orders, but it took a little longer than expected to finish it. HN isn't exactly the target market for it but has been such a great help and inspiration for me that I thought I would ask for your feedback. So, what do you think?

I have started with just some simple designs but have the infrastructure built so that it is possible to add more designs very quickly. There are a lots more 'clever' designs in the works, such as those that utilise maps using D3.js (i.e. you could create a print that shows your world trip on a map with flight paths) and more intelligent layout of type creating word cloud images.

To give you an idea of the technology stack:

\- Django running in Gunicorn (using Gevent for long requests while rendering) behind Nginx

\- Celery (with Redis) for a task queue and for talking to the rendering backend

\- PhantomJS is used as the renderer for all current designs but its easy to add different backends for new designs

\- The awesome Pwinty API (<http://www.pwinty.com/>) service for printing and fulfilment. Tom has been a great help!

Take a look around and hopefully it won't crash...

<comment><USER2> I see Pwinty has US shipping, but seems to be based in the UK.

Are US-bound prints from pwinty mailed from the UK?

<comment><AUTHOR> Yes, currently all items are shipped from the UK but I believe Pwinty are close to partnering with a US based printer for US orders.

Our plan is to eventually show pricing to US visitors in USD and ship from the US for quicker delivery.

<comment><USER2> Can you estimate or do you know (approx.) how long it takes for an order to arrive in the US once payment is made?

<comment><AUTHOR> Our estimated delivery times are:

\- United Kingdom: 2-3 working days

\- Western Europe: 4-5 working days

\- Eastern Europe: 6-7 working days

\- US and the rest of the Word: 7 working days

We hope to be able to improve upon the US delivery time early next year.

<comment><USER2> Personally, 7 days is acceptable to me for a customized product coming across the Atlantic ocean.

</comment></comment></comment></comment></comment></comment><comment><USER3> One small comment. When I buy from stores, especially from niche ones, it's nice to know where they are. Like "All items are designed in our cozy office in Stamford, Lincolnshire, right in the heart of the UK country side".

The lack of contact details, really doesn't encourage me to buy from you.

Also, when I tried to buy something, I was surprised how clunky it was. It's possible that I may want the same poster as the one you present, I'd love to see the option to add that in (or have it in by default).

<comment><AUTHOR> Thanks, thats great advise. I will put our address and phone number on the site.

The option to purchase the example designs is there, but I agree its a little clunky, I will look into improving it.

Was it the checkout that you found clunky or the process of placing an item in you basket?

<comment><USER3> The cart process was fine. Maybe more visuals like "buying now without registration", which I think is possible, would be good. Decrease people's pain as much as possible !

</comment></comment></comment><comment><USER4> I like the Lat/Long idea - and that looks well supported on that page.

Do you think the customer might in the future like control over the paper stock and (maybe) the print process? If I have a great photo - can I get it turned into a classy print? This might be a complete side-track so you should probably ignore me.

<comment><AUTHOR> It is something I have considered, adding simple photo printing, but I think it could distract from the main purpose of the site. Photo printing and enlargement is a very competitive business and has relatively low margins compared to the current product line.

I may add more printing options later but for now I think keeping it simple is better. We do effectively have three printing processes, lab printing for smaller sizes, large format inkjet for the posters and inkjet on canvas for the canvases.

THanks for the feedback!

</comment></comment><comment><USER5> I couldn't find on the front page how to make a custom poster... I had to click on a premade one to see that I could edit it (and I only did after checking the comments here).

Plus I had to read the very long introduction text to know what this what about. My advice: let me play with the interesting stuff right away, or at least tell me clearly in one sentence what I can do on this site. It will most certainly improve your conversion rate.

Great stuff, but a little too hard to figure out !

<comment><AUTHOR> Thats great feedback! Thanks.

I will experiment with how to better describe how to use the site on the homepage and make it a little more obvious how to customise a design once you have chosen a design.

</comment></comment><comment><USER6> Start adding these to Pinterest. I think you'll get a lot of traction there.

<comment><AUTHOR> Thats the plan, we have placed pinterest buttons on the site but should start 'pining' the stuff ourselves.

</comment></comment><comment><USER7> I have a feeling that my sister might have ordered something of that site for our father's christmas present. If it is the same site, she was very impressed with the service and the product.</comment>


Who Runs the World? Microsoft Excel - <AUTHOR> https://medium.com/@nicolos/who-runs-the-world-microsoft-excel-f8cf2685d013 <comment><USER2> Excel, or more generically, spreadsheets are useful for many different projects. But they are also responsible for many computational errors because of their use for things that should be done with a statically constrained system or program.</comment>


Research into paranormal ability to break through spatial barriers [pdf] - <AUTHOR> https://www.cia.gov/library/readingroom/docs/CIA-RDP96-00792R000300390001-2.pdf <comment><USER2> I only read a bit of the introduction and the conclusion, but what a fascinating read.

This might come from a no longer active program, based upon a skim of this is a related read: "Meet the Former Pentagon Scientist Who Says Psychics Can Help American Spies"[http://www.newsweek.com/2015/11/20/meet-former-pentagon- scie...](http://www.newsweek.com/2015/11/20/meet-former-pentagon-scientist- who-says-psychics-can-help-american-spies-393004.html)

</comment><comment><USER3> So. paranormality is a real thing - it is not an empty set of phenomena. But who will believe this? Who will investigate it further? No one! It doesn't fit with our mental schemas, so it gets ignored. Forever.

Quite a tragic outcome for such a potentially hugely disruptive area of research.

<comment><USER4> I think this document (assuming it's not a hoax) is evidence that it doesn't get ignored.

The thing to do here is get Penn (of Penn and Teller) to check out these subjects. ;-)</comment></comment>


What happened to WrapBootstrap? - <AUTHOR>

Does anyone know what happened to WrapBootstrap? https://wrapbootstrap.com<p>They seem to have completely stopped posting, their CEOs twitter is not active, anyone know whats going on?  This was one of my most favorite places to buy new templates, I believe I was introduced to it from HN. <comment><USER2> I have been wondering the same I don't know what happened but he is not responding to emails anymore at all. Someone should try calling the number that is listed on the whois for wrapbootstrap.

</comment><comment><USER3> I am really curious about this too. Waiting for review over 1.5 months. He doesn't care or something happened to him?

</comment><comment> j-star why he is not active from more than 2 months ?</comment>


A Little Scheme Setup and Development on the Galaxy S9 Plus - <AUTHOR> http://www.blogbyben.com/2018/04/a-little-scheme-setup-and-development.html <comment><USER2> This is neat. Tiny Scheme is nice... anyone know if there is a maintained fork/successor? Patches posted here go unanswered: [https://sourceforge.net/p/tinyscheme/patches/](https://sourceforge.net/p/tinyscheme/patches/)

<comment><USER3> Chibi Scheme is sort of a spiritual successor:

[https://github.com/ashinn/chibi-scheme](https://github.com/ashinn/chibi- scheme)

</comment></comment><comment><USER4> I have similar setup on Note 4, just running Racket in Termux. There's no native package of Racket for Termux, but been able to compile Racket v7.0 without much problems.

</comment><comment><USER5> Does termux allows you create ssh tunnels?

on the other hand, if I have to carry an external keyboard, then a mini laptop with linux seems more practical to me than this.

<comment><USER6> For a while now I've been fantasizing about sticking a blackberry q10 keyboard onto a raspberry pi with an ethernet interface. I found a forum post from a guy who managed to do it with an arduino.

<comment><USER7> I wish we could get something like the Nokia 9000 communicator with a full keyboard.

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

</comment></comment></comment><comment><USER8> Is there anything specific to the S9+? Termux runs everywhere.</comment>


Age discrimination in Perl 6 using subsets and multiple dispatch - <AUTHOR> http://blogs.perl.org/users/tyler_curtis/2010/08/age-discrimination-in-perl-6-using-subsets-and-multiple-dispatch.html

<comment><USER2> This is a pretty good advertisement for Lisp.

The Clojure article is about a piece of code. The Perl 6 article is about all of the syntax that you need to understand before you can read the equivalent piece of code.

Including this gem:

 _That asterisk is a special value called Whatever. It generally does what you mean in a given situation._

Perl documentation is always good for a laugh. But, I wonder, what does "generally" mean?

 _...Due to a bug in Rakudo's handling of Whatever when combined with chained comparison operators, we have to write an explicit block for Adult._

Oh. It means that sometimes -- even in the context of a trivial nine-line example -- the damned asterisk will mysteriously fail and will force me to bang my head against the keyboard for half an hour until I finally figure out that I just can't use it. Because, apparently, this works:

        subset Foo of Bar where *.baz < 16;

and this works:

        16 < $bar.baz < 66

but this does not work:

        subset Foo of Bar where 16 < *.baz < 66;

<comment><AUTHOR> Hi. I'm the author of the post.

> The Perl 6 article is about all of the syntax that you need to understand > before you can read the equivalent piece of code.

I think it's more that the Clojure article just shows the code with very little explanation. Whereas my post was intended to demonstrate some of the basic capabilities of Perl 6's multiple dispatch and type system for people who aren't very, if at all, familiar with Perl 6. People unfamiliar with Clojure can probably guess what the code in the Clojure post does. I think I was able to (although I've dabbled in Clojure and Common Lisp, so I can't speak from the viewpoint of a total newbie to those languages). Some of the Perl 6 syntax I devoted paragraphs to explain were probably as clear as (defrecord Person [name age]), but I chose to explain them exactly to be sure that any readers unfamiliar with Perl 6 were able to know the exact semantics(e.g., that readonly attributes are the default). Some of the syntax is not something someone who has never heard of Perl 6 will be able to look at and know the meaning of immediately. Is that really such a problem, if the meaning of such features(sans bugs in the implementations) can be explained and fully understood in a couple of paragraphs and make things much more convenient for the person who does know the language? You learn them in a day or two and benefit from them for the entire time you use the language.

In addition: the two pieces of code are not equivalent. The Perl 6 functions validate the types of their arguments. The age-group function can tell you the age-group of both a Person and an age. As well, if you want to write another multi dispatching on the age group of a Person, it's easier with the Perl 6, because you just have to do "multi can-have-kids-meal (Child $kid) { True }" and "multi can-have-kids-meal ($person) { False }".

> But, I wonder, what does "generally" mean? It means that you should read the > rest of the paragraph to see some examples of its uses. Don't worry, though, > the actual spec (<http://perlcabal.org/syn/S02.html>, grep for "The * > character") is much more detailed. My explanation was a bit lackluster, I > suppose, but I was trying to not devote much time to it, since the post is > about multiple dispatch and the type system, not about the philosophy of > DWIM as expressed in the simplicity and usefulness of Whatever.

> Oh. It means that sometimes -- even in the context of a trivial nine-line > example -- the damned asterisk will mysteriously fail and will force me to > bang my head against the keyboard for half an hour until I finally figure > out that I just can't use it. Well, more like five minutes (from time that I > noticed the problem until the time that I had figured out the cause of the > bug in Rakudo). But, yes, there are still bugs in Rakudo. I doubt this > particular one will be around much longer(although it'll probably still be > in this month's Rakudo *, since the compiler release was Thursday).

</comment></comment><comment><USER3> Circa 1984:

      (defclass person ()
        ((name  :initarg :name :accessor person-name)
         (age   :initarg :age  :accessor person-age)))

      (defmethod person-age :after ((someone person))
        (let* ((age (person-age someone))
              (category (if (< age 16)
                           :child
                           (if (>= age 66)
                             :senior
                             :adult))))
           (values age category)))

Instead of having some outside "ticket" function to categorize the age of a person, you should just instrument the generated PERSON-AGE accessor to add the extra info you need. That way you don't need to modify the rest of your system to use this data in non-standard ways. The accounting module, for example, can take care of senior citizen and kid discounts of tickets without having to be told about it. The system would extensible, without rewrite, once you want to add seasonal discounts and other business-requirement unapparent during development. (Looking into ContextL and Context Oriented Programming.)

Similary, print-name shouldn't exist as a standalone function for something so mundane. You should just augment the builtin PRINT-OBJECT method that specializes on the PERSON class to print suitable titles. You don't even have to instrument the main PRINT-OBJECT, just the one that prints the actual receipt to the paper-printing HARDCOPY stream.

      (defmethod print-object :around ((someone person)
                                       (stream hardcopy))
        (when (next-method-p)
          (let ((obj (call-next-method)))
               ...
               ...
            (with-open-printer (lpr #p"/dev/printer")
               (format lpr "..")))) ...

I mean, seriously; I hope we're not blogging back and forth about CLOS-101 applications of methods.

<comment><AUTHOR> I know that this is a pretty tame example of subset types. But do you really think that modifying the return values of person-age for everything in the system is more easily extensible than a subset type which is external to the objects? Suppose that somewhere else in the system, you want to dispatch based on whether a Person is old enough to legally drink alcohol. With subset types, you don't have to be aware of the Child/Adult/Senior partition at all. With the :after approach, you're dependent on the ordering of the after methods and you have to know about the existence of the :child/:senior/:adult test.

Here's the code for buy-beer in Perl 6:

      subset CanDrink of Person where *.age >= 21;
      subset CannotDrink of Person where *.age < 21;

      multi buy-beer (CanDrink $person) { give $person, Beer.new }
      multi buy-beer (CannotDrink $kid) { call-cops-on $kid }

No other code in the system need be aware of it. No other code in the system is affected by it.

<comment><USER3> Subset types, at least in that form you have shown, do _not_ exist in Common Lisp. That's a very MLish feature, and Perl keeps on surprising me :-)

Do another, more elaborate one when you have time. Would love to learn new things.</comment></comment></comment>