Mensch -- A coding font - <AUTHOR> http://robey.lag.net/2010/06/21/mensch-font.html <comment><USER2> It looks fine, but I think I'll always have trouble finding a coding font to replace Consolas.

<http://en.wikipedia.org/wiki/Consolas>

<comment><USER3> I love Consolas, but Inconsolata (<http://en.wikipedia.org/wiki/Inconsolata>) is a nice, friendly, take on it. I'd check it out if you haven't already–it's what I now use exclusively!

<comment><USER2> Just tried it out on Windows 7 with ClearType (same settings I use with Consolas). I don't know if there's a problem with the way ClearType is rendering the font or what, but it looks terrible on my system. Is ClearType supposed to be disabled or what?

Screenshots:

11pt <http://i.imgur.com/Weq4G.png>

12pt <http://i.imgur.com/L4UDZ.png>

<comment><USER4> Yes, it will look weird because Consolas was designed specifically for ClearType (which is why it looks nowhere as good on OS X). Inconsolata was designed without it.

Similarly, Monaco doesn't look half as good on Windows :) Text rendering differs on OS X and Windows.

<comment><USER5> I'm on OSX, and suggest some alternatives to Consolas above:

<http://news.ycombinator.com/item?id=1454649>

</comment></comment></comment></comment></comment><comment><USER6> I don't know, typing two zeroes in a row gets a little eyeballey.

And, unrelated, if you are thinking the serif font for the prose on that page looked like some ghastly font from the early days of printing. It is!

 _Legitima is the digital revival of a typeface used in Cicceide Legitima, a book written by Francesco Lazzarelli and printed in Venice, ca. 1694._

To be fair, Legitima is designed to work in smaller sizes and going smaller than the 19pt on the page makes it look much better.

<comment><USER7> Personally, I found myself wondering why I'd want to use a font from somebody that cared little enough about readability to use a font like that on their webpage.

<comment><USER8> You have to use some type of font smoothing (e.g. ClearType) for it to look acceptable. It looks quite nice once you put it on.

</comment></comment></comment><comment><USER9> Almost every single one of his replacements hurts my eyes. The 0 I like, the 1 looks like it was chopped from the left, the z-3 is ugly, the and sign could have been nice but the top part is too small and off to the left, the Q's tail looks abominable, and those angle brackets look as large as Cleopatra's nose.

Maybe it's just me. To each his own I guess!

</comment><comment><USER10> Looks nice, although the changes are given away by hinting problems on my Linux box: [http://ploader.net/files/92540a2c2b68cfe8b49f2301f628f860.pn...](http://ploader.net/files/92540a2c2b68cfe8b49f2301f628f860.png) (I've no idea what it would take to fix this but I can provide more info about the system on request.)

Here's a nice oddball coding font for you: <http://www.dafont.com/monofur.font>

<comment><USER11> Was it installed during that preview? If the font isn't installed, the font viewer can't do the hinting.

</comment></comment><comment><USER12> A great font i've been using is envy code r.

[http://damieng.com/blog/2008/05/26/envy-code-r- preview-7-cod...](http://damieng.com/blog/2008/05/26/envy-code-r- preview-7-coding-font-released)

</comment><comment><USER13> I tried it out on my Ubuntu box and realized it's practically indistinguishable from the default Monospace font:

<http://sha.ddih.org/f/monospace.png>

<http://sha.ddih.org/f/mensch.png>

<comment><USER14> Your mensch.png shows up the problem with making > too big:

-> no longer looks like an arrow.

</comment></comment><comment><USER15> The changed l (letter) looks a lot like 1 (number). Perhaps someone using the font can confirm or deny this?

<comment><USER16> From the article:

 _I think the original artist drew the L weirdly to make it extremely clear that it's not a one, but if you draw a gothic one, the difference is obvious even with a simpler L._

<comment><USER17> And that might be fine if you see an l and a 1 next to each other and you want to know which is which. In the real world where you see one or the other and want to know which it is, this is really unhelpful.

<comment><USER18> Indeed I have not yet seen a monospaced font that distinguished l (el) and 1 (one) meaningfully. Hell the font I am typing with in the compose field differs by perhaps one pixel.

<comment><USER17> Well, as you can see from the article, Menlo does. Monaco is also very similar in this respect.

Even if you're not on a Mac it shouldn't be difficult to find one or two.

<comment><USER18> Would have privately replied (as this thread is a bit old now) but no contact details so:

On my iMac I find that Menlo has a very subtle fuzziness to its characters. Monaco (10pt) remains my setting for now. Despite being not very pretty, it is very crisp and the letters (aside from l and 1) are very distinct and legible.

</comment></comment></comment></comment></comment></comment><comment><USER19> the angle brackets seem to point a little high. probably because they are not weighted evenly from top to bottom.

<comment><USER20> I agree. I'd say it's because they are balanced across the total height of the font, rather than the x-height.

Sitting next to capital letters or numbers it would probably look ok, but that size dwarfs the lower-case letters.

</comment></comment><comment><USER21> I tried it in Visual Stdio and noticed this font has ligatures. as between f and i in the word "specified". It looks horrible in a fixed width font since the other letters are separated from each other. Additionally, somehow Visual Studio treats the letter pair as a single letter, so you can only select or erase the pair as whole. Not very usable.

</comment><comment><USER22> I don't have Menlo on this computer (still on Leopard), but from what I can tell from comparing this font to my current coding font, Droid Sans Mono, they must be very similar. It's okay, but it looks like all the things that annoy me about Mensch are the things that were changed from Menlo!

</comment><comment><USER23> I also prefer the dot in the zero. But the l shape is too close of the number 1. The original font is better on this regard. There is more space between the dot and the bar in the exclamation mark which makes it more different of avertical bar.

</comment><comment><USER24> Panic Sans is also a similar, good coding font.

[http://vnoel.wordpress.com/2007/04/25/coda-coding-font- panic...](http://vnoel.wordpress.com/2007/04/25/coda-coding-font-panic-sans/)

</comment><comment><USER25> The l looks too much like a 1. This is a big no-no on fonts to be used for programming. (As is making sure 0 and O are distinct.)

Also, angle brackets look too similar to parentheses -- <> (). Here's some source code that would look terrible in this font:

          (if (< item x)
             (<< lessx item)
             (<< gex item)))

<comment><USER26> Really? <http://imgur.com/OaonC.png>

<comment><USER25> That's curious.

The angle brackets on this png are fine, unlike on the examples on the original page.

I've just downloaded Mensch, and on my box too the angle brackets are fine, with an angle between the lines of about 55 degrees, as opposed to about 85 degrees on the original page; so it would appear the downloadable font is different from that described no the page.

</comment></comment></comment><comment><USER27> I got a kick out of the post, how he starts off with the intent of fixing the "0" and then I quick-scrolled down to the screenshot and noticed there were a lot more corrections than just the "0" -- that's totally something I would have done too once I had the font opened in an editor :)

Either way, really like the widened GT and LT chars for coding, thanks!

</comment><comment><USER28> I like most of the changes, and I am definitely going to try it out (I'm using Inconsolata and must say I love it quite dearly). There's one thing I can say I don't like about Mensch, however, and that is the lowercase "q". It is very close to an "a" or "alpha". Reading "query" in the rendered example feels wrong.

</comment><comment><USER29> No more fakakta zeroes.

You sir, are a mensch.

</comment><comment><USER30> Does it handle latin 1 and 2 characters? á é í à ã õ ô, etc

<comment><USER31> The original DejaVu Sans Mono it's based on does, so I would guess this does too.

In fact DejaVu includes pretty much all of unicode.

<comment><USER32> It's not based on DejaVu Sans Mono. It's based on Bitstream Vera Sans Mono, which doesn't have nearly as many glyphs as DejaVu Sans Mono.

<comment><USER31> That's not what the article said.

</comment></comment></comment></comment><comment><USER33> In the rendered example, the dot in the zero is too low.

</comment><comment><USER34> I use Monofur on my terminal and Anonymous Pro for my editor (distributed under the Open Font License)

Anonymous Pro includes embedded bitmaps for specific sizes.

</comment><comment><USER35> Nice work. I'm going to use it.

Good lord, we programmers are spoiled.

<comment><USER36> I like to use 'particular' instead

<comment><USER37> 'reading HN and changing our programming fonts, instead of programming'.

</comment></comment></comment><comment><USER38> I'm always impressed by people who know how to code, and also have a good understanding of the subtleties of typography. Bravo!

<comment><USER32> This guy clearly _doesn't_ understand the subtleties of typography, given some of the edits he's made to this font.... that's okay though, because if he likes it better and it works for him, everyone's still happy.

<comment><USER38> Well, I guess you can just count me in the "knows how to code" camp. :) I know very little about typography but find the subject pretty interesting.

</comment></comment></comment><comment><USER39> I'm using terminus font: <http://www.is-vn.bg/hamster/>

<comment><USER40> Same here. I always come back to this font after a safari through font country looking for alternative programming fonts. I really like the 'square' look.

I've tried most other fonts for a while and DejaVu Sans Mono for the longest time because it supports so many of the unicode characters, but I really don't need them when programming (or doing most other things on the computer, but then I come from a region where the default ASCII set is almost good enough).

<comment><USER41> Have you tried SGI screen? It's a bitmap font (ASCII-only), great for small sizes (if that's your cup of tea). <http://imgur.com/9xJlN.png>

</comment></comment></comment><comment><USER42> Cromulent use of the word 'embiggen'.

</comment><comment><USER43> I would definitely write the whole blog post in this font.

</comment><comment><USER44> the example does not show his "improvements" on the 1-digit/L-letter shapes...

</comment><comment><USER31> I like it, except for the 3.</comment>


Norwegian citizens now required by law to give their fingerprint to the police - <AUTHOR> http://people.skolelinux.org/pere/blog/Norwegian_citizens_now_required_by_law_to_give_their_fingerprint_to_the_police.html <comment><USER2> NOTHING in the Norwegian media about this, and that concerns me deeply!</comment>


Puffs: Parsing Untrusted File Formats Safely - <AUTHOR> https://github.com/google/puffs <comment><USER2> Some curious things about the language:

• All operators have equal precedence, so parentheses are required when mixing operators. I guess they've seen one too many bugs from precedence confusion.

• It doesn't have dependent types; rather, it uses a proof checker with some built-in knowledge about the language, and a way to specify preconditions, postconditions, and invariants that the checker can reason about.

• There is limited effect typing: functions can be marked pure, impure (!), or impure coroutine (?).

• There doesn't appear to be any kind of polymorphism—over types, effects, refinements, or proofs.

<comment><USER3> > All operators have equal precedence, so parentheses are required when mixing > operators.

Doesn't that mean it _rejects_ precedence? In a language equal precedence (e.g. Smalltalk), operators would just be executed from LTR or RTL.

<comment><USER2> I agree, although I suppose different operators could still have different associativity in a language without precedence. I took that phrasing from the "Puffs the Language" documentation.

<comment><USER3> > I suppose different operators could still have different associativity in a > language without precedence

That… is true, and I have a hard time computing how it would even work.

<comment><USER4> Think exponentiation, where 2^3^4 might be 2^(3^4), but where subtraction 2-3-4 is (2-3)-4.

<comment><USER5> Consider:

      2-3^4

<comment><USER6> Since there is no precedence in this (hypothetical) language that would be an invalid expression.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Hi, Puffs author here.

ingve linked to the github page instead of the announcement e-mail: [https://groups.google.com/forum/#!topic/puffslang/2z61mNTAMn...](https://groups.google.com/forum/#!topic/puffslang/2z61mNTAMns/discussion)

That announcement has more to say about the comparison to Rust, which is probably the most frequently asked question.

There's also some more words, on Rust and on other related work like Dafny, at [https://github.com/google/puffs/blob/master/doc/related- work...](https://github.com/google/puffs/blob/master/doc/related-work.md)

Edit: It's also not Rust per se, but the numbers at [https://github.com/google/puffs/blob/master/doc/benchmarks.m...](https://github.com/google/puffs/blob/master/doc/benchmarks.md) shows that, on Puffs' benchmarks, gcc 7.2 noticably outperforms clang/llvm 5.0. I'm sure this is a solvable problem, and not a fundamental flaw with llvm, but fixing that's beyond my llvm knowledge.

<comment><USER8> > Some of the safe languages (Go, Java, JavaScript, Python, Rust, etc.) are > faster than others, but generally speaking, they're not as fast as C/C++. > Consider an array indexing expression like "a[i]".

I don't think you'll win any friends in the Rust camp by making broad statements like that. Performance of "unsafe" vs "safe" languages largely boils down to memory access patterns, cache usage and how many levels of indirection you tend to hit. Rust easily matches C/C++ while keeping high level abstractions(bounds checks are done at slice level and not per-element access).

I don't think Mozilla would have used Rust for Servo/Quantum if it was slower than C++. It's certainly held true in all the cases I've used Rust in place of C++.

<comment><USER7> First, as I said in another comment, Rust is great tech, written by great engineers. Puffs is still different (with different trade-offs).

And, yes, memory access patterns, cache usage, etc. affect performance.

And, yes, in general, Rust performs comparably to C/C++. As I noted elsewhere, Rust with runtime arithmetic overflow checks currently performs worse than Rust without such checks. So, yes, Rust without those checks is as fast as C, and in general, arithmetic overflow isn't the biggest concern.

steveklabnik, a Rust expert, commented on this page that, in the future, "if the runtime checks get cheap enough, we can do them in release mode as well". If so, that's great, I'm happy to be proven wrong. Cheap still isn't zero, though, and see "nanoseconds become milliseconds" at [https://groups.google.com/forum/#!topic/puffslang/2z61mNTAMn...](https://groups.google.com/forum/#!topic/puffslang/2z61mNTAMns/discussion)

In contrast, Puffs today performs as fast as C, _with_ arithmetic overflow checks. They just happen to be compile time checks. And sometimes overflow is indeed a concern (search for "underflow" in [https://blog.chromium.org/2012/05/tale-of-two-pwnies- part-1....](https://blog.chromium.org/2012/05/tale-of-two-pwnies- part-1.html)).

I'm sorry, but I don't understand what you mean by bounds checks being done at the slice level and not per-element access. A statement like "pixels[y * stride + x] = etc" is per-element, right?

<comment><USER8> > I'm sorry, but I don't understand what you mean by bounds checks being done > at the slice level and not per-element access. A statement like "pixels[y * > stride + x] = etc" is per-element, right?

Yes, if you index a slice you have to check each access. However the idiomatic way to work with strides of data in Rust is to use Iterators.

Bounds is checked at the entry of an iteration and the the inner loop is nice and fast. So your example would be:

      for pixel in &mut pixels[0..y*stride+x] {
        *pixel = etc
      }

I tried to do something similar on the playground[1] but it turns out Rust/LLVM is too smart and folded the whole loop down to a constant.

[1] [https://play.rust- lang.org/?gist=f3699d6456a561c3874395bff36...](https://play.rust- lang.org/?gist=f3699d6456a561c3874395bff36feaa1&version=stable)

<comment><USER9> [https://rust.godbolt.org/](https://rust.godbolt.org/) is good for playing around with this stuff: [https://godbolt.org/g/9TgVXg](https://godbolt.org/g/9TgVXg)

</comment></comment></comment></comment></comment><comment><USER10> > The aim is to produce software libraries that are as safe as Go or Rust, > roughly speaking, but as fast as C, and that can be used anywhere C > libraries are used

One question about this to people more versed in language compilation - wouldn't it be possible for SAFE Rust code to be faster than C code considering that the Rust compiler has much more syntax to play around and optimize? Cause many of those safe constructs are part of the language and can be taken into account

<comment><USER11> In theory, yes, some Rust code can be faster than the C or C++ code people would write, especially as pertains to the guarantees offered by its aliasing control.

In practice, LLVM hasn't had any incentive to implement those sorts of optimisations at this stage (because before Rust came along nothing would benefit from them), so the benefits are generally theoretical only.

It remains to be seen what this will effect.

<comment><USER12> LLVM does implement these sorts of optimizations:

C:

      int foo(int *x, int *y) {
        *x = 0;
        *y = 1;
        return *x;
      }

gives:

      foo(int*, int*): # @foo(int*, int*)
        mov dword ptr [rdi], 0
        mov dword ptr [rsi], 1
        mov eax, dword ptr [rdi]
        ret

where as in Rust:

      fn foo(x: &mut i32, y: &mut i32) -> i32 {
        *x = 0;
        *y = 1;
        *x
      }

which compiles to:

      example::foo:
        mov dword ptr [rdi], 0
        mov dword ptr [rsi], 1
        xor eax, eax
        ret

<comment><USER13> That optimization is useful to C and C++ code, they use "restrict": [https://en.wikipedia.org/wiki/Restrict](https://en.wikipedia.org/wiki/Restrict)

Does LLVM implement optimization that only Rust can use, or at least those that cannot be used from C/C++?

<comment><USER14> &mut T pointers are basically restrict by default.

LLVM is adding some semantics specific to non-C or C++ languages. I'm on my phone so I can't link you, but they're adding an intrinsic related to infinite loops because languages like Rust have different semantics here.

<comment><USER15> Not anymore, LLVM was buggy about this and we had to remove this.

<comment><USER14> That's why I said "basically", it's been fixed upstream and will be turned on again soon.

</comment></comment></comment></comment></comment></comment></comment><comment><USER16> This DSL seems largely motivated by the desire for provable compile-time bounds checking. One general-purpose modern language that can check bounds at compile time and generate code that is performance-competitive with C is ATS:

[http://www.ats-lang.org/](http://www.ats-lang.org/)

Dependent types are meant to solve exactly this class of problem. Rust has an RFC for adding these:

[https://github.com/rust-lang/rfcs/issues/1930](https://github.com/rust- lang/rfcs/issues/1930)

<comment><USER17> Aren't dependent types undecidable?

<comment><USER18> integers with additions are decidable - that's pretty much what you need to verify array bounds (multiplication with a constant is included as well, so matrices should work too).

<comment><USER17> Do you mean "in practice" that's what you need? I could buy that, but I'm thinking about it in terms of the language spec. What would it say? Are we moving toward a language spec that says the meaning is "whatever the reference compiler can handle"? Or do you mean one that says "array indices may only be (constant) linear combinations of variables in order for the code to be compilable" or something like that?

<comment><USER18> Good point. The way I imagined is, the language is defined as "safe", and has both "static" and "dynamic" guarantees. Whatever the compiler is able to prove statically, amazing, or else it adds dynamic checks. The programmer can optionally tag the function/expression so that the compiler will warn if it can't prove it. Long-term, I think it's very reasonable to assume the solvers will improve, so best to design a language with this in mind.

</comment></comment></comment></comment></comment><comment><USER19> >The aim is to produce software libraries that are as safe as Go or Rust, roughly speaking, but as fast as C, and that can be used anywhere C libraries are used.

I'm all for having different implementations of software, but does Rust not fulfill these requirements?

<comment><USER20> There are C compilers for many architectures that the Rust compiler (today) does not support. They may also be referring to the fact that you can't just drop it into existing projects with their complicated build systems in the same way that you can drop a few generated ".c" and ".h"files.

<comment><USER21> Great points, plus from the puff readme: "In Rust, integer overflow is checked at run time in debug mode and silently ignored in release mode by default, as the run time performance penalty was deemed too great.". With puff, it's statically checked. I haven't delved into puff's details, but to support as many environment as possible in an easy way today, a DSL generating C seems a pragmatic decision.

<comment><USER22> By default, but it is possible to enable integer overflow for release builds with "-C overflow-checks".

<comment><USER7> And that comes with a performance penalty. Maybe it won't, in a future version of Rust, but it does for now.

</comment></comment></comment></comment></comment><comment><USER23> This is very interesting, after kicking the tires on a few parsers, I've come to the conclusion that most parsers are absolute garbage, and it's nobody's fault in particular. This should make it close to feasible to write fast native parsers (especially validators) which aren't a liability.

</comment><comment><USER24> Does anyone know what analysis or prover they use to discharge proof obligations? I poked around the .md files in the repository, but I haven't seen this addressed anywhere. I'm not (yet) motivated to dig into the actual source...

<comment><USER25> Looks like it is not a general system, they prove the hardcoded binary operations: [https://github.com/google/puffs/blob/master/lang/check/asser...](https://github.com/google/puffs/blob/master/lang/check/assert.go#L270)

<comment><USER24> Thanks. From what I've seen in that file and another one in the same directory, it seems to be a standard abstract interpreter on a domain of intervals. I would have expected a more refined relational domain that can express certain inequalities, but this seems to be enough for a first prototype.

<comment><USER7> I'm not entirely sure what you had in mind, but you can express certain inequalities. For example, [https://github.com/google/puffs/blob/master/std/gif/decode_l...](https://github.com/google/puffs/blob/master/std/gif/decode_lzw.puffs) has this line:

assert n_bits < (width + 8) via etc

The 'via' syntax is discussed at [https://github.com/google/puffs/blob/master/doc/puffs-the- la...](https://github.com/google/puffs/blob/master/doc/puffs-the-language.md)

<comment><USER24> Thanks for your answer. Yes, this kind of symbolic inequalities was what I had in mind. The solution via "via" is quite clever.

In the beginning I had thought that maybe you were using something like Pentagons: [https://www.microsoft.com/en- us/research/publication/pentago...](https://www.microsoft.com/en- us/research/publication/pentagons-a-weakly-relational-abstract-domain-for-the- efficient-validation-of-array-accesses/) which were developed explicitly in the context of proving array bounds checks.

You might want to give them a look. They would cost you in implementation effort, of course, but they might make Puffs (almost as) fast _and_ pretty smart!

</comment></comment></comment></comment></comment><comment><USER26> An interesting observation: this was written by the brother of Terence Tao.

<comment><USER27> If I am not wrong, he is a member of the Go core team?

<comment><USER7> Yep, a member of the Go core team, although not as active in the Go community these days as I was in past years.

And yep, I'm also Terry's brother.

</comment></comment></comment><comment><USER28> > _The aim is to produce software libraries that are as safe as Go or Rust, > roughly speaking, but as fast as C, and that can be used anywhere C > libraries are used._

This is kind of a weird thing to say, because Rust _is_ as fast as C, and can be used to create C-compatible libraries.

<comment><USER7> See my other comment (written after your comment). Search this page for "That announcement has more to say about the comparison to Rust, which is probably the most frequently asked question."

</comment></comment><comment><USER29> What makes this language specific to parsing files? It mentions that it is a DSL for parsing files a few times... why not network packets, or any other task.

<comment><USER30> I interpret that to be more a statement of creator intent than a restriction on the end-user. The general vibe I get is "This language is verbose as hell and puts a lot of constraints on what your functions are allowed to do; writing a full-sized application in Puffs alone is going to be a super-tedious exercise."

</comment></comment><comment><USER31> Can this DSL be extended to cover other classes of bugs and undefined behaviour in C without spilling over into runtime checks?

<comment><USER7> Possibly. I'd like Puffs (and its generated C code) to be free of UB (and I've skimmed the blog.regehr.org posts), but I'm not 100% certain if it is.

</comment></comment><comment><USER32> Looks like a mix of ATS and Pony, but without the rich proof system of ATS, without the safeties provided by both and without the performance advantages of both. Wonder why they still try to reinvent the wheel, when there are already established and better langs out there. Well, it's Google, so they are still academics.

</comment><comment><USER33> We're google, we can pick any name we want, even if a very similar project is already using it. [https://www.netbsd.org/docs/puffs/](https://www.netbsd.org/docs/puffs/)

<comment><USER34> Creating a filesystem in user-space is "very similar"? I mean, they both involve files but…

[http://netbsd.gw.com/cgi-bin/man- cgi?puffs+4.i386+NetBSD-7.1](http://netbsd.gw.com/cgi-bin/man- cgi?puffs+4.i386+NetBSD-7.1)

<comment><USER35> What will I get if I type "sudo apt install puffs"?

What do I have if I see libpuffs.so somewhere?

<comment><USER34> That's a valid question but not the same as saying the projects are very similar. In that case in particular, the answer would come down to "Are you running on NetBSD?" and so the most likely answer is that the NetBSD package maintainer would package it as "google-puffs" or something like that.

<comment><USER7> Yeah, it'd be unfortunate, but not unprecedented. For example, Debian has both epiphany and epiphany-browser, which are two separate things.

<comment><USER7> I'm considering a name change: [https://groups.google.com/d/topic/puffslang/cSrH-s7UqwA/disc...](https://groups.google.com/d/topic/puffslang/cSrH-s7UqwA/discussion)

As for the "We're google, we can pick any name we want" assumption that somebody else wrote earlier, [https://github.com/google/puffs](https://github.com/google/puffs) says "Disclaimer: This is not an official Google product, it is just code that happens to be owned by Google". Also, before the launch, I didn't find many hits for "puffs" when searching github.com projects, or searching "apt search puffs", or searching the Web in general for queries like [puffs programming], or uses of the ".puffs" file extension. It's not like I cackled maniacally as I deliberately screwed over the NetBSD puffs project, whether for myself or on behalf of Google, I just didn't find it. I am bad at searching. Sorry.

</comment></comment></comment></comment></comment></comment><comment><USER36> That's a great acronym</comment>


Can Facebook be replaced? Let's invest $100,000 in seven teams and find out - <AUTHOR> http://calacanis.com/2018/04/20/openbookchallenge/ <comment><USER2> This seems pretty silly. Facebook will probably die at some point, but you need an opportunity, some need that they are not meeting. If you look at the things that were serious threats to Facebook: Instagram, WhaptsApp, Snapchat, they weren't just Facebook clones, they did something fundamentally different that was still social, where that different something was not a good part of the core Facebook experience.

If the thesis is that Facebook's privacy issues are an opportunity, I think all the previous attempts to replace Facebook over privacy concerns should make it clear that it is not.

I think this competition's focus on teams with "ability to execute" is falling right into this trap of thinking if you just make something a little bit better it will siphon users away, but what you need it something that is social, but still fundamentally different, something you can't really achieve on Facebook at all.

And even if you are building the next Instagram, I think the recent travails with Snapchat should be illuminating, if Facebook can't buy you, they will try to copy you, and that will make your life very hard because then you no longer have a differentiator.

Facebook is not asleep at the wheel the way MySpace was.</comment>


Congress passes bill forbidding scientists from advising the EPA - <AUTHOR> http://www.salon.com/2014/11/19/house_republicans_just_passed_a_bill_forbidding_scientists_from_advising_the_epa_on_their_own_research/

<comment><USER2> Here's the section of the text of the bill in question...

[https://www.congress.gov/bill/113th-congress/house- bill/1422...](https://www.congress.gov/bill/113th-congress/house- bill/1422/text)

(a) Independent Advice.--Section 8(a) of the Environmental Research, Development, and Demonstration Authorization Act of 1978 (42 U.S.C. 4365(a)) is amended by inserting ``independently'' after ``Advisory Board which shall''.

(b) Membership.--Section 8(b) of the Environmental Research, Development, and Demonstration Authorization Act of 1978 (42 U.S.C. 4365(b)) is amended to read as follows:

``(b)(1) The Board shall be composed of at least nine members, one of whom shall be designated Chairman, and shall meet at such times and places as may be designated by the Chairman.

``(2) Each member of the Board shall be qualified by education, training, and experience to evaluate scientific and technical information on matters referred to the Board under this section. The Administrator shall ensure that--

``(A) the scientific and technical points of view represented on and the functions to be performed by the Board are fairly balanced among the members of the Board;

``(B) at least ten percent of the membership of the Board are from State, local, or tribal governments;

``(C) persons with substantial and relevant expertise are not excluded from the Board due to affiliation with or representation of entities that may have a potential interest in the Board's advisory activities, so long as that interest is fully disclosed to the Administrator and the public and appointment to the Board complies with section 208 of title 18, United States Code;

``(D) in the case of a Board advisory activity on a particular matter involving a specific party, no Board member having an interest in the specific party shall participate in that activity;

``(E) Board members may not participate in advisory activities that directly or indirectly involve review or evaluation of their own work;

``(F) Board members shall be designated as special Government employees; and

``(G) no federally registered lobbyist is appointed to the Board.

<comment><USER3> Based on this, it seems like a more accurate title would be " _House_ passes bill forbidding scientists from advising the EPA _on their own research_ ", similar to the article's actual title.

That said, I found _Science_ 's article[0] to be a better (or at least less sour-toned) review of the situation, stating that the bill bars "panelists from discussing their own research".

[0][http://news.sciencemag.org/environment/2014/11/environmental...](http://news.sciencemag.org/environment/2014/11/environmentalists- scientists-fret-over-republican-bills-targeting-epa-science)

</comment></comment><comment><USER4> Just those House Republicans being crazy and making us Americans look bad, again.

It won't pass the Senate. If by some cataclysm it passes the Senate, Obama will veto it.

<comment><USER5> To be fair, the Republicans are getting plenty of help from the Democrats when it comes to making America look bad.</comment></comment>


Celebrating 4 years: from a better web, to your web - <AUTHOR> http://chrome.blogspot.com/2012/09/fourth-birthday.html <comment><USER2>
      This site was designed with Chrome in mind and is unable to
      render properly in your browser. For the best experience, we
      recommend you download Chrome and try again.

<comment><USER3> Works in IE10 :)

</comment></comment><comment><USER4> Only works in Chrome. That's not "a better Web" in my book. That's "a best viewed in Web".</comment>


Ubuntu 15.04 Launches with Support for OpenStack Kilo, New LXD Hypervisor - <AUTHOR> http://techcrunch.com/2015/04/21/ubuntu-15-04-launches-with-support-for-openstack-kilo-new-lxd-hypervisor-and-snappy-core/ <comment><USER2> I'm curious if there's any effort underway to refine Ubuntu's desktop UI. It's a great distro for my needs, but am always underwhelmed by the UI and how large all the buttons and elements are, plus it's use of earth tone color schemes. I feel it could do a much better job using a screen's real estate.

Doesn't even have to like Windows or OS X. Perhaps something like Material Design would be a good starting point.

Dare I say that a refined, well-polished UI for Linux would provide a great face and mainstream credibility to adopting Open Source computing.

<comment> T-A Sure, it's called Kubuntu: [http://www.kubuntu.org/](http://www.kubuntu.org/) ;)

</comment></comment><comment><USER3> Will there ever be a desktop version of Ubuntu with snappy ? Snappy seems to have some very interesting advantages..

<comment><USER4> I have been saying that Linux traditional package management is out dated and needs to be re-invented.

Why do we need to share all the libraries? Shouldn't most of them be self contained? Can't we just intall into a directory and uninstall by removing a directory? Sounds a lot like containers to me but simpler and not virtual.

So maybe we can see a systemd packagemanagement system :) Just kidding but hmmmm.

<comment><USER5> While I think it's FAR better than anything Windows or Mac have come out with (both are entirely closed to corporate approval with no alternative repositories), I would want to see more unification between distros in terms of package managers. Right now, only source files seem to be consistent, with different package managers requiring different dependencies for every package, despite large environments such as GNOME which provide a consistent experience on any distro. With divergent systems such as Ubuntu's PPAs this seems less likely, but I'm not very qualified to comment. Perhaps someone else knows more on the possibility of this? Are distros still too different under the rug?

<comment><USER6> > Are distros still too different under the rug?

Yes and no. You could _probably_ make a packaging system that could handle multiple distros cleanly, but then the package maintainer would need to maintain said package on all of those distros.

<comment><USER7> And that's just third-party vendor packages. The real problem comes with people thinking that "these two distros both use [package standard] so I can take a system package only provided on one, and just install it on the other!"

The difference between the world of RPMs and the world of DEBs isn't really the package format standard; if that was the only problem, it would have been solved long ago. It's that, hiding behind RPM and DEB, there are two separate package dependency graphs shared by all the distros that make use of either. They don't have names, but effectively they're "the Debian dependency graph" and "the Fedora dependency graph."

All derivative OSes that keep packages updated from "upstream" (like e.g. Ubuntu does with Debian) are forced into the upstream's dependency graph. If Debian packages X.org split into three packages and makes everything graphical depend on one of them, then if Ubuntu wants to ship the "upstream" version of any of those graphical programs, it has to _also_ ship the upstream version of X.org (or, at least, a _virtual package_ that has the same name as the one of the three that those packages depend on, and hope that the package doesn't actually depend, implicitly, on any of X.org's own Debian-specific dependencies that thusly won't be getting installed.)

Which is all to say, if you want to unify package management, you're going to have to come up with one base set of packages everyone can agree to depend on. Or, at least, a graph of virtual packages that get fulfilled by different base packages on each OS.

Otherwise, for now, it's actually handy to see .rpm and .deb on packages—it tells you whether the _contents_ of the package are built for your dependency graph, or for the other one.

</comment></comment></comment></comment></comment><comment><USER8> Has there been a Release Candidate milestone this cycle?

Wiki says there should have been, [1] but there isn't any on the servers. [2]

Or, maybe I should read '25 April 16th', 'ReleaseCandidate' on Ubuntu wiki [1] as "there will be a Release Candidate on the week number 25 (week meaning: seven-day period here) starting with April 16". That would mean the Ubuntu developers yet have two more days to release RC on schedule, and the final release should be expected on the week startng with April 23rd, up to April 29th; and TechCrunch just based their article off the line in the wiki, which they could not actually read and didn't bother to check the facts?

[1] [https://wiki.ubuntu.com/VividVervet/ReleaseSchedule](https://wiki.ubuntu.com/VividVervet/ReleaseSchedule)

[2] [http://cdimage.ubuntu.com/ubuntu/releases/15.04/](http://cdimage.ubuntu.com/ubuntu/releases/15.04/) [http://cdimage.ubuntu.com/lubuntu/releases/15.04/](http://cdimage.ubuntu.com/lubuntu/releases/15.04/) [http://cdimage.ubuntu.com/xubuntu/releases/15.04/](http://cdimage.ubuntu.com/xubuntu/releases/15.04/)

<comment><USER9> Ubuntu Mate's forum[1] links to a QA page[2] which points to a download in the "daily-live" directory, rather than one that's listed as RC specifically. This might be due to recent emphasis on daily builds.

[1]: [https://ubuntu-mate.community/t/ubuntu-mate-15-04-release- ca...](https://ubuntu-mate.community/t/ubuntu-mate-15-04-release-candidate- ready-for-testing/1016)

[2]: [http://iso.qa.ubuntu.com/qatracker/milestones/338/builds](http://iso.qa.ubuntu.com/qatracker/milestones/338/builds)

</comment></comment><comment><USER10> TC throwing around buzzwords they don't understand.. "hypervisor" has a specific meaning entirely unrelated to containers.

<comment><USER11> From [http://www.ubuntu.com/cloud/tools/lxd](http://www.ubuntu.com/cloud/tools/lxd):

> And it's going to be a real hypervisor? > Yes. We're working with silicon > companies to ensure hardware-assisted security and isolation for these > containers, just like virtual machines today. We're working to ensure that > the kernel security cross-section for individual containers can be tightened > up for each specific workload. We'll make sure you can live-migrate these > containers from machine to machine. And we're adding the ability to bind > storage and network interfaces to the containers, just like virtual > machines.

Maybe that's not the specific meaning that you had in mind, but they're definitely going beyond a plain old LXC container.

<comment><USER12> What do you possibly gain by introducing VT-* features into your container product?

<comment><USER13> At the moment, the container host exposes any kernel vulnerability to the container guests; that's a large enough attack surface that the advice I've most frequently come across is "Run your customer's containers in a VM so they can't attack your host". That's obviously less than ideal, so if VT-* can add a layer of isolation such that I don't need a VM layer in the infrastructure, it's worth it.

<comment><USER12> So you're not longer sharing a kernel with the host?

<comment><USER13> The VM doesn't share a kernel with the host, no. Without knowing exactly what virtualisation knobs Canonical are planning on adding here, it's difficult to say how much isolation is on the table.

</comment></comment></comment></comment></comment></comment><comment><USER14> The persistent misconception about containers on hackernews is unfortunate. The open source Linux container project (LXC) dates 2009, has been supported by Ubuntu since 2012, and has mainly been developed by Stephane Graber and Serge Hallyn. They have now developed LXD that builds on LXC.[1] It's far away from a 'me too' and to suggest so is an disservice to the folks working on the LXC project over the last 7 years. LXD uses unprivileged containers by default and is designed to support multiple hosts and live migration out of the box.

The LXC container project only matured with the 0.9/1.0 release around 2013, around the same time that Docker decided to use it as a base to develop a read only app container built with layers of aufs that LXC supported. Docker has not contributed to the LXC project or even attributed properly, it's website still refers to the LXC project as 'low level kernel capabilities' which in many ways is partly responsible for the widespread misconceptions about LXC in the docker ecosystem.

These 'low level kernel capabilities' are namespaces and cgroups that were mainly developed to support containers. The LXC project used these to provide userland containers along with container management tools and OS templates. This is what Docker used untill version 0.9 when it switched to its own libcontainer format to directly interface with kernel namespaces and cgroups. Referring to the LXC project as 'low level kernel capabilities' when it was as functional and in many ways easier to use than Docker is as inaccurate as referring to Docker as low level kernel capabilities.

Docker is a funded project and could take itself to market and gain adoption much more aggressively than the low key LXC project. This is something for open source projects to think about.

Immutability, idempotency and restricted single app containers made of read only layers are not the only way to use containers. They provide benefits for some use cases but also add complexity. It makes business sense to try to own the 'format' and there is an unfortunate tendency even for the technical minded to fail to consider not everyone needs these deployment centric addons, and disregard the complexity it adds.

For the average user used to VMs and complete OS environments, LXC containers are far easier, simpler and straightforward to use and offer a gentler transition. They behave more or less like your VMs, only more portable and lightweight. Immutability, idempotency or grappling with the complexity of single app containers of read only layers can be saved for later when and if the need arises.

Containers as a fast and lightweight alternative to virtualization with easy to use tools now across hosts with LXD and a wide choice of container OS templates seems to be an good option to have. Upstream features like unprivileged containers and live migrations is icing on the cake.

Disclosure - I run flockport.com that provides ready to deploy LXC containers.

[1][https://linuxcontainers.org](https://linuxcontainers.org)

</comment><comment><USER15> > builds on Ubuntu's LXC project, which also forms the basis of Docker and its > container technology.

Erm. LXC is userspace interfaces to kernel features.

Libcontainer is also userspace interfaces to kernel features.

The docker guys are the primary libcontainer developers. Docker no longer uses LXC by default.

I wouldn't consider it accurate to say LXC forms the basis of Docker's container technology, because you will never touch LXC if you use modern versions of docker.

<comment><USER16> If we're being pedantic, you're correct. But to a pretty good approximation you can refer to the kernel features of cgroups, namespaces, etc, as LXC, and people have been doing so for a very long time. It's only recent that there were other interfaces to this such as libcontainer, and don't forget that Docker originally used LXC and still supports an LXC driver.

</comment></comment><comment><USER17> TC throwing around buzzwords and a "meh" about a late to market idea that, while an interesting idea, would really require a level of automation I doubt this has.

A full orchestration solution where its basically:

docker pull $image; docker run $image $nodeID

$nodeID = nodeID or can be left blank to assign to a random node based on current load.

Then update a cluster stats/dashboard page.

Even then, its basically just trying to compete with things like CoreOS, Docker's orchestration stuff its working on, Kubernetes, etc.

<comment><USER18> What's wrong with competing with CoreOS and Docker's orchestration?

<comment><USER17> Nothing really, I just think it won't impress. None of the stuff Ubuntu has ended up "me-tooing" their own special version of has enjoyed wide adoption.

Edit: Since I get rate limited regularly [for some reason] I'm editing:

> It could mean that nothing copied by Ubuntu gets popular,

That is partially what I mean, Ubuntu's "special replacements" for existing systems rarely get adopted outside of Ubuntu/Ubuntu forks.

> it could mean that Ubuntu's copy never gets popular.

I think this is primarily what will happen because it offers nothing truly unique that won't be easily/rapidly copied.

> LXD is using OpenStack, which is the 800 lb. gorilla of orchestration > solutions - almost literally (3M lines of Python!).

Yeah. And I can use that already.

<comment><USER19> Except Docker perhaps, which is a "me-too" originally based on LXC?

<comment><USER20> Ubuntu/Canonical didn't create Docker.

<comment><USER18> Fweespeech's comment is confusing. It could mean that nothing copied by Ubuntu gets popular, or it could mean that Ubuntu's copy never gets popular.

<comment><USER21> Ubuntu is a copy of debian that is quite popular.

<comment><USER17> Yes, but can you name another? Or shall I start listing off server software they've tried to make their own special version of and failed?</comment></comment></comment></comment></comment></comment></comment></comment>


The Best Ways to Consume the Web - <AUTHOR> http://claytonwrites.com/the-best-ways-to-consume-the-web/

<comment><AUTHOR> The constant stream of digital content can be overwhelming sometimes and it can be difficult to keep up with the Internet. As a writer and a power user of said internet (as many of you probably are), I take a step back and analyze the most efficient ways (in my opinion) to consume information on the web.</comment>


The Most Intolerant Wins: The Dictatorship of the Small Minority (2016) - <AUTHOR> https://medium.com/incerto/the-most-intolerant-wins-the-dictatorship-of-the-small-minority-3f1f83ce4e15 <comment><USER2> Can a small minority push too aggressively and embolden a silent majority (or substantially larger plurality) to unify against them and feel justified in resistance? This feels like one of the major themes of the current political climate in the US and parts of EU.

<comment><USER3> One thing that comes to mind is when muslims raised concerns about Switzerland's flag.[0]

This is a different sort of case than described in the article, but pushback here is inevitable.

[0]: [https://www.aargauerzeitung.ch/schweiz/weg-mit-dem-kreuz- sec...](https://www.aargauerzeitung.ch/schweiz/weg-mit-dem-kreuz-secondos- fuer-neue-schweizer-fahne-113290242)

<comment><USER4> I'd like to know more about that. It seems to blundering terrible as a tactic that it almost makes me think it's a false flag operation.

<comment><USER5> They allege it was a joke: [https://www.thelocal.ch/20110928/1324](https://www.thelocal.ch/20110928/1324)

<comment><USER4> Now it all makes more sense. How sadly typical of the current climate.

</comment></comment></comment></comment></comment><comment><AUTHOR> An interesting bit:

 _Clearly can democracy –by definition the majority — tolerate enemies? The question is as follows: " Would you agree to deny the freedom of speech to every political party that has in its charter the banning the freedom of speech?" Let's go one step further, "Should a society that has elected to be tolerant be intolerant about intolerance?"_

To which he later concludes:

 _We can answer these points using the minority rule. Yes, an intolerant minority can control and destroy democracy. Actually, as we saw, it will eventually destroy our world.

So, we need to be more than intolerant with some intolerant minorities. It is not permissible to use "American values" or "Western principles" in treating intolerant Salafism (which denies other peoples' right to have their own religion). The West is currently in the process of committing suicide._

<comment><USER6> > "Should a society that has elected to be tolerant be intolerant about > intolerance?"

This is something philosophy has actually done well to detail. It's the paradox of tolerance, and I think the answer absolutely has to be yes. For those looking for easy surface level gotcha's, that seems like a problem. Dig deeper, and it's logically consistent with the belief of tolerance, for if one allows intolerance, their tolerance loses all value.

<comment><USER7> The problem that opens up is the definition of intolerance. Are direct claims against the rights of others to believe something intolerant? Yes, they probably are. What about speaking against groups of people (in a broad sense, calling out some perceived problem with their behavior)? Well, sometimes that's intolerant, sometimes something needs to be said (maybe that group is the Inner Party and they're taking too much). What about speech that doesn't directly disparage anybody, but that makes certain people feel incredibly uncomfortable and unwelcome? Well, that can be exclusionary, but everything makes _someone_ uncomfortable. (some Christians might not want you bringing evolution in to schools (which they perceive as just another competing ideology), and some trans people might not enjoy being picked apart in critical gender discussions everywhere they go. The reader might agree with one of those two but probably not both.)

So, as you can see, it's really a microcosm of the idea that "we should support good and ban evil."

<comment><USER6> Agreed. I think the solution is to really pluck at those grey areas, as of course it's easy to work in black and white. To generalize, I think the general best course is to first understand why the intolerance exists, its validity, and then address it from there in ways still consistent with tolerance. Easier said than done of course, but I'm not intending to write a philosophical dissertation here fully.

As a reminder that many who likely support this view need, you should be intolerant of intolerance, not people who hold intolerant beliefs or practice intolerance.

<comment><USER8> > ...not people who hold intolerant beliefs or practice intolerance.

The problem is that we've done a splendid job blurring the lines between identities, beliefs, speech, and behavior. We have no ground rules for how to be intolerant of some things without seeming intolerant of the people that care deeply about those things.

</comment></comment></comment></comment></comment><comment><USER9> Very enlightening, but I think the points about non-GMO/organic food are a bad example. The non-GMO/organic movement is a rejection of technologies which improve yields. Distribution costs might have lowered, but supply forces will almost always keep these foods substantially higher in price because yields are lower.

<comment><USER10> Are yields really low, or is that just an excuse huge conglomerates like Monsanto that wants to "DRM" seeds use, when they don't care about yields at all?

And are they giving a subpar product + patents/copyrights + DRM, and selling it with the same high prices as to make yields irrelevant (when upselling 10x and 100x what you buy produce for, the original yield is an insignificant factor to the price).

<comment><USER11> I mean, if they weren't low then why would farms pay money for the more expensive seeds?

Farms aren't mom and pop shops anymore. Even the small ones are major, multi- million dollar businesses. This is big company VS big company.

And if those mult-million dollar businesses believe that they can get better crops by paying Monsanto, well I think I'll trust their expert opinion on it.

If these products are so sub-par, why would the competing, large corporations buy them?

<comment><USER10> > _I mean, if they weren 't low then why would farms pay money for the more > expensive seeds?_

Because they have more assurance of their crop not falling prey to some disease. But even a 100% increase chance of a good yield is nothing (while it means the world to farmers) if the final price is many times what they sell for.

</comment></comment></comment></comment><comment><USER12> The basic argument is interesting but has important preconditions: the majority needs to be tolerant (the change doesn't cost them much). In the case of kosher drinks, it's almost completely invisible.

When people actually have a preference (such as how a drink tastes) we find that the market provides a lot of variety despite the cost. Consider the shelves of your average convenience store.

Applied to religion, changes are far from costless and we often see persistent disputes. And anyone making large-scale predictions needs to account for how incredibly successful and persistent western culture and products are. This doesn't seem to be due to intolerance.

<comment><USER13> > we find that the market provides a lot of variety despite the cost

You can have anything you like so long as it's manufactured by Coke.

<comment><USER14> Most supermakets have Coke, Pepsi, and a white-label manufacturer with their brand on it.

</comment></comment></comment><comment><USER15> The flip side: An intolerant majority. There are good reasons to avoid leaving whether minorities get civil rights to the whim of the majority, and to instead enshrine such rights in a constitution.

<comment><USER16> Constitutions aren't magic spells, they still rely on people actively choosing to honor them.

<comment><USER8> Someone said it's surprising that all three branches of the U.S. government are actively trying to shirk their duties. The President blames Congress for inaction. Congress makes vague and overly complicated bills that mostly enables the executive branch to do actual rulemaking. The Supreme Court, as a rule, tries to be as narrow and impactless as possible.

The founders assumed each branch would _compete_ for power. They didn't expect them to actively push responsibility on to other people. It seems like that's why we have a healthy and growing bureaucratic state these days.

<comment><USER16> > The founders assumed each branch would compete for power.

They do. Part of that competition is trying to pass blame for things to the other branches, including blame for inaction that the people in office want but the electorate does not, since blame = reduced public support = reduced effective power.

> They didn't expect them to actively push responsibility on to other people.

They probably did, since the framers had plenty of experience with elected politicians (often being such themselves) and blame passing among such politicians is as old as electoral politics (and blame-shifting among politicians more generally is pretty much universal in history, too.)

</comment></comment></comment></comment><comment><USER17> Maybe in the western cultures, but I've been hearing variations of the "nail that sticks out gets hammered down" from my korean family for a long time.

<comment><USER3> That sentiment comes from the Confucianism, Buddhism, and Neo-Confucianism which shaped Korea. I think that sits alongside with the points the article is making.

Similar to the McDonalds in Milan example in the article, Korea has LotteMart everywhere, and people do sometimes eat there instead of a local joint.

Koreans also study English just like other countries. The annual 수능 exam taken by students is considered to be extremely important for college applications. It has a section on English.

</comment></comment><comment><USER18> This is actually why social networks inevitably fail; all small splinter groups become the most vocal, dominating discussion, setting narratives. Even if you remove some of the most extremist groups (like Reddit -> Voat), other, more socially accepted, still stay and might be even more dangerous due to their lower profile/higher acceptance/long-term devastating effects that are hard to predict.

</comment><comment><USER19> Democracy is not necessarily the majority. It depends on the reference: eligible voters, or actual voters, as well as the participation rate.

The majority "winner" among all eligible voters in most U.S. elections is the non-voter. Voting is not compulsory, and often there are three or more candidates, therefore the winner is usually only getting a plurality of votes from participants. And compared to the eligible citizens, it's really merely a significant minority producing the result.

If you add in the effect of primary elections, where an even smaller number but highly motivated voters participate, contributes to even less involvement thus less majoritarian democracy. Ergo in a general election, the three or four choices you have on a ballot (other than write in) were determined by a process usually involving less than 15% of the eligible voters. [1]

[1] [http://www.pewresearch.org/fact-tank/2016/06/10/turnout- was-...](http://www.pewresearch.org/fact-tank/2016/06/10/turnout-was-high-in- the-2016-primary-season-but-just-short-of-2008-record/)

</comment><comment><USER20> Reasonable accommodation often comes down to a cost argument. In almost all the examples the author cites, it costs next to nothing to accommodate these small groups of people.

It is a corporation or a society deciding that it is willing to make a minuscule procedural or behavioral adjustment in order to accommodate a group of people. For those who don't have a peanut allergy or religious dietary restrictions, the difference is barely perceptible.

If you are a government or a corporation that services tens or hundreds of millions of people. You don't make policies or products just for a plurality or majority of individuals-- you try to them compatible for as many people as possible.

This isn't "tyranny of the minority", it is just good design.

</comment><comment><USER21> This is not really intolerance winning but a standardisation on the most strict.

it's what was missing from things like trans-pacific partnership and other multi-lateral regulatory agreements.

Where there are differences in regulation, pretty much the only sane means of harmonising is to choose the most strict, most onerous regulation, as that will (almost certainly) be a superset of the other regulations (if not you probably are discussing regulation of different things)

At the moment the EU/US seem to be stuck on chlorination of chicken - but one approach to bactericide will be more effective and win out in time.

</comment><comment> shaki-dora > It is not permissible to use "American values" or "Western principles" in > treating intolerant Salafism. The West is currently in the process of > committing suicide.

This is a far-right diatribe. To see it on HN, where most articles mentioning actual minority rights get flagged into oblivion as "too political" is embarrassing. Just look at the top-level comments: you've even got the gay- bashes using this chance to pile on a little, well, gay-bashing.

Nobody is closing their eyes to "salafism". There is no such thing in the US, at least not as a relevant cultural force. The Muslim community is surrounded and infiltrated by three-letter agencies. Yet mentioning such things, or the President's fascist dog-whistles gets downvoted to #CCCCCC. I happen to live in a country with about 10x as many Muslims as there are in the US, and I have no trouble finding pork or bacon or any other sort of haram food. And if my Heinz ketchup is kosher, which costs about 1/1,000,000 of a cent (see Wikipedia), I have trouble seeing the injustice.

If you think there's a dictatorship of political correctness you should look up both "dictatorship" and "political correctness" in a dictionary. Usually dictatorships come with power, so I'd like to return mine.

</comment><comment><USER22> "A Kosher (or halal) eater will never eat nonkosher (or nonhalal) food , but a nonkosher eater isn't banned from eating kosher."

I absolutely never buy halal meat and whenever possible try to avoid kosher certified foods. I do try to vote with my wallet and keep religion out of my food as much as physically possible.

<comment><USER23> Even if those religious rules mean the animal has to be treated more humanely than the 'secular' systems of approval?

<comment><USER22> Absolutely. It's purely about the involvement of religion that puts me off. If there was a "Catholic church approved cheese" I'd refuse to buy that too.

<comment><USER5> Your loss. Monasteries and convents make some awesome foodstuffs, including great beer.

</comment></comment></comment></comment><comment><USER24> In my house we all drink semi skimmed milk even though only 1 member wants it

</comment><comment><USER25> Congratulations. You just won a reader.

</comment><comment><USER26> Paradox of Tolerance : [https://en.wikipedia.org/wiki/Paradox_of_tolerance](https://en.wikipedia.org/wiki/Paradox_of_tolerance)

> The paradox of tolerance was described by Karl Popper in 1945. The paradox > states that if a society is tolerant without limit, their ability to be > tolerant will eventually be seized or destroyed by the intolerant. Popper > came to the seemingly paradoxical conclusion that in order to maintain a > tolerant society, the society must be intolerant of intolerance.

<comment><USER27> > But we should claim the right to suppress them if necessary even by force; > for it may easily turn out that they are not prepared to meet us on the > level of rational argument, but begin by denouncing all argument; they may > forbid their followers to listen to rational argument, because it is > deceptive, and teach them to answer arguments by the use of their fists or > pistols.

He is meaning that there should be intolerance to violent intolerance, not to any intolerance.

That is my interpretation at least, and I find it very disingenuous to omit that part.

<comment><USER28> Pretty much every intolerance worth opposing harnesses very violent elements in it's base while maintaining a veneer of civility.

Look at religious motivated systemic violence against LGBT people in the US. Our current executive has waved a rainbow flag a time or two, but our vice president has personally funded things that look like camps and penned legislation that let's police ignore and LGBT person being beaten on the street. Neither of these things are particularly unfair characterizations.

So yeah, you're right. It's just that intolerance naturally leads to violence rather quickly in humans.

<comment><USER29> That's terrible! I can't seem to find a source of the vice president being connected to legislation allowing police to ignore LGBT people being beaten. Can you give me the link to one?

Also, what do you mean by camps? Forced orientation changing?

<comment><USER28> Sure, it's the tortured story of Indiana's so-called RFRA act that Pence presided over. It includes several problematic sections.

Section 9 opened the door for this interpretation of the build by pointing out that private contractors often work for the city and state, and specifically protecting the right to object to interacting with LGBT people if "[their] exercise of religion has been substantially burdened, or is likely to be substantially burdened".

This leads to an awkward situation where a private contractor doing police, fire, or (most likely) emergency services work for a company with a religious charter is likely protected in doing so.

What's most interesting about the RFRA (and the bills Pence helped pen but never made it to a vote in House and Senate) is the "overriding" clause, allowing for a explicit defense in state court against people who discriminated, and making it harder for those suing to press for (perhaps in 2015, more strict).

This made the law stronger than prior related RFRA acts of other states and at pre-existing federal law.

The text of the law is available publicly and about a billion perspectives on the law are available online. Give that you almost certainly didn't search for it on google, please let me refer you to "mike pence RFRA Indiana". You can find lots of pro and con to suit your taste.

<comment><USER30> RFRAs don't allow first responders to refuse to do their jobs -- the life of another is a compelling state interest, and there's no narrower way to accommodate that interest than to require first responders to respond. Merely claiming a religious burden is only one element of the test. I've never heard of any religious emergency service personnel even suggesting they have a religious objection to 'interacting' with LGBT people in emergency situations -- but even if you could, the Indiana RFRA law wouldn't have allowed that.

<comment><USER28> I mean, RFRAs have enabled other prior absurd outcomes, especially in health care. I've read a lot of interpretations of this law that suggest that this would have to be tested in court.

There is this curious not of the "obligation" of a first responder, but as we are seeing in Florida it's not clear any such obligation exists or can be realistically enforced.

<comment><USER30> Police don't have to take a bullet for anyone, but the EMT that refuses to help LGBT people on the scene of an accident will be sued into oblivion. RFRAs don't change any aspect of either situation, and we've had 20 years of federal RFRA caselaw that says it's pretty settled.

Despite what you may have read from activists, there exists no sizable group of Americans who want to use their religion, or would allow others to use their religion, to deprive LGBT people police, fire, or medical treatment in an emergency. No more, I'd venture, than there are LGBT people who would do so to religious people.

There are reasons to criticize religious beliefs or second guess RFRA expansion, but this shows the problem of encouraging a policy of intolerance toward perceived intolerance. It's often prejudice based on fearmongering, even (or especially) in the age of the internet.

<comment><USER28> You need to reexamine this specific rfra. It is different from other examples and was widely criticized for that difference.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER31> What an overlong and rambling article. Over the years I've found the big trick in writing is to know what to leave out. This is hard to get right but TFA could really do with some editing, it would probably be a stronger article at 1/4 the size that it is.

<comment><USER32> This is so true that me and 'jacquesm actually agree on it.

I think there's an Emperor's New Clothes thing happening with Taleb. Apparently, his technical writing is important and impactful. But his popular writing is prolix, repetitive, smug, and sometimes ill-reasoned.

<comment><USER33> This clip, one of the most impressive word salads you'll hear from a public intellectual, will confirm your impression beyond all doubt:

[https://www.youtube.com/watch?v=H11t5zBd3fU&t=25s](https://www.youtube.com/watch?v=H11t5zBd3fU&t=25s)

<comment><USER31> Wow. That's actually an incredible example of how to bullshit your way into fame. Do you think he believes his own nonsense?

</comment></comment></comment></comment><comment><USER34> I believe it. The most extraordinary evidence of this is the gay rights movement. They've adopted "Love Wins" as their slogan, but then refuse to even interact with people who may not support them (i.e: Mike Pence). Clearly, they don't believe their own propaganda.

<comment><USER35> You have made up two stereotypes at once. First that all gay people adopt the slogan "love wins", then that no gay people will interact with Mike Pence. Neither is correct. Further it is so obviously insane that you would cry hypocrisy at people who are loathe to interact with someone who doesn't believe they have the same rights as other _human beings_ , and who has the power to actually make that happen, that you should be ashamed of yourself, for not even being a horrible person in a subtle way.

<comment><USER36> Second on this. One of the ways that people tend to construct arguments against a group (from my experience in the midwestern US) is to show contradiction in the other side's argument. This would be a legitimate argument if done fairly, but it seems people always take an unfair route by synthesizing across a group using two opposing inner-sects. My father is often guilty of this, he will talk about "liberals" and I have to remind him that it's more than a little ridiculous to merge an entire political party (in the US, basically) into one viewpoint, treating a one-off statement by a high- schooler with the same value as the running candidate.</comment></comment></comment>


How Facebook Avoids Ad Blockers - <AUTHOR> https://www.dylanpaulus.com/2019-11-24-how-fb-avoids-adblockers/ <comment><USER2> Relatedly, uBlock Origin's picker has really improved my quality of life on Facebook.

I love Facebook, it's my only remaining connection to some people, and it's revived many friendships I thought I'd lost.

However, as one gets on in life, _People You May Know_ can be extremely emotionally impactful. It is a little part of the web UI that brings back the dead, ex partners I still miss, exes who have moved on, and toxic people I had tried to move on from.

It's really put me through the wringer and being able to block that part of the UI forever is something I'm very glad Facebook, in the role I have gladly given it as being an overseer of my (mostly good) emotions, _does not_ and _shouldn't ever_ stop me from doing. I hope they realize this.

<comment><USER3> > I love Facebook

Interesting, what do you think about the backlash against facebook? I guess there could be arguments in favor of facebook, after all.

<comment><USER4> Facebook is my only real connection to interact with people. I work remote and spend all of my free time with my family but I don't have any real-life friends. So facebook fills a little bit of a void where I can feel like I have a few "friends". I do understand some of the backlash of them sucking up all the world's data and selling it to advertisers.

</comment></comment></comment><comment><USER5> It's actually pretty simple to block with a recursive filtering algorithm like this:

[https://github.com/gorhill/uBlock/compare/master...jameshill...](https://github.com/gorhill/uBlock/compare/master...jameshilliard:has- visible-text)

or

[https://github.com/tiratatp/facebook_adblock/blob/master/src...](https://github.com/tiratatp/facebook_adblock/blob/master/src/main.js)

which was roughly based off of my rejected uBlock implementation.

Funny enough I haven't even used facebook in years for the most part, I wrote one of those just to try and make them lose money as I believe I'm doing a public service by slowing their expansion/world domination plans.

<comment><USER6> Can you explain what the rules to block that actually look like from a user perspective? Or does it require custom js?

<comment><USER5> Well with the uBlock filter I wrote it looked something like this at the time.

      facebook.com,facebookcorewwwi.onion##div[id^="hyperfeed_story_id_"]:has(div[id^="feed_sub_title_"]:has-visible-text(Sponsored))

</comment></comment></comment><comment><USER7> I continue to be surprised at how few people have heard of fbpurity[1], a fantastic browser extension that blocks all Facebook ads and lets you filter out specific types of content (links, memories, etc.). It's _dramatically_ improved my Facebook experience; I now see exactly the type of content that I want to see (updates on friend's lives) and nothing more.

[1] [https://www.fbpurity.com/](https://www.fbpurity.com/)

<comment><USER8> I mean one look at the website kind of tells you why.

The extension could be a lot less intrusive as well - just compare it to uBlock Origin for example. There doesn't need to be an onboarding message. I don't need to see "F.B. Purity hid:" prominently in the middle of my feed - just put that at the bottom right of the screen in gray text or in the extension. Etc.

I'm probably going to uninstall it because it makes FB even uglier.

<comment><USER9> You could check out Social Fixer. [1] It's been around for several years, is free and offers many features. The creator/maintainer of Social Fixer was also interviewed in Ars Technica.

[1]: [https://socialfixer.com/index.html](https://socialfixer.com/index.html)

<comment><USER10> Unfortunately it's not supported on mobile Firefox.

</comment></comment></comment></comment><comment><USER11> I have a much better experience of Facebook since a few weeks by adding #stream_pagelet{ display: None } in Stylus for the homepage.

No news feed. No passive content consumption. Still got pages, events, groups, messages etc. Can still use the website in an active/socializing way (looking for specific things, seeing relevant friends' notifications and invitations) but without being caught by the feed each time I come to check my notifications. Think I'll do the same with pretty much every social network. Content feeds are the worst.

</comment><comment><USER12> Interesting article. I don't blame Facebook for doing whatever they can to properly show ads tho, they provide a "free" service and in exchange serve ads. It's not free to support a company their size and its expected they do everything they can to monetize the site properly.

What do you guys think?

<comment><USER13> "do everything they can to monetize"

Except, evidently, allow users to pay money to not be subjected to ads.

<comment><USER14> Wouldn't work. Users who are willing to pay to make ads go away are the most valuable audience for advertisers because they have money to spend. Therefore FB would have to charge a TON of money to make up for their billions in lost ads revenue, and nobody would pay that amount anyway.

<comment><USER15> Seems to have worked out fine for YouTube (Premium subscriber here).

<comment><USER16> Perhaps but I'd put money on them still data-mining the shit out of you...

So you're paying to remove ads but tracking and monetisation is still happening.

</comment></comment></comment></comment></comment><comment><USER17> I always wonder about the person that is responsible for designing these kind of schemes. What is their daily job like? What are they thinking about their work? It might even be fun because you are essentially competing against ad- blockers in cleverness.

<comment><USER18> It's like being a poker player, but you probably get paid more.

<comment><USER19> At least poker doesn't have a negative effect on society, given you're only playing against people who opt-in by playing the game.

This in comparison is fighting against people who just want a bit of peace and less sewage being dumped in their Facebook timeline.

<comment><USER20> Facebook has a negative effect on society according to whom? How does a tool that allows you to connect to other people have a "negative effect on society"?

<comment><USER21> People get lynched and killed every day in my country (India) because of hate- speech on Facebook, not to mention all the fake news being spread via WhatsApp.

If Facebook were to disappear tomorrow, it would be a net positive for the world.

</comment></comment></comment></comment></comment><comment><USER22> What happens when screen readers can't identify things properly? Can Facebook be sued for not providing proper accessibility, given that their site is deemed to be essential by many?

If screen readers can identify something as an advertisement, then so should ad blockers be able to. If not... then aren't we depriving the blind and the sight challenged from valuable advertising equality?

<comment><USER23> I think you're kind of misunderstanding how screen readers work. You're clearly seeing the "Sponsored" text on the screen, and so is the screen reader. It's not that the text isn't _there_ , it's just that it's put there in a way that is nearly impossible to target with CSS-based ad blocking. That's all.

<comment><USER24> > _It 's not that the text isn't there, it's just that it's put there in a way > that is nearly impossible to target with CSS-based ad blocking._

I'm confused too, then.

If the screen-reader can see the word "sponsored" easily, why can't any other code? What is the difference between how a screen reader finds "sponsored" vs an ad-blocker?

<comment><USER23> A screen reader is looking at the text as it is rendered. Note that I said __CSS-based __ad blocking, which is really what the blog post was about. A more advanced ad blocker could certainly find the "Sponsored" text and hide the ad.

</comment></comment></comment></comment><comment><USER25> How I am avoiding Facebook. Took their ASN, scraped ripe ([https://stat.ripe.net/widget/routing- history#w.resource=AS32...](https://stat.ripe.net/widget/routing- history#w.resource=AS32934&w.starttime=2017-01-15T00%3A00%3A00&w.endtime=2017-06-23T00%3A00%3A00&show=Maxmized)) and dynamically updating firewall rules to block them for my whole network. And I am so sorry google is having cloud "hosting" (AS15562) as I would love to do the same for them.

</comment><comment><USER26>
      span[data-content="S"]
        + span[data-content="p"]
        + span[data-content="o"]
        + span[data-content="n"]
        + span[data-content="s"]
        + span[data-content="o"]
        + span[data-content="r"]
        + span[data-content="e"]
        + span[data-content="d"] {
        display: none;
      }

This only hides the "d", right? You generally can't hide a higher-level element based on drill-down selectors, so pure CSS wouldn't be enough. But of course, finding the appropriate parent by scripting would be trivial from here.

Apart of that, why can't one just accumulate all visible text by filtering out all `display: none` elements? Of course, this could be attacked again by e.g. shrinking the "noise" characters to width 0.

<comment><USER27> Yeah, I always have to write userscripts to get access to getElementsBy(TagName,Id,etc) and then call .parentNode().parentNode()... to reach the ancestor I want to remove.

Of course the downside of userscripts compared to uBlock rules is that they take time to run, so you end up seeing the ads briefly before they are erased, which is annoying. So then I run the scripts prior to page-load to insert CSS rules to hide all elements that _might_ be ads, let the page load, filter it, and then override the older CSS rules. It's quite a hassle, really.

What I'm saying is, :parent selectors in CSS would be greatly appreciated.

</comment></comment><comment><USER28> How does this impact assistive technologies? Are Facebook users using screen readers left unaware of what's an ad and what's not?

<comment><USER29> Interesting question! FaceBook Alt Text feature is an after thought at best, so I imagine they never thought about it.

</comment></comment><comment><USER30> I actually don't mind Facebook ads. If I'm on Facebook already, there's no additional javascript loading and hogging my browser with dozens of megabytes of tracking scripts. From performance point of view, browsing FB is a better experience than your average web site these days.

<comment><USER15> To be fair the ads tend to be better than the mountain of shit that my elderly relatives share on there. Then again I very, very rarely visit the site in the first place.

</comment></comment><comment><USER31> What really makes me sad is that some presumably quite talented engineer spent time thinking this up and coding it.

<comment><USER32> Can you explain what is wrong with engineers working on problems like these?

As I see this, it allows businesses to connect with more people, therefore being more profitable, therefore making economy grow in general.

I just don't understand this hate towards developers who work for companies like FB and Google and whose job is focusing on increasing ad engagement. In my opinion, they definitely provide a hugely positive effect on economy (unless you think capitalism / consumerism is evil / wrong or whatever, which is another topic).

<comment><USER33> When I visit [https://www.facebook.com/careers/](https://www.facebook.com/careers/) the first things it says are "Do the Most Meaningful Work of Your Career, [...] We design products and deliver services that bring the world closer together - one connection at a time [...] We encourage our people to be bold and solve the problems they care most about. [...] Together, we help others build stronger communities"

Does working on anti-ad-blocking seem like that to you?

To me, if I was promised "the most meaningful work of my career" then I was assigned to anti-ad-blocking I wouldn't feel my Facebook career was delivering on that promise.

<comment><USER34> Yeah, that sounds a bit like being promised a research job in curing cancer, but then being put on a team that researches how to weaponize ebola for that customer in North Korea...

</comment></comment></comment></comment><comment><USER35> I don't use Facebook, but I imagine the easiest way of blocking the ads is like most other websites - to block the connection to the ad-server(s), no? That's how uMatrix operates and, in my opinion, that works exceptionally well. It blocks known domains that are ad-servers and that alone blocks damn near everything because of the way ads are served on nearly every single website.

In fact it works so well that pretty much the only time I've noticed ads has been when I look at uMatrix and I see there aren't direct user connections to the ad servers. For those pages, it looks like the site itself is acting as a middle man and pulling the ads and inserting into the HTML via scripting. But that's a lot more work for developers to do, as well as more bandwidth and overhead. I don't know if those sites are able to tailor ads to individual users when they do this - they would need some sort of identification to pass to the ad server so the ads on those sites _might_ be generic, not sure.

But that's my observation, FWIW.

</comment><comment><USER36> Don't they host their own ads? Something I wish more websites would do instead of letting ad networks stomp all over the page with whatever Javascript/Flash/viruses they want.

<comment><USER37> It's not surprising that Facebook serves its own ads, considering that it's one of the top 2 digital ad networks by revenue in the US. Google does the same for its sites.

Facebook and Google have a duopoly on the online ad market, with a combined 60.9% market share. Amazon is #3 with just 7.6%.

[https://www.emarketer.com/content/facebook-google-duopoly- wo...](https://www.emarketer.com/content/facebook-google-duopoly-won-t-crack- this-year)

</comment></comment><comment><USER38> The main news feed is such a toxic space anyway so I just blocked it in general with this uBlock filter:

www.facebook.com##div[id^="feed_stream_"] > div

</comment><comment><USER39> Commenting about some of the comments . . .

Yes, ads are what keeps facebook and other websites running, but there's a blurred line that crosses from offering content for users to offering users as product. To attract readers, they provide content that has value. Then they do everything in their power to distract you from what you came for. When the distraction is too overpowering and irritating many people will complain and leave. It doesn't necessarily mean that we don't understand the money model; it's that we obviously are not going on the internet to see ads that take primacy over our online experience.

The line may be blurred, but facebook users are not facebook's customers; they are the product. Facebook offers this product to the businesses that pay for access. Inasmuch as facebook focuses on an engaging user experience, it's only to ensure that they maintain their product so businesses keep buying it. It's interesting how this product maintenance has evolved: like news or reality shows or contest shows, the aim is to introduce tension, and in the case of news topics, anger, which oddly keeps people coming back for more. The aim of providing an engaging user experience has morphed into providing an addictive user experience. And like most addictions, what started out as an enjoyable pleasure transforms into something that controls and destroys us to varying degrees.

<comment><USER40> I don't mind ads. I revolt against tracking.

</comment></comment><comment><USER41> Yes. This is horrible behavior from Facebook. I had a similar problem finding a working extension that blocks fbclk id. Well, I found one, but I am not sure I would want to share it, because the facebook engineering team may go after it as well.

This also renders nil the argument about "don't use the product if you don't like their (ad) practices". Tracking across websites without consent is illegal in most of Europe, yet they do it extensively.

<comment><USER42> Devils Advocate... why is it horrible behaviour from Facebook? It's their product which needs to be paid for by Ads and they need to prevent Ad Blockers from stopping these from being served. So in their defence - any technical work around is fair on their part.

<comment><USER41> Nobody forbids them to put ads. However, there are laws (not even talking moral here). If you explicitly download a tracking blocking extension, you want to opt out of tracking, which is required by law that they provide.

What I am saying is that not only they track you, but they explicitly break the top extensions that fix this. From this point of view, I have no regret for any of their ads being blocked.

</comment></comment></comment><comment><USER43> Sounds like if CSS could allow matching by patterns, it could still block it out? I.e. something regex / wildcard like? Though performance probably would suffer.

More advanced ad blocker can probably use some AI, that could be trained with user's hints about what is an ad. Or it can use some OCR for that purpose. If you can recognize that it's labeled "Sponsored", so can ad blocker potentially.

<comment><USER44> It's tricky even for Javascript.

<comment><USER5> Not really, you just need a recursive filtering algorithm such as this:

[https://github.com/tiratatp/facebook_adblock/blob/master/src...](https://github.com/tiratatp/facebook_adblock/blob/master/src/main.js)

</comment></comment></comment><comment><USER45> To me this is very simple, if someone installs an ad or tracking blocker then they are explicitly withdrawing consent, there is absolutely no ambiguity about it. Doing it anyway or de-anonymising them or anything else is impossible to do without equally explicitly knowing that you are violating consent. And every Facebook employee must know it.

<comment><USER46> You gave consent to see ads when you signed up. Why would the presence of an ad blocker withdraw that consent?

<comment><USER45> Because GDPR states that consent can be withdrawn at any time, and that provision of services can not be tied to consent. That's the law here in Wales.

<comment><USER47> GDPR requires consent for the processing of the personal data. Displaying an ad per se is not regulated by GDPR, and does not require consent. Though personalization of this advertisement requires processing of the PII, and thus it is supposed to be regulated.

Facebook UI is full of dark patterns, but it is possible to withdraw consent through settings: www.facebook.com/ads/preferences/

</comment></comment></comment></comment><comment><USER48> I assume this problem is the same reason why accessibility programs suck?

Given the billions that could be saved by making programs that interpret web sites rather than programmers learning and writing for accessibility I'd hope it's because it's impossibly hard, not because no one will create it.

I'd also help with testing......

</comment><comment><USER49> Question for anyone in the know: Is this allowed, from an accessibility point of view? I'm just wondering how someone with a screen reader would know it's an ad? (Or are screenreaders more advanced than I think, and would actually be able to read out 'sponsored')?

<comment><USER50> AFAIK it's not about the screenreader, but about the browser. The browser knows these aren't visible, so I don't expect it would have any reason to report them to the accessibility interface (IAccessible et al.).

</comment></comment><comment><USER51> I've put down the steps to kill all the junk out. "Customize your Facebook Experience" by Hirako2000 [https://link.medium.com/6q6LZgGV61](https://link.medium.com/6q6LZgGV61)

</comment><comment><USER52> It reminds me of a lightning talk I gave at ReactConf some time ago :)

Basically forward-shuffling the component tree to produce HTML that will be really hard to match using CSS Selectors usually found in adblockers and other DOM-targeting scripts.

Code: [https://github.com/elierotenberg/react- armor](https://github.com/elierotenberg/react-armor)

Video: [https://www.youtube.com/watch?v=n63XXHY4A7I](https://www.youtube.com/watch?v=n63XXHY4A7I)

</comment><comment><USER53> For more crazy adblocker avoidance solutions found in the wild, check this presentation from JSConfEU 2019 from an ABP employee:

[https://2019.jsconf.eu/shwetank-dixit/block-unblock-block- ho...](https://2019.jsconf.eu/shwetank-dixit/block-unblock-block-how-ad- blockers-are-being-circumvented-and-how-they-are-fighting-back.html)

[https://www.youtube.com/watch?v=Vk9bPDaZELQ](https://www.youtube.com/watch?v=Vk9bPDaZELQ)

</comment><comment><USER54> I wrote a similar article some time ago with a look at how to detect them and remove them from the DOM. It was mostly for didactic reasons.

[https://medium.com/hackernoon/how-i-get-rid-of-the-new- spons...](https://medium.com/hackernoon/how-i-get-rid-of-the-new-sponsored- facebook-posts-138d013f4bbe)

but my approach was to use Javascript instead of CSS

</comment><comment><USER55> Not only the ads. I once recreate the feed for a university project. Just take a look at the sources. Every element is completely obscured, every class and id is just long random strings.

</comment><comment><USER56> Nice breakdown. If I open facebook I can see the 'sponsored' as plain text right there in the developer tools... It might make a difference that I'm using chrome in Dutch?

</comment><comment><USER57> Why can't AI solve this problem for us. It should be fairly simple now to make a bot "read" words just like us instead of using CSS/HTML/JS to block ads.

</comment><comment><USER58> I wrote a greasemonkey script that runs every 250ms and blocks these. It might be hard with CSS but it's (almost) trivial with a spot of JS

</comment><comment><USER59> [https://socialfixer.com](https://socialfixer.com)

But is not as good anymore as it used to be

</comment><comment><USER60> How the narrative that content blockers are a non threat has fallen.

</comment><comment><USER61> Don't let Facebook get away with this!

</comment><comment><USER62> I have seen a similar technique used to build paywalls for research papers that display obfuscated "previews" of the article you clicked on beneath the "pay for access" banner

</comment><comment><USER63> just stop using facebook. no more ads.

</comment><comment><USER64> Or you can use Pi-hole and remove any and all ads :)

<comment><USER65> Uh, no. Pi-hole is a DNS-based ad blocker, while the ads we are talking about are served by first party.

<comment><USER66> Just block all of facebook and their CDNs. Problem solved.

Sure, that also kills facebook access, so two birds with one stone!

</comment></comment></comment><comment><USER67> I'm surprised I haven't seen a single comment say what ought to be the obvious: the easiest way to never see Facebook ads is to just not use Facebook.

I should hope I'm preaching to the choir, I'm sure, but... quitting really isn't as hard as you tell yourself it is.

It's not as essential as you think it is.

<comment><USER68> I'd like to add that it is not necessary to leave Facebook to not use Facebook. I have a FB account and I'll never close it, because I like having my username on all online services I might use if once. That being said I only have it logged in at a home desktop, not my phone, not any work machine. I use it for like two minutes weekly, one to check a few specialty groups I'm a lurker in and two to co-admin a page with a group of my friends where I once helped promote a post because the UX of doing so is too shitty for normal people wanting to bother navigating it. Facebook has had no effect on my mental health and it has a marginal benefit of being a kinda up to date contact book, even if it is getting worse at that. But that's it. You can have a Facebook account and only use it when it benefits you and not Facebook.

Edit: Oh and I use it in a Firefox Facebook container so I'm not at all worried about it tracking me online.

<comment><USER69> >Oh and I use it in a Firefox Facebook container so I'm not at all worried about it tracking me online.

You think that once you log in to FB in a container -- Facebook can't track you? Those container details are now appendage to your online fingerprint as far as Facebook are concerned.

Containers only work if you don't actually log in to such services. The only sure way for FB to not track you is to not use FB at all -- even then it requires other steps too as they'll be building a shadow profile on you.

<comment><USER68> You're of course correct, they can still see that I'm a container user because they can only even see me accessing Facebook directly, but fail to see any activity from other pages loading the like buttons and their other tracking crap. So that's a data point to them. Another is that I've disabled the "app platform" or whatever they call it in my profile settings before, so I didn't see their online tentacles to being with and keeping them contained is just to keep them honest (the "do not use app platform" toggle is similar to "do not track" in this regard). But they can't do much with the profile they build on me: they know I'm a container using, ad-blocking, Facebook-barely-using, well- off (I participate in a group about an expensive hobby) dude who they failed to generate a single click off in their entire lifetime. That's not-being- tracked enough for me. Getting protection from tracking beyond that is not IMO scalably solvable using techological means and crosses over to the regulatory realm.

</comment></comment></comment></comment><comment><USER70> A year ago, I was on Facebook constantly. At one point, I realized that I could do better things with the time wasted there so I installed News Feed Eradicator (I learned about it in a podcast. I think a Peter Attia podcast, but I could be wrong). Anyway, now Facebook is alien to me. I still have it on my laptop, and if I need to search something of for someone,I can use Facebook. But I don't have access to scrolling. I don't have a wall anymore. lol. I don't have the app on my phone though. I feel super.

</comment><comment><USER71> Someone should write this: an blocker that uploads a screenshot of the page, use OCR to find 'Sponsored' and send back coordinates of the box that can then be painted over client side.

Obviously OCR is one of many strategies and as long you kept the code for these adblock strategies open source, it would work on all visual ads.

Train an AI with a billion screenshots of pages with ads marked out. It should be able to handle 90+% of ads easy.

</comment><comment><USER72> Current tech available is already well beyond this, but simply needs to be properly applied.

Facebook Ads look like ads, by design. Shift gears to IMAGE RECOGNITION and success will follow.

</comment><comment><USER18> I cannot understand the people who believe it's their absolute right to use an ad blocker (a position I agree with) but then don't believe it's the site's absolute right to decide whether or not they will serve you content.

<comment><USER73> There seems to be a blackjack analogy here. Don't let the boss catch on!</comment></comment>


Dutch town has traffic lights on the ground because people are staring at phones - <AUTHOR> https://www.weforum.org/agenda/2017/02/this-dutch-town-has-traffic-lights-on-the-floor-because-people-are-staring-their-phones <comment><USER2> Bad idea, as it gives a false sense of safety.

<comment><USER3> Could be more useful to instead place messages, such as "check the lights"</comment></comment>